# Quellcode wiederherstellen



## Greg50007 (9. Apr 2019)

Hi 
Ich hab durch einen dummen Fehler meinen Quellcode gelöscht.

Was noch übrig ist, ist eine .jar und eine Anwendung die ich aus dem Quellcode generiert habe.

Besteht die Möglichkeit daraus den verlorenen Code wiederherzustellen?

LG.

Greg


----------



## Greg50007 (9. Apr 2019)

Wenn ich die Anwendung entpacke finde ich zwar meine klassen. Die aber nur als .class und nicht als .java

Ist das der richtige Weg?


----------



## M.L. (9. Apr 2019)

Stichwort Decompiler: http://www.javadecompilers.com/     (und um die Codes nicht erneut zu verlieren, könnte man ein Versionsverwaltungssystem verwenden)


----------



## JuKu (11. Apr 2019)

Version Control Systeme sind absolute pflicht!
Bitte schau dir Git mal genauer an!

Du kannst die JAR decompilen und erhälst deinen Quellcode zurück, allerdings nicht in der selben Form, wie du ihn geschrieben hast.
z.B. sind Variablen dort anders benannt und alle Kommentare wurden entfernt.


----------



## mihe7 (11. Apr 2019)

Wobei man dazu sagen muss, dass git alleine nicht vor Verlust schützt. Dazu braucht es dann schon ein Remote-Repository.


----------



## mrBrown (11. Apr 2019)

JuKu hat gesagt.:


> z.B. sind Variablen dort anders benannt


Das kann (und sollte, mMn) man mit `-parameters` und `-g:vars` verhindern


----------



## Greg50007 (14. Apr 2019)

Danke für dir antworten 

Ich hab mal versucht die Anwendung zu entpacken und die Klassen (.class) zu (.java) zu formen. Hat auch alles gut geklappt. Nur fehlt das wichtigste im Code. Ist es normal das viele Teile im Code fehlen?
Und kann man irgendwie alles wiederherstellen?
Schönen Abend noch

Greg


----------



## mrBrown (14. Apr 2019)

Weder beim kompilieren noch beim dekompilieren geht Code verloren, höchstens hat der wie schon gesagt eine etwas andere, aber gleichwertige, Form.

Wie hast du die Klassen denn dekompiliert?


----------



## Greg50007 (14. Apr 2019)

Das hab ich mir auch gedacht... 
Der Code der fehlt sollte in der actionlistenermethode eines buttons stehen.
Decompiled hab ich es online.





						Java decompiler online
					

Java decompilers online: *JAD, *JDCore, *Procyon, *Fernflower, *CFR.  ✓ A user interface to extract source code from .class and .jar ‘binary’ files.




					www.javadecompilers.com
				



Mich ärgert das, das der komplette Inhalt des Buttons fehlt...


----------



## mrBrown (14. Apr 2019)

Hast du alle Klassen dekompiliert?


----------



## Greg50007 (14. Apr 2019)

Ja


----------



## kneitzel (15. Apr 2019)

Bist Du dir wirklich sicher? Also alle .class Dateien aus dem Jar musst Du dekompilieren. Hintergrund ist halt, dass Deine Implementierung wohl eine anonyme inner class sein dürfte und ich habe es jetzt nicht geprüft, aber ich würde vermuten, dass die in einer eigenen .class Datei stecken dürfte.


----------



## Greg50007 (15. Apr 2019)

Dann nein. Alle .class habe ich nicht dekompiliert,  da viele doppelt waren. 
Z.b
Bearbeiten.class
Bearbeiten$1.class
Bearbeiten$2.class
Bearbeiten$3.class
Bearbeiten$4.class
...

Die die ich überprüft habe hatten nur null drinne.
Aber da sind ja auch noch andere Dateien die vorher keine Klassen waren.

Soll ich wirklich ALLE Dateien dekompilieren?
Und was mach ich dann mit den allen?


----------



## kneitzel (15. Apr 2019)

Ja, das sind diese anonymen inner classes.

Also in der Klasse Bearbeiten hast Du dann sowas gemacht wie:

```
myFrame.addMouseListener(new MouseAdapter() {
  public void mousePressed(MouseEvent me) {
    // Do something
  }
}
```

Damit erzeugst Du innerhalb Deiner Klasse (inner class) eine neue Klasse (ohne Namen, also anonym) welche MouseListener impementiert und welche lediglich mousePressed implementiert. 
Und von dieser Klasse wird direkt eine Instanz erzeugt und als Parameter an addMouseListener übergeben.

Und bezüglich der .class dateien gilt wohl:
Die namen bilden sich aus Parent Klassenname und Inner Class Name, getrennt durch $.
Und da die inner class anonym ist, wird statt dessen ein Zähler verwendet.

Also in diesen ,class Dateien sollte der noch fehlende Code stecken.


----------



## Greg50007 (15. Apr 2019)

Gut... 
Dann werde ich mich dan setzen und alle .class dekompilieren und durchforsten.
(Auch die sie ich nicht selbst benannt habe)

Melde mich wenn es vollbracht ist


----------



## Greg50007 (15. Apr 2019)

