Tengo el siguiente problema, estoy leyendo el peb, necesito que cada vuelta que da ese bucle, ebx se posicione sobre el nombre de la funcion exportada. Aclaro que la primer vuelta que da, ebx es correcto, apunta a ActivateActCtx cuando le sumo la direccion de kernel32 que tengo en eax
Código
; ******************************************** ; Hasta aca, en eax tengo a kernel32.dll ; en ebx tengo la ExportTable ; ******************************************** mov edx, -1 bucle: ; Bucle para comprobar si es la función buscada inc edx ; Para saber en que posicion está la funcion mov ebx, [ebx + edx * 4] ; Direcion del nombre de la funcion buscada + Siguiente funcion add ebx, eax ; RVA->VA | add eax, Kernel32Dir mov esi, ebx ; Mover a esi la funcion actual lea edi, [FuncionBuscada] ; Mover a edi la funcion buscada mov ecx, 0Eh ; [FuncionBuscadaLen] Necesario cargarla en cada vuelta, porque se decrementa repe cmpsb ; Compara esi y edi, con una longitud de ecx jnz bucle
Codigo ensamblable:
Código
.386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib .data FuncionBuscada db "GetProcAddress",0 .code inicio: ; ******************************* ; Obtener Kernel32.dll ; ******************************* assume fs: nothing mov eax, fs:[30h] mov eax, [eax + 0Ch] lea eax, [eax + 0Ch] NextModule: mov eax, [eax] mov ebx, [eax + 30h] cmp byte ptr[ebx + 6*2], '3' jne NextModule mov ebx, [eax + 18h] mov eax, ebx ; EAX guarda el valor de kernel32.dll ; ******************************* ; ******************************** ; Obtener direccion de funcion ; ******************************** add ebx, [ebx + 3Ch] add ebx, 78h mov ebx, [ebx] add ebx, eax ; push ebx ; Guardamos el valor [ET] / Antes: mov [ET], eax add ebx, 20h mov ebx, [ebx] add ebx, eax ; pop ebx ; Recuperamos el valor de [ET] ; *********************************************************************** ; Hasta aca, en eax tengo a kernel32.dll, en ebx tengo la ExportTable ; *********************************************************************** mov edx, -1 bucle: ; Bucle para comprobar si es la función buscada inc edx ; Para saber en que posicion está la funcion mov ebx, [ebx + edx * 4] ; Direcion del nombre de la funcion buscada + Siguiente funcion add ebx, eax ; RVA->VA | add eax, Kernel32Dir mov esi, ebx ; Mover a esi la funcion actual lea edi, [FuncionBuscada] ; Mover a edi la funcion buscada mov ecx, 0Eh ; [FuncionBuscadaLen] Necesario cargarla en cada vuelta, porque se decrementa repe cmpsb ; Compara esi y edi, con una longitud de ecx jnz bucle invoke ExitProcess, 0 end inicio
Entiendo que el error esta en la linea 59, cuando edx vale 0, la direccion esta bien, cuando edx vale 1, la direccion salta para no se donde..
Gracias!!!