Some time ago (when I was new to BIOS modding) I wanted to change my Lenovo laptop’s serial number, UUID etc. but I wasn’t able to do that, even with UEFITool because Lenovo encrypts DMI. I wrote a little C++ opensource program to decrypt and encrypt the 2 LENV blocks so you can edit and encrypt the BIOS dump again: https://github.com/Shmurkio/LenovoDMIDecryptor. I recorded a video on how to use: https://www.youtube.com/watch?v=mUXLHaK0CU8
Update: I finally fixed some stuff regarding the encryption key retrieval and now it also fixes the checksum automatically, no data should be invalid anymore.
Lenovo uses XOR to encrypt the 2 DMI Blocks. The program gets the key used for the encryption and decrypts both DMI blocks. After it decrypted both blocks it prints the “Success” message. You can find them in the dump after “LENV”. After you edited the dump just drag the decrypted file in the program again and it will be encrypted.
In this picture I circled the byte that’s used to XOR the data with to decrypt/encrypt the DMI in red and the checksum in blue. Lenovo swaps the bytes for the checksum so the actual checksum for the data is 0x9D60. The data in this case are 4080 bytes of 2A bytes. I’m going to attach the DMI area of a BIOS dump with valid checksums. The second DMI block consist of 4080 bytes of 3B and the checksum is 0xAC50. Do you know how to manually generate that checksum? DMI.zip (213 Bytes)