Descompiladors de software per a C/C++

Traducción a Catalán de un interesantísimo artículo de Giampiero Caprino, Ingeniero de software de California que nos explica aqui los distintos tipos de descompiladores que existen y la función que cumplen cada uno de ellos.

DESCOMPILADOREStraduccion a catalantraduccion software
21 enero, 2022 Traducción a Catalán de descompiladores. de software
21 enero, 2022 Traducción a Catalán de descompiladores. de software

Traducción realizada por Mauri, experto en traducción a Catalán y colaborador de Ibidem Group en proyectos de traducción y localización de software.

Texto original escrito por Giampiero Caprino y publicado en
https://www.backerstreet.com/decompiler/decompilers.htm

* * *

Un descompilador intenta traduir un fitxer objecte a un fitxer font compilable. Hi ha molts descompiladors per a C# o Java, però només uns quants per a C/C++. Veure en particular:

  • Ghidra : un descompilador de codi obert desenvolupat per l’Agència de Seguretat Nacional dels EUA, és un entorn interactiu avançat (sembla inspirat en IDA – a continuació), per a l’anàlisi binària i la descompilació. Està escrit en Java, té una interfície d’usuari semblant a l’IDE d’Eclipse (de fet també hi ha un connector per a Eclipse). He analitzat la seva implementació (el descompilador és en C++) i té moltes de les característiques que volia implementar al meu propi descompilador (vegeu REC, a continuació).
    Els usuaris poden escriure el seu propi connector per a l’anàlisi específica de l’objectiu en Java o Python! S’executa a Windows, Linux, MacOS i és compatible amb molts processadors. Es poden afegir nous processadors escrivint fitxers de text per especificar l’arquitectura del processador i el seu conjunt d’instruccions.
    En general, un treball excel·lent, que estableix un nou estàndard per als descompiladors.
  • reko : un altre descompilador de codi obert. Escrit en C#, només s’executa a Windows o a plataformes que admeten mono . Accepta binaris compilats per a molts processadors. Té una GUI amb totes les vistes estàndard (desmuntatge, hexdump, font C, projecte) i també es pot utilitzar des de la línia d’ordres.
  • RetDec : desenvolupat originalment per la Universitat Tecnològica de Brno, República Txeca, com a servei en línia, i AVG Technologies, que ara forma part d’Avast, es pot descarregar des d’un repositori de GitHub i executar-lo localment.
    No l’he avaluat, però en aquell moment havia llegit el document publicat per l’equip de la Universitat de Brno, i em semblava al nivell dels altres descompiladors avançats disponibles en aquell moment.
  • C4Decompiler: (L’enllaç original sembla estar mort. Deixo la descripció aquí en cas que torni a estar disponible; crec que tinc una versió antiga descarregada al meu disc dur)
    Un nou descompilador en desenvolupament. Només Windows, té una interfície d’usuari elegant inspirada en Visual Studio 2010 amb moltes interaccions útils, que malauradament no sempre són òbvies. Cal fer clic amb el botó dret per descobrir-los. L’anàlisi sembla molt bona, almenys per a l’exemple compilat amb depuració inclòs a la instal·lació. Provar-lo amb executables aleatoris de la carpeta de Windows va tenir resultats mixts, des de la finalització de l’anàlisi fins a bloquejos i bucles interminables.
    Tot i així és molt prometedor, ja que els seus autors clarament han posat molt de pensament i esforç en el seu desenvolupament.
  • Boomerang : descompilador C de codi obert. Conjunt d’anàlisis molt avançat que intenten resoldre els problemes més difícils als quals s’enfronten els descompiladors. La qualitat del codi generat varia molt: algunes funcions són gairebé perfectes en la seva representació de l’estructura del codi, les variables locals i els tipus. Altres funcions semblen molt ofuscades pel nombre de variables i els seus usos. També és bastant fràgil, ja que sovint es bloqueja amb programes grans.
  • REC : El meu propi descompilador C per a Linux, DOS i Windows. El primer descompilador que funciona en múltiples plataformes i que suporta diversos processadors (x86 de 16 i 32 bits, MIPS, 680×0, PowerPC). És molt estable, ja que s’ha provat amb centenars de programes. La qualitat de la sortida no és tan bona com la de Boomerang, ja que la seva implementació es basa en un estil de codificació de 20 anys (llegiu molt difícil d’estendre). Ara he publicat una nova versió, RecStudio 4, que admet executables de 64 bits. No s’ha provat amb tants executables, de manera que encara hi ha problemes. També les diferents anàlisis realitzades (SSA), generen un codi totalment diferent que a vegades pot semblar de molt pitjor qualitat (tot i que probablement és més correcte), que el codi generat per la versió anterior.
  • Hex Rays : un connector descompilador per a IDA Pro. La combinació amb les capacitats de desmuntatge avançades d’IDA i el depurador en temps d’execució el converteixen en l’opció ideal. No obstant això, encara és molt nou i requereix IDA Pro. A diferència dels altres decopiladors, no és gratuït. També ha de resistir la prova del temps en termes d’estabilitat. Molt prometedor.
  • Dcc : descompilador de DOS a C. Un dels primers descompiladors. Mostra la seva edat, però molts altres descompiladors encara hi fan referència per les seves capacitats d’estructuració. Només admet programes 8086 (16 bits).
  • Més informació sobre altres descompiladors a la wiki de Transformació de programes sobre descompilació

Aquí teniu una comparació dels diferents descompiladors:

Descompilador Plataforma Suport a objectius

Suport de format binari

Lot interactiu

Sortida recompilable

Estructuració Les variables Tipus Notes
Descompilador C4 Windows IA64 PE-COFF GUI interactiva No Molt bé Fira  
Bumerang Windows/Linux IA32
MIPS
PPC
ELF
PE-COFF
Mac-OS
Lot amb
interfície gràfica d’usuari
No Molt bé Molt bé  
REC Windows/Linux IA32
IA64
MIPS
PPC
mc68k
ELF
PE-COFF
AOUT
RAW
PS-X
Lot / Interactiu No Fira Parcial  
dcc Windows 8086 DOS .com lot No Fira Pobre  
Raigs hexagonals Windows ? ? Interactiu ? ? ? ?  

 

Prova de descompiladors

La qualitat d’un descompilador es basa en el bo que és el codi que genera i el bon rendiment que té en presència d’una entrada «inesperada».

Els problemes especialment difícils es plantegen per l’ús d’optimitzacions del compilador que fan que el codi d’entrada sigui molt desestructurat i difícil d’entendre, fins i tot per a un humà. La gestió dels casos següents defineix la qualitat d’un descompilador:

No hi ha informació sobre els noms dels símbols al fitxer binari (executable eliminat)

Fitxers executables estàtics o enllaçats dinàmicament (utilitza la informació de la concordança de patrons i la informació de l’enllaç dinàmic per identificar l’accés a les funcions de la biblioteca)

Valora este artículo

Articulos relacionados


Traducción de inglés a catalán del artículo sobre Algoritmos Gráficos publicado por el profesor Ron Shamir de la Tel Aviv University (Israel)

Traducción a Catalán de un interesantísimo artículo sobre contabilidad, en concreto sobre la Hollerith, una máquina contable inventada en 1906, redactado por Frank da Cruz, Director de Desarrollo de Software de Comunicaciones en la Universidad de Columbia. Conocidos como...

Traducción a Catalán de un interesantísimo texto de James Franklin, profesor emérito de la Facultad de Matemáticas y Estadística de la Universidad de Nueva Gales del Sur, amante de la filosofía de las matemáticas, la historia de las ideas y la teoría del riesgo extremo, que nos...