BigBasti's Blog About Me & my Digital Lifestyle

30Aug/090

.NET Entwicklung unter UNIX-basierenden Systemen

Seit längerem befindet sich das Projekt "Mono" in der Entwicklung und ist nun in der Version 2.4 verfügbar. Dank Mono wird .NET Plattformunabhängig und liefert das, was Microsoft schon längst hätte bringen sollen!

Mit MonoDevelop wird gleich auch eine sehr gute IDE zum Entwickeln mitgebracht! Diese läuft auf allen gängigen Systemen einschließlich Mac OS X. Da das ganze auch noch open Source ist, ist es auch kostenlos zu haben!

Durch dieses Projekt wird Linux natürlich sehr interessant für .NET Entwickler und wird in Zukunft definitiv dazu führen dass es viele Anwendungen für alle geben wird, so wie es jetzt mit Java ist!

Ist die IDE Erstmal eingerichtet erinnert diese erstmal stark an Netbeans oder Eclipse:

bildschirmfoto-2009-08-30-um-194735Bild 1: MonoDevelop in einem C# Projekt

Diese wird ebenfalls stetig weiter entwickelt und erinnert jetzt schon sehr an der Visual Studio aus dem Hause Microsoft!

Einen compiler bekommt man natürlich auch gleich mit geliefert! Den man zb auch über die Konsole aufrufen kann:

bildschirmfoto-2009-08-30-um-194838Bild 2: Das aus Bild 1 kompilierte & ausgeführte Projekt

Leider steht noch nicht das komplette .NET Framework, welches demnächst in der Version 4.0 erscheint verfügbar, sondern wird langsam stetig erweitert!

Wenn euer Interesse geweckt wurde und ihr das mal testen wollt, kann ich ein Video im MSDN empfehlen, welches die ersten Schritte sehr gut beschreibt und eine komplette kleine Anleitung liefert!

Ich werde demnächst das ganze mal auf dem Mac testen und gucken ob das ganze schon mit Java konkurrieren kann!

28Aug/0910

Java: iPhone Spiel “Flood-it!” in Java nachprogrammieren

Erst vor ein paar Wochen bin ich im Apple Appstore über das kleine Spiel Flood-it! gestolpert. Das Spiel ist simpel, kostenlos und macht sehr süchtig!

Ziel des Spiels ist es den ganzen Bildschirm mit eine Farbe zu füllen. Dazu hat man 22 Versuche! Dabei fängt man als das Viereck oben links an und übernimmt die anliegenden Felder indem man die Passende Farbe unten anklickt!

flood-it-for-iphone-for-1

Schon damals habe ich mir gedacht: Mensch, das könnte man doch ganz einfach nachprogrammieren.

Heute habe ich mir dann die Zeit genommen und das ganze mal umgesetzt.

Für die Umsetzung habe ich mich für Java entschieden. In Java kenne ich mich zwar nur sehr begrenzt aus, aber das Projekt ist natürlich perfekt zum üben und lernen!

Geschlagene sechs Stunden später ist eine spielbare Version entstanden, die zwar nicht den kompletten Featureumfang des Originals besitzt, aber das Spielprinzip ganz gut adoptiert!

Ich muss sagen dass es sehr viel Spaß gemacht hat dieses kleine Game zu "kopieren" und ich viel über Java dazulernen konnte! Und ich kann jedem auch nur empfehlen es selber zu versuchen ein Spiel, das einem gut gefällt nachzumachen.

Ich werde den Quelltext meiner Version hier veröffentlichen, falls es jemanden interessiert, und er auch mal versuchen will so ein Projekt zu realisieren und an einer stelle nicht weiterkommt kann er meinen Code gerne zum nachschlagen benutzen!

fillit

