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

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


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

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

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

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

Прелюдия .....

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

Назначение

Паковка программ изначально была придумана для уменьшения размеров файлов. Это основная её функция и по сей день. Но в то же время она является дополнительным комплексом защиты .

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

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

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

Принцип работы паковщиков

Общий принцип работы и3ложен в таблице ....

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

Ручной или автоматический анпак ? Патчим пакованную прогу

Cуществует множество как паковщиков, так и распаковщиков. Но не к каждому представителю первого типа можно найти программу - анпакер [или скрипт для ProcDumpa]. Поэтому многие исследователи используют так называемую "ручную" распаковку. Суть этого действа такова ....

0) Меняем 3начение свойства секций на E0000020, загружаем прогу при помощи S-I loader'a.

1) Трассируем программу [этот процесс 3анимает довольно много времени, если правильно не пользоваться    брейкпоинтами и не пропускать длительные циклы]

2) В результате трассировки мы найдем OEP .

3) Теперь мы зацикливаем программу.

[В сайсе это будет выглядеть следующим образом: дойдя, но не выполняя прыжок на OEP, набираем a eip;начинаем изменение кода в памяти с позиции eip, те со следующей инструкции jmp eip; делаем бесконечный цикл ; конец изменения кода]

4) ProcDump'om или любым другим дампером делаем дамп нашей 3адачи[подопытная программа] + сохраняем его на диск .

5) Теперь тем же ProcDump'om надо исправить EP в нашем дампе. Значение надо Заменять на следующее :
Значение = OEP - Image Base.

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


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

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

Перепечатано с разрешения www.uofg.com.ua




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


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



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


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