Codigo asm, ensambla pero falla.

Iniciado por Rozor, 15 Septiembre 2007, 12:59 PM

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

Rozor

Los dos ensamblan pero no funcionan.




.386
.MODEL FLAT, STDCALL
.STACK
.DATA

txt db "owned you", 0
cap db "p**a", 0



.CODE

Inicio:

          xor eax, eax
          xor ebx, ebx
          pop ebx
          mov ebx, eax
          push eax
          mov ebx, 1141211ah
          sub ebx, 11010110h
          push ebx
          xor ebx, ebx
          mov ebx, 11412111h
          sub ebx, 11010101h
          sub ebx, 00000010h
          push ebx
          push eax
          xor eax, eax
          mov eax, 7e3d058ah
          call dword ptr [eax]
          pop eax
          pop ebx
          leave
          ret

end Inicio







.386
.MODEL FLAT, STDCALL
.STACK
.DATA

txt db "owned you", 0
cap db "p**a", 0



.CODE

Inicio:

          push 00h
          push offset cap
          push offset txt
          push 00h
          mov eax, 7e3d058ah
          call dword ptr [eax]
          pop eax
          pop ebx
          leave
          ret

end Inicio



Gracias
out in the streets they call it murder....

karmany

#1
Claro, porque estás intentando acceder a una librería que tu programa todavía no ha cargado con Import Table. Me imagino que estás intentando acceder a MessageBoxA en user32.dll..

Carga primero la librería user32.dll.

PD. Por cierto, es posible que si pones una dirección fija (7E3D058A) sólo funcione bien en tu ordenador.

Editado después:
Y llamas mal a la API: Sólo con que pongas Call EAX ya compilará bien.

Éste código te funcionará bien:
.386
.model flat, stdcall



include kernel32.inc
includelib kernel32.lib

.stack
.data
txt db "owned you", 0
cap db "p**a", 0
librery db "user32.dll", 0

.code
Inicio:
          invoke LoadLibrary, addr librery
  push 00h
          push offset cap
          push offset txt
          push 00h
          mov eax, 7e3d058ah
          call eax
          pop eax
          pop ebx
          leave
          ret
         
end Inicio

Hendrix

Estas intentando llamar a alguna API???

Bueno, supongo que lo sabes, ya que se que te enteras bastante de esto, pero te lo recuerdo, que con direcciones harcodeadas solo funcionara en tu PC ;)

Otra es que necesitaras cargar la libreria donde se encuentra esa API, si no esta cargada es normal que pete...

Un Saludo :)

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Rozor

Si, lo hice por que vi en un tuto o code no recuerdo bien, pero al principio ponia

extern ExitProcess:PROTO
...
...
...



Pero tampoco funciono y la llamada a la api tambien lo vi.
out in the streets they call it murder....

Hendrix

Como te dijo Karmany y despues yo, para llamar a X api tienes que asegurarte de que la libreria de la API este cargada, si no esta cargada la puedes cargar tu mismo con loadLibrary, y con GetProccAddress puedes sacar la dirección de la API y asi llamarla. Si no quieres cargar ninguna libreria, para asi ahorrar "espacio" en disco, puedes leerte algun tuto sobre como hacer Shellcodes universales, que al fin y al cabo se trata de sacar primero la dirección en memoria del Kernel, luego, una vez tenemos esa dirección, sacar la de LoadLibrary y la de GetProccAddres, y una vez con eso ya podemos cargar cualquier libreria y usar cualquier api.

Es solo un ejemplo  ;)

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián