x86-
TF-, EFLSGS ( 8- , ), , INT 01h EXCEPTION_SINGLE_STEP (80000004h), "" Windows. , SS ( ), . , MOV SS, new_ss/MOV ESP, new_ESP. , , , , , ( LSS, SS ESP, ).
TF-
(EFLAGS) TF. - - . : PUSHFD, , ( SEH- , ), , API- GetThreadContext.
- PUSHFD. , .
1 - "" PUSHFD
(. 1), PUSHFD EAX TF.
char yes[] = "debugger is detected :-)";
char noo[] = "debugger is not detected";
nezumi()
{
char *p = noo; // is on ;-)
__asm
{
; int 03 ;
pushfd ; , TF
pop eax ; eax
and eax, 100h ; TF-
jz not_under_dbg ; TF , ...
mov [p], offset yes ; ..., ;)
not_under_dbg:
}
MessageBox(0, p, p, MB_OK);
}
1. TF-0x0-simple.c PUSHFD.
(. 2). : ) nezumi(); ) , 768 .
cl.exe /c /Ox /Os /G6 TF-0x0-simple.c
link.exe TF-0x0-simple.obj /ENTRY:nezumi /MERGE:.rdata=.text
/ALIGN:16 /DRIVER /FIXED /SUBSYSTEM:CONSOLE KERNEL32.LIB USER32.lib
2. .
"warning LNK4078: multiple ".text" sections found with different attributes (40000040)", , , "debugger is not detected", MS VC dbg (
), call' ( MessageBox). ! "debugger is detected :-)"! !!!
Olly
cdb.exe Debugging Tools. OEP, "int 03" , . ntdll!DbgBreakPoint int 03h. , "g" "" int 03h, nezumi(). "t", CALL', "g" ... !!! ?! - CDB PUSHFD , "" TF- . Soft-Ice, Syser, OllyDbg "" . IDA GDB "" TF- , .
2 -
x86 (prefix) - , (REPE/PEPNE), (CS:, DS:, SS:, ES:, FS:, GS:), ( 66h) .. "" - , (MOVSD, LODSD, STOSD). ( ), PUSHFD REPE:PUSHFD - .
, PUSHFD "" , . . "REPE" "PUSHFD" , TF-0x1-prefix.c.
, CDB, Soft-Ice Syser , . MS VC, IDA GDB , OllyDbg ( !) REPE, !
3 -
, PUSHFD MOV AX,SS/MOV SS,AX. SS , , MOV SS,AX, PUSHFD.
nezumi()
{
char *p = noo; // is on ;-)
__asm
{
int 03 ;
mov ax,ss ; ...
mov ss,ax ; ... PUSHFD
pushfd ; , TF
pop eax ; eax
and eax,100h ; TF-
jz not_under_dbg ; TF ,
mov [p],offset yes
not_under_dbg:
}
MessageBox(0, p, p, MB_OK);
}
3. TF-0x2-SS-change.c - TF- .
, . MOV SS,AX, (Step into) ... (!) PUSHFD, TF-, .
Olly
MS VC, CDB, Soft-Ice, OllyDbg, IDA, GDB - . Syser ( 1.95.1900.0894) , . Syser ( ) , , SS PUSHFD, "", TF-.
-
Syser' ! ! ?! "" , PUSHFD, , , , () , .
OllyDbg , SS, , . , , MOV SS,16-bit Reg/Mem POP SS, MOV X,SS/POP SS . , MOV SS, EAX , MOV SS,AX, , , .
Pentium- ... (/ ). MSR- MSR_DEBUGCTLA BTF (single-step on branches), TF- EFLAGS , , (, real-time , , "" jxx, ). , BTF-, ' , .
BTF MSR_DEBUGCTLA
MSR- WRMSR , BTF- native-API NtSystemDebugControl(), NTDLL.DLL, http://www.openrce.org/blog/view/535/Branch_Tracing_with_Intel_MSR_Registers, : ) ; ) Server 2003 XP , -, , - .
" "