Распаковка вручную

Симонов Илья (nazi@gh0sts.org)

Спецвыпуск: Хакер, номер #057, стр. 057-032-1

Снятие упаковщиков приложений

Для человека, вставшего на путь исследования программ и их защит, первым барьером к вкусному сердцу кода станет упаковщик исполняемых файлов. Что это такое и как обойти его, я и расскажу тебе сегодня на ночь.

Разведка боем

Начнем, как обычно, с начала и продолжим до конца :). А сначала опишу принцип работы упаковщиков и его общие особенности. Упаковщик - программа для сжатия исполняемого файла, которая отличается от архиватора лишь тем, что добавляет код распаковщика в тело программы. При запуске управление передается этому коду вплоть до полной распаковки программы в память. Определение грубое, но как, ни крути, общий смысл выразил. Задача крэкера - слить дамп памяти (не пугайся слов – еще успею объяснить их) распакованной программы, а затем, конечно, восстановить импорт, но все по порядку. Итак, поехали.

Как ты, наверное, уже предполагаешь, а может быть, давно знаешь, существует множество различных пакеров. Естественно, способы распаковки у каждого особенные. Сначала нам предстоит разведка, то есть определение упаковщика, которым сжата программа. Хочу сразу отметить, что это не столь важная деталь, как может показаться. Действительно, когда распакуешь вручную парочку пакеров, тебе уже будет безразлично то, как называется пакер, ранее бывший неизвестным для тебя. Принцип их действия, по сути, одинаков: если узнал, как работает один, значит, ты понял, как работают все. Распознавание языка, на котором написана программа, также то, каким упаковщиком она ужата, осуществляется сигнатурным способом, который так полюбился нашим антивирусным конторам. На эту тему существуют замечательные статьи Alex'а на не менее замечательном портале cracklab.ru. Конечно, если ты сейчас с интересом читаешь эту статью, значит, ты еще многого не знаешь, и специально для новичков изобретена отличная в своем роде программа-распознаватель PEiD, которая не только покажет, чем упакован наш файл, но и расскажет еще много интересного о жертве.

Обзор всех инструментах, необходимых реверсеру, также написано в этом номере, поэтому время поговорить о программах еще будет. А сейчас мы окунемся в прошлое и предадимся классике. Внимание! Распаковываем блокнот, упакованный UPX. И что бы там нам ни говорили, что якобы веселее распаковывать FSG, блокнот и UXP - это классика, от которой никуда не деться. И наш урок начнется именно с нахождения Оригинальной точки входа в сжатую программу.

Для общего разъяснения скажу, что после запуска программы с физического носителя операционная система проецирует образ программы в оперативную память (точнее, в определенное адресное пространство памяти). В этом случае сам код располагается в памяти с началом по адресу так называемого значения Image base (то есть Image Base - адрес в памяти, начиная с которого идет код программы). Однако начало проекции совсем не означает начало исполняемого кода. И вот уже в проекции существует Точка входа (EP - Entry Point) в программу - то место, откуда начинается выполнение исходника. Поскольку я уже упоминал, что упаковщик добавляет свой код в тело программы, то на сцене появляется понятие Оригинальная тока входа. Как уже можно было догадаться, это точка входа в изначальную программу, если бы она не была запакована. Естественно, нам необходимо найти это место, снять дамп памяти (dump - снимок/образ памяти) исходной программы и сохранить его на диск. Мне не хочется делать из тебя бездумного робота-шаблонщика, поэтому попытаюсь донести до глубин твоего сознания суть процесса.

Содержание  Вперед на стр. 057-032-2
Выпуски журнала "СПЕЦ Xakep"
Cпец Хакер #01Cпец Хакер #02Cпец Хакер #03Cпец Хакер #04Cпец Хакер #05Cпец Хакер #06Cпец Хакер #07Cпец Хакер #08Cпец Хакер #09Cпец Хакер #10Cпец Хакер #11Cпец Хакер #12Cпец Хакер #13Cпец Хакер #14Cпец Хакер #15Cпец Хакер #16Cпец Хакер #17Cпец Хакер #18Cпец Хакер #19Cпец Хакер #20Cпец Хакер #21Cпец Хакер #22Cпец Хакер #23Cпец Хакер #24Cпец Хакер #25Cпец Хакер #26Cпец Хакер #27Cпец Хакер #28Cпец Хакер #29Cпец Хакер #30Cпец Хакер #31Cпец Хакер #32Cпец Хакер #33Cпец Хакер #34Cпец Хакер #35Cпец Хакер #36Cпец Хакер #37Cпец Хакер #38Cпец Хакер #39Cпец Хакер #40Cпец Хакер #41Cпец Хакер #42Cпец Хакер #43Cпец Хакер #44Cпец Хакер #45Cпец Хакер #46Cпец Хакер #47Cпец Хакер #48Cпец Хакер #49Cпец Хакер #50Cпец Хакер #51Cпец Хакер #52Cпец Хакер #53Cпец Хакер #54Cпец Хакер #55Cпец Хакер #56Cпец Хакер #57Cпец Хакер #58Cпец Хакер #59Cпец Хакер #60Cпец Хакер #61Cпец Хакер #62Cпец Хакер #63Cпец Хакер #64Cпец Хакер #65Cпец Хакер #66Cпец Хакер #67Cпец Хакер #68Cпец Хакер #69Cпец Хакер #70Cпец Хакер #71Cпец Хакер #72Cпец Хакер #73Cпец Хакер #74Cпец Хакер #75