Al mio precedente datore di lavoro abbiamo utilizzato un componente di terze parti che fondamentalmente era solo una DLL e un file di intestazione. Quel particolare modulo gestiva la stampa in Win32. Tuttavia, la società che ha creato il componente è andata in bancarotta, quindi non ho potuto segnalare un bug che avevo trovato.Qual è il tuo trucco anti-debug preferito?
Quindi ho deciso di correggere il bug e ho lanciato il debugger. Sono stato sorpreso di trovare il codice anti-debugging quasi ovunque, il solito IsDebuggerPresent
, ma la cosa che ha attirato la mia attenzione è stata questa:
; some twiddling with xor
; and data, result in eax
jmp eax
mov eax, 0x310fac09
; rest of code here
A prima vista ho appena fatto un passo sopra la routine che è stato chiamato due volte, poi le cose Sono appena andato banane. Dopo un po 'mi sono reso conto che il risultato del bit twiddling era sempre lo stesso, cioè il jmp eax era sempre saltato a destra nell'istruzione mov eax, 0x310fac09
. Ho sezionato i byte ed è stato, 0f31
, l'istruzione rdtsc
che è stata utilizzata per misurare il tempo trascorso tra alcune chiamate nella DLL.
Quindi la mia domanda su SO è: Qual è il tuo trucco anti-debug preferito?
È mia opinione che davvero non voglio che il codice in esecuzione sul mio sistema abbia fatto qualcosa per prevenire il debug. Mostra che l'autore del codice non può essere considerato attendibile. – bruceatk
Sono d'accordo con bruceatk, specialmente per DLL e altri componenti che uso per creare la mia applicazione. Sono meno interessato alle applicazioni complete che uso. Non mi sorprende che la società sia andata in bancarotta :) - sarebbe meglio spendere tempo a produrre un buon codice che a proteggerlo. – Michael
@bruceatk in modo da non eseguire Windows? Il sistema operativo stesso contiene alcuni trucchi anti-debugger per aiutare a nascondere alcuni dei suoi meccanismi di protezione più interessanti. – mrduclaw