Ich habe versucht meinen Code sehr einach zu halten und im Sinne der Polymorphie zu gestalten. Da ich alles andere als ein Java-Experte bin, kann es natürlich auch sein, dass manche Codestellen auch viel einfacher und oder besser gestaltet werden konnten, und auch dass es noch Bugs gibt will ich auch nicht ausschließen!

Wenn jemand einen Bug findet, oder Verbesserungsvorschläge zum Code hat kann er diese gerne als Comment oder per Mail an mich senden!

Der Quelltext ist sehr simpel gehalten, es würde aber helfen wenn man folgendes schon mal gehört hat:

  • Rekursivität
  • Klassen & Vererbung
  • GUI - Programmierung
  • Event-Behandlung
  • Java Drawing Klassen
  • Grundkenntnisse OOP

Ich habe den Code natürlich auch kommentiert, aber wenn man mit den obigen Begriffen nichts anfangen kann sollte man sich erstmal dort einlesen.

28.09.09 UPDATE: Danke an Daniel, habe den Bug mal behoben!
31.09.09 UPDATE: Nun ist der letzte (bekannte) Bug behoben, das Spiel müsste nun "perfekt" laufen!

Download: Source Download: Binary (MAC/WIN/LINUX)

21Aug/093

VB: TreeView in XML speichern und zurück einlesen

Als eine kleine Ergänzung zu der "Ordnerstrukturen einlesen" Serie möchte ich hier eine Möglichkeit zeigen, wie man TreeViews als XML Dateien serialisieren kann.

TreeViews sind ja nichts anderes als Ordner-Bäume. Diese Struktur eignet sich natürlich sehr für XML. Das .NET Framework bietet hier einige sehr bequeme Möglichkeiten um XML Dateien zu erzeugen, zu bearbeiten und einzulesen!

Um das zu demonstrieren habe ich eine VB.NET Klasse angefertigt, die diese Aufgaben für uns übernimmt, also das Abspeichern einer TreeView in einer XML Datei und auch das einlesen eines XML-Baums in eine TreeView.

xmlparser

Die Klasseheißt XMLParser und bietet zur Zeit genau 2 Funktionen nämlich zum Exportiren und Importieren von TreeNodes.

Ihr könnt diese Klasse sehr einach in euer eigenes Projekt Importiren und gleich loslegen! Dazu einfach im Projektmappen-Explorer auf euer Projekt rechtsklicken und über "Hinzufügen"->"Klasse" die XMLParser Klasse hinzufügen.

Ich habe die Anwendung möglichst einfach gehalten, sodass alle Aufrufe maximal eine Zeile in Anspruch nehmen:

xmlparser2

Wie man sieht ist die Benutzung sehr einfach gehalten. Desweiteren kann man in dieser Version "nur" TreeNodes abspeichern, will man also eine Komplette TreeView abspeichern muss man mit eine Schleife alle Root-Nodes durchlaufen!

Natürlich können auch XML-Dateien eingelesen werden, die nicht vom XMLParser erzeugt wurden, wie zum Beispiel Config-Dateien oder "richtige" XML-Dateien!

Ich werde mit der Zeit die Funktionalität der Klasse erweitern, sodass auch ganze TreeViews gespeichert und eingelesen werden können. Und auch Merging (deu: Vereinigen) und Synchronisieren wird möglich sein!

Desweiteren werden ich weitere Überladungen einbauen, sodass die Funktionen weiterhin so übersichtlich sein werden!

Wenn ihr Interesse habt könnt ihr euch hier ein Demoprojekt inklusive der Klasse herunterladen.

Dieses Demoprojekt herunterladen: Download

14Aug/090

Kostenlose Microsoft Hotline für .NET Entwickler

Microsoft gibt sich schon immer viel Mühe damit seinen Entwicklern gut zu helfen. Sei es die riesige sehr gut aufgebaute MSDN Dokumentation oder die Zahllosen Entwicklungswerkzeuge und Umgebungen.

So bekommt man fast alle Werkzeuge wie das Microsoft Visual Studio Express Edition gratis, und als Schüler oder Student sogar die Proffesional Version!

