Java Code schützen?

Status
Nicht offen für weitere Antworten.

jroxtheworld

Mitglied
Wie schütze ich meinen Code vor Dekompilieren?

Beispiel:
Ich speichere alle Daten in einer Derby DB, die encrypted auf der Festplatte gepspeichert wird und zusätzlich einen Usernamen und Passwort benötigt. Diese muss ich aber irgendwo im Java Sourcecode hinterlegen.

Mit z.Bsp. DJ Java Decompiler ist das aber für jeden Computer-Dummy einsehbar.

Frage: Wie schütze ich meinen Sourcecode oder zumindest die Teile mit sensitiven Informationen?

Danke
 

Wildcard

Top Contributor
Völlig unmöglich. Du kannst es höchstens erschweren, aber jeder der auch nur halbwegs fit ist, kann die Daten auslesen, unabhängig davon ob es sich um Java, C#, C, Assembler, oder sonst was handelt.
 
S

Spacerat

Gast
Ich möchte an dieser Stelle noch mal darauf verweisen. Leider ist das Archiv, auf welches ich dort verweise beim letzten Foren-Umzug wohl untergegangen. Das kann man aber einem noch zu kommen lassen.
<OT>BTW.: Ich hab' da einen "toten" Link entdeckt. Und zwar, wenn man "Schutz vor Decompile" als Suchbegriffe verwendet, wird einem das Thema mit "Seriennummern" angezeigt, in welchem ich auch nach "Schutz vor Decompilierung" verlinkt habe. Dieser Link ist jedoch tot.</OT>
 

jroxtheworld

Mitglied
Danke auch für den Link, zeigt auch schön die Nachteile auf. Prinzipiell handelt es sich dabei ja eigentlich immer darum, dass der Quellcode und dessen Abläufe und evt. Algorithmen geschützt werden sollen.

Mein Problem besteht momentab aber mehr darin, dass ich einzelne Werte in meinem Quellcode schützen möchte, die nich 'ofuscated' werden.
- Benutzernamen und Passwörter für DB / FTP etc.

Wie würdet ihr hier vorgehen?
 

tfa

Top Contributor
Sowas kann man grundsätzlich nicht schützen. Passwörter auf dem Client sind nur vom Benutzer einzugeben. In Server-Programmen kann man Passwörter in Config-Dateien o.ä. speichern, aber da kommt von Außen ja auch niemand ran.
 

Stefan S.

Aktives Mitglied
Danke auch für den Link, zeigt auch schön die Nachteile auf. Prinzipiell handelt es sich dabei ja eigentlich immer darum, dass der Quellcode und dessen Abläufe und evt. Algorithmen geschützt werden sollen.

Mein Problem besteht momentab aber mehr darin, dass ich einzelne Werte in meinem Quellcode schützen möchte, die nich 'ofuscated' werden.
- Benutzernamen und Passwörter für DB / FTP etc.

Wie würdet ihr hier vorgehen?

Java Programme sind noch deutlich angenehmer zu dekompilieren, als Sprachen, die direkt in Maschinencode übersetzt werden, weil eine ganze Menge Metainformationen erhalten bleiben. Bei einem C Programm erhält man immerhin ein hochoptimiertes CPU Listing, welches nur von erfahrenen Assembler Programmierern gelesen werden kann.

Du kannst keine offenen Daten im Quellcode schützen. Du musst diese Daten in jedem Fall verschlüsselt ablegen, z.B. mit AES drüberbügeln.

Die Entschlüsselung muss über eine Benutzereingabe erfolgen, also über einen Textstring der nicht im Quellcode steht. Alles andere ist letztlich knackbar. Im Extremfall dekompiliert der Benutzer nämlich überhaupt nichts, er macht einen Memorydump des laufenden Prozesses und spätestens dort steht das Passwort im Klartext.
 

jroxtheworld

Mitglied
Du kannst keine offenen Daten im Quellcode schützen. Du musst diese Daten in jedem Fall verschlüsselt ablegen, z.B. mit AES drüberbügeln.

Die Entschlüsselung muss über eine Benutzereingabe erfolgen, also über einen Textstring der nicht im Quellcode steht. Alles andere ist letztlich knackbar. Im Extremfall dekompiliert der Benutzer nämlich überhaupt nichts, er macht einen Memorydump des laufenden Prozesses und spätestens dort steht das Passwort im Klartext.

Die Daten zu verschlüsseln bringt mir ja eigentlich auch nichts, da sie ja innerhalb vom Programm wiederum entschlüsselt werden müssen, damit z.Bsp. ein FTP mit Passwort angesprochen werden kann. Ein Teufelskreis das ganze... der Benutzer soll das Passwort ja eben nicht kennen, weshalb ich es irgendwo hinterlegen muss.
 

