RCE.SU - реверсинг, кодинг, выделенные сервера, ICQ, proxy
Прелюдия .....
Сейчас появилось огромное количество статей по анпаку . Я попытался дать общее представление об этом процессе . Статья теоритическая .

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

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

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

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

II. Принцип работы паковщиков .
Общий принцип работы и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--

Некоторые паковщики выполняют "код протекции" после распаковки , а некоторые вообще не предоставляют данной во3можности .

III. Ручной или автоматический анпак ? Патчим пакованную прогу .
Cуществует множество как паковщиков , так и распаковщиков . Но не к каждому представителю первого типа можно найти программу - анпакер [или скрипт для ProcDumpa] . Поэтому многие исследователи исполь3уют так на3ываемую "ручную" распаковку . Суть этого действа такова ....
0) Меняем 3начение свойства секций на E0000020 , 3агружаем прогу при помощи S-I loader'a . 1) Трассируем программу [этот процесс 3анимает довольно много времени , если правильно не поль3оваться брейкпоинтами и не пропускать длительные циклы]
2) В ре3ультате трассировки мы найдем OEP .
3) Теперь мы 3ацикливаем программу .
[
В сайсе это будет выглядеть следующим обра3ом:
Дойдя , но не выполняя прыжок на OEP , набираем
a eip ;начинаем и3менение кода в памяти с по3иции eip , те со следующей инструкции
jmp eip;делаем бесконечный цикл
;конец и3менения кода
]
4) ProcDump'om или любым другим дампером делаем дамп нашей 3адачи[подопытная программа] + сохраняем его на диск .
5) Теперь тем же ProcDump'om надо исправить EP в нашем дампе . 3начение надо 3аменять на следующее :
3начение = OEP - Image Base .
Все теперь наша программа распакована - мы можем продолжать исследование .
3десь не описана процедура восстановления импорта , тк для каждого пакера она ра3ная . Теперь рассмотрим ситуацию , когда мы 3наем байты для патча , и нам надо прои3вести их 3амену .
Делать мы это будем так :

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

V . Словарь и некоторые дополнения
Начало распаковщика часто собровождается коммандой "pusha" , конец - "popa" , прыжок на OEP -

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

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

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


<= Вернуться к статьям


Rambler's Top100