Laden...

MSIL Code aus einer EXE bekommen

Erstellt von FlowPX vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.535 Views
F
FlowPX Themenstarter:in
33 Beiträge seit 2007
vor 15 Jahren
MSIL Code aus einer EXE bekommen

Hallo Leute,
bin gerade an ein sehr interessantes Projekt.
Doch ich hab ein Problem. Ich möchte eine C# compilierte file öffnen... so das ich den MSIL code sehen kann... Es soll kein vollständiger Decompiler sein... das brauch ich nicht. Brauche nur ne Idee wie ich was lesbares aus der Exe datei bekomme ^^

Würde mich über jeden ansatz freuen... solange mir keiner ein fertiges Programm andrehen möchte... außer es ist OpenSource 😉

mfg.
FlowPX

799 Beiträge seit 2007
vor 15 Jahren

Reflector!

Einfach IL anstatt C# auswählen.

As a man thinketh in his heart, so he is.

  • Jun Fan
    Es gibt nichts Gutes, außer man tut es.
  • Erich Kästner
    Krawutzi-Kaputzi
  • Kasperl
S
8.746 Beiträge seit 2005
vor 15 Jahren

ildasm.exe

5.742 Beiträge seit 2007
vor 15 Jahren

Hallo FlowPX,

solange mir keiner ein fertiges Programm andrehen möchte... außer es ist OpenSource 😉

Reflector!

Auch wenn der Reflektor kein OpenSource ist, ist er IMHO doch ein "Must-Have" für jeden .Net Entwickler.
Im Moment ist er jedenfalls noch kostenlos (und funktional einfach genial) - siehe hierzu auch The Future of .NET Reflector .

F
FlowPX Themenstarter:in
33 Beiträge seit 2007
vor 15 Jahren

Danke für die Antworten ^^
Mir geht es dadrum das ich den MSIL code aus einer Dateilesen muss... und darauf dann reagieren kann... das Programm das den MSIL code ausliest ist in Perl oder PHP geschrieben damit es unter Unix läuft... Daher das problem das ich keine Windows Anwendungen starten kann. Daher ist es wichtig zu wissen wie ein kleine MSIL Decompilier funktioniert.

Hmm... ich glaube das ist zu schwer^^ Also ich denke mal da werden mir wohl nur ein paar Interpreter, Decompiler Freaks weiterhelfen können ^^

mfg.
FlowPX

O
778 Beiträge seit 2007
vor 15 Jahren

Naja, wenn du dich durch die Klassen im Namensraum System.Reflection durchhangelst, dann hat die Klasse MethodBody heißt die glaub' ich eine Methode, die den IL-Code als ByteArray zurückgibt.

Testcode zum auslesen des ILs für die GetType-Methode

typeof(object).GetType.GetMethod("GetType").GetMethodBody.GetILAsByteArray()

Ich hab Mono nie benutzt, aber da sollten die Klassen ähnlich sein und Mono sollte in der Lage sein beliebige CLR-Assemblies einzulesen.

Ja und dann darfst du dich durch die Dokumentation von IL arbeiten und versuchen aus diesem ByteArray schlau zu werden.🙂

5.658 Beiträge seit 2006
vor 15 Jahren

Man kann sich ja den Reflector im Reflector anschauen 🙂

Aber das nützt dir ja nix, weil du ja mit PHP programmierst...also du willst einen .NET-Disassembler in PHP coden? Echt?

Weeks of programming can save you hours of planning

3.825 Beiträge seit 2006
vor 15 Jahren

Du kannst .NET Assymblies auch unter Linux starten, mit Mono, wenn Dir das was nützt.

Schau hier : ADO.NET mit MySql auf Mono klappt nicht (Am Ende)

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

Gelöschter Account
vor 15 Jahren

Man kann sich ja den Reflector im Reflector anschauen

na da bin ich mal gespannt wie du das hinbekommst. lass mich mal raten: du hast es noch nie probiert?

@FlowPX
was genau hast du denn vor? musst du msil code parsen? warum?

O
778 Beiträge seit 2007
vor 15 Jahren

@JAck30lena:
Was ist denn daran schwer? File|Open 🙂 wie auch sonst?
Zumindest meine Version (5.1.1.0) kann man ohne weiteres die exe kopieren und mit einer ausgeführten exe die andere reflektieren. Man muss erstmal suchen, bis man die Klassen gefunden hat (zwei von drei Namensräumen nur mit Schnittstellen und Enums), aber dann...

3.511 Beiträge seit 2005
vor 15 Jahren

Die bisschen fetzen Code, die einigermaßen sichtbar sind, bringen ein da nicht weiter 😉. Ich habe das Teil mir mal mehrere Stunden angeschaut, und bin in keinster weise schlau draus geworden. Und bei den extrem vielen goto Anweisungen, dreht man eh schnell durch. Wobei die 100%ig durch den Obfuscator kommen...

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo FlowPX,

eine .NET Assembly und eine .NET Exe sind ähnlich aufgebaut. Es gibt einen .NET-Header in dem die Assemblyinformationen enthalten sind. Ab einer bestimmten Stelle ist dann meiner Meinung nach auch dann direkt der IL Code enthalten.

Info-Links:
Powerpoint-Folie: FU Berlin - Allgemeiner Background Assembly
vuscode Blog - Genauer Aufbau .NET Assembly
Codeproject - Assembly Viewer

Grüße
Norman-Timo

Edit: Hinweis auf Powerpointfolie eingefügt

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

5.658 Beiträge seit 2006
vor 15 Jahren

Man kann sich ja den Reflector im Reflector anschauen

na da bin ich mal gespannt wie du das hinbekommst. lass mich mal raten: du hast es noch nie probiert?

Doch. Gerade eben 😉
Ich hatte es nicht ernst gemeint, als ich es geschrieben habe, deswegen der Smily. Hat mich bisher einfach noch nicht interessiert. Der Code ist allerdings mit dem Obfuskator ähm...wie sagt man statt obfuskiert...worden. Dort steht dann if (4 < (4 - 2)) goto Label_0001;

*Hehe*

Weeks of programming can save you hours of planning

799 Beiträge seit 2007
vor 15 Jahren

[...]das Programm das den MSIL code ausliest ist in Perl oder PHP geschrieben damit es unter Unix läuft[...]

Falls das Problem noch aktuell ist hier noch ein Tipp: Wenn das Programm unter Unix laufen soll, kannst du vollkommen auf Mono setzen. Dort existiert auch ein Haus eigenes Pendant zu Reflection, genannt Mono.Cecil.

Meines Wissens ist es sogar mächtiger als die Reflection Klasse des MS .Net Frameworks.

As a man thinketh in his heart, so he is.

  • Jun Fan
    Es gibt nichts Gutes, außer man tut es.
  • Erich Kästner
    Krawutzi-Kaputzi
  • Kasperl