Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
Делать было нечего вот написал код. Полностью независимый. Достаточно поставить на таймер его вызов. Сам ищет таблицу импорта и проверяет первые байты всех импортируемых API. В случае если будет установлен программный бряк на API или JMP в начале(хук). Программа падает. Знаю что от крякера мало спасет делал просто так) Сильно ногами не бить.
{ Код проверки установки програмного бряка на всех API из таблицы }
// Так же проверка на хук апи , (jmp в начале)
procedure CheckAPIBreakPoint;
asm
PUSHAD
PUSHF
MOV EAX,DWORD PTR FS:[$18]
MOV EAX,DWORD PTR DS:[EAX+$30]
MOV EAX,DWORD PTR DS:[EAX+$8] // Get ImageBase by PEB
MOV ECX,DWORD PTR DS:[EAX+$3C]
ADD ECX,EAX // PEHeaderOffset
MOV EDI,DWORD PTR DS:[ECX+$80] // ImportTable Addr
ADD EDI,EAX // ImportTable + ImageBase
// Обробатываем IMAGE_IMPORT_DESCRIPTOR'ы
MOV EDX,$10
JMP @START
@LOOP:
ADD EDX,$14
@START:
MOV ESI,[EDI+EDX]
TEST ESI,ESI
JE @EXIT
ADD ESI,EAX
CMP DWORD PTR DS:[ESI],0
JE @EXIT // конец
@LOOP_API:
CMP DWORD PTR DS:[ESI],0
MOV EBP,[ESI]
JE @END
CMP BYTE PTR DS:[EBP],$CC // Program BreakPoint
JE @DETECT
CMP BYTE PTR DS:[EBP],$EB // JMP Short
JE @DETECT
CMP BYTE PTR DS:[EBP],$E9 // JMP Long
JE @DETECT
ADD ESI,4
JMP @LOOP_API
@END:
JMP @LOOP // Обрабатываем следующий IMAGE_IMPORT_DESCRIPTOR
@DETECT: // В случае детекта
MOV FS:[0],0
JMP ESP
@EXIT:
POPF
POPAD
end;
|