Spørgsmål:
Håndtering af INT 2D-antidebuggerteknik i IDA Pro
RYN
2014-09-21 00:53:52 UTC
view on stackexchange narkive permalink

Jeg analyserer en PE-fil ved hjælp af IDA Pro , der bruger int 2Dh -teknik som anti-debugging:

  CODE: 00455050 push ebpCODE: 00455051 mov ebp, espCODE: 00455053 push ecxCODE: 00455054 push ebxCODE: 00455055 push esiCODE: 00455056 push ediCODE: 00455057 xor eax, eaxCODE: 00455059 push ebpCODE: 004550: push45 : 00455062 mov fs: [eax], espCODE: 00455065 int 2Dh; Windows NT - debugging services: eax = typeCODE: 00455067 inc eaxCODE: 00455068 mov [ebp + var_1], 1CODE: 0045506C xor eax, eaxCODE: 0045506E pop edxCODE: 0045506F pop ecxCODE: 00455070 pop ecxCODE: 00 edxCODE: 00455074 jmp short loc_455084  

Hvordan skal jeg konfigurere IDA Pro til at håndtere denne afbrydelse / undtagelse i dynamisk analyse?
Jeg bruger den lokale win32 debugger

KODE: 0045505En push offset loc_455076vel det er at opsætte en seh, så jeg ville indstille en bpx der, da det sandsynligvis snubler seh, og inden for seh eip er indstillet til en ny adresse for at fortsætte fra ... det er et stykke tid siden Jeg spillede med int2d, så jeg kan ikke huske sin helhed, men koden efter den ser ret falsk ud
En svar:
peter ferrie
2014-09-21 04:35:00 UTC
view on stackexchange narkive permalink

Koden forventer, at der skal forekomme en undtagelse, som vil ske i fravær af en fejlfinding. Hvis der findes en fejlfinding, vil brydepunktsundtagelsen normalt blive undertrykt af fejlfindingsprogrammet, og udførelsen fortsætter enten på 0x455067 eller 0x455068, afhængigt af debugger.

Du har to enkle valg: et valg er, at du kunne bare lade udførelsen nå 0x455084 og derefter ændre var_1 tilbage til nul (eller hvilken værdi den oprindeligt havde). Det, du ikke ønsker, er, at det har værdien "1".

Det andet valg er at ændre byte ved 0x455065 fra 0xCD til 0xFF (for eksempel) og derefter lade det udføre. Denne sekvens får en undtagelse til at forekomme, hvilket virkelig er, hvad du vil skal ske (bemærk, at undtagelseskoden ikke vil være korrekt, så du bliver nødt til at se, om koden kontrollerer for en 0x80000003, og tage den kodesti) . Eksekveringen overføres til handleren på 0x455076, på hvilket tidspunkt du kan ændre byte ved 0x455065 tilbage til 0xCD (hvis koden er selvkontrol) og derefter genoptage fejlretning.



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...