Сrackme, прячущий код на API-функциях


         

байтом все значительно сложнее. Некоторые


А вот с "лишним" байтом все значительно сложнее. Некоторые (впрочем, очень немногочисленные функции) состоят из одного jmp xxx, следом за которым расположен другой jmp. Естественно, это не сами функции, это просто линкер сформировал таблицу переходов, но нам-то от этого не легче! К тому же, иногда встречаются функции короче пяти байт (например, GetCurrentProcess) и внедрить в них jmp (даже без mov) уже невозможно!

.text:77E956D7 ; HANDLE GetCurrentProcess(void)

.text:77E956D7 public GetCurrentProcess

.text:77E956D7 GetCurrentProcess  proc   near   ; CODE XREF: UnhandledExceptionF

.text:77E956D7 83 C8 FF           or     eax, 0FFFFFFFFh

.text:77E956DA C3                 retn

.text:77E956DA GetCurrentProcess  endp

.text:77E956DA

.text:77E956DB ; Exported entry 315. GetModuleHandleA

.text:77E956DB

.text:77E956DB ; HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName)

.text:77E956DB public GetModuleHandleA

.text:77E956DB GetModuleHandleA   proc near     ; CODE XREF: .text:77E815D6^p

.text:77E956DB

.text:77E956DB lpModuleName       = dword ptr  8

.text:77E956DB

.text:77E956DB 55                 push ebp

.text:77E956DC 8B EC              mov ebp, esp

Листинг 1 API-функция GetCurrentProcess занимает всего 4 байта и внедрить в нее jump, не испортив начала следующей функции уже невозможно (на самом деле — можно, но сложно! в GetCurrrentProcess мы пишем push esp/push esp/push esp/push esp/push esp, а в GetModeleHandleA внедряем jump на sub_thunk, анализирующий что находится на вершине стека — если там четыре esp, то был вызван GetCurrentProcress, в противном случае это GetModuleHandleA)

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

#define JUMP_SZ      0x6           // размер jump

__declspec( naked

) jump()        // "голая" функция без пролога и эпилога

{

       __asm


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий