Need help about an uncommon database format (ADB Database) lazarus / 16-Databases ---------------------------------------------------------------------- thehidden · 2020-12-21 13:12 Hi, I have currently a project to convert a database and to re-develop an application. The vendor of the old application and the database system is no longer reachable. so I can not get any support from their side. The old database system is called "Brilliant Database". Its only the generated application with development protection enable. So I can not get access to the source. The created application has not export functions, so I need to get access to the database itself. What I have found out: - Brilliant Database was developed with Visual Basic 6 (runtime will be installed) - It uses .ocx files and other files. - Database Format is maybe from TCL/TK the ADB Database Format. - Application and Database are in one file. An empty database has been attached. I have no idea where to find a library to read this database. Has anybody seen this database before and know how to get access to the database? Thank you in advance. ---------------------------------------------------------------------- cdbc · 2020-12-21 13:27 Hi Yes i have seen it before, it is "Advance Database", and the source- code is very expensive!!! Around 2000 dollars I spent 2 months with the source, trying to figure it out!!! I did, but can't share the source, as it's company property Sorry Mate, good luck. It is very cumbersome to reverse-enginear... Regards Benny ---------------------------------------------------------------------- Thaddy · 2020-12-21 13:37 Can't you export the data and import in a more mainstream database format? ---------------------------------------------------------------------- thehidden · 2020-12-21 13:39 Hi, Quote from: cdbc on December 21, 2020, 02:27:37 pmHi Yes i have seen it before, it is "Advance Database", and the source- code is very expensive!!! Around 2000 dollars I spent 2 months with the source, trying to figure it out!!! I did, but can't share the source, as it's company property Sorry Mate, good luck. It is very cumbersome to reverse-enginear... Regards Benny no Problem. Do you have a weblink from the manufacturer? When I google for it I get a lot of book links and other stuff but no Manufacturer link. I have the original document with the requirements. So I need only the database part. The application will be done from point zero. Thank you. ---------------------------------------------------------------------- thehidden · 2020-12-21 13:42 Quote from: Thaddy on December 21, 2020, 02:37:12 pmCan't you export the data and import in a more mainstream database format? No. The application inside Brilliant Database has export function blocked and the with a designer copy of Brilliant Database I would need the key file for the source because of copy protection. Without the key file I can not change anything and not activate the export function. ---------------------------------------------------------------------- Handoko · 2020-12-21 13:42 Googling the web I found some might be useful information. QuoteBinary Brilliant is a software company that was founded in 2001, and offers a software title called Brilliant Database. Brilliant Database is database management software, and includes features such as data security, mobile access, and NOSQL. With regards to system requirements, Brilliant Database is available as SaaS, and Windows software. Some alternative products to Brilliant Database include Knack, ClusterControl, and DBIntegrate.Source: https://sourceforge.net/software/product/Brilliant-Database/ Their official website seems not updated since 2017 and it is not accessible. Luckily the WebArchive has preserved the website. The latest archive is on 30 September 2020: http://web.archive.org/web/20200930163512/http://brilliantdatabase.com / Lastest version is 10.5, and these are the prices: - Brilliant Database Professional Commercial $149 - Brilliant Database Professional Home $79 - Brilliant Database Server $199 - Brilliant Database Workplace $39 - Brilliant Database Ultimate $1799 Because it is not free, I don't think you can get free access the database. This is their email support@brilliantdatabase.com ---------------------------------------------------------------------- thehidden · 2020-12-21 13:48 Quote from: Handoko on December 21, 2020, 02:42:41 pmGoogling the web I found some might be useful information. QuoteBinary Brilliant is a software company that was founded in 2001, and offers a software title called Brilliant Database. Brilliant Database is database management software, and includes features such as data security, mobile access, and NOSQL. With regards to system requirements, Brilliant Database is available as SaaS, and Windows software. Some alternative products to Brilliant Database include Knack, ClusterControl, and DBIntegrate.Source: https://sourceforge.net/software/product/Brilliant-Database/ Their official website seems not updated since 2017 and it is not accessible. Luckily the WebArchive has preserved the website. The latest archive is on 30 September 2020: http://web.archive.org/web/20200930163512/http://brilliantdatabase.com / Lastest version is 10.5, and these are the prices: - Brilliant Database Professional Commercial $149 - Brilliant Database Professional Home $79 - Brilliant Database Server $199 - Brilliant Database Workplace $39 - Brilliant Database Ultimate $1799 Because it is not free, I don't think you can get free access the database. This is their email support@brilliantdatabase.com Thank you. - Version 10 has many bugs. The application is done with version 9. - Emailaddress is not working. No response since many years. I have tried, the application developer has tried. - When I have the Weblink for the Advance Database I will forward it to our purchasing department. - The company looks like a canadian company, but the owner/developer lives in Moscow, Russia. ---------------------------------------------------------------------- MarkMLl · 2020-12-21 13:55 Looking at this a slightly different way, and my apologies in advance if this turns out to be a red herring... Is Brilliant the originator/owner of the .adb format, or do their products only add value to it by providing management facilities on top of somebody else's files? I'm pretty sure that I've come across that extension before, and I assumed from context that it was "(MS) Access Database". Again, my apologies if I'm barking. (Somewhat later): in older ODBC etc stuff I see reference to .mdb but not .adb. At least one of the examples I was thinking of looks as though the file is some sort of "admin data base" so in that case the extension identifies the function not the format. So it looks as though I was barking (up the wrong tree on a wild goose chase etc. :-) MarkMLl ---------------------------------------------------------------------- thehidden · 2020-12-21 13:56 Quote from: MarkMLl on December 21, 2020, 02:55:14 pmLooking at this a slightly different way, and my apologies in advance if this turns out to be a red herring... Is Brilliant the originator/owner of the .adb format, or do their products only add value to it by providing management facilities on top of somebody else's files? I'm pretty sure that I've come across that extension before, and I assumed from context that it was "(MS) Access Database". Again, my apologies if I'm barking. MarkMLl - Value add - hopefully- and not the owner. See post 2. - Mo MS Access Database. ---------------------------------------------------------------------- cdbc · 2020-12-21 14:25 Hi Reverse enginer the bastard and be done with it.  Hint: it has nothing to do with SQL  Get a good hex-editor and just pick it apart, beware of the "id"s They can be a bit tricky  Regards Benny ---------------------------------------------------------------------- thehidden · 2020-12-21 14:30 Quote from: cdbc on December 21, 2020, 03:25:34 pmHi Reverse enginer the bastard and be done with it.  Regards Benny Purchasing a license for Advance Database would be not the problem. Hiring a person to reenter something over 10000 records in a new application is more expensive as the 2000 bugs for a license... Thats why I am asking for a vendor link for the Advance Database engine. Hoping it is not Brilliant Database or Binary Brilliant which is also off market. btw. The Database File looks to be encypted in some way. ---------------------------------------------------------------------- cdbc · 2020-12-21 14:43 Hi No not encrypted, but cumbersome format... Are you dealing with medical data? If not, you just have to think backwards  Regards Benny ---------------------------------------------------------------------- 440bx · 2020-12-21 14:51 Quote from: thehidden on December 21, 2020, 02:12:04 pmThe created application has not export functions, so I need to get access to the database itself. I just want to make sure I understand the situation.  Based on the statement above, it sounds like there is a program/application that can access the database and display information and you have access to it (the application/program).  Is this correct ? ---------------------------------------------------------------------- thehidden · 2020-12-21 15:02 Quote from: 440bx on December 21, 2020, 03:51:13 pmQuote from: thehidden on December 21, 2020, 02:12:04 pmThe created application has not export functions, so I need to get access to the database itself. I just want to make sure I understand the situation.  Based on the statement above, it sounds like there is a program/application that can access the database and display information and you have access to it.  Is this correct ? Yes, I have access to the application, but it has no export function. Which means that somebody must re-enter around 10.000 records from the old database to a new database. The developer of the application - which uses Brilliant Database - has set a flag for copy protection/developer protection. Without the key file I can not enable export. Only ways are: - Somebody re-enter everything - I can find the vendor of the database engine which is used by Brilliant Database Printing is not a workable way because not all information are printable and there are bugs. - Printing or selecting more as 1400 records crashes the application. - Selecting records with identical parameters generates different results. ---------------------------------------------------------------------- cdbc · 2020-12-21 15:04 If that is the case, then there is software, that can simulate keypresses and read the screen and dump it to a text file... Regards Benny ---------------------------------------------------------------------- MarkMLl · 2020-12-21 15:08 Quote from: thehidden on December 21, 2020, 04:02:32 pm- Printing or selecting more as 1400 records crashes the application. Although that still means that you could get at least partial data (not all columns?) in ten operations. Can you set printer output to a plaintext file? MarkMLl ---------------------------------------------------------------------- thehidden · 2020-12-21 15:18 Quote from: cdbc on December 21, 2020, 03:43:50 pmHi No not encrypted, but cumbersome format... Are you dealing with medical data? If not, you just have to think backwards  Regards Benny They are crazy. Who should read that out in a reasonable time?!? Quote from: cdbc on December 21, 2020, 04:04:11 pmIf that is the case, then there is software, that can simulate keypresses and read the screen and dump it to a text file... Regards Benny Gotta see how it will work. The Brilliant Database is a buggy diva. ---------------------------------------------------------------------- cdbc · 2020-12-21 15:20 Hi @ MarkMLI: Damn good sugestion  If you're on Unix or Linux it's easy-peasy  On Winblows you have to install a special printerdriver, then Bob's your uncle  Warning: Pdf or Postscript format can also be a bit tricky... Regards Benny ---------------------------------------------------------------------- thehidden · 2020-12-21 15:45 Quote from: MarkMLl on December 21, 2020, 04:08:08 pmQuote from: thehidden on December 21, 2020, 04:02:32 pm- Printing or selecting more as 1400 records crashes the application. Although that still means that you could get at least partial data (not all columns?) in ten operations. Can you set printer output to a plaintext file? MarkMLl Consider this: Quote- Selecting records with identical parameters generates different results.I am not sure if I will get out everything. - When I use the internal repair function I get a different record counter each time. - When I try to move through all records, at some points the application crashes. Not at a specific record but on a random position. Thats why I was trying to get the a license of the Database Engine inside Brilliant Database to get a dump of the database. On the other hand, these problems are know to the responsible persons since a few years. But it was always to "expensive" for a re- development. cdbc gives me a suggestion because it sounds to be very work intensive to extract the records out of the database: I make only the new application and the responsible persons should hire somebody for re-entering the records. Maybe they lean the lesson... ---------------------------------------------------------------------- MarkMLl · 2020-12-21 15:58 Quote from: thehidden on December 21, 2020, 04:45:06 pmConsider this: Quote- Selecting records with identical parameters generates different results. I did. But if you could at least get a stable output of all rows you'd be a long way forward... filling in columns for a known number of rows is much less grief than starting from scratch. 10,000 records is doable, call it 500 per person per day, particularly if the fields to be filled in can be described by a checkbox or radio button. MarkMLl ---------------------------------------------------------------------- 440bx · 2020-12-21 16:02 Quote from: thehidden on December 21, 2020, 04:02:32 pmYes, I have access to the application, but it has no export function. That it has no export function is no problem.  All you really need is to see how the application does the database request(s) for data, which most likely is obtained by calling some database functions. There is more than one way to skin that cat. As @cdbc suggested, there are programs out there that send keystrokes to a program and capture the text that is displayed in the screen fields.  That's one possibility. Another possibility is "simply" to inject a dll into the process that requests the data from the database.  To accomplish that you first need to determine the database functions that are used and the meaning for the parameters.  Sounds difficult but, it really isn't if you have the right tools.  Tools that are helpful to implement such a solution are a good APISPY, Matt Pietrek has a good one with source included, Rohitab's API Monitor and a decent disassembler (to determine the parameter sizes and calling convention.)  It's likely though not guaranteed that the bugs you've found are in the application and not in the database manager itself (though that is certainly not guaranteed), if that is the case then injecting a dll into the process bypasses all those bugs. Since you mentioned that the customer has the option to re-enter the records, that means they must have a paper trail.  This opens the possibility of OCR-ing them into digital form which could be used to populate a new database. Personally, I'd inject a dll into that app and get what I want out of it.  It probably wouldn't take more than a couple of days to get it right. (and, if the app can run under XP, it would probably take even less than that.) HTH. ---------------------------------------------------------------------- wp · 2020-12-21 16:22 Quote from: thehidden on December 21, 2020, 02:56:52 pm- Mo MS Access Database. How do you know that? Reading "Visual Basic" and "Application and Database are in one file" in your first post reminded me of Access immediately. Maybe they just changed the extension. Rename the file to extension .mdb and try to open with Access (or with Lazarus and ODBC). Or open the file in a hex editor and look at the start of the file. An Access file has the string "Standard Jet DB" at offset 4. ---------------------------------------------------------------------- MarkMLl · 2020-12-21 16:51 Quote from: wp on December 21, 2020, 05:22:52 pmAn Access file has the string "Standard Jet DB" at offset 4. The example file he sent doesn't. 00000000: c800 0000 6400 0000 2c01 0000 7a00 0000  ....d...,...z... 00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................ 00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................ ... MarkMLl ---------------------------------------------------------------------- Thaddy · 2020-12-21 16:52 Quote from: wp on December 21, 2020, 05:22:52 pmHow do you know that? Well... a hex editor somewhere in the 2000's It is a proprietary format that is completely distinct from ms. ---------------------------------------------------------------------- thehidden · 2020-12-21 23:14 I have done some investigations about the Application. QuoteAnother possibility is "simply" to inject a dll into the process that requests the data from the database. The Databaseengine is located in .ocx files. No .dll. Brilliant Database uses ActiveX technology. Important files for Database access are: adbExModule4.ocx ADB_2008_Controls1.ocx ADB_2008_Controls2.ocx ADB_Image_2008.ocx mADBImage6.ocx The files are dated from 2004 to 2009 and hopefully 32bit. I will try to get somehow into the database to extract the records. Thanks to all for your suggestions. ---------------------------------------------------------------------- Josh · 2020-12-22 01:45 Maybe backup database. Add a Record with known values, ie aaaaaa,bbbbbbb,ccccccccc,dddddd,99999 etc for all fields, then analyze database, hopefully the data willl be visible in the data file using a hex editor, you should now be able to see the order of the fields of the record, which should make reverse engineering easier, hopefully you will be able to spot any end of field, end of record markers if they exists, and hopefully spot any index entries etc. ---------------------------------------------------------------------- avra · 2020-12-22 08:56 Quote from: thehidden on December 22, 2020, 12:14:52 amThe Databaseengine is located in .ocx files. No .dll. Brilliant Database uses ActiveX technology. Important files for Database access are: adbExModule4.ocx ADB_2008_Controls1.ocx ADB_2008_Controls2.ocx ADB_Image_2008.ocx mADBImage6.ocx In my Delphi days I used to import COM/DCOM ActiveX libraries and controls. Delphi would generate TLB files and I could browse the generated glue code and use it fully in my applications. Even ActiveX visual controls could be put on form and manipulated. If I remember well editor was even finishing for me method names and parameters. Setup software should register all those dll and ocx files for you to the Windows. Then you use 32-bit Delphi or Lazarus to import them into IDE, and browse their methods and properties hopefully finding where you set db properties, load db, advance over records, and maybe even using SQL. All that with a goal of extracting data. I have only slightly touched ActiveX in Lazarus quite a while ago, so I do not know if it's current status is a match for Delphi features. You can take a look here for more info: https://wiki.freepascal.org/LazActiveX https://forum.lazarus.freepascal.org/index.php?topic=9311.0 You could also try some VB decompiler software. I do not know how useful that would really be, but if you can extract some code that loads db or advances through the records that would be a real help since you could then try to replicate such behavior later with Lazarus. https://duckduckgo.com/?q=vb+decompiler ---------------------------------------------------------------------- thehidden · 2020-12-22 09:32 Quote from: cdbc on December 21, 2020, 03:25:34 pmHi Reverse enginer the bastard and be done with it.  Hint: it has nothing to do with SQL  Get a good hex-editor and just pick it apart, beware of the "id"s They can be a bit tricky  Regards Benny QuoteNo not encrypted, but cumbersome format... Are you dealing with medical data? If not, you just have to think backwards  I have seen what you mean. Hell, this shit works?!?  Its only for one project so I don't will spend my time to create a decoder library for this. I will install them a text printer and let them print and check the result. I am not a reverser and will never be. ---------------------------------------------------------------------- cdbc · 2020-12-22 11:26 Hi You can "steal" the spool-file while printing, then it's just a matter of parsing that file, easily done with a Finite State Machine  Happy Christmas to you and your family  Good luck with your endavour. Regards Benny ---------------------------------------------------------------------- cdbc · 2020-12-24 07:13 Ooooohhhh, and beware of dates, they are integers base 64K, Regards Benny