# Java Decompiler



## Thomas Darimont (9. April 2004)

Hallo!

http://members.fortunecity.com/neshkov/dj.html

Gruß Tom


----------



## Billie (21. April 2004)

Also, ich habe mal ein kleine Sicherheitsfrage - den Meisten ist ja bekannt das es Java-Decompiler gibt, nur die Frage die sich mir jetzt in den Weg stellt ist, wenn ich zB eine Datenbankabfrage in Java-Programmiere, dann muss ich ja in dem Programm Benutzername und Passwort angeben.

Jetzt klaut sich jemand das Applet, decompiliert und hat zugang zur Datenbank?


----------



## Christian Fein (21. April 2004)

> _Original geschrieben von BillieJoe _
> *Also, ich habe mal ein kleine Sicherheitsfrage - den Meisten ist ja bekannt das es Java-Decompiler gibt, nur die Frage die sich mir jetzt in den Weg stellt ist, wenn ich zB eine Datenbankabfrage in Java-Programmiere, dann muss ich ja in dem Programm Benutzername und Passwort angeben.
> 
> Jetzt klaut sich jemand das Applet, decompiliert und hat zugang zur Datenbank? *



Obsfuscatoren sind ein mittel sowas zu verhindern.

Zudem sollte mann so oder so überlegen entweder ein ziemlich unprivilegierten Accaunt dafür einzurichten, oder noch besser über SOAP communiziert.


----------



## Billie (21. April 2004)

Also das mit den Obfuscatoren hab ich mir mal angesehen, die machen das ganze für das menschliche Gehirn sozusagen schwierig, aber gerade Passwort fällt da trotzdem auf, denk ich mal.

Ich hab mir aber überlegt, wenn man Passwort usw. in eine eigene PHP-File speichert. Die PHP File muss ja keine Funktion haben, aber das Java-Applet könnte darauf zugreifen und sollte jemand die Datei direkt abrufen, bekommt er ja nur das geparste File zurück, also genau genommen nicht's 8) Wenn man sich nicht doof anstellt und zB echo "Password" schreibt *ggg*


----------



## Christian Fein (21. April 2004)

BillieJoe hat gesagt.:
			
		

> Also das mit den Obfuscatoren hab ich mir mal angesehen, die machen das ganze für das menschliche Gehirn sozusagen schwierig, aber gerade Passwort fällt da trotzdem auf, denk ich mal.



Stimmt Strings werden wohl nicht obsfuskiert, hab ich nicht drüber nachgedacht. 
Eine möglichkeit wäre das sich das Applet über eine socket verbindung das passwort holt oder etwas anderes. 

Halte Applets so oder so für schwachsinn


----------



## Billie (21. April 2004)

Naja, dann halt eine WebStart-Anwendung  Bezieht sich ja auf das Selbe - oder kann man eine WebStart Anwendung nicht so einfach runterladen?


----------



## Franz Degenhardt (22. April 2004)

Die sicherste Lösung ist wohl die Verwendung von jce (keytool.exe) und einer Schlüsseldatenbank. Gerade das obfuscaten einzelner Klassen ist nicht besonders wirkunsvoll, da die Schnittstellen ja erhalten bleiben müssen.


----------



## nautiLus` (22. April 2004)

Wow ... das Teil geht ja echt gut!
Erstaunlich was schon alles gecodet wurde =)

ciao nauti


----------



## Shout (4. Mai 2004)

Hallo zusammen....

Sorry, wenn ich mich hier einfach in das Thema einklinke, aber ich hab genau das selbe Problem. Möchte mit meiner Java Applikation eine passwortgeschützte MySql Datenbank ansprechen. Wenn ich das Passwort aber hart code, dann kann ja jeder meine Dateien dekompilieren und kann das Passwort ablesen. Da ich noch nicht so erfahren in Java bin, wäre ich froh wenn mir jemand einen detaillierten Vorschlag geben könnte wie ich mein Passwort schützen kann. Ich hab auch bereits das keytool.exe studiert, aber hab keinen blassen Schimmer wie das funktionieren soll


----------



## Billie (4. Mai 2004)

Java-Applikation, also kein Applet?

Die für mich einfachste Methode wäre wie ich gesagt habe die PHP-File. Dazu müsstest du einen Server mit PHP haben. Dann kannst du deine Zugangsdaten in das PHP File schreiben und wenn jeman die Seite direkt anspricht über den Internetexplorer, bekommt er nur das geparste PHP File zurück...

Natürlich, wenn deine Applikation Offline laufen soll, wird das ganze schwierig. Da muss dir vielleicht jemand anderer Helfen, aber Online finde ich ist das die einfachste Lösung. Schreib einfach wenn du noch Fragen dazu hast.


----------



## Shout (4. Mai 2004)

Danke für deine schnelle Antwort....!

Ja das hab ich mir auch schon überlegt, aber da ich meine Applikation (kein Applet!) auch offline zur Verfügung stellen möchte, ist das ein Problem. Anstonsten wäre der Umweg über ein PHP-File sicher sinnvoll. Ich hab schon Stunden damit verbracht, eine geeignete Lösung für dieses Problem zu finden, aber bis jetzt konnte mir noch niemand wirklich helfen. 