120x240_2102Nun bin ich über die MSDN-Kontakt Seite gestolpert und war ziemlich überrascht, dass die Hotline eine 0800 Nummer ist und somit Gratis ist!

Die Hotline soll dem Anrufer Empfehlungen zu Interessanten Artikeln liefern und auch auf die richtigen Artikel im MSDN-Jungel verweisen, die zu den Fragen passen! Das ist enorm hilfreich und das weis jeder spätestens dann zu schätzen, wenn er was Spezielles auf der MSDN Seite finden wollte!

Weiterso Microsoft!

13Aug/091

Zusammenwohnen mit Google: Fluch oder Segen?

Was wäre wenn Google eine reale Person wäre? Und was wäre wenn ihr mit dieser Person zusammen wohnen würdet?

Diese Gedanken haben sich "The Big Honkin'" gemacht und haben das auch auf Video festgehalten!

Dabei sieht man schnell, dass alle Googles nützlichen Features dann doch etwas zu weit gehen, und dass nicht alle Menschen ihre persönlichen Informationen verbreiten möchten!

Besonders interessant und gut gemacht finde ich das Auftreten von Double Click, der Personen nahe Informationen schnell verarbeitet und in Geld verwandelt!

Etwas übertrieben aber durchaus realistisch sind auch die Szenen wo Google zu tief in die Privatsphäre eingreift und peinliche Bilder und Videos zeigt und nach einer Beschwerde dann vorschlägt die "Privacy Settings" zu ändern. Einfach herrlich!

Folge 1:

Folge 2:

Folge 3:

13Aug/090

Windows 7 APIs lernen mit dem Microsoft Training Kit & Code Pack

Seit nun ca 3 Tagen ist das Microsoft Windows 7 Training Kit da und ich habe mir heute mal die Zeit genommen da erwas reinzuschauen!

Wem das nichts sagt, das Training Kit ist ein Paket mit Beispielen und Erklärungen, das Microsoft zu jedem neuen Produkt herausgibt. Dort finden sich sehr viele ausführliche Beispiele für die neuen Funktionen des Systems und die neuen APIs werden vorgestellt.

bild-114Bild 1: So sieht die Startseite des Training Kits aus

In dieser Ausgabe geht es vorallem um diese Themen:

  • Taskbar
  • Libraries
  • Multi Touch
  • Sensors and Location
  • Ribbon
  • Trigger Start Services
  • Instrumentation and ETW
  • Application Compatability
  • Version Checking
  • UAC Data Redirection
  • Session 0 Isolation
  • Installer Detection
  • User Interface Privilege Isolation
  • High DPI

Ich konnte leider noch nichts testen, da ich Windows 7 nicht installiert habe, aber nach ein wenig Durchfliegen kann ich es nur empfehlen. Für alle, die Aktuell bleiben wollen ist es sowieso ein Muss!

Passend dazu gibts auch das neue Code Pack aus der MSDN Code Gallery. Dieses besteht ebenfalls aus vielen Beispielen, von denen auch viele 2 Sprachig sind!

Dieses Code Pack beschäftigt sich mit:

  • Windows 7 Taskbar Jump Lists, Icon Overlay, Progress Bar, Tabbed Thumbnails, and Thumbnail Toolbars.
  • Windows 7 Libraries, Known Folders, non-file system containers.
  • Windows Shell Search API support, a hierarchy of Shell Namespace entities, and Drag and Drop functionality for Shell Objects.
  • Explorer Browser Control.
  • Shell property system.
  • Windows Vista and Windows 7 Common File Dialogs, including custom controls.
  • Windows Vista and Windows 7 Task Dialogs.
  • Direct3D 11.0, Direct3D 10.1/10.0, DXGI 1.0/1.1, Direct2D 1.0, DirectWrite, Windows Imaging Component (WIC) APIs. (DirectWrite and WIC have partial support)
  • Sensor Platform APIs
  • Extended Linguistic Services APIs
  • Power Management APIs
  • Application Restart and Recovery APIs
  • Network List Manager APIs
  • Command Link control and System defined Shell icons.