jroxtheworld

Mitglied
Ich habe zu dem Thema noch einen interessanten Artikel gefunden:

First Case: User is authorized to know the database login credentials

In this case, the solution I mentioned above will work. The Java Preference class will stored the username and password in plain text, but the preferences file will only be readable by the authorized user. The user can simply open the preferences XML file and read the login credentials, but that is not a security risk because the user knew the credentials to begin with.

Second Case: Trying to hide login credentials from the user

This is the more complicated case: the user should not know the login credentials but still needs access to the database. In this case, the user running the application has direct access to the database, which means the program needs to know the login credentials ahead of time. The solution I mentioned above is not appropriate for this case. You can store the database login credentials in a preferences file, but he user will be able to read that file, since they will be the owner. In fact, there is really no good way to use this case in a secure way.

(Das wäre also mein Case, der nicht weiter schützbar ist)

How can I protect MySQL username and password from decompiling? - Stack Overflow
 
M

maki

Gast
Brauchst so etwas wie einen Server, der kann Usernamen & Passwort halten.

Ansonsten wars das.
 

jroxtheworld

Mitglied
Falls z.Bsp. der DB-Zugang auf dem Server gemacht wird, hat der Client zwar keine Chance das Klartext-Passwort zu erfahren, aber er weiss ja aus dem Client-Code wie mit dem Server kommuniziert werden kann, und kann sich so aus seinem eigenen Programm Zugriff auf die DB verschaffen ...oder vergesse ich da etwas?
 

tfa

Top Contributor
Hoffentlich kann er das nicht. Der Server versorgt den Client mit Daten aus der DB. Er liefert natürlich nur die, die der Client sehen darf. Dazu muss sich der Anwender am Server anmelden, mit UserID und Passwort (was natürlich ein anderes ist, als der DB-Zugang).
 

jroxtheworld

Mitglied
Aber im Client-Code werden vielleicht auch Methoden aufgerufen, die Daten in die DB schreiben. Jetzt kann ich diese Methode aufrufen und dem Programm einen anderen Wert mitgeben, der zwar valide ist aber nicht dem effektiven Wert entspricht.

Bsp.: Das Programm speichert die Anzahl korrekt gelöster Aufgaben in der DB. Ich habe zwar nur 2 Antworten korrekt gelöst, aber kann der Methode auch einfach 5 korrekte übergeben.

Ich glaube ich gehe langsam zu weit ;)
 
M

maki

Gast
Du müsstest zwischen Serveraufgaben und CLientaufgaben unterscheiden.

Um bei deinem Beispiel zu bleiben:
Der Client speichert nix in die DB, das macht der Server.
Der Client entscheidet auch nicht wieviele Aufgaben gelöst wurden, das macht der Server.
 

tfa

Top Contributor
Vereinfacht gesagt dient der Client nur dazu, vom Server geladene Daten auf dem Bildschirm anzuzeigen und Benutzereingaben an den Server zu schicken. Sozusagen ein Bildschirm-/Maus-/Tastatur-Treiber. Das Denken findet auf dem Server statt. (Der Client darf natürlich auch ein bisschen vorausschauend mitdenken, aber alles muss auf Serverseite nochmal überprüft werden.)
 

jroxtheworld

Mitglied
Okay, eine ganz klare Trennung wäre also von Nöten. Das geht natürlich in meinem Fall leider nicht. Also werde ich wohl oder übel einfach schauen müssen, dass die Daten nicht mit einmal dekompilieren schon sichtbar sind.

Danke euch für den Input!
 
M

maki

Gast
Den Aufwand kannst du dir imho sparen, bringt nicht wirklich etwas.

Beispiel:
Ich dekompiliere deine App, dann lasse ich sie im Debugger laufen mit einem Breakpoint an der Stelle, an der die DB Verbindung gemacht wird und lese Usernamen und Passwort aus.
Egal wieviel Aufwand du reinsteckst, das geht immer.
 
S

Spacerat

