Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Jade.NET (C# - Decompiler)
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

Themenstarter:

Jade.NET (C# - Decompiler)

beantworten | zitieren | melden

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
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Floste am .
Attachments
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

Themenstarter:

beantworten | zitieren | melden

Screenshot
Attachments
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers

Moderationshinweis von herbivore (28.11.2011 - 09:53:04):

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.

TBR
myCSharp.de - Member



Dabei seit:
Beiträge: 159

beantworten | zitieren | melden

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 ;)
private Nachricht | Beiträge des Benutzers
TheBrainiac
myCSharp.de - Member

Avatar #avatar-3152.png


Dabei seit:
Beiträge: 832
Herkunft: /dev/null

beantworten | zitieren | melden

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"
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

Themenstarter:

beantworten | zitieren | melden

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
Zitat
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^^
Zitat
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!
private Nachricht | Beiträge des Benutzers
xxxprod
myCSharp.de - Experte

Avatar #avatar-2329.gif


Dabei seit:
Beiträge: 1420
Herkunft: Österreich\Wien

beantworten | zitieren | melden

Wow tolles Tool!
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

Themenstarter:

beantworten | zitieren | melden

Zitat
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: (0==0) ->true, !(a==b) -> 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)^^
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Floste am .
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
xxxprod
myCSharp.de - Experte

Avatar #avatar-2329.gif


Dabei seit:
Beiträge: 1420
Herkunft: Österreich\Wien

beantworten | zitieren | melden

Der richtige ToolTip der Lupe fehlt noch. (Essentiell) :-P
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von xxxprod am .
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Floste am .
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
jreusch
myCSharp.de - Member

Avatar #avatar-3346.jpg


Dabei seit:
Beiträge: 303

beantworten | zitieren | melden

Zitat von dN!3L
Schick, schick...!
Ist auch geplant, den Quellcode zu veröffentlichen?

Nutz doch Jade.NET um Jade.NET zu decompilieren :-)
private Nachricht | Beiträge des Benutzers
ujr
myCSharp.de - Experte



Dabei seit:
Beiträge: 1770

beantworten | zitieren | melden

Zitat von dN!3L
Ist auch geplant, den Quellcode zu veröffentlichen?

Oder eine Zusammenarbeit mit dem SharpDevelop-Team an ILSpy?
private Nachricht | Beiträge des Benutzers
MagicAndre1981
myCSharp.de - Member

Avatar #avatar-2623.jpg


Dabei seit:
Beiträge: 913
Herkunft: Nordhausen

beantworten | zitieren | melden

Zitat von ujr
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.
private Nachricht | Beiträge des Benutzers
Somakia
myCSharp.de - Member



Dabei seit:
Beiträge: 288
Herkunft: Hessen

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
marco.b
myCSharp.de - Member



Dabei seit:
Beiträge: 310

beantworten | zitieren | melden

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 :)
private Nachricht | Beiträge des Benutzers