Das interessanteste dürften hier die in Windows 7 neuen Jumplists und Sensoren sein!

Mehr Infos dazu hier.

12Aug/096

Codeklau & wie man eigenen Code schützen kann Teil 2

In diesem zweiten Teil werde ich darauf eingehen, wie man seinen Code möglichst gut schützen kann. Natürlich gibt es keinen 100%igen Schutz aber man kann es jemandem durchaus schwer machen an seinen Code zu kommen.

Es gibt mehrere Ansätze wie man das Problem angehen kann. Zum Einen wäre da die Möglichkeit unseren .NET Code nicht in ein Assembly sondern in eine native Anwendung zu kompilieren. Das würde die Dekompilierung um einiges erschweren.

Dafür stellt und Microsoft mit dem .NET Framework bereits ein Tool zur Verfügung. Dieses kann eure Assemblys in Maschinencode compilieren, tut also das was der JIT-Compiler sonst erst bei der Ausführung machen würde! Dies hat den Vorteil, dass die Anwendung schneller arbeitet, da sie direkt ausgeführt werden kann, aber wird erheblich größer, da alle .NET Abhängigkeiten nun in das Programm integriert werden müssen. Es kann nun sogar ohne ein Installiertes .NET Framework ausgeführt werden!

Das Programm was das für uns erledigt nennt sich "ngen.exe" und ist ein Kommandozeilen Programm. Im MSDN gibts eine umfassende Anleitung für das Programm weswegen ich hier nicht auf die Funktionsweise eingehen werde!

Leider bringt diese Art der Kompilierung einen entscheidenden Nachteil mitsich, nämlich dass das Programm die Plattformunabhängigkeit verliert und meistens nurnoch auf dem eigenen Rechner (auf dem es erstellt wurde) benutzt werden kann! Also müssen wir uns etwas anderes einfallen lassen!

Und tatsächlich gibt es eine weitere Möglichkeit seinen Code zu schützen und dennoch keine Nachteile aufkommen zu lassen! Das Visual Studio bringt bereits ein Programm mitsich das uns da helfen kann! Das ist der sogenannte "Dotfuscator Community Edition" den man über das "Extras"-Menü in Visual Studio aufrufen kann!

Diese "Ofuscatoren" machen dann, simpel ausgedrückt, den Quelltext schlechter lesbar. Was sich so simpel anhört ist aber sehr effektiv! Wie ich an einem Beispiel demonstrieren möchte:

Hier ersteinmal der Quelltext den wir geschrieben haben in der Originalform:


