jar aus RAM heraus starten

UweA

Mitglied
Hallo,

ich würde gern ein Java-Programm direkt aus dem Speicher heraus starten.
Also so etwas wie:
Process proc =Runtime.getRuntime().exec("java -jar A.jar");

nur das "A.jar" nicht auf einem Filesystem liegt sondern direkt im Speicher.

Hat jemand eine Idee?

Grüße,
Uwe
 

UweA

Mitglied
Doch.
Das eigentliche jar file liegt verschlüsselt auf dem Dateisystem. Es wird über ein C-Programm entschlüsselt und in den Speicher kopiert und von da aus gestartet.
 

UweA

Mitglied
Das Problem liegt darin, dass das Starten das Java-Programms aus dem Speicher heraus bisher nur eine "Wunsch-Funktion" ist und noch nicht existiert. Und da ich das unter C bisher nicht hinbekommen habe, versuche ich nun einen Ansatz bei Java zu bekommen.
 

black swan

Mitglied
Schau Dir mal die ProcessBuilder-Klasse an, damit könntest Du einen BS-Aufruf ("java -jar <jarfile>") machen.

Edit: Sorry, hab das mit dem "Programm liegt im RAM" übersehen. Das würde - wenn es gehen würde - das "Sandbox-Prinzip" aushebeln.
 

Dompteur

Top Contributor
Der Aufruf von java erwartet das Jar-File im Filesystem. Ich glaube nicht, dass du da auf einen Speicherblock verweisen kannst. Außer eine RAM-Disk wäre erlaubt.

Als Alternative könntest du ein Java-Programm schreiben, dass das Jar-File entschlüsselt und über einen eigenen Class-Loader in deiner virtuelle Maschine nachlädt.
Hier ein Link als Anregung: http://kalanir.blogspot.co.at/2010/01/how-to-write-custom-class-loader-to.html

Der Link ist keine fertige Lösung, sondern zeigt dir nur, wie du Klassen selbst nachladen kannst.
 

Thallius

Top Contributor
Ok, fangen wir mal ganz vorne an. Was soll das Ziel der ganzen Aktion sein ? Irgendwie scheint mir das ganze Konzept nicht schlüssig. Du kannst nicht einfach einen Code in den Speicher laden und dann starten. Das geht in keiner Sprache so wirklich einfach. Das verlangt extreme Kenntnisse des Betriebssystems. Plattform übergreifend wird es dann richtig lustig.
Wenn du da irgendwas verschlüsseln willst, dann solltest du das komplett anders angehen.
 

UweA

Mitglied
Das Ziel ist: Das Dekompilieren meines jar files verhindern.

Meine bisher untersuchten Möglichkeiten:
a) Obfuscator(ProGuard, Stringer): Unbrauchbar, weil erzeugtes jar entweder fehlerhaft oder nicht ausreichend verschleiert
b) USB-Donlge(WIBU): brauchbar aber teuer
c) jar-Datei verschlüsseln und über C-Loader entschlüsseln und starten: Problem mit dem Java-Launcher (s.o.)

Die Lösung muss nur unter Windows funktionieren.
 

Thallius

Top Contributor
Jar2Exe mal probiert?

Ein Dongle bringt ja auch nichts. Den kan ich in Java ja auch problemlos aushebeln wenn ich den Code decompiliere und dann ändere.

Java bekommst du nunmal nicht wirklich sicher.
 

Tom299

Bekanntes Mitglied
In einer alten Firma von mir hatten wir auch ein "Geheimhaltungsproblem". Da wurde der "geheime Algorithmus" in C geschrieben und über JNI in Java eingebunden. Vielleicht wäre das eine Alternative für dich?

Inwieweit man aber dann die C-Object-Dateien decompilieren kann, weiß ich nicht.
 

UweA

Mitglied
@Thallius:
Jar2Exe sieht sehr gut aus! Vielen Dank für den Tip!

Wenn ich das mit dem Dongle richtig verstanden habe, dann ist der jar-Code verschlüsselt und wird erst beim Laden entschlüsselt (ähnlich dem, was ich mit dem C-Loader machen wollte). D.h. decompilieren und Dongle ausheblen dürfte nicht so einfach sein.
 

UweA

