Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Общие аспекты паковки/распаковки программ

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Автор: Dr_Net <dr_net@uofg.cc>

Сейчас появилось огромное количество статей по анпаку . Я попытался дать общее представление об этом процессе . Статья теоретическая.

Внимание!!!
Эта статья написана ИСКЛЮЧИТЕЛЬНО в образовательных целях и не призывает к активным действиям.

I. Назначение.
Паковка программ изначально была придумана для уменьшения размеров файлов. Это основная её функция и по сей день. Но в то же время она является дополнительным комплексом защиты . Во-первых , запакованный файл в большинстве случаев нельзя дизассемблировать , так как в теле файла присутствуют секции с запакованными данными , а собственно код распаковщика многие дизассемблеры не в состоянии принять за что-то значимое . [Примером такого инструмента является win32dasm , и в некоторых случаях IDA] . Вследствие этого затрудняется нахождение нужного джампа , etc ....

Во-вторых , пакованные программы труднее патчить , чем незапакованные . Так как в некоторых паковщиках присутствует проверки на валидность длины , контрольной суммы файла , тд .... Но все же возможность патча файла , с дальнейшей его работоспособностью , возможна . Тонкости - ниже ...

В-третьих , программисты начали добавлять функции определения как конкретного отладчика , так и функции определения самого факта отладки а также определение мониторинга реестра , обращений к файлам [файловые мониторы и мониторы реестра такие , как FileMon , RegMon ].

II. Принцип работы паковщиков.
Общий принцип работы изложен в таблице ....
       ___________________________________________
      I                                           I
      I  Начало выполнения кода упаковщика [EP]*  I
      I___________________________________________I_
        I                                           I--_
        I    Вызов[a] ф-ций защиты от отладки ,     I   |
        I     проверка контрольной суммы , etc      I   \
        I            ["код протекции"]              I    > Непосредственное выполнение кода ,
        I___________________________________________I    > который "существует" в файле ..
        I                                           I    |
        I    Распаковка кода программы в память     I  _/
       _I___________________________________________I--
      I                                           I--_
      I      Прыжок на распакованный в памяти     I   \ Начало выполнение распакованного кода ,
      I           код программы [OEP]**           I  _/ те непосредственно кода программы
      I___________________________________________I--
 
Некоторые паковщики выполняют "код протекции" после распаковки , а некоторые вообще не предоставляют данной возможности .

III. Ручной или автоматический анпак ? Патчим пакованную прогу . Существует множество как паковщиков , так и распаковщиков . Но не к каждому представителю первого типа можно найти программу - анпакер [или скрипт для ProcDumpa] . Поэтому многие исследователи используют так называемую "ручную" распаковку . Суть этого действа такова ....
0) Меняем значение свойства секций на E0000020 , загружаем прогу при помощи S-I loader'a .
1) Трассируем программу [этот процесс занимает довольно много времени , если правильно не пользоваться брейкпоинтами и не пропускать длительные циклы]
2) В результате трассировки мы найдем OEP .
3) Теперь мы зацикливаем программу.

[ В сайсе это будет выглядеть следующим образом:
Дойдя , но не выполняя прыжок на OEP , набираем
a eip ;начинаем изменение кода в памяти с позиции eip , те со следующей инструкции
jmp eip;делаем бесконечный цикл
;конец изменения кода
]
4) ProcDump'om или любым другим дампером делаем дамп нашей задачи[подопытная программа] + сохраняем его на диск.
5) Теперь тем же ProcDump'om надо исправить EP в нашем дампе . 3начение надо заменять на следующее :
3начение = OEP - Image Base .
Все теперь наша программа распакована - мы можем продолжать исследование .
3десь не описана процедура восстановления импорта , тк для каждого пакера она разная . Теперь рассмотрим ситуацию , когда мы знаем байты для патча , и нам надо произвести их замену . Делать мы это будем так :

Находим OEP См выше .
3аменяем прыжок на OEP прыжком на наш участок кода , который мы вписываем в свободное место на диске в файле любым hex-редактором .
Выполнение наших инструкций . Те перезапись байтов[опкодов] в оперативной памяти . Последней командой нашего блока должна быть команда jmp Патч готов ! Для новичков в области распаковки/патча это может показаться немного сложным , но по сути это довольно легко , главное - упорство -] .

V . Словарь и некоторые дополнения
Начало распаковщика часто сопровождается командой "pusha" , конец - "popa" , прыжок на OEP -
    jmp
    или
    mov eax,[OEP]
    ret
 
*EP [entry point] - начало выполнение кода программы
**OEP[original entry point] - термин , придуманный специально для пакованных прог , адрес , с которого начинается выполнение распакованного в памяти кода собственно проги[не распаковщика!] ProcDump - замечательная утилита [сочетает в себе ф-ции PE-editora, анпакера и некоторых других]

Greetz jump out to TeaM | TSRh , HangUp TeaM , UOFG crew , SWW[dF] , All members of XTIN magazine [personal 2 HeX за туторы , RoSHiK за деньги , Beavis_SS за баттхеда ], ®ove®[FA]за музон , _Nicoletta_ , Duelist[DamN] , FRESHKA за пружинку , ProspeR за Star , 3l3m3nt , Rings_Master , пиву "Патра" за приятно проведенные вечера , Nerf , alternative music , Borland за Дельфи , Motya , зимней сессии за все , юзерам наших кряков за ваше существование , d1gg3r за картинки , мягкому креслу за мягкость , Юрову за книгу по асму , Numega за IDA , SIce за долгие ночи , PGP за шифрование мерзостей , Гей-Билл за геморрой , пиратам за сотрудничество , Joker за "отлично" , MajaHEAD aka араб за мысли , izvrashenec4ever за дружбу с ХеХом , GoKs за UOFG , M$ за навороченный нотепад , Питеру за красоту and All ProGraMMerz ArouNd The WoRlD !

Если вам что-то непонятно или у вас возникли денежные предложения - пишите . by Dr_Net //TSRh //UOFG mail : dr_net@uofg.cc

Обсуждение статьи: Общие аспекты паковки/распаковки программ >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS