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, 00:56  


Tema destacado: Grupo de Facebook de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [Ayuda!]Problema con procedimientos Irvine
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda!]Problema con procedimientos Irvine  (Leído 2,165 veces)
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
[Ayuda!]Problema con procedimientos Irvine
« en: 29 Noviembre 2011, 20:40 »

Hola a todos tengo el siguiente código que quiero lograr hacerlo funcionar, pero no hay caso, lo único que quiero es que me muestre en consola el mensaje hola a todos utilizando el archivo de inclusión Irvine32.inc (Aun no prefiero utilizar las APIS de MS-Windows), al internarlo iniciar solo se cierra y no muestra nada.

Código
TITLE Pruebas
INCLUDE c:\masm32\include\Irvine32.inc
INCLUDELIB c:\masm32\lib\kernel32.lib
INCLUDELIB c:\masm32\lib\Irvine32.lib
INCLUDELIB c:\masm32\lib\User32.lib
 
.data
TEXT1  BYTE "Hola a todos",0
.code
main PROC
    mov edx,OFFSET TEXT1
    call WriteString
exit
main ENDP
END main

Aclaro que el procedimiento WriteString se encarga de escribir una cadena en consola, requiere un solo parámetro que es el OFFSET de la cadena a mostrar.

Debuggeando he notado que que el error aparece retornando de la call y en last error me muestra lo siguiente: ERROR_INVALID_HANDLE

Por lo que deduzco que el manejador de la consola (lugar en donde se mostrará la cadena) es invalido, creo que retorna 0, mi duda es como solucionar esto ya que el mismo error ocurre cuando llamo al procedimiento DumpRegs (también perteneciente a la biblioteca de enlace de Irvine32.lib

Como soluciono esto?


Saludos

PD: he intentado iniciarlo desde la consola y con doble clic pero ninguno me muestra el mensaje

EDIT: he notado que por lo general cuando depuro programas que utilizan la consola para mostrar información o pedirla (E/S) estos estando detenidos en el EP ya me muestra la consola pero sin ningún contenido en OllyDBG pero en este caso con el programa que he ensamblado y posteriormente enlazado no me carga estando detenido en el EP


« Última modificación: 30 Noviembre 2011, 18:07 por .:UND3R:. » En línea

_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: Problema con procedimientos Irvine
« Respuesta #1 en: 29 Noviembre 2011, 20:42 »

Cual es la ventaja de agregar a este tal "Kip Irvine" a tus programas?


digo, porque muy lindo no es :silbar: ;-)



Ese tal Irvine.inc de seguro que utiliza la Api de Consola de Windows, que no es nada complicada:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx


Y si no quieres usar la api de windows directamente, siempre tienes la opcion de usar la C Runtime.
Código:
invoke printf, szFormat, szStr

y antes haces los includes
msvcrt.inc o parecidos

Saludos.


« Última modificación: 29 Noviembre 2011, 20:46 por _Enko » En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Problema con procedimientos Irvine
« Respuesta #2 en: 29 Noviembre 2011, 20:44 »

Te pido paciencia yo también deseo utilizar las apis de windows directamente pero voy siguiendo al pie de la letra el libro, pero mi problema es ese. podrías decirme como solucionarlo.

Muchas gracias

PD: no hes muy atractivo que digamos pero sabe algo de programación  :silbar:
« Última modificación: 29 Noviembre 2011, 20:51 por .:UND3R:. » En línea

_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: Problema con procedimientos Irvine
« Respuesta #3 en: 29 Noviembre 2011, 21:20 »

La libreria irvine es stdcall o fastcall?

mucho no te puedo ayudar, no lei el libro...

Si sigues el libro  a pie de letra, es cuestion de hacer buen copy past.
La unica alternativa que se me ocurre es no seguir el libro a pie de letras. Tomalo como una prueba anti copy past.