Mitglied
@Tom299:
Wenn es nur um einen Algorithmus ginge, wäre das durchaus eine Lösung (einige Teile laufen ohnehin schon in DLLs, die über JNA eingebunden sind), aber es geht um tonnenweise Code...
Wenn ich die alle nach C portiere, dann kann ich gleich das ganze Projekt nach C portieren.
 

Dompteur

Top Contributor
Jar2Exe sieht sehr gut aus! Vielen Dank für den Tip!
Google liefert mir bei der Suche nach "Jar2Exe decompile" folgenden Link : http://reverseengineeringtips.blogspot.co.at/2014/12/unpacking-jar2exe-21-extracting-jar.html
Das ist eine Step-by-Step-Anleitung, wie man die Jars aus dem Exe-File extrahiert.

Wäre es eine Alternative den Code zu splitten und einen Teil der Berechnungen auf einem Server zu machen ?
Damit kannst du verhindern, dass dieser Teil der Anwendung decompiliert werden kann.
Solange deine ganze Anwendung auf einem privaten Rechner ausgeführt wird, kann man mit entsprechenden Aufwand eine Menge reverse-engeneeren.

Die andere Frage ist natürlich, ob dein Programm wirklich so wertvoll ist, dass sich der Aufwand für den Cracker lohnt...
Gerade, wenn du "tonnenweise Code" hast, ist der Einarbeitungsaufwand ja auch nicht soo klein. Das wird dir jeder bestätigen, der sich schon einmal in ein großes Projekt, das schlecht strukturiert / dokumentiert ist, einarbeiten musste.
 

cafebabe

Mitglied
Das Ziel ist: Das Dekompilieren meines jar files verhindern.

Lösung: verschlüsseltes jar-Archiv mit einem weiteren Java programm einlesen -> entschlüsseln -> Per ClassLoader nachladen!

Das ganze "entschlüsselung mit C programm da kompilierter Maschinencode..." ist keine seriöse Lösung, zumindest nicht so wie ich das hier verstehe!
Nur mal ein Beispiel (einer std. Lösung mit C) C-programm entschlüsselt das jar mit (z.b.) AES - key als String ist fest im code hinterlegt.
Einfachster Angriff: Filtern aller Strings aus der .exe Datei - testen aller Strings (viele können es nicht sein)

Die andere Frage ist natürlich, ob dein Programm wirklich so wertvoll ist, dass sich der Aufwand für den Cracker lohnt...

Ich würde sogar sagen: DAS ist die Frage!!!
 

cafebabe

Mitglied
Damit verlagerst du nur den Angriffspunkt. Der Cracker muss hier also das "weitere Java Programm" decompilieren und das entschlüsselte Jar File danach speichern.

