Хакерские трюки или как поставить бряк на jmp eax


Первые шаги или установка точки останова на одну команду - часть 3


 

0040102A |. E8 D1FFFFFF    CALL TF.00401000

0040102F |. 85C0           TEST EAX,EAX

00401031 |. 74 0F          JE SHORT TF.00401042

00401033 |. 68 30604000    PUSH TF.00406030; ASCII "debugger was not been detected"

00401038 |. E8 6C000000    CALL TF.004010A9

0040103D |. 83C4 04        ADD ESP,4

00401040 |. EB 0D          JMP SHORT TF.0040104F

00401042 |> 68 50604000    PUSH TF.00406050 ;  ASCII "debugger has been detected!"

00401047 |. E8 5D000000    CALL TF.004010A9

0040104C |. 83C4 04        ADD ESP,4

Листинг 2 обработка результата работы функции

Давайте попробуем установить точку останова на комбинацию команд CALL XXX\TEST EAX,EAX\JX. А вот не получается! В окно "condition to pause run trace" ясно сказано "command is one of" (одна из следующий команд), то есть если ввести "call const; test eax,eax; jСС const", отладчик будет останавливаться на _каждой_ из перечисленных команд, что совсем не входит в наши планы, но такой уж у OllyDbg синтаксис!

Кстати, о синтаксисе. Отладчик поддерживает шаблоны, позволяющие составлять простейшие регулярные выражения. Например, R32 обозначает любой 32-разрядный регистр общего назначения и "TEST R32, R32" – останавливает трассировку при выполнении команд TEST EAX, EAX; TEST ESI, EDX и т. д. "RA" – любой регистр общего назначения не такой как "RB", поэтому, шаблон "TEST RA, RA" будет останавливаться на инструкции "TEST EAX, EAX", но проскочит мимо "TEST EAX, EBX". Соответственно, "TEST RA, RB" останется равнодушным к "TEST EAX, EAX". Ключевое слово "CONST" заменяет любой непосредственный операнд, например, "MOV RA, CONST" останавливается на "MOV AL, 69h" и "MOV ESI, 666h", а "CALL CONST" – на всяком прямом вызове процедуры.


- Начало -  - Назад -  - Вперед -