« Última modificación: 29 Noviembre 2011, 21:22 por _Enko » En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Problema con procedimientos Irvine
« Respuesta #4 en: 29 Noviembre 2011, 21:46 »

La libreria irvine es stdcall o fastcall?

mucho no te puedo ayudar, no lei el libro...

Si sigues el libro  a pie de letra, es cuestion de hacer buen copy past.
La unica alternativa que se me ocurre es no seguir el libro a pie de letras. Tomalo como una prueba anti copy past.



Eso es chino para mi, de todas formas te adjunto un autoextraible:

http://kipirvine.com/asm/examples/index.htm

Example programs and link library source code for Visual Studio 2005

a ver si le puedes hechar una mirada por favor, quiero avanzar

Saludos
En línea

_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: Problema con procedimientos Irvine
« Respuesta #5 en: 29 Noviembre 2011, 22:22 »

por lo que veo, usa "irvinecall"  o como se le ha cantado.
Pasas el unico parametro que lleva en EDX que es lo que estas haciendo, y por lo que pude ver deberia funcionar.

no  te recomiendo enroscarte mucho con esa libreria... es un asco, la convencion de llamada es ridicula....
No se como  pretende enseñar usar luego la winapi (98% stdcall) con su libreria riducula 50% "irvinecall".
Código:

.data
caption db "Dialog Title", 0
HelloMsg BYTE "This is a pop-up message box.", 0dh,0ah
   BYTE "Click OK to continue...", 0
.code
main PROC
mov ebx,OFFSET caption ; caption
mov edx,OFFSET HelloMsg ; contents
call MsgBox
exit
main ENDP
END main
Y su codigo de ejemplo tambien le falla, "caption" con minuscula, pero "HelloMsg" con mayuscula... onda, elige un estilo y respetalo.
« Última modificación: 29 Noviembre 2011, 22:30 por _Enko » En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
RHL


Conectado Conectado

Mensajes: 959



Ver Perfil
Re: Problema con procedimientos Irvine
« Respuesta #6 en: 29 Noviembre 2011, 22:44 »

@_Enko mira yo tengo una pregunta :P
msgbox es una funcion de la libreria irvine32 no :P entonces revise el archivo irvine32.inc entonces
ahi aparecia:
MsgBox PROTO
pero se supone que es una funcion... y el codigo que hace que muestre ese msgbox? :P

no me digais que esta en el irvine32.lib ? :P
« Última modificación: 29 Noviembre 2011, 22:46 por RHL » En línea
_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: Problema con procedimientos Irvine
« Respuesta #7 en: 29 Noviembre 2011, 23:06 »

archivos lib los usa el linker para enlazar tu ejecutable con las funciones. Son librerias estaticas.

los inc, son los prototipos de las funciones que tiene esa libreria para que el ensamblador sepa que es lo que estas usando y derive el trabajo al linker.

MsgBox  seria una META funcion, funcion de segundo grado... llamala como quieras.

La funcion original es MessageBoxA/W de user32, lo que hace MsgBox es llamar a la funcion de la winapi original. (de seguro que lugo hay uno que otro nivel mas, pero dejemoslo ahi)



Saludos.







« Última modificación: 29 Noviembre 2011, 23:10 por _Enko » En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
RHL


Conectado Conectado

Mensajes: 959



Ver Perfil
Re: Problema con procedimientos Irvine
« Respuesta #8 en: 29 Noviembre 2011, 23:32 »

oh ya ;D entendi pero para eso uso de una vez la de winapi :xD que señor.... :P
En línea
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Problema con procedimientos Irvine
« Respuesta #9 en: 29 Noviembre 2011, 23:51 »

por lo que veo, usa "irvinecall"  o como se le ha cantado.
Pasas el unico parametro que lleva en EDX que es lo que estas haciendo, y por lo que pude ver deberia funcionar.

