Traducir de ensamblador a C

Iniciado por adelaperez, 14 Febrero 2018, 17:55 PM

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

adelaperez

Hola a todos. Necesitaría ayuda para poder traducir una función de ensamblador (no hay binarios) a C. La verdad es que estoy un poco perdida y no se como empezar. Así que necesitaria ayuda. Este es el codigo

Disculpad, lo borro poque esta incompleto. Cuando lo localice completo lo vuelvo a publicar

Gracias a todos
Adela

Geovane

#1
https://retdec.com/decompilation/

Ou Ida pro plugins ....
Para servicios, envíe un mensaje privado, sólo para servicios en curso hasta fecha de 10/06/2019

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

.:UND3R:.

Cita de: adelaperez en 14 Febrero 2018, 17:55 PM
Hola a todos. Necesitaría ayuda para poder traducir una función de ensamblador (no hay binarios) a C. La verdad es que estoy un poco perdida y no se como empezar. Así que necesitaria ayuda. Este es el codigo


0x0000054d <+0>: lea ecx,[esp+0x4]
0x00000551 <+4>: and esp,0xfffffff0
0x00000554 <+7>: push DWORD PTR [ecx-0x4]
0x00000557 <+10>: push ebp
0x00000558 <+11>: mov ebp,esp
0x0000055a <+13>: push ebx
0x0000055b <+14>: push ecx
0x0000055c <+15>: sub esp,0x10
0x0000055f <+18>: call 0x450 <__x86.get_pc_thunk.bx>
0x00000564 <+23>: add ebx,0x1a9c
0x0000056a <+29>: mov DWORD PTR [ebp-0x10],0x0
0x00000571 <+36>: lea eax,[ebx-0x19a0]
0x00000577 <+42>: mov DWORD PTR [ebp-0x14],eax
0x0000057a <+45>: sub esp,0xc
0x0000057d <+48>: push DWORD PTR [ebp-0x14]
0x00000580 <+51>: call 0x3e0 <strlen@plt>
0x00000585 <+56>: add esp,0x10
0x00000588 <+59>: mov DWORD PTR [ebp-0x18],eax
0x0000058b <+62>: mov DWORD PTR [ebp-0xc],0x0
0x00000592 <+69>: jmp 0x5ad <main+96>
0x00000594 <+71>: mov edx,DWORD PTR [ebp-0xc]
0x00000597 <+74>: mov eax,DWORD PTR [ebp-0x14]
0x0000059a <+77>: add eax,edx
0x0000059c <+79>: movzx eax,BYTE PTR [eax]
0x0000059f <+82>: movsx eax,al
0x000005a2 <+85>: imul eax,DWORD PTR [ebp-0x18]
0x000005a6 <+89>: add DWORD PTR [ebp-0x10],eax
0x000005a9 <+92>: add DWORD PTR [ebp-0xc],0x1
0x000005ad <+96>: mov eax,DWORD PTR [ebp-0xc]
0x000005b0 <+99>: cmp eax,DWORD PTR [ebp-0x18]
0x000005b3 <+102>: jl 0x594 <main+71>
0x000005b5 <+104>: sub esp,0x8
0x000005b8 <+107>: push DWORD PTR [ebp-0x10]
0x000005bb <+110>: lea eax,[ebx-0x1992]
0x000005c1 <+116>: push eax
0x000005c2 <+117>: call 0x3d0 <printf@plt>
0x000005c7 <+122>: add esp,0x10
0x000005ca <+125>: mov eax,0x0
0x000005cf <+130>: lea esp,[ebp-0x8]
0x000005d2 <+133>: pop ecx
0x000005d3 <+134>: pop ebx
0x000005d4 <+135>: pop ebp
0x000005d5 <+136>: lea esp,[ecx-0x4]
0x000005d8 <+139>: ret

Gracias a todos
Adela

Así como está es un trabajo de herrero, se ve que es una función pero hay referencias que no están incluidas en lo que compartes pues apuntan a otras direcciones de memoria del ejecutable, lo que se ve a simple vista es que se calcula un tamaño, ha de ser la string de entrada del usuario (carece referencias de scanf o gets) y luego tras una operación las imprime

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Geovane

Ola

tens o ASM, mas não tens o binário ? como isso, qual origem ?
Para servicios, envíe un mensaje privado, sólo para servicios en curso hasta fecha de 10/06/2019

adelaperez

No, lo siento, sólo el ASM
Adela

trucador

Deberías ponernos un poco en situaccion de donde sale ese código?
Cambien como  dice .:UND3R:. este codigo esta incompleto

djkamal

Hola aparentemente el codigo esta completo porque el desensamblado corresponde al MAIN de un programa en C y acaba en un retorno de control. Parece ser que el código no pertenece a un ejecutable pero probablemente corresponda a una librería que carga otro programa.

El mayor problema que veo no radica en el código ASM el cual si que tienes y no hay problema.
El problema viene respecto al valor de los punteros y los registros ya que sin ellos no puedes saber que hace el programa en este bucle
   0x00000594 <+71>: mov edx,DWORD PTR [ebp-0xc]
   0x00000597 <+74>: mov eax,DWORD PTR [ebp-0x14]
   0x0000059a <+77>: add eax,edx
   0x0000059c <+79>: movzx eax,BYTE PTR [eax]
   0x0000059f <+82>: movsx eax,al
   0x000005a2 <+85>: imul eax,DWORD PTR [ebp-0x18]
   0x000005a6 <+89>: add DWORD PTR [ebp-0x10],eax
   0x000005a9 <+92>: add DWORD PTR [ebp-0xc],0x1
   0x000005ad <+96>: mov eax,DWORD PTR [ebp-0xc]
   0x000005b0 <+99>: cmp eax,DWORD PTR [ebp-0x18]
   0x000005b3 <+102>: jl 0x594 <main+71>

No sabemos que condiciones tiene


Somos los artistas de la tecnologia de la informacion y no somos unos frikis solo unos Expertos en informatica

apuromafo CLS

eso parece un main donde existe un string cualquiera (hola)

el programa reserva espacio para llamar a la api strlenght, luego compara si es igual (mueve el valor 1),se ve algo mal porque  lo normal es ver alguna variable declarada (debe estar en esas rutinas de dword

si no es igual osea es mayor o menor entonces va a otro lado

y en todos los casos debería imprimir el valor por pantalla (printf@plt)

saludos Apuromafo