Делать было нечего вот написал код. Полностью независимый. Достаточно поставить на таймер его вызов. Сам ищет таблицу импорта и проверяет первые байты всех импортируемых API. В случае если будет установлен программный бряк на API или JMP в начале(хук). Программа падает. Знаю что от крякера мало спасет делал просто так) Сильно ногами не бить. Code: { Код проверки установки програмного бряка на всех 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;
1) Обход запросто: push XXXXXXXX ret или mov reg,XXXXXXXX jmp/call reg или NOP NOP NOP А далее стандартная вешь. 2) Если попадется функция в которой и так идет jmp в начале, то будет облом. По этому лучший способ для проверки - грузить в винта либу и сверять по оригинальным опкодам.
P.S. Если в проге будет установлен обработчик SEH или данные будут проверять внутри конструкции try except то смысла от этого будет мало )
P.S. Если в проге будет установлен обработчик SEH или данные будут проверять внутри конструкции try except то смысла от этого будет мало ) Даже если обработчик поставишь программа падает, SEH и try except end одно и тоже. Про первую твою месагу это верно, но я же сказал что от нечего сделать написал. Бряк ведь ставят на первую инструкцию. Про хук это понятно. У каких API в самом начале JMP ?