Laden...

Jade.NET (C# - Decompiler)

Erstellt von Floste vor 13 Jahren Letzter Beitrag vor 11 Jahren 13.845 Views
Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 13 Jahren
Jade.NET (C# - Decompiler)

Ich hab mich mal an einem Decompiler versucht. Das bisherige Resultat ist im Anhang.

Funktionsweise:
Grob gesagt wird erstmal "irgendeine" Übersetzung gesucht und diese dann immer mehr aufgehübscht.
Zuerst wird mit Mono.Cecil den IL-code eingelesen. Dann wird dieser in eine Zwischendarstelung überführt und gotos durch Referenzen und Vorgänge auf dem Stack durch Hilfsvariablen (nicht zu knapp) ersetzt. Dann werden Kostrukte wie ifs und trys gesucht. Danach werden soviele Hilfsvariablen wie möglich entfernt und kleinere verbesserungen durchgeführt. Am Schluss wird das ganze dann in einem Rutsch als Code ausgegeben.

Dieses Vorgehen hat den Vorteil, dass es auchnoch Code übersetzen kann, der sich so in c# garnicht schreiben lässt beziehungsweise so obfuskiert ist, dass Reflector einfach aufgibt, allerdings bleiben in solchen Fällen dann entsprechend viele Hilfsvariablen stehen, was die Sache nichtgrade übersichtlich macht.

Code wird oft etwas freier/kreativer übersetzt und ich habe vieles nochnicht implementiert ( ? , ?? ,++, +=,-=, etc). Das soll nicht heißen, dass diese Ausdrücke garnicht oder falsch übersetzt werden, sondern dass sie umständlicher als nötig geschrieben werden. (z.B. der ?-operator als if m it hilfsvariablen und ++ als einfache addition, oft mit hilfsvariable)

[Edit] 27.2.2011 Version aktualisiert

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 13 Jahren

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

Hinweis von herbivore vor 12 Jahren

Der Begriff "Jade" taucht auch in den Namen anderer Projekte im Netz auf, ohne dass hier zwangsläufig ein Bezug bestehen muss. Es wird sich vielmehr meistens um eine zufällige Gleichheit des Namensbestandteils "Jade" handeln.

T
154 Beiträge seit 2009
vor 13 Jahren

Respekt, das Ding ist echt sehr gelungen 😃

Was mir nach einem 5 Minuten Test als einziges aufgefallen ist und gefehlt hat:
Wenn man eine Klasse auswählt (keine Member davon), dass diese KOMPLETT dargestellt wird 😉

Aber ansonten echt Klasse Tool, gefällt mir irgendwie sogar mehr als Reflector... 😃
Weiter machen 😉

795 Beiträge seit 2006
vor 13 Jahren

Klasse Tool!

Nur etwas ist mir aufgefallen:*this ist bei dir kein Keyword. *Wenn man Felder im TreeView auswählt, werden die nicht im Code angezeigt. *Das springen mithilfe der Links im Code funktioniert nicht

Gefällt mir trotzdem sehr gut, das Tool!

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 13 Jahren

Hab etwas weiter gearbeitet:

-Klammern werden jetzt korrekt gesetzt
-Felder werden jetzt auch im Code angezeigt
-Suche nach Typen eingebaut (erst oben die Lupe, doppelklick auf gewünschten Eintrag)
-Bestimmte Kombinationen aus Schleifen und Ifs verursachen keine Endlosschleife im decompiler (aufhängen) mehr.
-Updater eingebaut

@TheBrainiac

this ist bei dir kein Keyword.

Ich führe es bisher als gewöhnliche Variable, is doch ned so schlimm, wenn es in schwarz statt blau steht^^

Das springen mithilfe der Links im Code funktioniert nicht

Bei mir schon. Ich wette bei dir kam ne Warnung wegen Javascript und du hast es deaktiviert 😭

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

1.378 Beiträge seit 2006
vor 13 Jahren

Wow tolles Tool!

Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 13 Jahren

Wow tolles Tool!

Danke^^

So, ich hab mal ein neues update (über den updater, einfach ein altes jade.exe starten) rausgehauen:

Update V 3:

  • Bedingte verknüpfungen (&& , ||)
  • Einfache logische Operationen werden gleich ausgeführt: (00) ->true, !(ab) -> a!=b, etc
    -Derartig sinnvole konstrukte wie if(false) werden wegoptimiert (mit diesem trick bringen viele obfuscatoren den .net Reflector aus dem tritt)
    -Viele kleine verbesserungen/bugfixes

[Edit 21.3.2011]
Update V 4:

  • Variablen werden automatisch benannt (besser als vorher)
  • Mehr unnötige Variablen werden entfernt -> der Code sieht teilweise deutlich klarer aus
  • Einen off-by-one beseitigt, der in try/catch/finally seltsame effekte erzielt hatte
  • Schleifenfindung leicht überarbeitet: Jetzt ist der Schleifenanfang deutlich öfter auch am Anfang, so ganz zufrieden bin ich noch nicht.
    -Setzen von Gotos leicht überarbeitet
    -this wird jetzt in blau statt schwarz angezeigt (wers braucht)^^

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

1.378 Beiträge seit 2006
vor 13 Jahren

Der richtige ToolTip der Lupe fehlt noch. (Essentiell) 😛

Floste Themenstarter:in
1.130 Beiträge seit 2007
vor 13 Jahren

Update 5 (1.0.0.5):
-Abbruchbedingung wird jetzt in den Schleifenkopf geschrieben, falls moeglich, statt des if(..)break;
-Arrayinitialisierungen aus Blobs
-Magic Numbers werden jetzt durch die entsprechenden Konstanten und im Falle von Enums auch Flags ersetzt.
-Constructoren von Delegaten werden jetzt besser angezeigt, falls moeglich. (Arbeite grade daran, dass es auch für generische Delegaten geht)
-Wenn möglich wird der Fragezeichen-Operator (cond?a:b) benutzt.
-Diverse Bugs behoben, sodass es keine Abstürtze mehr gibt beim komplettem Decompilieren von diversen Assemblies. (u.a. der Konkurrenz)

Ich hab mal ne Kommadozeilenversion erstellt, die komplette Assemblies auf die Platte dumpt. (Ich finde 1200 Methoden/sec für mscorlib kann sich sehen lassen.) Dieses Feature werde ich wahrscheinlich in die offizielle Gui-Version einbauen, in der nächsten Version.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

2.891 Beiträge seit 2004
vor 13 Jahren

Schick, schick...!
Ist auch geplant, den Quellcode zu veröffentlichen?

Was mir aufgefallen ist:*Der Updater wollte beim ersten Mal nicht so richtig. Es kam eine Meldung, dass er die aktuellen Dateien nicht ersetzen kann, weil sie gerade benutzt werden. Ich habe mehrmals "Retry" probiert und bin schließlich zu "Ignore" übergegangen. Danach war Jade viermal gestartet.
Nach dem zweiten Start ging's dann aber.

*Vielleicht könntest du die WebBrowser.ScriptErrorsSuppressed-Eigenschaft auf "true" stellen (bei mir sind Scriptfehler aufgetreten). *Warum nimmst du als Icons nicht die "originalen" aus der Visual Studio-Bildbibliothek? *Die Anzeige von Attributen wäre nicht schlecht.

Besten Gruß,
dN!3L

296 Beiträge seit 2007
vor 12 Jahren

Schick, schick...!
Ist auch geplant, den Quellcode zu veröffentlichen?

Nutz doch Jade.NET um Jade.NET zu decompilieren 😃

U
1.688 Beiträge seit 2007
vor 12 Jahren

Ist auch geplant, den Quellcode zu veröffentlichen?

Oder eine Zusammenarbeit mit dem SharpDevelop-Team an ILSpy?

906 Beiträge seit 2005
vor 12 Jahren

Oder eine Zusammenarbeit mit dem SharpDevelop-Team an ILSpy?

genau, schließe dich dem Team an und supporte ILSpy. So wird das Wissen gebundelt und so macht nicht jeder etwas eigenes.

S
269 Beiträge seit 2010
vor 12 Jahren

Hallo Floste,

ich würde mir noch eine Funktion wünschen, um ein decompiliertes Programm direkt als Projekt abzuspeichern... wäre das irgendwie (und irgendwann) mal möglich (oder ist es das sogar schon und ich find diese Funktionalität einfach net?)?

so far
Karill

M
303 Beiträge seit 2006
vor 11 Jahren

Nutze Jade.NET seit einigen Wochen intensiv bei meiner Arbeit. Klasse Tool.
Kriegt man die switch-Anweisungen noch schöner hin? Das ist in der 1.0.0.7 goto-Salat 😃