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
Einfach IL anstatt C# auswählen.
As a man thinketh in his heart, so he is.
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 .
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
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.🙂
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
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
@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...
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)
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!”
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
[...]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.