Паканем и зашифруем
Дубовцев Алексей
Xakep, номер #061, стр. 061-064-2
Проведя эксперимент с RAR’ом, я никак не мог поверить, что классические архиваторы проиграли битву динамическим паковщикам. Конечно, понятно, что вторые специально затачивались под особенности исполняемых файлов, но все равно что-то смущало. В итоге я оказался прав – в моей коллекции нашелся один упаковщик, который победил всех. Он смог ужать тестовый пример аж до 143 килобайт. Это оказался малоизвестный архиватор rk, созданный неким Малькомом Тейлором (Malcolm Taylor) в 2000 году.
Дополнительные бонусные фичи
Помимо уменьшения размеров исполняемых файлов, ты абсолютно бесплатно получаешь защиту от отладки и дизассемблирования твоих приложений. Подобные эффекты проявляются как бы ненароком, как побочный эффект от действия паковщика. Отладчикам и дизассемблерам необходимы чистые исполняемые файлы. Они очень не любят, когда в них кто-то покопался. А паковщик превращает исполняемый файл в эдакий винегрет, разобраться в котором становится довольно сложно. Дизассемблер попросту не в состоянии выделить код приложения из всей этой мешанины.
А бывает еще так, что некоторые особо «продвинутые» дизассемблеры при работе со сжатыми файлами радостно выдают ассемблерный код. Проблема заключается в том, что код этот принадлежит не исходной программе, а паковщику. Сечешь, к чему такое приводит? Злостный хакер будет ковыряться в километрах ассемблерного кода не твоего приложения, а того самого динамического архиватора (на самом деле, грамотный крякер, изучив такой код, сможет написать свой распаковщик, и вся защита полетит – прим. ред.). Неплохая защита – не правда ли?
Конечно, надо заметить, что такие простые приемы не остановят особо головастых и дотошных хакеров, а профессионала такие трюки просто рассмешат. Ведь в его боевом арсенале всегда найдутся программы, которые в миг распакуют сжатые тобой файлы. UPX, например, сам позволяет возвращать запакованные им exe’шники к их первозданному виду. Для этого всего-навсего нужно воспользоваться ключом –d из командной строки.
Основная проблема распаковки заключается в том, чтобы выяснить, чем именно запакован исполняемый файл. Ведь снять защиту намного проще, зная алгоритм и средство упаковки. Для решения этой проблемы существует целый класс утилит. Называются они анализаторами и предназначены для определения по особым признакам (имена секций, характерные строки в коде и биты в заголовке исполняемого файла), какой паковщик использовался.
Кроме анализаторов, существуют универсальные утилиты, позволяющие распаковать файл, не зная, чем именно он был ужат. В качестве примера можно привести PeDump. Понятное дело, что универсальные утилиты не всегда радуют нас хорошими результатами, выдавая кривые или даже неправильные коды. Здесь играет роль неоднозначность задачи – точно восстановить загруженный в память файл не так уж и просто, как может показаться на первый взгляд. Так что больших надежд на такие утилиты возлагать не стоит, да и пользоваться ими довольно сложно.