private void CalcPayroll(SpecialList employeeGroup) {
   while (employeeGroup.HasMore()) {
        employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}

Und nun das Ergebnis des Obfuscators:


private void a(a b) {
    while (b.a()) {
        a = b.a(true);
        a.a();
        a(a);
    }
}

Wie man sieht kann man nicht mehr so einfach darauf schließen was diese Funktion eigentlich machen soll, da alle für den Menschen logischen Bezeichner fehlen!

Was macht der Obfuscator also genau? Seine Hauptaufgabe ist natürlich den Quelltext nach dem Dekompilieren für den Menschen möglichst unleserlich zu machen. Das wird dadurch erreicht, dass alle Bezeichner und alle Texte die im Quelltext vorkommen durch zufallsgenerierte Bezeichner ersetzt werden. Denn dem Computer ist es egal, ob eine Variable "anzahlBenutzer" oder "3Fdg4§§s" heißt. Aber der Benutzer der den Quelltext liest ist natürlich sehr verwirrt da er nichts mit diesen Bezeichnungen anfangen kann.

Es gibt auch andere Dritthersteller, die Software anbieten die genau das machen soll, nur besser versteht sich! Ich habe zum testen mal den Phoenix Protector, teLock und den im Visual Studio integrierten Dotfuscator ausprobiert.

Wobei ich teLock nicht weiter behandeln werde, da alle daraus erzeugten Programm nicht lauffähig waren und immer abgestürzt sind!

Wie kann man selbst vorgehen um zu testen wie gut sein Programm geschützt ist? Ganz einfach, indem man so vorgeht als ob man ein fremdes Programm "knacken" würde. Dazu können wir uns dem Tool .NET Reflector bedienen, das ich im ersten Teil vorgestellt habe!

Ich werde hier als Beispiel mal das Tool aus dem Beitrag "Den Office Lizenzschlüssel aus der Registry auslesen" verwenden. Wenn wir das Programm dekompilieren dann sehen wir ca dieses Bild:

bild-32Bild 1: Office Key Finder im Dekompilierten Zustand

Wie man sieht konnte das Programm komplett dekompiliert werden und man kann in dem Quelltext wunderbar lesen (rechts)! Ich habe des weiteren die Stellen hervorgehoben, wo man die Original Namen der Variablen und Funktionen erkennen kann! - So sieht eine ungeschützte .NET Anwendung aus.

Nun habe ich den Phoenix Protector mal drüber laufen lassen und die selben stellen markiert.

bild-113Bild 2: Dieses Mal ist der Quelltext viel schlechter lesbar!

Wie man sieht haben nun alle Klassen, Funktionen und Variablen ganz andere unlogische Namen bekommen die in keinster weise deren Funktion wiederspiegeln!

bild-6Bild 3: Der Dotfuscator beschränkt sich auf das nötigste

Bild 3 zeigt das Ergebnis des im Visual Studio eingebauten Dotfuscators. Dieser hat sogar die Klassenstruktur geändert und auf das nötigste reduziert! (links)

Ich war aber mit dem Ergebnis des Phoenix Protectors besser zufrieden, denn nach etwas herumspielen mit den Einstellungen konnte ich den Quelltext so gut "tarnen", dass selbst der Disassambler diesen nicht mehr auflösen konnte und sich mit einem Fehler verabschiedete!

bild-26Bild 4: Das perfekte Ergebnis, der Quelltext lässt sich nicht mehr einsehen!

Das ist natürlich ein super Ergebnis! Ich habe es nicht an weiteren Programmen ausprobiert, aber ich denke nicht, dass man immer dieses Ergebnis haben wird und natürlich muss man im Hinterkopf behalten, dass auch das nicht sicher ist sondern auch mit genug Zeit ebenfalls geknackt wird!

Auch wenn diese Methode keinen perfekten Schutz bietet (den es eh nicht gibt!) ist sie trotzdem effektiv! Alle Tools die ich hier benutzt habe sind auch kostenlos und leisten dafür sehr viel! Ausprobieren lohnt sich! Als Alternative die aber auch was kostet kann ich euch .NET Reactor ans Herz legen. Dieses Tool arbeitet ebenfalls sehr gründlich sodass es teilweise nicht möglich ist zu dekompilieren kostet aber auch knappe 200 €!

Gut, kommen wir zu der dritten und auch sichersten und besten Lösung! .NET bietet uns die Möglichkeit auf fremdcode zuzugreifen zb. aus der Windows-API oder eigenen DLLs. Man kann auch Code aus dem Internet nachladen oder bestimmte Dienste in WebServices auslagern.

Und das Sollte man machen! So kann man das Hauptprogramm gerne in .NET schreiben, aber man sollte dann die besonders aufwendigen und geheimen Algorithmen und Prozeduren in eigene Native DLLs auslagern, die man dann wiederum ins Programm einbinden kann!

Das garantiert eine einfache Arbeit und höchste sicherheit! Denn auch wenn man dann das Hauptprogramm dekompiliert, ist der wichtige Teil immernoch sicher in der DLL verpackt!

Zum Schluss nochmal: hier habe ich nur .NET behandelt natürlich gibt es auch für Java und auch für Javascript Obfuscators die den selben Job machen, diese aber ebenfalls vorzustellen würde den Rahmen aber sprengen!

Ich hoffe dieser Zweiteiler hat euch gefallen und freue mich auf euer Feedback!

Interessiert dich dieses Thema? Möchtest du hier mehr Beiträge darüber lesen? Schreib ein Kommentar was dir gefallen hat oder was nicht.

11Aug/093

Codeklau & wie man eigenen Code schützen kann Teil 1

In dieser Reihe möchte ich darüber schreiben welche Probleme die Arbeit mit modernen Programmiersprachen mit sich bringt und wie man diese möglichst eindämmen und gering halten kann.

In dem ersten Teil werde ich darauf eingehen, wie und warum es möglich ist Code aus fertigen Applikationen zu extrahieren.

Das größte Problem, das jeder Closed-Source Programmierer hat, ist es den erstellten Code nicht für andere einsichtbar zu halten damit dieser nicht geklaut oder ohne Einwilligung oder Lizenzzahlungen weiterverwendet werden kann!

Aber wie ist es überhaupt möglich Code zu klauen wenn mann nur die fertige Applikation hat?

Zuerst sollte man sagen, dass es keinen 100%igen Schutz gibt! Alles kann geknackt oder modifiziert werden. Alle Firmen, die das gegenteil versprechen sind einfach nur unprofessionell. Denn alle Schutzmechanismen die es gibt sorgen lediglich dafür, dass man mehr Aufwand aufbringen muss, um diese wieder zu umgehen.

Früher war Codeklau noch sehr harte Arbeit, denn früher waren alle Anwendungen kompiliert, wurden also beim Erstellen direkt in Maschinencode gewandelt! Diesen Maschinencode wieder in lesbaren Quelltext zu wandeln ist sogut wie unmöglich, was man aber machen kann ist es diesen zu "Deassimblieren" (engl. Disassamble). Bei diesem Vorgang wird der vorliegende Native Code (Maschinencode) in ein für den Menschen lesbaren Assembler Code umgewandelt.

Was man hier noch wissen sollte, ist dass früher (vor langer langer Zeit) alles in Assembler programmiert wurde. Assembler ist eine Sprache, die es dem Programmierer Erleichtert Code zu schreiben, dabei werden Befehle benutzt die der Prozessor, auf dem später der Code ausgeführt werden soll versteht. Somit muss man sich nicht mit Nullen und Einsen herumschlagen sondern hat was, was man auch einigermaßen lesen kann.

5623_2Grafik 1: So könnte ein Programm nach dem Disassamble-Vorgang aussehen

Hier findet ihr ein kleines Beispiel wie sich Assembler von einer Hochsprache wie zb. C++ unterscheidet!

Mit diesem erzeugten Assembler Code kann man nun weiter "arbeiten" und versuchen den Ablauf des Programms zu verstehen und diesen dann auch eventuell zu kopieren, zu klauen! Das ist natürlich je nach Größe extrem aufwendig und langwierig.

Übrigens: genauso gehen die so genannten "Cracker" vor wenn sie versuchen bestimmte Sicherheitmechanismen von Programmen oder Spielen zu deaktivieren. Sie suchen nach diesen Ereignissen in dem Assembler Code und versuchen diese umzuleiten oder zu löschen, sodass die "Gecrackte" Software dann anschließend zb. ohne gültige Lizenz oder ein Spiel ohne die Original CD im Laufwerk benutzt werden kann! Wer darüber mehr wissen will sollte einen Blick in die "Hacker-Bibel von Cyberdemon98" werfen.

Natürlich kann man mit diesem Vorgehen nicht wirklich Code "klauen" sondern mehr versuchen zu verstehen wie ein Programm arbeitet um dann zb. andere Programme darauf abzustimmen ("Schnittstellen" schafften). Diesen Vorgang nennt man dann reverse Engeneering (deut. Umgekehrtes entwickeln).

Ein berühmtes Beispiel dafür ist der Instant Messaging Dienst ICQ, dieses Unternehmen hat keinerlei Spezifikationen über den Dienst oder das Protokoll veröffentlicht. Alle ICQ-Clients wie QIP, Miranda oder andere basieren komplett auf Reverse Engeneering! Deswegen kommt es auch oft, dass man sich gegenseitig keine Dateien schicken kann oder die Status-Nachricht eines Freundes lesen kann weil er einen anderen Client verwendet. Dies liegt einfach daran dass die Entwickler "raten" müssen wie diese Funktionen funktionieren und Kompabilitäten nur schwer geschaffen werden können! Dadurch geht ICQ sicher, dass nur ihr eigener Client perfekt funktioniert und alle Features beherrscht!

c-flow

Grafik 2: Diese Schritte durchläuft C++ Code während der Compilierung

Diese Codevariante, die so genannten unmanaged-code hervorbringt, der aus Maschinencode besteht erstellen die "alten" Programmiersprachen wie Delphi, C, VB6 und C++. Die Obere Grafik zeigt, dass nach der Kompilierung des Quelltextes, dieser noch weitere Schritte durchläuft und schließlich als Binäre Datei vorliegt, die nur auf einem bestimmten CPU-Typ und Betriebssystem läuft!

Die neueren Programmiersprachen wie etwa Microsofts .NET (Worunter auch C#, VB.NET fällt) oder Java verfolgen einen komplett anderen Ansatz der managed code erzeugt und förmlich zum Codeklauen einlädt!

20011114_1xGrafik 3: Compilierung von Managedcode Programmen (.NET & Java)

Die Sprachen, die managed Code erzeugen, erzeugen nämlich keinen Maschinencode sondern so genannte Assemblys welche eine Art Vorkompilierte Programme sind die nicht lauffähig sind.

Grafik 3 beschreibt im Oberen Teil, den Kompilierungs Prozess, der ziemlich einfach gestrickt ist. Der Code wird garnicht "Richtig" kompiliert sondern nur für die spätere Ausführung vorbereitet.

Warum ist das so? Nun heutzutage müssen Programme laufen, und nicht nur auf dem PC auf dem Sie geschrieben wurden sondern auch auf anderen und sogar auf anderen Betriebssystemen. Das ganze nennt sich dann Plattformunabhängigkeit!

Java Programm zb. können auf allen gängigen Betriebssystemen ausgeführt werden. Egal ob Windows, Solaris, Mac OS oder Linux Java Programme funktionieren! Und damit das möglich ist dürfen die Programme nicht kompiliert werden!

Denn wenn ein Programm kompiliert wird wird es in Maschinencode umgewandelt. Und da jede Prozessorarchitektur einen eigenen Maschinencode hat und jedes Betriebssystem auch anders aufgebaut ist kann ein kompiliertes Programm immer nur auf dem System ausgeführt werden für das es kompiliert wurde!

Um dieses Problem zu umgehen werden Java Programme nur Vorkompiliert (zu so genannten Assemblys) und dann wenn die gestartet werden (egal auf welchem Betriebssystem) werden sie erst "richtig" kompiliert, für das System auf dem sie gerade gestartet werden!

Warum ist das gut? Naja, so kann man ein Programm schreiben, und es ohne daran viel zu machen auf allen Systemen benutzen. Leider hat das System auch viele Schattenseiten, denn um ein solches vorkompiliertes Programm ausführen zu können muss eine Virtuelle Maschine installiert sein, die unser vorkompiliertes Programm "zu ende kompiliert" im Falle von Java ist es die JVM (Java Virtual Machine) diese kompiliert das Programm passend zum Betriebssystem und sorgt für dessen korrekte Ausführung.

Desweiteren sind diese Programme natürlich auch langsamer als die Nativen, denn zb. die Java Programme müssen vor deren Start erst kompiliert werden und laufen in einer Virtuellen Maschine, was natürlich auch Geschwindigkeitseinbußen. (vergleichbar mit einem Virtuell ausgeführten Betriebssystem durch VMWare und co)

Aber nun schweife ich schon wieder ab! Was wichtig ist, ist dass die Managedcode Programme nicht in Maschinencode kompiliert werden. Der Zustand in dem sie dann verweilen macht es uns sehr leicht das Programm wieder zurück in Quelltext zu verwandeln und diesen dann zu Klauen!

Dieser Vorgang, bei dem eine Kompilierte Datei wieder in lesbaren Quelltext verwandelt wird nennt man Dekompilierung. Anders als beim Disassambling wird hierbei der Original Quelltext den der Programmierer geschrieben hat fast perfekt wiederhergestellt!

Davon sind alle managedcode Sprachen betroffen, da sie alle nach dem Prinzip aus Bild 3 arbeiten! (zb. Java, C#, VB.NET)

Für jede Sprache gibt es auch den passenden Decompiler, der den Original Quellentext in Sekunden herausspuckt! Viele dieser Decompiler sind hochkomplexe Programme und deswegen auch nicht kostenlos! Besonders wenns an das dekompilieren von Nativen Programmen geht wird man keine kostenlosen Programme finden die brauchbare Ergebnisse liefern!

Um Java Programme (.jar-Dateien) zu dekompilieren empfehle ich den JD Java Compiler, dieser ist kostenlos und arbeitet sehr zuverlässig!

screenshot1Bild 4: Der Java Decompiler in Action

Natürlich muss man auf so etwas wie Kommentare und Ordnungen verzichten, da diese bei dem Kompilierungs Prozess automatisch aus dem Quelltext gelöscht werden, da der Prozessor damit nix anfangen kann!

Um .NET Programme oder DLLs zu dekompilieren, wobei hier disassimbliren besser passt kann ich das Tool .NET Reflector von Redgate empfehlen, es ist einfach zu benutzen und funktioniert perfekt!

Bild 5: Arbeiten mit dem .NET Reflector

Das Gute hierdran ist, dass man sogar in die .NET System Prozesse schauen kann um diese besser zu verstehen! Dieses Programm ist ebenfalls kostenlos nach einer Registrierung zu haben!

Wer das ganze mal ausprobieren will kann das gerne ja mal machen. Sucht euch einfach mal ein einfaches Java Programm, dabei ist es egal ob es ein Desktop Java Programm ist ober ein Mobile Programm aus dem J2ME. zb. den Opera Mini und schaut euch mal dessen Innereien an.

Wenn ihr mal ein .NET Programm dekompilieren wollt kann ich für den Einstieg eins der Programme empfehlen, die ich hier im Blog veröffentlicht habe. (Schaut zb. in dem Letzten Beitrag. Ladet die Beispiel Datei herunter und entpackt den Ordner und geht in den Ordner TreeViewDemo\bin\debug\ dort müsstet ihr eine .exe Datei finden an der ihr euch austoben könnt!)

Als Ergänzung will ich noch sagen, dass ein Programm immer in managedcode UND in unmanagedcode kompiliert werden kann und somit manchmal nicht (so einfach) dekompiliert werden kann!

Wie man seinen Code schützen kann werde ich dann in dem zweiten Teil behandeln, da der hier ja schon ein bissl zuu lang geworden ist!

Interessiert dich dieses Thema? Möchtest du hier mehr Beiträge darüber lesen? Schreib ein Kommentar was dir gefallen hat oder was nicht.

   
Get Adobe Flash playerPlugin by wpburn.com wordpress themes