Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 03:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Decompiling von C++

Discussion on Decompiling von C++ within the C/C++ forum part of the Coders Den category.

Closed Thread
 
Old   #1


 
Requi's Avatar
 
elite*gold: 3570
The Black Market: 244/0/0
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
Decompiling von C++

Hey Leute,

Ich wollte mich mal erkundigen ob man C++ zum nahezu Ursprungscode decompilen kann.
Ich habe per Google nichts hübsches gefunden ^^

Vllt kann mir einer der Experten was sagen.

Ich möchte aber keine Debugger nutzen
Also OllyDBG oder IDA
Requi is offline  
Old 05/11/2013, 22:47   #2


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,105
Received Thanks: 681
Nein, das ist soweit ich weiß nicht möglich. Mir ist lediglich das IDA-Plugin "HexRays Decompiler" bekannt, womit sich (Pseudo-)C-Code aus den ASM-Codes erzeugen lässt. Mehr geht aber auch nicht.
Hoffe, dass das hilfreich war, auch wenn es vielleicht nicht das ist, was du erwartet hast.
Mit freundlichen Grüßen
Jeoni
Jeoni is offline  
Old 05/11/2013, 22:49   #3


 
Requi's Avatar
 
elite*gold: 3570
The Black Market: 244/0/0
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
Wieso ist es bei einer nativen Sprache nicht so einfach wie bei einer Objekt orientierten wie C# oder Java?
Requi is offline  
Old 05/11/2013, 22:53   #4


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,105
Received Thanks: 681
Das hat nichts mit der Objektorientierung zu tun, sondern mit dem System von Java und .net (C#, VB.net, F#). Beide Sprachen (ich zähle .net jetzt mal als EINE Sprache) kompilieren nicht direkt in ASM-Codes, sondern in Bytecode, der zur Laufzeit interpretiert wird. Dieser ist in den Dateien enthalten und dieser kann wesentlich besser in für den Menschen lesbaren Code (.net, Java) übersetzt werden, als ASM. C/C++ und andere native Sprachen kompilieren direkt in ASM und das ist eben nicht rückübersetzbar (zu allgemein?).
Jeoni is offline  
Old 05/11/2013, 22:56   #5


 
Requi's Avatar
 
elite*gold: 3570
The Black Market: 244/0/0
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
Und von ASM kann man das nicht einfach "übersetzen" lassen?

Also like OllyDBG den ASM Code sehen und der wird dann einfach übersetzt.
Requi is offline  
Old 05/11/2013, 22:59   #6


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,105
Received Thanks: 681
Man kann zwar den ASM Code (der steht ja quasi direkt in den Anwendungen drinne) sehen, aber eben nicht rückübersetzen. Das liegt vermutlich daran, dass die ASM-Codes zu kleinschrittig, zu allgemein sind.
Sollte das irgendwann doch möglich sein, so wird dieser "Decompiler" Compiler-Abhängig sein. Jeder Compiler übersetzt die Anweisungen etwas anders in ASM-Codes und anhand dieser Übersetzungsweise könnte man _VIELLEICHT_ einen Decompiler schreiben (der ist dann aber logischerweise nur für diesen einen Compiler gültig). Allgemein denke ich nicht, dass es möglich ist, ASM-Codes zurück in eine Hochsprache zu übersetzen.
Allgemein in eine tiefere Sprache (näher an den ASM-Codes) zu übersetzen (z.B. C), funktioniert aber schon ziemlich gut (HexRays).
Jeoni is offline  
Old 05/11/2013, 23:00   #7


 
Requi's Avatar
 
elite*gold: 3570
The Black Market: 244/0/0
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
Dann danke ich dir mal für die Antworten. Schicke mal nen closerequest raus.
Requi is offline  
Old 05/11/2013, 23:22   #8
 
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
Jeoni hats ja schon ganz gut erklärt.
Das Problem liegt hier darin das durch die Compilierung Informationen unwiederbringlich verloren gehen. Hexray ist ganz ordentlich wenn es darum geht den Code als Psydo-C dazustellen, aber denk das ist auch so ziemlich das Maximum was man rausholen kann und dieser Code ist auch nur sehr Bedingt dem UrsprungsCode ähnlich.

@Jeoni
Ja, hast Recht man kann daran wie der jeweilige Asm Code aussieht auf den Compilere und auch die eingestellten Optimierungen schliessen, allerdings wird auch das nicht helfen wenn es um eine Decompilierung geht, die Informationen sind verloren und einfach nichtmehr da, also kann man sie auchnicht wieder hervorholen
Oder meinteste was anderes ?
dready is offline  
Thanks
1 User
Old 05/11/2013, 23:31   #9


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,105
Received Thanks: 681
@dready
Die verloren gegangenen Informationen beziehen sich hier aber 'nur' auf Variablen- und Funktionsnamen, oder (was geht sonst noch so beim Kompilieren verloren)? Dieser Teil ist ohne Zweifel vorhanden, aber den meinte ich nicht.
Der 'wichtige' Teil, also wie wann was ausgeführt wird, muss ja erhalten geblieben sein. Was ich meinte ist aber, dass dieser 'wichtige' Teil in ASM-Code so allgemein und kleinschrittig ist, dass er sich eben nicht zurückübersetzen lässt. Ich kann das nicht genau erklären. Vielleicht wie, als ob die ASM-Codes stark reduzierter Text sind, den man detallierter haben will (wieder in eine Hochsprache). Doofe Metapher, aber mehr fällt mir nicht ein.
Mit freundlichen Grüßen
Jeoni

P.S. @TE: Tut mir Leid, dass ich nichts weiter zu deiner Eingangsfrage beitragen kann, aber vielleicht können du oder andere (ggf später) auch Informationen aus dieser Diskussion ziehen. Keine Ahnung
Jeoni is offline  
Old 05/11/2013, 23:46   #10
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Quote:
Die verloren gegangenen Informationen beziehen sich hier aber 'nur' auf Variablen- und Funktionsnamen, oder (was geht sonst noch so beim Kompilieren verloren)? Dieser Teil ist ohne Zweifel vorhanden, aber den meinte ich nicht.
Nein, die verlorenen gegangen Informationen beziehen sich auf wesentlich mehr. Nehmen wir mal C++ als Beispiel: Hier ist der Standard so allgemein formuliert, dass es dem Compiler möglich ist, radikale Optimierungen vorzunehmen. Der Compiler kann sogar komplette Klassen wegoptimieren. Denk auch mal an das inlinen von Funktionen, auch da geht ne Menge an Informationen verloren. Anderes Beispiel sind Templates, die ja auch schon direkt zur Compilezeit aufgelöst werden.
Schlüsselbein is offline  
Thanks
2 Users
Old 05/11/2013, 23:54   #11
 
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
@Jeoni, jub alle Variablen und Funktionnamen sind erstmal weg, Komments logischerweise auch, aber der Wirklich schlimme Verlust kommt durch die Optimierung,

Bsp.

Du rufst eine Routine in einer Hochsprache an Verschiedenen Punkten auf.
Der Compilere jedoch findet das es sinnvoller ist diese zu inlinen und packt den Code also direkt an beiden Stellen dazu. Die nächste Optimierung verbackt den Code mit der Routine in der er liegt um ihn schneller zu machen.

Jetzt hast du im prinzip eine Routine im HighlevelCode die zu 2 Relativ verschiedenen Codeteilen führte.

Dazu kommen so Probleme wie z.b. Schleifen, ob While, For oder was auch immer, ist in Asm am ende prinzipiel erstmal das selbe. Die Information ist verloren und kann nur sehr bedingt wiederhergestellt werden. Dafür braucht man etwas mehr denkleistung +g+ Aka, den Armen Tropf der davorsitzt und sich überlegt was der Programmierer wohl sinnvollerweise genommen haben wird.

Über Verbesserungen würd ich mich freuen, ist ne weile her und bin mir nicht bei allem 100% sicher

Edit: unnnnd Schlüsselbein war wiedermal schneller +g+
dready is offline  
Thanks
1 User
Old 05/11/2013, 23:56   #12
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Mal ein Beispiel:
Code:
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

struct Person
{
	Person(const std::string& pName) : mName(pName) { }
	std::string mName;
};

struct PersonFindPred
{
	explicit PersonFindPred(const std::string& pName) : mName(pName) {}
	bool operator()(const Person& pPerson)
	{
		return pPerson.mName == mName;
	}
	std::string mName;
};

int main()
{
	std::vector<Person> vec;
	vec.emplace_back("Peter");
	vec.emplace_back("Hans");
	vec.emplace_back("Sascha");
	vec.emplace_back("Jürgen");

	auto it = std::find_if(vec.begin(), vec.end(), PersonFindPred("Sascha"));
	if(it != vec.end())
	{
		std::cout << "Found " << it->mName << std::endl;
	}
}
Schau dir hier mal vom Release Build den erzeugten Code an. Ich bin mir sicher, dass dieser nichtmehr viel mit dem ursprünglichen C++-Code gemein haben wird.

Quote:
Über Verbesserungen würd ich mich freuen, ist ne weile her und bin mir nicht bei allem 100% sicher
Korrekt soweit und danke für die Ergänzung.
Schlüsselbein is offline  
Thanks
1 User
Old 05/12/2013, 00:00   #13


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,105
Received Thanks: 681
Danke euch beiden. Daran hatte ich gar nicht gedacht, ist aber völlig logisch.
Demnach ist das vollständige Dekompilieren in eine Hochsprache natürlich nicht möglich bzw nur unter Einsatz von viel Kreativität oder Ausprobieren.
Jeoni is offline  
Old 05/12/2013, 23:27   #14


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,909
Received Thanks: 25,409
Noch als Ergänzung:
Virtuelle Sprachen wie Java oder .NET sind deshalb so einfach zu dekompilieren, weil in den Binaries sehr viele Highlevel-Informationen vorhanden bleiben, dazu zählen die Strukturen von Klassen und afaik sogar die Namen, was den Code um Einiges lesbarer macht.

#closed
MrSm!th is offline  
Thanks
2 Users
Closed Thread


Similar Threads Similar Threads
Decompiling pyc files.
01/14/2013 - Metin2 Private Server - 3 Replies
Hey. You know how to decode compiled py? (pyc -> py). I searched in google but I hadn't it decompile. Sorry for my bad English. Thanks! :)
Help Decompiling .Dll files with IDA PRO 5.5?
07/13/2011 - Mabinogi - 20 Replies
Hello I am fairly new to this, and I've been trying my hardest to learn the language of the files, but sadly have hit a wall. So All I've been doing really is just looking inside them unsure of what to do exactly. With that said i'd appreciate some guidance from anyone who is experienced with this. My goal is to: De-compile and change Hackshield's v3pro32s.dll and any other dll that should be changed, so that they can't detect or find anything suspicious in my pc. Also I'm not sure but, is...
Progress on Map Decompiling
03/31/2010 - EO PServer Hosting - 25 Replies
ok So I have been having some fun playing with the map files from time to time and I have the DMap file down pat now. Although the app I made to turn them into a text file version runs EXTREMELY slow. To the point it will stop if the file is too big. Wont take much to make a new program but I am not going to be doing that until I have a small custom map made. Here are some Text File conversions. Prison Map ...
Decompiling ScriptProcess.dll
04/16/2009 - Dekaron Private Server - 8 Replies
Im trying to decompile the dll using boomerang and it keeps hanging during the decompile process. Any ideas anyone?



All times are GMT +1. The time now is 03:28.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.