WhatsApp backup conversation files are now saved with the .crypt12 extension. From crypt9, they seem to be using a modified version of Spongy Castle – a cryptography API library for the findings below are based on reverse engineering work done on WhatCrypt and Omni-Crypt. I would like to highlight that IGLogger proved to be a very useful tool when it came to smali code debugging. Extract Key File To decrypt the crypt12 files, you will first need the key file. The key file stores the encryption key, K. WhatsApp stores the key file in a secure location /data/data/ If your phone is rooted, extracting this file is easy. I will not go through the steps again, as it’s already mentioned in the crypt8 decryption article. If your phone is not rooted, refer to instructions from WhatCrypt and Omni-Crypt for details on extracting the key file. The idea is to install an older version of WhatsApp, where Android ADB backup was still working and extract the key file from the backup. Extract crypt12 Backup File Pull the encrypted WhatsApp messages file from your phone using ADB. $ adb pull /sdcard/WhatsApp/Databases/ Decryption Keys This section is just for your information and you can skip this section. The encryption method being used is AES with a key K length of 256 bits and an initialisation vector IV size of 128 bits. The 256-bit AES key is saved from offset 0x7E till 0x9D in the file. Offsets start from 0x00. You can extract the AES key with hexdump and assign the value to variable $k. $ k=$hexdump -ve '2/1 "%02x"' key cut -b 253-316 The $k variable will hold a 64-digit hexadecimal value in ASCII that is actually 256 bits in length. The IV or the initialisation vector is saved from offset 0x33 till 0x42 in the crypt12 file. The IV value will be different for every crypt12 file. $ iv=$hexdump -n 67 -ve '2/1 "%02x"' cut -b 103-134 The K and IV extraction method is similar to what we have done for crypt8 files before. Strip Header / Footer in crypt12 File Again, this section is just for your information and you can skip this section. Before we start the decryption process, we will need to strip the 67 byte header and 20 byte footer from the crypt12 file. $ dd if= of= ibs=67 skip=1$ truncate -s -20 The above dd command will strip the the first 67 bytes from the crypt12 file and save it to a file with extension The truncate command will strip the last 20 bytes from the crypt12 file. As the WhatsApp AES cryptography API library seems to be a modified version, we will no longer be able to use openssl to decrypt the crypt12 file. I have yet to determine what has been modified. To decrypt crypt12 files, I have written a simple Java program that will use the modified cryptography API library instead. For the cryptography API library, I have extracted the modified Spongy Castle cryptography class files from the Omni-Crypt APK file using dex2jar. You can find the Java program and crypto library over here at GitLab. The Java program will create 3 output files – encrypted file with header and footer stripped. – decrypted file in zlib format. – decrypted sqlite3 database file. Below is how you can compile and run the Java program. 12345678910111213141516171819202122232425262728293031323334353637383940 $ git clone cd whatsapp-crypt12/$ javac -classpath "lib/ cp ../ .$ cp ../ .$ java -cp "lib/ crypt12KXXXXXXXXXXIVYYYYcreating encrypted file with header/footer stripped zlib output file sqlite3 output file ls -ltotal 136724-rw-r-r- 1 ibrahim staff 4339 Oct 9 1605 1 ibrahim staff 5459 Oct 9 1605 1 ibrahim staff 158 Oct 9 1605 keydrwxr-xr-x 2 ibrahim staff 4096 Oct 9 1605 lib-rw-r-r- 1 ibrahim staff 1089 Oct 9 1605 LICENSE-rw-r-r- 1 ibrahim staff 62692352 Oct 9 1606 1 ibrahim staff 25757610 Oct 9 1605 1 ibrahim staff 25757523 Oct 9 1605 1 ibrahim staff 25757507 Oct 9 1606 1 ibrahim staff 1376 Oct 9 1605 file * compiled Java class data, version Java C source, ASCII textkey Java serialization data, version 5lib SQLite database, user version raw G3 data, zlib compressed data Final Words To use the Java decryption tool, you will need to use OpenJDK. Oracle require JCE Provider libraries to be signed. OpenJDK does not have this requirement. If you try running the Java program on Oracle JDK, you will most likely get the following exception. Exception in thread "main" JCE cannot authenticate the provider SC There are some workarounds to bypass the error, but it has not worked for me so far. Decryption failed when using the modified cryptography API library from WhatsApp and WhatCrypt. Only Omni-Crypt library is working. I have yet to determine the reason for this. If you have any further information on this, leave a = { interested_inunix, linux, android, open_source, reverse_engineering; codingc, shell, php, python, java, javascript, nodejs, react; plays_onxbox, ps4; linux_desktop_usertrue; }
Itcreates a which I open with aSQLiteManager and edit it (practically editing a phone number and a few messages). Afterwards, I go back to WhatCrypt and hit Encrypt WhatsApp Database - set path to the now modified decrypted msgstore.db - Encrypt Database. The thing is that now it creates a msgstore.db.crypt file, not a crypt12. I had a problem almost similar to can only read " OR " The other databases dates should be formatted to " databases with dates are databases which is for backup Every 4am.They backup only for 7 not worry,they contain the same is just incase your current is corrupted,you can change the other 7 from " to " Read more on Whatsapp FAQ Source Or if you want to read directly from here Summary WhatsApp automatically backs up your chats every night. You can initiate a restoration by simply uninstalling and reinstalling WhatsApp. Click Restore when prompted to restore your message history. Your missing chats should appear in WhatsApp! Details WhatsApp automatically makes backups every day at 4 AM and stores them in the WhatsApp folder of your Android phone. This folder is either located in your device's internal memory or external microSD card. To restore the most recent backup, you will need to uninstall and reinstall WhatsApp. If you need to restore older messages, check out "Restoring older less recent backups". During the installation process, you will be prompted to restore your message history. Choose Restore to restore your missing chats. If you are not prompted to restore your messages, it could be that Your SD card and/or chat history is corrupted. Your backup is too old. WhatsApp cannot restore backups that are too old. You have a different phone number than when you backed up your chats. In any of these cases, there is no way for us to restore the messages for you. Restoring older less recent backups Before attempting to restore messages, please note Current chat history will be lost upon restoration. There are only up to 7 days worth of backup files. Any new messages sent/received after a backup, and deleted before the next backup, cannot be restored. If you run a manual backup, it will overwrite the most recent automatic backup file. On newer devices, your WhatsApp/Databases folder is most likely located in your device's internal memory. You must have the same phone number in WhatsApp that you had when you backed up your chats. We also recommend Make sure you have a file manager. This will be useful for renaming the backup files. Here are some choices File Managers and Explorers. If you do not want to lose your current history newest messages, create a manual backup by going to WhatsApp > Menu Button > Settings > Chat Settings > Back up chats. This manual backup file will be saved as " or " in your /sdcard/WhatsApp/Databases folder. Save this file as " or " depending on the original file extension so you do not get it confused with other backup files during the restoration process. Please note your backup files are saved in the /sdcard/WhatsApp/Databases folder. This folder may be located in either your device's internal memory or external memory. To restore from a backup, follow these steps WhatsApp. which backup file you want to restore. that file from " to " or from " to " WhatsApp. asked to restore, tap Restore. You will now be able to see your restored messages. If you want to revert the restoration, simply change the backup filename back to what it was, rename " to " or " to " and follow these steps again. Cheers, WhatsApp Support Team