logo
 
  1. Erfahrungen von Bludau Media als Blog >
  2. Blog Über IT Security Erfahrungen | Pentesting, Beratung, Dienstleistung >
  3. ILSPY .NET Decompiler für C# und VB.NET

EnglishFrenchGermanItalianPortugueseRussianSpanish

ILSPY .NET Decompiler für C# und VB.NET

Von jbludau vom

Hallo liebe Leser,
heute möchte ich euch ein bis heute aktives Projekt eines .NET Decompilers vorstellen (Juni 2011 - April 2019). Dieser Decompiler kann mit *.EXE und *.DLL Dateien von .NET C# (CSharp) und VB.NET umgehen und lesbaren Quellcode generieren.

Ein Dekompilierer ist ein Computerprogramm, das aus Maschinen- oder Objektcode für den Menschen wieder lesbaren Quelltext in einer Hochsprache erzeugt. Er versucht, den Vorgang des Kompilierens umzukehren.

.NET Decompiler für VB.NET und C#

n dem Beispiel auf dem Foto (§ 202c freundliches) sehen wir die MySQL.Connector für .NET. Es extrahiert die Kompletten Funktionsnamen des Programms oder der Bibliothek und zeigt dessen Quellcode an. Ein super .NET Decompiler der auch die Ursprungsform IL (Intermediate Language). Common Intermediate Language (CIL) (teilweise auch nur Intermediate Language (IL)) ist eine Zwischensprache, in die alle Programme der Common Language Infrastructure übersetzt werden. CIL ist eine objektorientierte Assemblersprache und ist vollständig stackbasiert. 

Auf dem Zielcomputer wird die CIL von einem Laufzeitsystem (Virtual Execution System) in systemeigenen Programmcode übersetzt, um in CIL vorliegende Programme ausführen zu können.
CIL ist in frühen Entwicklungsphasen von .NET als Microsoft Intermediate Language (MSIL) bezeichnet worden, mit der Standardisierung der Common Language Infrastructure ist diese Bezeichnung aber verworfen worden.
Bei der Kompilierung von Quellcode aus .NET-Sprachen wird nicht direkt systemeigener Programmcode erzeugt, sondern in einem ersten Schritt zunächst CIL-Code. In CIL werden die Programmbefehle als eine Folge von Bytewerten (teilweise auch mehr als ein Byte) angegeben. Dieser Code wird auf dem Ausführungsrechner in einem Laufzeitsystem zu nativem Maschinencode übersetzt (Just in time (JIT) Kompilierung) und ausgeführt.
Während der Übersetzung werden auch die Sicherheit und die Korrektheit des Codes (Manipulation) überprüft.


Was kann der ILSpy .NET Decompiler? (Juni 2011)
Es unterstützt das komplette Microsoft .NET Framework also auch VB und nicht nur C#, aber ist ja auch verständlich, weil die beiden Sprachen nun mal CIL sind. Es kann zwischen einer C# Ansicht und einer detaillierteren IL Ansicht gewechselt werden. Elemente werden Gruppiert und können bequem über ein "+" / "-" Zeichen aufgeklappt und zugeklappt werden. Der Disassembler unterstützt das Suchen von Funktionsnamen. ILSpy lässt sich erweitern durch Plugins. Beim erneuten öffnen zeigt euch das Programm die letzte Position im Baum an, was ich sehr praktisch finde. Achja importiert man eine *.EXE Datei welche weitere .NET Bibliotheken benutzt werden diese mit importiert und das ganze bleibt auch bei einem erneuten Programmstart erhalten. Bei bedarf können einzelne Teile über Rechte Maustaste entfernt werden. 

Der ILSPY Decompiler und Serial-Fishing

