Раскрытие Проблемы Сжатия Ресурсов В Might And Magic Iii

Я не очень хорошо помню, как я оказался в отладчике DOSBox и зачем ковырялся в 16-битном ассемблере, восстанавливая функцию распаковки файлов ресурсов MM3.CC — но это было здорово.

Игру я получил на одной из последних скромных распродаж, а потом в Интернете наткнулся Страница Джеффа Людвига , в котором описаны проблемы с модификацией игры, связанные со сжатием в MM3.CC. В частности, там было написано следующее:

Оказалось, что этот алгоритм довольно сложно взломать, и распаковывать эти данные пока никто не научился.

Вызов был принят. В его статье описывается, как он пытался бороться с алгоритмом.

Я опишу, как я это сделал сам, а в конце дам ссылку на утилиту с открытым исходным кодом, которая умеет не только распаковывать, но и упаковывать файл MM3.CC.

Упаковщик DOS

Посмотрев на MM3.EXE, я обнаружил, что это сжатый исполняемый файл DOS с каким-то несжатым оверлеем и FBOV в начале.

Я ничего не знал о компрессорах DOS, но заметил от Джеффа Людвига, что он использует нечто под названием «Universal Program Cracker» v1.11. Я нашел версию 1.10 (выпущенную 25 июня 1997 г.

) и распаковал exe-файл.

И мне даже удалось правильно обработать данные наложения.

И все же мне хотелось узнать имя упаковщика.

Мне сказали, что мне нужно использовать программу Обнаружить это легко , и действительно - она выдала:

  
   

EXECUTRIX-COMPRESSOR(-)[by Knowledge Dynamics Corp] Borland TLINK(2.0)[-]

Любителям истории могу порекомендовать старые ветки обсуждений, касающиеся этого ПО - 1991 и 1995 годов: https://groups.google.com/forum/#!topic/comp.os.msdos.programmer/QsjHLY6Kb4s https://groups.google.com/forum/#!topic/comp.compression/IAj2-VHbtl4

IDA-загрузчик DOS

Распаковать exe — это хорошо, но правильно разобрать — еще лучше.

К сожалению, IDA наткнулась на это.

Он правильно определил наложение, но не смог его загрузить.

Просмотрев код, я понял, что анализировать его без оверлея приведет к головной боли, так как участков кода явно не хватает (несмотря на то, что процедура распаковки хранится в exe-файле).

При поиске FBOV в Google я наткнулся на исходный код загрузчика IDA DOS, который подтвердил, что IDA сможет загрузить это наложение без каких-либо проблем.

Я перекомпилировал отладочную версию загрузчика IDA DOS и проследил за ее работой через Visual Studio, чтобы понять, почему она не загружает оверлей.

Для этого мне пришлось описать несколько внутренних параметров структуры FBOV. Заголовок описывается следующим образом:

#define FB_MAGIC 0x4246 #define OV_MAGIC 0x564F struct fbov_t {

Теги: #Меч и Магия III #C++ #Ассемблер #обратное проектирование

Вместе с данным постом часто просматривают: