2017-07-24 6 views
4

Ich habe versucht, alle importierten API-Funktionsaufrufe für eine Reihe von PE-Dateien zu dumpen.De-Mangling Exportfunktionen in Python

Ich habe festgestellt, dass die Mehrheit der PE-Dateien eine Reihe von "seltsam" aussehende Importfunktionen haben. Dies erhöht meine Anzahl an eindeutigen Funktionsaufrufen stark, obwohl ich denke, dass viele von ihnen die gleichen Funktionsaufrufe sind.

Nach weiteren Recherchen fand ich heraus, dass dies auf Namens-Mangling zurückzuführen ist, und ich bin derzeit auf der Suche nach einer Lösung, um die ursprünglichen Funktionsnamen zu erhalten (in dem Sinne, dass es ein bisschen lesbarer ist und vielleicht dies könnte) reduzieren Sie meine Anzahl von eindeutigen Funktionsaufrufen) in Python wenn es möglich ist, anstatt in C++.

Einige Beispiele von dem, was ich bekomme:

[email protected][email protected][email protected]@[email protected]@@[email protected]@MAEHXZ 
[email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected] 
[email protected]@[email protected]@Z 
[email protected]@[email protected]@Z 
[email protected]@[email protected]@@Z 
[email protected]@[email protected] 

gegen

RegDeleteValueW 
RegEnumKeyExW 
RegCloseKey 
RegQueryValueExW 
RegSetValueExW 
+0

Mögliches Duplikat von [Wie exmangle exportierte Symbole aus C++ in dynamischen Bibliotheken in XCode auf OSX] (https://stackoverflow.com/questions/4506487/how-to-unmangle-exported-symbols-from-c-in -dynamic-libraries-in-xcode-on-osx) –

+0

oder [funktion zu mangle/demangle funktionen] (https://stackoverflow.com/questions/4939636/function-to-mangle-demangle-functions) –

Antwort

2

Demangling C++ Symbole sind in der Regel nicht einfach. Es gibt verschiedene "Stile" und andere Komplexitäten.

Eine Option ist die Verwendung des Befehlszeilentools. Unter Windows ist es undname, auf * nix können Sie nm, demangle, c++filt und andere Dienstprogramme verwenden.

Eine andere Option ist es, zu versuchen, Compiler-Code zu verwenden, der das Entmangeln implementiert. LLVM zum Beispiel hat Itanium ABI demangler eingebaut. So sollte es auch für GCC sein.

+0

Danke für die Antwort. Ich hatte damals eine Frage, da Sie über verschiedene Stile sprechen. Sagen wir die Beispiele, die ich gab (die Ausnahmen eingeschlossen). Werden diese alle die gleichen Funktionsnamen haben? Weil Sie sehen, dass meine Absicht ist, nur die Funktionsnamen zu extrahieren, muss ich nicht über die Argumente oder deren Typen Bescheid wissen. Alles, was ich über die Definition wissen muss, ist der Funktionsname, also was ist der beste Weg, um genau das zu extrahieren Funktionsnamen aus diesen verstümmelten Namen? – EidolonMK

+0

Wie möchten Sie die Funktion "name" verwenden, die Sie extrahiert haben? Das Problem ist, dass das ganze Kauderwelsch ** ein Name ist. Funktionen wie 'RegDeleteValueW' sehen so gut aus, weil sie" C "sind (unter Windows ist das komplexer, aber das ist irrelevant). Also, nur 'setbuf' statt' setbuf @ $ basic_streambuf @ DU? $ Char_traits @ D @ std @@@ std @@ MAEPAV12 @ PAD_J @ Z' würde Ihnen nicht helfen. – arrowd

+0

Ich versuche, eine einzigartige Reihe von Funktionsaufrufen zu erstellen, die in meinem PE-Datei-Set verwendet wurden. Dadurch entfernen Sie die Duplikatfunktion "Namen" über alle meine PE-Dateien. Also, wenn sie alle Funktionen mit dem gleichen aufrufen Name jedoch übergibt verschiedene Argumente (wodurch es einen anderen Importfunktionsnamen hat) ... ich werde nicht unterschiedliche eindeutige Funktionsaufrufe für jeden haben, sondern stattdessen einen einzelnen mit dem Funktionsnamen – EidolonMK