no  te recomiendo enroscarte mucho con esa libreria... es un asco, la convencion de llamada es ridicula....
No se como  pretende enseñar usar luego la winapi (98% stdcall) con su libreria riducula 50% "irvinecall".
Código:

.data
caption db "Dialog Title", 0
HelloMsg BYTE "This is a pop-up message box.", 0dh,0ah
   BYTE "Click OK to continue...", 0
.code
main PROC
mov ebx,OFFSET caption ; caption
mov edx,OFFSET HelloMsg ; contents
call MsgBox
exit
main ENDP
END main
Y su codigo de ejemplo tambien le falla, "caption" con minuscula, pero "HelloMsg" con mayuscula... onda, elige un estilo y respetalo.


Hola _Enko gracias por la info, en cuanto a MsgBox no tengo problemas el problema se debe a cuando intento llamar a DumpRegs o a WriteString, WriteDecimal

bueno DumpRegs se encarga de devolver los registros de propósito general de 32 bits en la salida (Consola) mientras que WriteString se encarga de devolver en la consola una cadena de texto, si pudieras ayudarme te lo agradecería mucho, pues pretendo continuar, muchísimas gracias :D
En línea

_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: [Ayuda!]Problema con procedimientos Irvine
« Respuesta #10 en: 1 Diciembre 2011, 02:24 »

Hola, en el enlace que pasaste:
http://kipirvine.com/asm/examples/index.htm

los include de la libreria irvine no se si realmente son compatibles con masm.

Con visual cpp fue tan facil como:
Código
 
unsigned int __stdcall WriteString();
int main()
{
char *hello = "hola mundo";
__asm{
mov edx, hello
}
WriteString();
system("pause");
return 0;
}
 
solamente hubo que agregar en la opcion del linker irvine32.lib para que pueda resolver el simbolo WriteString. Y funciona bien.

primero, que en masm no he podido hacer el include de irvine32.inc, se supone que es para masm, pero a mi me ha creado conflicto SmallWin.inc que resolvi haciendo el prototipo manualmente.

Código
.386
.model flat, stdcall
option casemap :none
 
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\msvcrt.inc
 
WriteString PROTO
 
 
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
includelib Irvine32.lib
.data
szMsg db "Hola a todos",0
.code
 
start:
    mov edx, offset szMsg
    call WriteString
    invoke ExitProcess, 0
end start
 
Igual no funciona,  por alguna extraña razon no tiene un handle valido a la consola.

No uso masm, no se si tendra alguna vuelta mas, pero en si, tal cual esta deberia funcionar.
En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: [Ayuda!]Problema con procedimientos Irvine
« Respuesta #11 en: 1 Diciembre 2011, 04:54 »

Hola, en el enlace que pasaste:
http://kipirvine.com/asm/examples/index.htm

los include de la libreria irvine no se si realmente son compatibles con masm.

Con visual cpp fue tan facil como:
Código
 
unsigned int __stdcall WriteString();
int main()
{
char *hello = "hola mundo";
__asm{
mov edx, hello
}
WriteString();
system("pause");
return 0;
}
 
solamente hubo que agregar en la opcion del linker irvine32.lib para que pueda resolver el simbolo WriteString. Y funciona bien.

primero, que en masm no he podido hacer el include de irvine32.inc, se supone que es para masm, pero a mi me ha creado conflicto SmallWin.inc que resolvi haciendo el prototipo manualmente.

Código
.386
.model flat, stdcall
option casemap :none
 
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\msvcrt.inc
 
WriteString PROTO
 
 
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
includelib Irvine32.lib
.data
szMsg db "Hola a todos",0
.code
 
start:
    mov edx, offset szMsg
    call WriteString
    invoke ExitProcess, 0
end start
 
Igual no funciona,  por alguna extraña razon no tiene un handle valido a la consola.

No uso masm, no se si tendra alguna vuelta mas, pero en si, tal cual esta deberia funcionar.

