Autor
|
Tema: [MASM] Busca offsets (Leído 5,454 veces)
|
xassiz~
|
Bueno, os dejo mi primera aplicación en ASM (MASM32). Busca el offset de una función específica en una DLL. Solo hay que modificar " libreria" y " funcion" en .data (tengo que aprender a hacerlo pasando parámetros por línea de comandos). ;Busca offsets - by pablomi .386 .model flat, stdcall option casemap :none include \masm32\include\masm32rt.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\masm32.lib Main PROTO .data libreria db "msvcrt.dll",0 funcion db "printf",0 error db "No se encontro el proceso.",0 .code codigo: invoke Main invoke ExitProcess, 0 Main PROC LOCAL resultado:DWORD invoke LoadLibrary, addr libreria invoke GetProcAddress, eax, addr funcion mov resultado, eax cmp resultado, NULL je Error invoke StdOut, uhex$(resultado) ret Error: invoke StdOut, addr error ret Main ENDP end codigo
Espero críticas, sugerencias o lo que sea
|
|
|
En línea
|
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
Una critica al ojó no mas es en vez de esto Main PROC LOCAL resultado:DWORD invoke LoadLibrary, addr libreria invoke GetProcAddress, eax, addr funcion mov resultado, eax cmp resultado, NULL je Error invoke StdOut, uhex$(resultado) ret Error: invoke StdOut, addr error ret Main ENDP
pone esto Main PROC LOCAL resultado:DWORD invoke LoadLibrary, addr libreria invoke GetProcAddress, eax, addr funcion cmp eax, NULL je Error mov resultado, eax ;Si no quieres usar la variable imprime directamente eax invoke StdOut, uhex$(resultado) ret Error: invoke StdOut, addr error ret Main ENDP
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
xassiz~
|
Pensé que después de hacer cmp eax perdería su valor del invoke. También me comentaron que en vez de: cmp resultado, NULL
pusiera: or eax, eax
ya que los registros son más rápidos que las variables, y según Intel or es más rápido que cmp. Saludos!
|
|
|
En línea
|
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
Pensé que después de hacer cmp eax perdería su valor del invoke. También me comentaron que en vez de: cmp resultado, NULL
pusiera: or eax, eax
ya que los registros son más rápidos que las variables, y según Intel or es más rápido que cmp. Saludos! Claro , pero or te modifica eax xD
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
Space.Medafighter.X
Desconectado
Mensajes: 24
|
Claro , pero or te modifica eax xD
No si el destino es igual a la fuente. El API GetProcAddress como bien sabemos, si la función falla, devuelve EAX = 0, entonces, en caso de ser 0, el valor no se vería afectado, pero si EAX tiene un valor X y se hace un OR EAX,EAX no estas modificando el valor de EAX. En otras palabras, se puede usar un OR para saber si el valor no es igual a 0 sin que afecte en absoluto. Por lo tanto, Main PROC LOCAL resultado:DWORD invoke LoadLibrary, addr libreria invoke GetProcAddress, eax, addr funcion or eax,eax je Error mov resultado, eax ;Si no quieres usar la variable imprime directamente eax invoke StdOut, uhex$([b]eax[/b]) ret Error: invoke StdOut, addr error ret Main ENDP Es correcto, obviando que no lo sería si necesitaramos usar la dirección del API en un código más grande. Otra alternativa "no-destructiva" a OR es TEST, aunque en este caso no es necesaria, y una "destructiva", además de OR es AND para este caso. Pasando al tema del código, puedes remover ese stack frame que creas con el macro "PROC", que ni se para que lo usas xD.
|
|
|
En línea
|
|
|
|
xassiz~
|
Versión por argumentos, agradecimientos a Space.Medafighter.X ;Busca offsets cli - by pablomi .386 .model flat, stdcall option casemap :none include \masm32\include\masm32rt.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\masm32.lib .data error db "No se encontro la funcion.",0 .data? libreriaTMP dd ? libreria db 256 dup(?) funcionTMP dd ? funcion db 256 dup(?) argc dd ? .code codigo: invoke GetCommandLineW invoke CommandLineToArgvW, eax, addr argc or eax, eax cmp dword ptr argc, 3 jb @f mov ebx, dword ptr[eax+4] mov dword ptr libreriaTMP, ebx mov ebx, dword ptr[eax+8] mov dword ptr funcionTMP, ebx invoke WideCharToMultiByte,CP_ACP,0,dword ptr libreriaTMP,-1,addr libreria,256d,0,0 invoke WideCharToMultiByte,CP_ACP,0,dword ptr funcionTMP,-1,addr funcion,256d,0,0 invoke LoadLibrary, addr libreria invoke GetProcAddress, eax, addr funcion or eax, eax je Error invoke StdOut, uhex$(eax) invoke ExitProcess, 0 Error: invoke StdOut, addr error @@: invoke ExitProcess, 0 end codigo
C:\Users\Pablo\Desktop>bOffsets msvcrt.dll system 7545B16F C:\Users\Pablo\Desktop>bOffsets msvcrt.dll printf 7541C5B9 C:\Users\Pablo\Desktop> Saludos!
|
|
« Última modificación: 12 Febrero 2011, 00:57 am por pablomi »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Errores en MASM con RadASM
Ingeniería Inversa
|
Erik#
|
2
|
4,641
|
2 Enero 2009, 16:31 pm
por Erik#
|
|
|
Equivalencia de __ftol2_sse en MASM
ASM
|
MCKSys Argentina
|
3
|
4,359
|
8 Febrero 2010, 21:59 pm
por Eternal Idol
|
|
|
FASM o MASM?
« 1 2 »
ASM
|
Riki_89D
|
12
|
11,163
|
16 Abril 2010, 18:50 pm
por Иōҳ
|
|
|
MASM - Error A1000
ASM
|
h0oke
|
3
|
8,394
|
28 Mayo 2010, 19:44 pm
por Eternal Idol
|
|
|
Saltar a direccion absoluta MASM
ASM
|
Riki_89D
|
0
|
2,606
|
29 Abril 2011, 23:50 pm
por Riki_89D
|
|