Also ich hab jetzt mal durchgeguckt... aber irgendwie wird das nix. Ich hänge das Verzeichnis gleich mal an, falls von euch da experte ist und die zeit hat... (mir geht es ansich nur um Bearbeiten.class -> die will ich als .java)
Habe alle Bearbeiten$... .class dekompeliert -> alles "null". Aber vielleicht habt ihr mehr glück!
Vielen dank wenn es wer probiert. 
Schönen Start in die Woche 

Greg


----------



## mihe7 (15. Apr 2019)

Mit dem Onlinedekompiler liefert das die angefügte Datei.


----------



## Greg50007 (15. Apr 2019)

Viele dank :O
Das sieht schonmal 100mal besser aus als bei mir :/


----------



## ocsme (15. Apr 2019)

wie schütze ich meine class Dateien vor dekompilierung?


----------



## mrBrown (15. Apr 2019)

Mit einem Obfuskator, ob das aber sinnvoll ist, kommt auf den jeweiligen Anwendungsfall an.


----------



## ocsme (15. Apr 2019)

So langsam gefällt mir Java  
das Teil kann echt super viel  und ich lerne immer was neues hier 
Danke mrBrown das muss ich mir auf meine Liste schreiben das ich es mir irgendwann mal anschaue 

LG


----------



## kneitzel (15. Apr 2019)

Thema Obfuscator ist etwas, das du weg lassen kannst. Du kannst die Latte damit für Hacker höher legen, aber egal was du machst: Deine Software wird dekompiliert.

Selbst große Firmen haben damit enorme Probleme und stecken da viel Geld rein und dennoch werden Produkte wie AutoCAD gehackt....

Und es wird sogar immer leichter, die NSA hat jetzt erst vor kurzem ein Open Source Tool veröffentlicht, das mit den Kommerziellen Tools dafür gleichzieht. Also: verschwende Deine Zeit nicht damit!

So du Software entwickelst, die schützenswert sein sollte: Zahlende Kunden werden mehr oder weniger belästigt, weil es ggf. bei bestimmten Konstellationen nicht geht oder Support ist schwer, weil Stacktrace nichts aussagt oder du zumindest den erhaltenen Stacktrace erst umwandeln musst und und und .... wieso willst du Kunden gewinnen nur um sie zu vergraulen?

Meine Erfahrungen gehen hier aber vor allem auf den .Net Bereich zurück. Da habe ich in der Vergangenheit auch diverse Tools getestet und dann alle verworfen. Zwei Produkte kamen damals in Betracht, so dass ich sogar eine Lizenz erworben hatte ....


----------



## kneitzel (15. Apr 2019)

Ach ja: besserer Ansatz ist trivial: Microservices und co sorgen dafür, dass Code eben nicht heraus gegeben wird. Damit gibt es den Angriffsvektor bezüglich dekompilieren auch nicht mehr. Setzt dann aber natürlich auf Clientseite eine Netzwerkverbindung voraus.

Aber da ist natürlich auch die Frage, was Du überhaupt machen willst - ist nicht für alles eine Lösung (Aber da geht extrem viel. webassembly mal ansehen... Wird alles auch auf Client Seite immer stärker.)


----------



## ocsme (16. Apr 2019)

Danke für die Infos 
Naja Java gibt einem so so viele Vorteile, irgendwo muss dann eben auch einmal ein Hagen sein! Es gibt nichts was nur Vorteile hat  
Klar doof für Entwickler oder Firmen die da viel Zeit reinstecken doch die andere Seite ist die wieviel "neue" Entwicklung gibt es heute noch? <- gut damit kenne ich mich ehrlich gesagt gar nicht aus deswegen Behaupte ich jetzt einfach mal das es Heut zu Tage keine neuen Revolutionären Algorithmen mehr in solchen Programmen zu finden gibt!
Damit meine ich jetzt sowas wie naja ich berechne eine Primzahl egal wie groß in O(1)   

Kann mich ja auch sehr Irren da fehlt mir leider noch die Erfahrung 

*Nochmals Danke *


----------



## johnniemelton (11. Mai 2019)

[QUOTE = "Greg50007, post: 1179559, member: 56981"]
Hi 
I deleted my source code with a stupid mistake.

What's left is a .jar and an application I generated from the source code.

Is it possible to recover the lost code from it?

LG.

Greg
[/ QUOTE]
He your issue resolved?


----------



## Greg50007 (11. Mai 2019)

Mihe7 did it with an online decompiler. As I try it I failed because the code wasn't complete. But with his help I got everything back


----------



## mihe7 (11. Mai 2019)

I just used the link given by @M.L. (http://www.javadecompilers.com/) and uploaded the Jar file there.


----------



## JavaSpringCoder (17. Feb 2020)

M.L. hat gesagt.:


> Stichwort Decompiler: http://www.javadecompilers.com/     (und um die Codes nicht erneut zu verlieren, könnte man ein Versionsverwaltungssystem verwenden)


Decompiled hab ich es online. Java Decompiler Online, click here


----------



## KonradN (Freitag um 13:58)

JavaSpringCoder hat gesagt.:


> Decompiled hab ich es online. Java Decompiler Online, click here


Also der Link dahinter geht dann über eine Weiterleitung und wird dann bei mir direkt geblockt da unsicher - daher sollte da besser niemand den Link nutzen, bis das von den Admins/Moderatoren entfernt wurde.


----------