Vielleicht geht das ja mit diesem "KeyTool.exe", das in diesem Thread schon erwähnt wurde, aber leider hab ich keine Ahnung wie man das realisieren soll, da ich noch nie damit gearbeitet habe. 

Wäre über jeden Tip dankbar.


----------



## Billie (4. Mai 2004)

Also um, soviel ich über KeyTool.exe gelesen habe ist es nicht die Lösung für dein Problem. Man kann mit KeyTool Verschlüsseln, mit anderen Worten es verschlüsselt und erzeugt zwei weitere Schlüssel die man braucht um das verschlüsselte zu lesen.

Aber das wäre in deinem Fall nicht sinnvoll, irgendwie müsste dann jeder User den Schlüssel haben. Egal, lies am Besten selber nach:

http://www.javabuch.de/ Kapitel 47
Java ist auch eine Insel

Andere Frage, du willst dass dein Programm Offline läuft und Zugriff auf die Datenbank hat? Geht doch eigentlich nicht oder wo liegt die Datenbank?


----------



## Shout (4. Mai 2004)

Danke für deine beiden Vorschläge. Hab mir das mit dem "KeyTool" jetzt mal durchgelesen. Scheint mir für mein Problem wirklich nicht die richtige Lösung zu sein. 

Zu deiner Frage: Ich hab bei mir Lokal einen MySql Dienst installiert. Falls ich die Applikation aber weitergebe, werde ich wohl auf ein anderes Datenbanksystem ausweichen, welches sich einfacher Weitergeben lässt. Ansonsten müsste ich ja zuerst auf allen Arbeitsstationen MySql lokal installieren, was ja auch keinen Sinn macht  

Aber ich nehme ja nicht an, dass es eine Rolle für mich Spiel auf welche DB ich zugreifen will, oder? Schliesslich werden die Zugangsdaten (Username & Passwort) sowieso hart gecoded.....egal was für eine Datenbank ich anspreche. Oder sehe ich da etwas falsch?

Hmm....Aber irgendeine Lösung für mein Problem muss es doch geben, oder meinst nicht? Die Java Entwickler können doch so eine drastische Sicherheitslücke nicht einfach übersehen haben  

Oder gibt es eventuell noch eine andere Zwischenschicht (anstatt PHP) die ich verwenden könnte, ohne vorher einen ganzen Webserver installieren zu müssen?


----------



## Billie (5. Mai 2004)

Sorry, ich frage mich selber wie das Möglich ist, aber anscheinend gibt es keine einfache bzw. zufriedenstellende Methode das zu realisieren.

Vielleicht ist am Besten nur den Leuten die Zugang haben sollen Benutzername und Passwort zugeben. Also, das Programm fragt die Benutzerdaten einfach ab. Du kannst ja bei Datenbanken Lese- bzw. Schreibrechte vergeben und so kannst du jeder Person die geeigneten Benutzerdaten zukommen lassen.

Die Frage ist inwiefern Leute die Datenbank verändern können. Wenn Sie nur Daten abrufen sollen, dann könntest du in deinem Programm ohne große Bedenken Benutzername und Passwort "bekanntgeben", wenn der Vorgegebene Benutzer nur Leserechte hat. Vielleicht findest du dort eine zufriedenstellende Lösung...

Übrigens, ich habe mal einen Obfuscator ausprobiert. Original File:

```
class Test {
    public static void main(String args[]) {
     System.out.println("PASSWORT");
    }
}
```

Daraus wurde nach erfolgreicher "obfuscation" und decompilierung:


```
class z {

    public static void main(String args[]) {
        try {
         System.out.println("PASSWORT");
         return;
        } catch(IllegalArgumentException _ex) {
        }
    }
}
```

Mit anderen Worten, es wird nur der Code für das menschliche Gehirn schwirieger zu verstehen.


----------



## Shout (5. Mai 2004)

ja, wahrscheinlich werde ich einfach den Benutzer auffordern müssen, das Passwort für den Datenbankzugriff manuell einzugeben. Scheinbar hat wirklich niemand eine passende Lösung zu diesem Problem parat, was mich ehrlich gesagt sehr erstaunt, da man ja nicht selten mit geschützten Datenbanken arbeitet. 

Das mit den Obfuscatoren hab ich auch schon ausprobiert, aber STRINGS werden nicht verändert, deshalb ist dies auch keine ideale Lösung.

Na ja, dann werd ich mein Problem eben umgehen indem der Benutzer das Passwort manuell eingeben muss. Falls du aber trotzdem noch eine Lösung entdeckst, dann wäre es toll, wenn du diese mal posten könntest. 

Ansonsten Danke ich dir für deine Bemühungen. Falls ich noch was finden sollte, werde ich es dich natürlich wissen lassen.


----------



## ADA&QS (5. Mai 2004)

Un die meisten DB verlangen entweder ein Password oder der Anweder wird uber das Usermanagement des BS erkannt. 
Passwort oder deren Hash hard gecodet in einem Programmteil zu stecken auf das jeder zugreifen kann sind Sicherheitslucke, die man nicht verhindern kann nur verbieten,


----------



## wwwsteel (10. Oktober 2004)

Hi,

Vielleicht etwas spät.. aber trotzdem!

ich würde als free-Webpage-User eine ip-checkendes javascript im html-File an das applet binden und mit Html-Guard von element5 verschlüsseln
Mfg,
Philipp

-- ne mark fufzig!


----------