Diese können von Lizenznummern-Cracks berechnet werden oder aus dem Speicher abgelesen werden („Serial fishing“), das wäre bei Disassembler der Fall mit einem Decompiler habt ihr es einfacher und könnt direkt z.B. ein "magic Passwort / Hash" sehen und decrypten (gab in Vergangenheit und Zukunft) immer wieder Fälle wo diese "magic passwords" aufgedeckt wurden und die gerade Sicherheit von Hardware schwer in Mitleidenschaft ziehen können, weil ein komplexes Firmware-Update gebraucht wird, wenn der Hersteller überhaupt bereit ist ein Patch zu erstellen.
Wer kennt noch die "magic passwords" von BIOS der frühen 2000er? z.B. "LKWPETER", damit konnte man wirklich jedes BIOS Passwort (manuell eingegeben umgehen, vielmehr aushebeln).
Hatte damals auch Zeit und Spaß daran kleinere Software zu untersuchen und in Schulen mein Unwesen zu treiben..
Aber eher mit Disassembler "Ein Disassembler ist ein Computerprogramm, das kodierte Maschinensprache eines ausführbaren Programmes in eine für Menschen lesbarere Assemblersprache umwandelt. Seine Funktionalität ist der eines Assemblers entgegengesetzt"

Security Code Review - Anwendungsfall (Juni 2011)
Ein Anwendungszenario ist zum Beispiel die Überprüfung des eigenen Quellcodes ob dort Konstanten angegeben wurden, man stelle sich statische Lizenzschlüssel vor, also nur einen für das komplette Programm der nicht generiert wird. Gleiches gilt für Benutzernamen und Passwort zum Beispiel Standardwerte, welche bei der Entwicklung vorhanden waren. Der SAMSUNG DATA MANAGEMENT SERVER SQLI besitzt z.B. ein Defaulwert root und ein Kennwort was ich hier nicht schreibe, ihr könnt euch einen guten Artikel zu dem Thema ansehen

Weitere Informationen und Download von ILSpy Decompiler für VB.NET und C# findet ihr auf Github 

Rechtliche Lage zu Decompilern,"Patchen","Cracks" in Deutschland und International

Quelle: https://de.wikipedia.org/wiki/Crack_(Software)#Rechtliche_Lage
Die meisten kommerziellen Applikationen untersagen in ihren Lizenzbedingungen jegliche Modifikationen der Software oder sogar schon den Vorgang des Disassemblierens. In vielen Ländern existieren Gesetze, die definieren, inwieweit eine Modifikation eines Binärprogramms erlaubt ist. In Deutschland ist das Modifizieren eines Binärprogramms somit grundsätzlich erlaubt, solange die ursprüngliche Funktionalität des Programms nicht beeinträchtigt wird. Zusätzliche Funktionen dürfen dabei alleine zum Zwecke der Herstellung von Kompatibilität zu eigenen Programmen implementiert werden. Ein Patch darf dabei nur in Form eines Programms verbreitet werden, das die Originaldatei nach Vorgaben verändert, jedoch nicht in Form einer modifizierten Kopie der Originaldatei. Das Recht, ein Programm zum Zwecke der Herstellung von Kompatibilität zu verändern, ist auf internationaler Ebene nicht selbstverständlich. Das Untersagen jeglicher Modifikationen in den Lizenzbedingungen hat jedoch in den seltensten Fällen rechtswirksame Konsequenzen, da dies u. a. auch den Vorgang des Entfernens eines Computervirus durch Antivirenprogramme in Frage stellt.

Da die rechtliche Lage häufig unklar ist, was das Entfernen von einem Kopierschutz betrifft, verwenden manche kommerzielle Applikationen einen verschlüsselten oder komprimierten Binärcode, wodurch die Daten gemäß Vorgaben in ausführbaren Maschinencode konvertiert werden müssen, bevor sie vom Computer interpretierbar sind. Da die Programme jedoch dem Rechner „verraten“ müssen, wie die integrierten Daten zu konvertieren sind, ist es auch für Cracker nachvollziehbar, wie sich der Code in einen interpretierbaren Zustand konvertieren lässt. Die Software-Industrie implementiert solche Verfahren, um es einerseits den Crackern zu erschweren, das Programm zu interpretieren, jedoch auch, um die Möglichkeit zu unterbinden, ein Patch-Programm zur Modifikation des Original-Programms zu veröffentlichen, da es so nicht mehr möglich ist, das Programm durch das Verändern einzelner Bytes zu modifizieren, und als einzige Möglichkeit die Verbreitung einer vollständigen modifizierten Originaldatei verbleibt. Dies ist urheberrechtlich meist eindeutig untersagt.

Quelle: Juni 2011 (kid2elite, von mir) | Reviewed April 2019.