Anti Debugging Techniques
From UIC
Anti Debugging Techniques
Contents |
| Anti Debugging Techniques | |
|---|---|
| Author: | UICommunity |
| Email: | |
| Website: | Home |
| Date: | 06/09/2010 (dd/mm/yyyy) |
| Level: |
|
| Language: | English |
| Comments: | Everybody can add new tricks |
Thanks to:
Giuseppe 'Evilcry' Bonfa', SatUrN, LittleLuk, M$, Intel©, Pn.
Generic Tricks
This page is a repository of known or new techniques used by reverse engineers to thwart the work of a debugger on a running program. This is a community page expanded by UIC members, so feel free to contribute to the repository.
CheckRemoteDebuggerPresent
Search on Msdn
IsDebuggerPresent
Search on Msdn
NtSetDebugFilterState
NtSetDebugFilterState_Anti-Dbg_Trick
TrapFlag
bool notDetected = false;
__try
{
#ifdef _M_IX86
unsigned int eflag = __readeflags() | 0x00000100;
__writeeflags(eflag);
#elif _M_X64
unsigned __int64 eflag = __readeflags() | 0x00000100;
__writeeflags(eflag);
#endif
__nop();
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
notDetected = true;
}
if(notDetected)
{
MessageBox( NULL, _T("Not present"), _T("Debug"), MB_OK);
}
else
{
MessageBox( NULL, _T("Present"), _T("Debug"), MB_OK);
}
Tricks on x86 architecture
BeingDebug
It's like IsDebuggerPresent
ADD EAX,2 ; PEB+2 is beingdebug memory address
MOV EAX,DWORD PTR DS:[EAX] ; AL maybe 0(not debug) or 1(debug present)
OR AL,AL
JE NO_DEBUG
ProcessHeap
MOV EAX,DWORD PTR [EAX+30] ;TEB+0x30 return the PEB address
MOV EAX, DWORD PTR[EAX+18] ;PEB+0x18 retunr the ProcessHeap address
CMP DWORD PTR DS:[EAX+10],0 ;EAX+10 maybe 0(not debug) or other values (debug present)
JNE DEBUG_PRESENT
NtGlobalFlag
ADD EAX,068h; address of NtGlobalFlag
MOV EAX,DWORD PTR DS:[EAX] ; NtGlobalFlag maybe 0x70(debug present) or 0
TEST EAX, EAX
JE NO_DEBUG
Tricks on x64 architecture
Tricks for OllyDbg
Bye OllyDbg 1.10
.data
byeolly qword -1
word 403Dh
.code
start:
fld tbyte ptr ds:[byeolly]
end start
Disclaimer
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevole e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.