Jein, für so eine Aktion, braucht man eine "License"-Server o.ä.
Der Schlüssel darf natürlich(!!) nicht in den Java-Code (gleiches problem wie C,go,rust,php,asm... Code).
Ungefährer Ablauf:
  • jar_1 kontaktiert License-Server (pub-Key auth o.ä.)
  • jar_1 erhält sym. Schlüssel
  • jar_1 entschlüsselt jar_2 (dein "geschütztes programm)
  • jar_1 lädt jar_2 per ClassLoader nach

Ein motivierter angreifer fischt dir den übertragen sym. Schlüssel aber auch aus dem RAM
Eine wirklich sichere Lösung für dieses Problem gibt es (meines Wissens nach nicht)!
Selbst ein TPM hindert niemanden, den ByteCode der "jar_2" aus dem RAM zu lesen.
 

UweA

Mitglied
Auch nach meiner Auffassung gibt es keine 100% sichere Methode. Mit enstprechendem Aufwand läßt sich alles aushebeln. Ich möchte es einem potentiellen Cracker nur nicht unnötig leicht machen(was es bei einem einfachen jar-file nun mal ist).
 

cafebabe

Mitglied
Dann empfehle ich dir ein kleines JavaProgramm zu schreiben, das dein eigentliches Jar entschlüsselt und per ClassLoader nachlädt.
Am besten werden besonders "geheime" Programmteile auf einen Server ausgelagert.
Aber das kommt sehr auf die Anwendung an (Stand-alone , Buisness oder Privat etc.)
 

UweA

Mitglied
Möglicherweise gibt es noch einen weiteren Weg.
1. Mit Hilfe von Jar2Exe ein exe erzeugen.
2. exe verschlüsseln
3. C-Loader schreiben, der exe entschlüsselt und nachlädt (Stichwörter: Memory Execution & PE File Header)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Classpath Programm aus Programm heraus starten Java Basics - Anfänger-Themen 1
J JavaFX aus Java-Application heraus starten Java Basics - Anfänger-Themen 7
I Jar aus Java heraus starten. Java Basics - Anfänger-Themen 12
Y .jar aus applikation heraus starten? Java Basics - Anfänger-Themen 3
S Main-Methode aus anderer Klasse heraus starten Java Basics - Anfänger-Themen 8
J Java Applikation aus Applet heraus starten Java Basics - Anfänger-Themen 4
D exe AUS Java heraus starten Java Basics - Anfänger-Themen 4
G Worddatei aus jar-File heraus starten Java Basics - Anfänger-Themen 8
sserio Binomialkoeffizient, wie findet man k und n heraus Java Basics - Anfänger-Themen 18
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
S setText aus anderer class heraus Java Basics - Anfänger-Themen 6
K Compiler-Fehler Objektmethode aus einer statischen Methode heraus aufrufen Java Basics - Anfänger-Themen 34
G Java Applet aus Eclipse heraus testen? Java Basics - Anfänger-Themen 6
Y Datei mit relativem Dateipfad per FileReader aus .JAR heraus auslesen Java Basics - Anfänger-Themen 4
E Word aus Java heraus öffnen und in den Vordergrund holen Java Basics - Anfänger-Themen 2
I auf Textfeld aus anderer Klasse heraus zugreifen Java Basics - Anfänger-Themen 2
B Warum aus child heraus nicht änderbar? Java Basics - Anfänger-Themen 4
E Variable aus einer Methode heraus in eine andere Klasse übergeben Java Basics - Anfänger-Themen 13
J this aus eingebetteter implementation heraus Java Basics - Anfänger-Themen 2
W iText - Layer aus PDF heraus löschen Java Basics - Anfänger-Themen 1
A JRadioButton aus Code heraus selectieren. Java Basics - Anfänger-Themen 4
A [gelöst]Aus der Klasse heraus auf ein anderes Objekt zugreifen Java Basics - Anfänger-Themen 4
L Zeilenwechselsequenz erkennen aus der Datei heraus Java Basics - Anfänger-Themen 2
G Umgebungsvariable aus Java Programm heraus setzen Java Basics - Anfänger-Themen 4
G Webseite aus Java heraus laden Java Basics - Anfänger-Themen 3
S Rückgabe eines eingelesenen 2D Arrays aus Klasse heraus Java Basics - Anfänger-Themen 3
G jProgressBar value aus anderer Klasse heraus verändern Java Basics - Anfänger-Themen 7
P Fenster schliessen auf Menue heraus Java Basics - Anfänger-Themen 2
R Dateien aus Java heraus öffnen Java Basics - Anfänger-Themen 9
F Problem mit auführen einer .bat Datei aus Java heraus Java Basics - Anfänger-Themen 24
G Aufruf einer .bat-Datei aus Java heraus Java Basics - Anfänger-Themen 6
G Andere Anwendung aus Java heraus steuern Java Basics - Anfänger-Themen 3
M aus Applet heraus 2. Fenster öffnen und Parameter übergeben? Java Basics - Anfänger-Themen 18
H Objecte aus einer Liste heraus benutzen ? Java Basics - Anfänger-Themen 3
M Klassen zur Laufzeit laden, aus einer jar heraus. Java Basics - Anfänger-Themen 14
V Erste Ziffer aus einer dreistelligen "Zahl" heraus Java Basics - Anfänger-Themen 5
H Verzeichnis lesen, und nur unterverzeichnisse heraus filtern Java Basics - Anfänger-Themen 6
A Aus dem menü heraus andere Felder bearbeiten Java Basics - Anfänger-Themen 2
H Github Projekt starten/anbinden in eclipse Java Basics - Anfänger-Themen 11
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
izoards Prunsrv - Windows Service - .bat file starten Java Basics - Anfänger-Themen 84
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
MarvinsDepression Umgebungsvariable kann Java-Applikationen außerhalb der IDE nicht starten Java Basics - Anfänger-Themen 4
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
Dimax Java Programm mit exec starten Java Basics - Anfänger-Themen 5
pkm Eclipse wie mit anderer JAVA-Version starten? Java Basics - Anfänger-Themen 1
K Kann nicht starten Java Basics - Anfänger-Themen 63
S Mit Cloud Messaging Service starten Java Basics - Anfänger-Themen 2
S Android Service ferngesteuert starten Java Basics - Anfänger-Themen 5
W Threads starten Java Basics - Anfänger-Themen 2
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
J script: jar Datei starten auf Mac Os Java Basics - Anfänger-Themen 2
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Starten von FlashTool Java Basics - Anfänger-Themen 27
C Classpath Compiler lässt sich nur bedingt von Kommandozeile aus starten Java Basics - Anfänger-Themen 17
L Programm lässt sich nicht starten! Java Basics - Anfänger-Themen 1
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
x-tshainge Mein Programm lässt sich nicht Starten Java Basics - Anfänger-Themen 8
B Mit Java anderes Java Programm starten Java Basics - Anfänger-Themen 3
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
E App lässt sich nicht starten Java Basics - Anfänger-Themen 8
L Eine Klasse aus dem gleichen Package starten Java Basics - Anfänger-Themen 3
G Wie kann ich mein Quellcode als Programm vom desktop starten? Java Basics - Anfänger-Themen 1
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
M Objekt starten von der main-Methode Java Basics - Anfänger-Themen 1
T while schleife starten , beeneden und wieder Starten Java Basics - Anfänger-Themen 8
B Gleicher Prozess starten und stoppen (Problem beim Stoppen) Java Basics - Anfänger-Themen 5
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
lgund Classpath Raspberry Pi 3 FX Starten Java Basics - Anfänger-Themen 4
B MySQL starten / stoppen -> Stoppen erzeugt neuen Prozess Java Basics - Anfänger-Themen 0
B .bat - Datei starten ohne Konsolenfenster zu sehen Java Basics - Anfänger-Themen 6
X Betriebssytem interne Consolen Commands über Java starten Java Basics - Anfänger-Themen 2
cezary Server läßt sich nicht starten Java Basics - Anfänger-Themen 2
K Methoden Programm ohne Main Methode starten Java Basics - Anfänger-Themen 2
GENiALi Java Console Anwendung starten in Prozess Java Basics - Anfänger-Themen 3
P Javaprogramm mit einer bestimten Version starten Java Basics - Anfänger-Themen 5
R externes Programm starten Java Basics - Anfänger-Themen 12
O Probleme mit Starten Java Basics - Anfänger-Themen 2
T jar von stick aus über jre auf stick starten Java Basics - Anfänger-Themen 6
C Ein Button soll Focus rausfinden und Methode starten Java Basics - Anfänger-Themen 9
T Wieso kann ich das jar file nicht starten? Java Basics - Anfänger-Themen 5
P Programm lässt sich nicht starten - Klasse mit Hauptmethode nicht gefunden Java Basics - Anfänger-Themen 9
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
G Thread mehrmals starten und schliessen Java Basics - Anfänger-Themen 6
M Eclipse.exe/ symbol nicht vorhanden. kann nicht starten :S Java Basics - Anfänger-Themen 10
G JUnit-Tests im Programmdurchlauf starten Java Basics - Anfänger-Themen 4
Thallius Hidden Feature über Key Event starten Java Basics - Anfänger-Themen 4
M Programm mit jdb starten Java Basics - Anfänger-Themen 0
F APP außerhalb von Netbeans starten Java Basics - Anfänger-Themen 2
C Timer aus anderer Klasse stoppen/starten Java Basics - Anfänger-Themen 3
L Jar aus Jar Starten lassen (Update Tool) Java Basics - Anfänger-Themen 6
S Methoden Methode um Programm zu starten Java Basics - Anfänger-Themen 4
K Java-Editor: "Starten" bringt Error Java Basics - Anfänger-Themen 15
M Datei starten mit Java Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben