Problema inyeccion

Iniciado por rmdma(), 1 Marzo 2012, 11:19 AM

0 Miembros y 1 Visitante están viendo este tema.

rmdma()

codigo al que inyectar:
Código (asm) [Seleccionar]

    include 'win32ax.inc'

    .data
        t1 db 'sindlll',0
        t2 db 'damedll',0


    .code
    start:
        stdcall prueba,t1,t2
        ret

        proc prueba,t1,t2
            mov esi,[t1]
            mov ecx,[t2]

           push 0
           push esi
           push ecx
           push 0
           call [MessageBoxA]
           ret

         endp
    .end start


la dll:
Código (asm) [Seleccionar]

format PE GUI 4.0 DLL
entry DllEntryPoint

include 'win32a.inc'

section '.data'

dato1 db 'hellooo',0
dato2 db 'agurrrr',0


section '.text' code readable executable

proc DllEntryPoint hinstDLL,fdwReason,lpvReserved

pushad
push dato1
push dato2
mov eax, 0x00402010 ; la direccion de la funcion prueba
call eax
add esp,8
popad
endp   


quiero usar la funcion prueba desde la dll, pero me esta petando , hesegido el tutorial este
https://foro.elhacker.net/programacion_cc/tutorialiniciandome_en_el_hacking_mediante_inyeccion_de_dll_con_ejercicio-t258750.15.html
pero  me lo e montao en asm.

Eternal Idol

Tenes que depurar tu codigo para ver donde falla, podes poner un int 3 en el codigo y configurar el WinDbg como depurador post-mortem, ejecutandolo con -I, asi se abre automaticamente.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

_Enko

#2
la dll esta mal hecha. Te falta la sección de reloc/fixups.

Tenes que poner esto al final de la dll.

section '.reloc' fixups data discardable

En los ejemplos de fasm, en la carpeta EXAMPLES hay una DLL.


Código (asm) [Seleccionar]


; DLL creation example

format PE GUI 4.0 DLL
entry DllEntryPoint

include 'win32a.inc'

section '.text' code readable executable

proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
mov eax,TRUE
ret
endp

; VOID ShowErrorMessage(HWND hWnd,DWORD dwError);

proc ShowErrorMessage hWnd,dwError
 local lpBuffer:DWORD
lea eax,[lpBuffer]
invoke FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM,0,[dwError],LANG_NEUTRAL,eax,0,0
invoke MessageBox,[hWnd],[lpBuffer],NULL,MB_ICONERROR+MB_OK
invoke LocalFree,[lpBuffer]
ret
endp

; VOID ShowLastError(HWND hWnd);

proc ShowLastError hWnd
invoke GetLastError
stdcall ShowErrorMessage,[hWnd],eax
ret
endp

section '.idata' import data readable writeable
;..............imports

section '.reloc' fixups data discardable



Si estas en WinNT y familia, no le gusta la secciónes vacias.
En ese caso, se hace

section '.reloc' data discardable fixups
if ~ $-$$  
       dd      0,8 ;empty fixups section iff no other fixups  
end if

Saludos.