Intel ME (Manageability engine) 6.x Huffman algorithm
Starting at version 6 the "firmware" for the Intel manageability engine uses a custom compression scheme. As explained in various publications by Igor Skochinsky. The details of the compression scheme however remained unknown until now. A lot of it though is only confirmed for ME 6.x and incomplete.scheme details:
- basic huffman, prefix free codes translate one to one into plain text
- different dictionaries for each major version(6.x, 7.x,...)
- dictionaries are not present in firmware
- there are two dictionaries for each version, a data and a code compression dictionary
- canonical tree
- large trees, about 1700 entries
- compression rate is pretty poor. compressed file is 77.5% the size of the original by average
- dictionary entries are between 7 and 19 bits long
- the entries translate into 1 to 15 bytes.
- often multiple ways to encode plaintext, the shortest possibility is used.
- redundant symbols exist. (one that can be expressed by multiple other symbols more efficiently)
Downloading 6.x firmwares
- 6.2 : msi.com->support->qm57->im-qm57->bios -> 9882_114.zip - 6.1 : supermicro.com -> support -> downloads -> c7sim-q -> Get Bios -> C7SIMQ1.C02.zip - 6.0 : foxconnchannel.com -> support -> downloads -> keyword=Q57M -> bios file -> 997F1P03.zip
Extracting and unpacking the code
Unpacker:blame6.c
Dictionaries:code data
Package:blame6-v1.0.tgz
Note: File format information directly based on Igor Skochinsky's code and research.
Original release
here
Feel free to send me corrections and additions.
--bla