2012-04-26 10 views
12

Non capisco davvero come aggirare IsDebuggerPresent. Penso che dovrei trovare i registri usati per il debug e quindi impostarlo su 0 per ingannare IsDebuggerPresent, ma non so come farlo. Ho provato a cercare in giro per Google, e ho anche provato alcune soluzioni ma non ha funzionato davvero per me. Qualcuno potrebbe spiegarmi come dovrebbe funzionare e come ignorarlo?Come si ignora IsDebuggerPresent con OllyDbg?

+0

hai provato olly plugin come [Hide Debugger] (https://tuts4you.com/download.php?view.57) o [Olly Advanced] (https://tuts4you.com/download.php? view.75)? questi sono molto più facili da usare invece di modificare manualmente il codice ogni volta. – Arash

risposta

21

Ci sono molti modi per farlo. Come hai detto, è possibile applicare patch al blocco di thread del programma. Ecco un tutorial, come muoversi IsDebuggerPresent, semplicemente patch questa funzione in modo restituisce sempre 0.

1) individuare IsDebuggerPresent

OllyDbg 1

Nella mia situazione, è a 7664EFF7, e consistono di sole tre istruzioni + una RET. Legge il blocco del thread (l'indirizzo è in FS: 18), quindi individua il byte che dice "sto eseguendo il debug" e lo restituisce. Il valore restituito è memorizzato in EAX (come per la maggior parte delle funzioni WINAPI). Se modifico la funzione in modo che alla fine abbia EAX = 0, avrò saltato con successo IsDebuggerPresent.

2) patch

Ora il modo più semplice per farlo è quello di fare semplicemente la funzione di fare semplicemente un'istruzione MOV EAX, 0 e poi un RETN:

OllyDbg 2

Nota che ho anche riempito il resto della funzione con NOP per evitare di modificarne la dimensione. Probabilmente non è necessario, potresti anche solo fare MOV EAX, 0 e poi solo RETN.

Inoltre, è necessario sapere che la modifica è valida solo per una corsa del programma. Quando lo riavvii, caricherà una nuova copia di kernel32.dll (dove si trova IsDebuggerPresent) con la funzione originale, e dovrai applicare nuovamente la patch. Se si desidera rendere permanente la patch, è necessario modificare il binario di avvio e modificare/rimuovere la chiamata a questa funzione. Ma prima di farlo devi anche assicurarti che il file binario non controlli se stesso per le modifiche.

+0

C'è un modo per cercare il codice per "FS"? Inoltre, vedo più istanze di IsDebuggerPresent ... In realtà, non sono nemmeno sicuro di come trovare 'FS' e il posto giusto per rimuoverlo. Ovunque, vedo 'MOV DWORD PTR', ad es. 'MOV DWORD PTR V: [0], EAX' e' MOV EAX, DWORD PTR DS: [13000] ' – Strawberry

+0

L'ho appena trovato seguendo le chiamate di funzione. Inoltre, ho capito che IsDebuggerPresent è solitamente usato per aggiungere spazzatura a rovinare ogni pensiero. Dovrei salvarlo dopo aver cambiato 'EAX = 0' e poi riaprirlo, quindi non carica la spazzatura? Non sono proprio sicuro di come funzioni, scusa! – Strawberry

+1

Dovrebbe essere presente solo una posizione, in cui è definito IsDebuggerPresent, all'interno di kernel32.dll. Potrebbero esserci molte * chiamate * ad esso, ma se si aggiusta la funzione stessa, tutte le chiamate riceveranno "0" come risposta. Dovresti applicare la patch prima di eseguire il programma e devi applicarla ogni volta che lo esegui. – kuba

9

Iniettare questo codice nel vostro processo:

mov eax,dword ptr fs:[18] 
mov eax,dword ptr ds:[eax+30] 
mov byte ptr ds:[eax+2],0 

Questo sarà patchare il PEB.BeingDebuggedflag, garantendo IsDebuggerPresent restituisce sempre 0

Quando si utilizza x64dbg è possibile eseguire il comando dbh.

6

se si desidera che l'applicazione non controllare fare questo:

  • Press Alt + e o aperti Executable modules finestra.
  • Selezionare C:\WINDOWS\system32\kernel32.dll e premere ctrl + N
  • selezionare IsDebuggerPresent e premere Invio.
  • premere f2
  • eseguire il programma e attendere l'interruzione del programma su questo codice operativo.
  • premere un po 'di f8 fino a tornare al vostro codice.
  • guardare per qualcosa come TEST EAX,EAX e dopo qualche cosa come je jnz ed ecc, state attenti l'uscita di IsDebuggerPresent viene salvato in EAX.
  • se il salto si verifica su questo codice op lo cambia in nop e se non lo fa , cambiarlo in jmp.
  • salvare il programma. se non sai come salvare il codice modificato in ollyDBG basta cercarlo.
Problemi correlati