Que extraño, se supone que está orientado a MASM incluso hablan de que los ejemplos son realizados bajo MASM. Te comento tengo: la desventaja que no sé como hacerlo a través de las API'S de Windows pero algo me ayuda el arte de Ingeniería inversa traceando noté en donde se genera el error:


00401F1E  |.  6A 00         PUSH 0                                        ; /pReserved = NULL
00401F20  |.  68 98484000   PUSH serial.00404898                          ; |pWritten = serial.00404898
00401F25  |.  50            PUSH EAX                                      ; |CharsToWrite
00401F26  |.  52            PUSH EDX                                      ; |Buffer
00401F27  |.  FF35 94484000 PUSH DWORD PTR DS:[404894]                    ; |hConsole = NULL
00401F2D  |.  E8 34010000   CALL <JMP.&kernel32.WriteConsoleA>            ; \WriteConsoleA


A mi criterio debería ser pusheado el handle de la consola, es por eso que no puede escribir ya que la call WriteString utiliza la API de windows WriteConsoleA, pero desconozco como se realizaría todo en código de fuente ASM ya que eso estoy estudiando (y de eso trama el libro), se podría sacar algo de provecho con lo comentado?

Saludos y muchas gracias _Enko por tomarte tu tiempo, muchísimas gracias, a ver si te hago la competencia en los crackmes en algunos años luz, Saludos
En línea

_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: [Ayuda!]Problema con procedimientos Irvine
« Respuesta #12 en: 1 Diciembre 2011, 06:26 »

Es lo que te habia comentado, no le pasa un handle valido a consola.
Lo que me extraña a mi, es que importando la libreria a visual studio si funciona.
Trata reinstalando masm, y mejor aun, reinstala exactamente la misma version que viene con el libro.

pd: no es "arte ingenieria inversa" sino que se llama "depurar mi propio programa"


Saludos.
En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: [Ayuda!]Problema con procedimientos Irvine
« Respuesta #13 en: 1 Diciembre 2011, 07:08 »

Es lo que te habia comentado, no le pasa un handle valido a consola.
Lo que me extraña a mi, es que importando la libreria a visual studio si funciona.
Trata reinstalando masm, y mejor aun, reinstala exactamente la misma version que viene con el libro.

pd: no es "arte ingenieria inversa" sino que se llama "depurar mi propio programa"


Saludos.

Para mi es entretenido nunca había depurado algo que era mio, siempre depuré lo ajeno

Puede ser útil lo siguiente?

http://kipirvine.com/asm/5th/gettingStarted/index.htm#batch
En línea

_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: [Ayuda!]Problema con procedimientos Irvine
« Respuesta #14 en: 1 Diciembre 2011, 19:08 »

acabo de probar el codigo del primer post y funciona ok si:

en QEDIT de masm32, pones:
Project>>Console BuildAll

y ahi ya funciona bien.

casualmetne era el mismo error que estaba teniendo al querer usar la msvcrt con masm.
« Última modificación: 1 Diciembre 2011, 19:10 por _Enko » En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SQL Server - Procedimientos almacenados y permisos - AYUDA
Bases de Datos
Xhushito 2 2,756 Último mensaje 13 Noviembre 2010, 15:30
por Xhushito
MOVIDO: SQL Server - Procedimientos almacenados y permisos - AYUDA
.NET
[D4N93R] 0 516 Último mensaje 10 Noviembre 2010, 22:46
por [D4N93R]
MENU CON PROCEDIMIENTOS
Programación C/C++
KOKONUT 5 905 Último mensaje 14 Diciembre 2010, 18:28
por Garfield07
[Solucionado]Problemas al enlazar (Irvine)
ASM
.:UND3R:. 11 1,387 Último mensaje 29 Noviembre 2011, 21:42
por RHL
Problema al obtener estructura de procedimientos en mysql con php
PHP
Darhius 0 198 Último mensaje 26 Enero 2012, 02:59
por Darhius
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines