La vecchia tecnica di ricerca kernel32.dll (trova l'indirizzo di base .dll) non funziona più?

0

Does the old technique of kernel32.dll search (find .dll base address) not work anymore?

Nel seguente codice, prendo prima l'indirizzo kernel32.dll (restituito) all'avvio dell'applicazione, quindi proverò a localizzarne la base.

La dimensione della pagina del sistema - in questo caso Windows 10 x64 - è 4096 byte, quindi la base dell'immagine è allineata a un limite di 0x1000 ?

Tuttavia, quando diminuisco ripetutamente l'indirizzo (AND'd) di 0x1000 , ottengo improvvisamente il punto di un errore di segmentazione della memoria e la base non viene trovata.

Dopo aver studiato l'esecuzione usando GDB sembra che l'ultimo indirizzo di lavoro sia:

0x74400010 <KERNEL32!BasepAppContainerEnvironmentExtension+0>: mov edi,edi

Qualcuno può spiegare le mie osservazioni?

Ecco il codice per la ricerca kernel32.dll:

mov ebx, [esp] ; kernel address
and ebx, 0xfffff000 ; align value (base is aligned to 0x1000)
mov ecx, 0x50 ; page counter

loop_api:

mov ax, "MZ"
cmp ax, word [ebx] ; check DOS header
je found_dos

next_api:
sub ebx, 0x1000 ; subtract on page
dec ecx
jnz loop_api
jmp exit_normal 

found_dos:
mov eax, ebx
add eax, [eax + 0x3c]
cmp word [eax], "PE" ; check PE header
jne next_api

found_kernel:
    
posta user111854 24.08.2016 - 11:19
fonte

0 risposte

Leggi altre domande sui tag