Gast
@TS: Weis' jetzt nicht, ob du dir meinen Link von oben schon mal angesehen hast. Ich habe dort mit einfachen Mitteln (XOR) den ByteCode einer Klasse verschlüsselt, und damit vor "decompile" geschützt. Erfolgreicher dürfte es alledings mit RSA sein. Denkbar wäre dann auch noch, das die durch den dort verwendeten ClassLoader entschlüsselte Klasse eine Prüfsumme des ClassLoaders speichert und bei ihrer Initialisierung diese mit einer "frisch" erstellten vergleicht. So kann sie unter Umständen feststellen, ob der CL bereits dekompiliert und anschliessend wieder kompiliert wurde. (ReverseEngineering == Ikea-Spiel->"Endecke die Möglichkeiten")
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Java Code schützen - Key4J Allgemeine Java-Themen 10
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
V Hilfe mit Java Code Allgemeine Java-Themen 4
S Processing Java Code verstehen Allgemeine Java-Themen 4
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
AGW in Java-Code plötzlich ein paar Wörter in Rot Allgemeine Java-Themen 2
T Java-Quiz Code Fehler Allgemeine Java-Themen 10
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
I Python Code in Java Code Allgemeine Java-Themen 9
M Java (GUI) Code verdoppeln oder anzeige mehrmals anzeigen? Allgemeine Java-Themen 8
F Verständlichkeitsproblem bei Java Code?! Allgemeine Java-Themen 2
P Java Android Code in IOS compilieren? Allgemeine Java-Themen 9
R Java-Code für folgene Aufgabe? Allgemeine Java-Themen 8
C ASCII-Code in Java Allgemeine Java-Themen 1
J Java-Code in DLL packen Allgemeine Java-Themen 5
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
J Java code "plugin" fähig machen Allgemeine Java-Themen 4
D Java Compiler code referencen Allgemeine Java-Themen 0
B Fehler im Java-Code Allgemeine Java-Themen 4
A PHP-Code zu Java-Code Allgemeine Java-Themen 5
H Java Leistungssteigerung durch Code Anpassung Allgemeine Java-Themen 5
J Erzeugung von Java-Code Allgemeine Java-Themen 2
N VB Code in Java verwenden Allgemeine Java-Themen 5
L php code in java ausführbar? Allgemeine Java-Themen 6
D Fehler im Java Code Allgemeine Java-Themen 22
Gossi Java Code in einer GUI eingeben und ausführen? Allgemeine Java-Themen 2
P JAVA Code in Dokumentation erklären Allgemeine Java-Themen 2
B Verwendung von Packages im Java Code Allgemeine Java-Themen 10
A Jars oder JNLPs aus java code in gleicher JVM starten Allgemeine Java-Themen 2
S String to Java-Code Allgemeine Java-Themen 3
S java source code Allgemeine Java-Themen 5
G Java Programm mit Freischalt code entwickeln Allgemeine Java-Themen 30
K Test-Code in Java-Klassen verstecken (wie mit Precompiler möglich) Allgemeine Java-Themen 10
martin82 Java-Code aus Text-Datei parsen Allgemeine Java-Themen 3
P [erledigt] Java-Code in Ausarbeitung dokumentieren Allgemeine Java-Themen 2
K UML Komposition in Java Code Allgemeine Java-Themen 4
hdi Source Code von Sun's Java Klassen Allgemeine Java-Themen 11
T .jar Datei aus Java Code starten Allgemeine Java-Themen 10
Chris81T JNI: Java Methoden von C++ Code aufrufen Allgemeine Java-Themen 8
J YAML + Java: Simpler Code funktioniert nur unter Windows Allgemeine Java-Themen 2
C Listen in Java. Anehängter Code nicht ganz klar Allgemeine Java-Themen 19
S java source code Allgemeine Java-Themen 7
I ASCII Code in Java Allgemeine Java-Themen 3
K Java-Code messen Allgemeine Java-Themen 15
R bestimmten HTML Code per JAva lesen lassen Allgemeine Java-Themen 7
S Java Code in Word Allgemeine Java-Themen 8
leifg komischer Java code Allgemeine Java-Themen 4
I Alter Java Code! Allgemeine Java-Themen 8
D Java Code to Flussdiagramm Allgemeine Java-Themen 8
G Java Code in Programm umwandeln? Allgemeine Java-Themen 12
M pdf maker via java code ansprechen Allgemeine Java-Themen 2
M Code von Java-Klassen in Eclipse Allgemeine Java-Themen 4
G c code übersetzen nach java Allgemeine Java-Themen 2
Reeny JNI - Java-Code mit DELPHI verbinden Allgemeine Java-Themen 2
G Mit Java 1.5 zu 1.4 kompatiblen Code erzeugen Allgemeine Java-Themen 5
C Java Native binding Code will nicht so ganz Allgemeine Java-Themen 2
G C++ Code nach Java übersetzen Allgemeine Java-Themen 14
S Java Assembly Code Allgemeine Java-Themen 13
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben