¿Ya no funciona la técnica anterior de búsqueda kernel32.dll (buscar la dirección base de .dll)?

0
  

¿La técnica anterior de búsqueda kernel32.dll (encontrar la dirección base .dll) ya no funciona?

En el siguiente código, primero tomo la dirección kernel32.dll (devolver) cuando se inicia la aplicación y luego intento localizar su base.

El tamaño de página del sistema, en este caso Windows 10 x64, es 4096 bytes, por lo que la base de la imagen está alineada con un límite de 0x1000 ?

Sin embargo, cuando disminuyo repetidamente la dirección (AND'd) en 0x1000 , de repente llego al punto de un error de segmentación de memoria y no se encuentra la base.

Habiendo estudiado la ejecución usando GDB, parece que la última dirección de trabajo es:

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

¿Puede alguien explicar mis observaciones?

Aquí está el código para buscar 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:
    
pregunta user111854 24.08.2016 - 11:19
fuente

0 respuestas

Lea otras preguntas en las etiquetas