elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 02:05  


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [MASM] Busca offsets
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [MASM] Busca offsets  (Leído 1,340 veces)
xassiz~


Desconectado Desconectado

Mensajes: 428



Ver Perfil WWW
[MASM] Busca offsets
« en: 5 Febrero 2011, 22:36 »

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).

Código
;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 :xD


En línea

YST


Desconectado Desconectado

Mensajes: 963


I'm you


Ver Perfil WWW
Re: [MASM] Busca offsets
« Respuesta #1 en: 5 Febrero 2011, 23:11 »


Una critica al ojó no mas es en vez de esto


Código
 
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


Código
 
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~


Desconectado Desconectado

Mensajes: 428



Ver Perfil WWW
Re: [MASM] Busca offsets
« Respuesta #2 en: 6 Febrero 2011, 00:30 »

Pensé que después de hacer cmp eax perdería su valor del invoke.

También me comentaron que en vez de:
Código
cmp resultado, NULL
pusiera:
Código
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 Desconectado

Mensajes: 963


I'm you


Ver Perfil WWW
Re: [MASM] Busca offsets
« Respuesta #3 en: 6 Febrero 2011, 05:41 »

Pensé que después de hacer cmp eax perdería su valor del invoke.

También me comentaron que en vez de:
Código
cmp resultado, NULL
pusiera:
Código
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 Desconectado

Mensajes: 24



Ver Perfil
Re: [MASM] Busca offsets
« Respuesta #4 en: 11 Febrero 2011, 18:58 »

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,

Código:
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~


Desconectado Desconectado

Mensajes: 428



Ver Perfil WWW
Re: [MASM] Busca offsets
« Respuesta #5 en: 12 Febrero 2011, 00:53 »

Versión por argumentos, agradecimientos a Space.Medafighter.X  :rolleyes:

Código
;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
 
Citar
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 por pablomi » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como utilizar el MASM 6.11??
Programación General
R3B3LD H4CK 4 5,648 Último mensaje 13 Mayo 2008, 20:03
por dark_hat
Errores en MASM con RadASM
Ingeniería Inversa
Erik# 2 1,128 Último mensaje 2 Enero 2009, 16:31
por Erik#
Equivalencia de __ftol2_sse en MASM
ASM
MCKSys Argentina 3 1,476 Último mensaje 8 Febrero 2010, 21:59
por Eternal Idol
FASM o MASM?
ASM
Riki_89D 12 3,433 Último mensaje 16 Abril 2010, 18:50
por Иōҳ
MASM - Error A1000
ASM
h0oke 3 2,251 Último mensaje 28 Mayo 2010, 19:44
por Eternal Idol
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines