2010-12-04 6 views
1

J'ai un code PPC que je veux convertir dans son code C d'origine, y at-il un moyen de le faire? Peut-être une personne (comme quelqu'un qui connaît PPC pour reconstruire le code C?) Ou un programme?Est-il possible de convertir PPC Assembly en C?

+0

PPC comme dans PowerPC? – ruslik

+0

Oui, l'assemblage PowerPC. – user330416

+5

Vous ne pouvez pas obtenir le * original * C, car la compilation en code machine est un processus avec perte. Il n'y a pas de correspondance 1 à 1. Un désassembleur/décompilateur pour Power est cependant hors de mon expertise. – SingleNegationElimination

Répondre

0

Boomerang prétend soutenir la décompilation PPC.

+0

IDA prend en charge son désassemblage. Il y a un long chemin vers la décompilation en code C. – ruslik

+0

Ah, ok - je supprime cette revendication alors. –

+0

Boomerang a l'air plutôt cool.Leur article sur la récupération du code source mérite d'être lu. – RBerteig

1

Oui et non.

Il est possible en principe de traduire un programme dans n'importe quelle langue vers n'importe quelle autre langue. Les résultats ne seront pas beaux. Si le code existant est vraiment le résultat d'une compilation sans trop d'optimisation intelligente, alors il est probable qu'un processus assez rote peut le ramener à C. Cela est souvent facile à faire manuellement pour de petites quantités de code , mais ennuyeux et l'erreur sujette à de grandes bases de code.

Il existe des outils de rétro-ingénierie dans la nature qui font des déclarations sur la décompilation. Ce n'est pas un problème facile dans le cas général.

Une approche de l'automatisation du problème consiste à créer un ensemble PPC (ou même binaire) frontal pour un compilateur qui prend déjà en charge un backend de langage C. Le résultat est un compilateur croisé qui lit le code PPC et produit un code C très obfusqué. Je sais qu'il y a un back-end C pour GCC, par exemple. Quelle que soit l'approche que vous adopterez, il sera probablement essentiel d'avoir une bonne suite de tests (et la possibilité de l'exécuter) pour le binaire existant afin de pouvoir prouver que la traduction est équivalente. Notez que vous ne recevrez jamais les commentaires originaux, et aurez uniquement accès aux noms de variables et de fonctions d'origine qui ont fait une table de symboles ou des informations de débogage similaires.

+0

Ce que j'essaie de faire est de tenter de récupérer les clés de chiffrement stockées à l'origine dans l'exécutable. En utilisant l'IDA, je l'ai transmis au PPC et il y a des fonctions dans PPC qui décryptent directement et qui stockent également les clés de chiffrement. Si cela a du sens. – user330416

+0

@user: Vous n'avez pas besoin de "décompiler en C" tout l'exécutable juste pour ça. Veuillez mettre à jour votre question – ruslik

+0

Ensuite, vous faites face à un plus grand défi. Moi qui étais mon code, j'écrirais ces fonctions à la main, en utilisant tous les trucs que je pourrais trouver ou inventer pour éviter la divulgation facile des clés. Ils ne seront pas faciles à décompiler du tout. Votre meilleur pari peut être la simulation de leur fonctionnement, et l'inférence des valeurs de clé à la suite du passage du code en direct. – RBerteig

0

Non. Jamais. Décompiler n'est pas la même chose que récupérer c. Vous ne pouvez jamais revenir en arrière. Vous pouvez essayer de l'inverser, essayer de comprendre ce qu'il fait, mais certaines informations sont définitivement perdues.

Ceci est du projet boomerang:

Cependant, un décompilateur général ne cherche pas à renverser toutes les actions du décompilateur, plutôt transforme le programme d'entrée à plusieurs reprises jusqu'à ce que le résultat est le code source de haut niveau. Par conséquent, ne recréera pas le fichier source d'origine; probablement rien de tel.

Il crée un code C qui pourrait être (mais ne le saura jamais) la source C.

+0

Bien sûr, dans de nombreux cas, cela suffit. Il peut être utilisé pour déplacer un binaire hérité vers une nouvelle plate-forme, par exemple. Bien qu'un simulateur de la plate-forme héritée soit souvent un meilleur choix .... – RBerteig