2010-09-03 21 views
6

Tengo un exe que he abierto con PE Explorer Desensamblador. Ahora puedo ver el código asm, que se ve así:¿Cómo convertir ASM a código legible?

push ebx 
    push esi 
    mov ebx,eax 
    mov eax,[ebx+38h] 
    push eax 
    mov eax,[ebx+3Ch] 
    push eax 
    mov ecx,edx 
    mov eax,ebx 
    mov edx,[ebx+30h] 
    mov esi,[eax] 
    call [esi+7Ch] 
    or byte ptr [ebx+00000088h],02h 
    pop esi 
    pop ebx 
    retn 

No tengo idea de lo que eso significa. ¿Hay alguna manera de convertir esto ahora en código legible (C, C++, C# o VB.NET)?

Información de fondo: La razón por la que necesito esto es porque tengo que llamar a la función anterior desde mi aplicación de Windows. Ahora esta función reside en el exe de terceros, no hay API ni código fuente para él. Cualquier ayuda o consejo es apreciado.

Respuesta

0

Lo que quiere se llama "descompilación".

No es una tarea fácil de resolver, y con frecuencia no es posible en absoluto. Puede intentar Google como un comienzo.

+0

Leí el siguiente artículo en cp: http://www.codeproject.com/KB/cpp/funccaller.aspx - ¿No puedo aplicar los mismos métodos? – vikasde

+0

Eso es lo que hacen los descompiladores (entre muchas otras cosas). Seguramente puedes hacer eso, pero esto no es una tarea de 5 minutos. – BarsMonster

+0

bien. Traté de hacerlo de la manera descrita en el artículo, pero no pude encontrar ninguna función que tuviera sentido para mí. – vikasde

0

Puede descompilarlo en C o en otro idioma con punteros, pero seguirá siendo prácticamente ilegible.

1

Si puede conseguirlo, IDA Pro + Hex-Rays podría descompilarlo en código semi legible.

+1

Oye, solo 2000 EUR todo junto;) ... He sido cliente de IDA Pro durante años, pero como individuo todavía no me molestaba en desembolsar aún más por el complemento. – 0xC0000022L

2

Necesitará saber qué argumentos se utilizan. En este caso, parece que los argumentos se pasan a esta rutina en los registros eax & edx. Una vez que sepa lo que significan esos valores, probablemente pueda descubrir cómo se usa esta rutina y volver a codificarla en el idioma que esté utilizando.

0

A primera vista, es un código objetual; obtiene (al menos) un objeto como argumento, llama a un método de ese objeto que toma como argumentos tres de los atributos del objeto y luego establece un bit (indicador?) en otro atributo del mismo objeto en uno.

IDA Pro probablemente podría identificar el prototipo de función y tiene una versión gratuita disponible que tiene todas las características que necesita: http://www.hex-rays.com/idapro/idadownfreeware.htm. Sin embargo, solo le dará una idea del prototipo de la función, no de su comportamiento (a menos que pueda "leer" el ensamblaje x86). Revertirlo a C/C++ simple requiere el complemento HexRays, que es bastante caro y no siempre funciona (la descompilación a un lenguaje de alto nivel es bastante complicada).

0

Llego un poco tarde para responder a esta publicación, pero viendo que la respuesta aceptada es incorrecta, igual daré mi 0.2 en caso de que otras personas busquen lo mismo.

Lo que estás buscando no es "descompilación" ya que lo descompilaste en código ASM. Lo que quiere es una especie de compilación del código desmontado en algo que puede leer (como C)

Este campo de la ingeniería inversa aún no está bien desarrollado. Algunos mencionaron la IDA con algunos complementos costosos, pero no te servirá de nada ... Mencionaré el único programa que podría ayudarte: REC

Es posible que la salida no sea precisa o que no puedas obtener C código en absoluto dependiendo del programa que desea depurar. Pero esa es la mejor opción que tiene si no conoce el ensamblaje.

En cuanto a lo que está tratando de hacer, la función que publicó no hace nada. Llama a otra función con parámetros y obtiene un valor de retorno. Lo que le interesa es llamar [esi + 7Ch]. Necesita un depurador y entre en esta llamada.

Enganchar esa función dentro de su programa es otra historia ... Será mejor que la escriba usted mismo.

Cuestiones relacionadas