_|________ ______|_ ____: /_ ____\ :______ __|____ _____|____|_________ | | \__ \_ |___ | |_ / / _| (_________________/_________________) TEAM-53 TUTORiALS PACK NUMBER EiGHTTEEN Распаковываем exe, запакованное EXE32Pack. Kхе, SpK посвящается ;) Target: GoSURF v1.7 (beta2) http://www.mmjd.com/ Tools: - SoftIce (куда ж без него :) - IceDump (дампер и много всего прочего) - LordPE Deluxe (хороший pe-редактор, дампер) - Hiew (must have all) Under: Aria. Body: Паковщик сравнительно древний (о чем свидетельствует в большом количестве оставленные автором надписи), посему проблем с распаковкой возникнуть не должно (бывают редкие исключения, но не будем о них). DUMP: Значит, как обычно, ставим в сайсе bpint3, запускаем прогу через LordPe Break'n'Enter, после появления сайса оказывается на начале кода распаковщика, правим первый байт назад. Для обнаружения oep (Original Entry Point) по многочис- ленным рекомендациям устанавливаем bpm esp-4 (сработает в моменты сохранения (старт) и восстановления (oep уже близко :) регистров). Дабы не гемороится с ImpRec и сберечь некоторое кол-во времени нужно установить бряк на начало секции импорта bpm 569000, который благополучно и сработает, тут же выковыриваем импорт айсдампом /dump 569000 4000 imp.bin. Вот, теперь он почти живой. Можно было и заблокировать его инициализацию (там ниже есть 7ad810 mov [edi],eax), но далее оно еще раз портится, не понятно зачем, но портится, так что выцепляем и се. Снимаем этот бряк, оно нам больше не понадобится :) Тем временем всплываем по bpm esp-4. Это есть гуд. Пару шагов ниже и будет вам прыжок на оер (jmp eax), записываем eax. Для дампа на всяк пожарный (ну чтоб там много чего не инициализировалось) я предпо- читаю циклить проги. Пишем a eip, потом jmp eip + 2x enter. Все, зациклили, снимаем и этот бряк, выходим из сайса и дампим LordPe, закрываем прогу. Восстановление: Сначала приведем дамп в рабочий вид. Суем ху...тьфу, то есть импорт на место в файл (hiew: в hex режиме выделяем блок(*) с 169000h длиной 4000h байт, жмем getblock и вставляем блок из файла). Теперь в LordPE(клевая прога, были б исходники, немного пофиксил, а то много чего не хватает, автор ленивый) вставляем записанный eax в EntryPoint. Далее в Directory меняем расположение импорта на правильное (169000), длина его (посмотреть в том же LordPE на hex дамп секций на длину диагональных чисел) 280h байт. Сохраняем, все, дамп пускается ;) Ой, не гоню, какая то зараза импорт-таки испортила (в LordPE видно, что первая библиотека имеет пустое имя, непорядок), можно файл еще разок пустить и посмотреть где оно портится, но мне влом :) Зная структуру импорта (спецификация pe-файлов), можно догадаться, что на имя библиотеки указывает здесь первое ненулевое двойное слово, смотрим по тому смещению - дествительно ху...фигня какая-то, тьфу, листаем импорт вниз до осмысленных слов (те которые не 10h бит :), первая упоминающаяся библиотека и есть то что нам надо - kernel32.dll, запоминаем его смещение(169с68) и пишем его вместо того dword'а, теперь все. Кхе, займемся небольшой оптимизацией ;) -Код (CODE): код как код, оставим его на совести автора ;) -Инициализированные данные (DATA): оставим, скажем так и был0. -Неиниц. данные (BSS): по дефолту пустая с нулями, всякие аспры сюда пишут то что они проинициализировали, за этим пакером такой наглости не замечено. -Импорт (.idata): задолбали мы его, пусть живет. -Шняга_какая-то (.tls): нулевая секция, хорошо, резать ее. -Ссылки для Шняга_какая-то(.rdata): 18h байт она должна занимать, какая то сво... паковщик понаписала туда всего, текст этот хорошо видно, зануляем его в hiew (fill block) вместе в ведущими и конечными пробелами, нех всяку бяку в файл пихать. Проверяем ссылку на эти 18h байт в directory/tlstable, все на месте. -Релокейшны (.reloc): нужны только для dll всяких, можно порезать, но если уж секция не пустая, то вертаем ссылку на релоки в directory/relocation 16F000/17C68, но лучше порезать секцию :) -Ресурсы (.rsrc): хм, странно, но иконку никто не пиз...всмысле иконка на месте, а не в секции пакера, откуда бы ее пришлось бы восстанавливать на место или руками или resrebuilder by Dr.Golova, есть и другие варианты... Все, последнюю секцию пакера удаляем нах. Так же вырезать можно секции: BSS, .tls, .reloc как не несущие какой-либо нужной в данный момент информации, только не забываем про файловой выравнивание и выравнивание в памяти (после дампа LordPE они равны 1000h, что очень удобно) и корректируем соответственно заголовок. Для вырезания секций удобно написать прогу, так как руками это занятие для больших математиков ;) , что я и сделал, только она находится в стадии альфа-версии и выкладывать ее пока не буду (например этого в LordPE и не хватает). Проверяем, чтоб в directory ничто не указывало на отрезанную секцию пакера. Все, пойду проверю, что я тут понаписал ;) Кхе, вроде пучком все, итоговый размер(с отрезанной reloc) - 2 695 168b вместо начальных 3 865 148b дампа :] Гы, больше метра мусора. Тхе Енд. --=-- Данный трактат написан исключительно в образовательных целях и все такое прочее. --=-- Приветы: All KpTeaM, Nitrogen[TSRh] & you ;] Madness[KpTeaM]