Java Übergebenen Programmcode editieren - womit?

Man zitiert sich ja eigentlich nicht selbst, aber:
sTuPiD-eLcH schrieb:
Eine JAR dekompilieren funktioniert aber auch nur, so lang diese nicht verschlüsselt/gesichert (obfuscated) wurde.
Vielleicht ist das das Problem an der Sache. Ich hatte sowas auch mal probiert und bekam dabei nur teilweise Quellcode oder kompletten Datenmüll. Wenn der/die Entwickler des Programms schlau genug war(en), wurde der Quellcode verschlüsselt/gesichert und kann damit nicht mehr oder nur teilweise dekompiliert werden.
 
Ich krebse hier immer noch dran rum.

Und ich stelle mich jetzt noch mal so blöd wie ich offensichtlich bin. Diverse Tipps, auch von Google reiten auf dem Punkt kompilierte und nichtkompilierte Dateien herum. So weit so durchaus logisch.

Und doch fühle ich mich im Moment ungefähr so: da sei eine Word-Datei. Ich möchte ein Wort ändern. Ein Viewer kann mir alles anzeigen, vllt. Klartext speichern, aber mehr nicht, das nützt nix.
Also bemühe ich ein Programm das mit DOC/X umgehen kann, sagt es. Das liefert mir statt Sätzen Zeichensalat oder fühlt sich gänzlich unfähig einen Satz editierbar zu machen.
So soll ich aus einem Hauptdokument das Filialdokument lösen, [1. eigenständige Ebene] daraus eine Seite [2. Ebene], dann einen Absatz auskoppeln [3. Ebene] um dann an die Wörter [4. Ebene] zu gelangen. Anschließend all das irgendwie [Ebene für ebene] rückwärts.
Eclipse scheint sich zwar so irgendwie bis zum Satz vorzuarbeiten, den aber bekomme ich nicht editierbar.

Für Dumme also: mit was für einem befähigten Tool öffne ich unmittelbar eine .JAR, steige bis zur Codebene hinab, ändere was, gebe ein Speichern und erhalte die angepasste .JAR?
Nicht anders als wie für eine gewöhnliche DOC beschrieben. Das kann doch kein Hexenwerk sein?

Wenn Eclipse nicht decompilieren kann (aua…) - wer kann dem Trumm die Bröckchen mundgerecht servieren damit ich voran komme?

CN8
 
Letzte Woche hatte ich einen Kurs im Studium wo das Thema Software-Security war. In diesem github findest du Beispiele für das Reverse Engineering von Java. Die Beispiele sind alle so ausgelegt, dass diese in einer virtuellen Maschine ausführbar sind (s. README). Sollte dir auf alle Fälle weiterhelfen. Insbesondere die Beispiele Java-Decompiler-JAR und Java-Decompiler-SecureWriter. Vielleicht hilft es dir weiter.

P.S.: Der Professor hat uns einen Rat gegeben: Lassen Sie es sich schriftlich geben, dass Sie Reverse Engineering an einem Programm durchführen dürfen. Vielleicht solltest du den auch befolgen.
 
cumulonimbus8 schrieb:
Für Dumme also: mit was für einem befähigten Tool öffne ich unmittelbar eine .JAR, steige bis zur Codebene hinab, ändere was, gebe ein Speichern und erhalte die angepasste .JAR?

Mit keinem Tool. Auf dem Weg vom Quellcode in die kompilierte Klasse im Jar passieren einige Optimierungen etc. die dafür sorgen, dass der dekompilierte Code nie (oder eher in den aller seltensten Fällen) exakt so aussehen wird, wie der Quellcode aus dem das Kompilat enstanden ist. Wenn du in eine Codeebene "hinab" willst in der du etwas ändern kannst - mit der Chance zu verstehen was dort passiert - wirst du den ursprünglichen Quellcode benötigen.
 
cumulonimbus8 schrieb:
Und doch fühle ich mich im Moment ungefähr so: da sei eine Word-Datei. Ich möchte ein Wort ändern. Ein Viewer kann mir alles anzeigen, vllt. Klartext speichern, aber mehr nicht, das nützt nix.

Experten können direkt den Bytecode lesen und mit entsprechenden Editoren auch ändern. Das wäre die Analogie zu Deinem Word-Beispiel, das ansonsten aber nicht passt, da die .class Dateien gerade nicht dafür gedacht sind, daraus wieder Quelltext zur Darstellung zu extrahieren. Bei Java ist es allerdings recht einfach möglich, wobei kommerzielle Software oft Tools verwendet, die das zu erschweren suchen oder zumindest das Resultat dieser Umwandlung möglichst schwer verständlich machen wollen. Das wäre u.U. die nächste Hürde.


cumulonimbus8 schrieb:
Eclipse scheint sich zwar so irgendwie bis zum Satz vorzuarbeiten, den aber bekomme ich nicht editierbar.

Standardmäßig hat Eclipse nur einen sehr einfachen Decompiler an Bord, der einzelne Dateien eben nur anzeigt, was im Normalfall völlig ausreicht. Wie schon gesagt gibt es externe Plugins dafür.


cumulonimbus8 schrieb:
Für Dumme also: mit was für einem befähigten Tool öffne ich unmittelbar eine .JAR, steige bis zur Codebene hinab, ändere was, gebe ein Speichern und erhalte die angepasste .JAR? Nicht anders als wie für eine gewöhnliche DOC beschrieben. Das kann doch kein Hexenwerk sein?

Mir ist kein solches Tool bekannt. Könnte man sich sicher selber basteln, aber normalerweise befassen sich mit solchen Dingen vermutlich Leute, die sich damit auskennen und die schreiben sich schneller ein Skript zum De/Kompilieren und editieren die Dateien mit einer IDE oder einem Texteditor.


cumulonimbus8 schrieb:
Wenn Eclipse nicht decompilieren kann (aua…) - wer kann dem Trumm die Bröckchen mundgerecht servieren damit ich voran komme?

Wenn die Änderungen erlaubt sind, kannst Du Dir eine solche Leistung sicher einkaufen. Hier wird das bei der unklaren Lage niemand für Dich übernehmen.
 
Ich nehme das mal als ein »das geht nicht rückwärts zu reparieren, wir brauchen die Quellen« um den Ball an die betreffende Stelle zurückzuspielen.
Immerhin habe ich es versucht.

CN8
 
Technisch ist es sicherlich möglich. Man benötigt aber doch etwas Expertise dazu. Das ist nichts, was ein Laie in zwei Tagen stemmen könnte.
 
cumulonimbus8 schrieb:
Wenn Eclipse nicht decompilieren kann (aua…)
Eclipse ist eine IDE, sprich Entwicklungsumgebung. Wenn jede IDE einfach so Programme dekompilieren könnte, dann könnte z. B. jeder in den Quellcodes rumfuschen oder ähnliches.
Das wäre sicherlich toll für die Open Source-Community, aber schlecht für die Softwarehersteller.
 
Wenn Du nicht seit Jahren in Java entwickelst, dann ist das einfach keine Aufgabe für Dich.
Das musst Du nach den ganzen Ratschlägen einfach verstehen.
Selbst, wenn Du das Original Projekt hättest, könnte es sein, dass Du das nicht mehr übersetzen kannst.

Das sind die Alternativen:
  • Kauft Euch einen Freelancer ein, der sich nachweislich mit so etwas auskennt.
  • Besorgt Euch Support vom Ersteller des Programms.
  • Sucht nach einer alternativen Software.
Wenn das keine Spezialsoftware für irgendein Zeug, dass sonst keiner versteht, ist, dann wird es ja wohl Ersatz am Markt geben.
 
Ich will nicht an euren Auskünften zweifeln. Und gäbe es nicht gewisse Nebenwirkungen wäre das alles auch recht einfach. :heilig:
Mal sehen was da zu machen ist will man nicht alles neu entwickeln.


Denken aber darf der Laie?

Verschlüsselte EXE dunnemals schützen den Quellcode. Akzeptiert.
Also sollte ein «JAVA-Programm»(-Paket) dies a priori für sich auch tun. OK.
Habe ich wiederum alle Quelldaten sollte es doch nur noch eines Konzeptionellen Knopfdrucks bedürfen alles nach Anpassungen wieder zu einem Block zusammenzugießen (bildlich) ohne einen Almauftrieb veranstalten zu müssen. Eigenartige Ergonomie.

Die Logik jedenfalls, dass ein kleines Tool X es (erfolgreich..!) entschlüsselt und eine ausgewachsene Programmierumgebung Y das nicht kann wenn sie alle Module angeboten bekommt ist nur schwer zu verstehen ;)

CN8
 
cumulonimbus8 schrieb:
Die Logik jedenfalls, dass ein kleines Tool X es (erfolgreich..!) entschlüsselt und eine ausgewachsene Programmierumgebung Y das nicht kann wenn sie alle Module angeboten bekommt ist nur schwer zu verstehen ;)
Wenn da keine GUI mit dabei ist, was spricht dann dagegen, den Code den dein Tool X ausspuckt zu markieren, zu kopieren und in einer IDE in einem neuen Modul ein zu fügen und neu zu kompilieren?
 
Deine Vergleiche sind auch etwas abwegig. doc/x ist dafür gemacht, (relativ) einfach editierbar zu sein bzw. es gibt genügend Tools dafür, genau so wie Quellcode. Kompilierter Quellcode verhält sich in etwa wie ein PDF. Das kann man zwar auch manipulieren, braucht aber auch Spezialsoftware.
 
Darlis schrieb:
Deine Vergleiche sind auch etwas abwegig. doc/x ist dafür gemacht, (relativ) einfach editierbar zu sein bzw. es gibt genügend Tools dafür, genau so wie Quellcode. Kompilierter Quellcode verhält sich in etwa wie ein PDF. Das kann man zwar auch manipulieren, braucht aber auch Spezialsoftware.
Natürlich, aber keiner von uns weiss was das Wirklich für ne Software ist und wie komplex die aufgebaut ist. Wenn die recht einfach gestrickt ist, wäre nen copy & paste durchaus nen Versuch Wert.

Aber mal ganz ehrlich, der TE hat scheinbar jetzt schon einige Stunden/Tage in Grundlagenforschung, Experimente und Diskussion verbrannt.
Wenn das wirklich nur so ne Kleinigkeit ist da ein bis zwei Parameter am Code an zu passen, dann wäre es günstiger gewesen nen Experten ein zu kaufen der das für 1-2 Stundensätze erledigt hätte.
 
cumulonimbus8 schrieb:
Die Logik jedenfalls, dass ein kleines Tool X es (erfolgreich..!) entschlüsselt und eine ausgewachsene Programmierumgebung Y das nicht kann wenn sie alle Module angeboten bekommt ist nur schwer zu verstehen ;)

Für jemand Fachfremden mag das nicht sofort einsichtig sein, aber wenn man etwas in die Materie einsteigt, ist es evident. Reverse engineering ist einfach nichts, was die Mehrheit ständig oder überhaupt macht. Deswegen bietet Eclipse hierfür standardmäßig keinen Support, der über die Anzeige einzelner Klassen hinausgeht. Wer mehr benötigt, kann sich ein Plugin installieren oder greift zu einem externen Tool.

Bauen geht in der Tat per Knopfdruck, wenn das Projekt erst einmal korrekt eingerichtet ist.
 
Hab dir ja schon am Anfang gesagt, dass du einen Freelancer holen solltest...

Das Decompilieren und am Ende wieder alles zu einem jar zusammen bauen, ist nur ein Teil deiner Aufgabe. Vermutlich sogar noch die Leichteste.

Die zweite Aufgabe ist das Einrichten des Projektes in einer IDE (IntelliJ, eclipse, Netbeans,...). Wenn du das noch nie gemacht hast, ist das keine leichte Aufgabe.

Die Codestelle zu finden, ist evtl. schwer. Du musst aber dann erst mal die Stelle so umbauen, dass dein gewünschtes Ziel erreicht wird. Evtl. musst du eingebundene Bibliotheken austauschen gegen andere. Sowas bedeutet aber meist einen heftigen Umbau des vorhandenen Codes.

Selbst ein Freelancer wird das niemals in 1-2 Stunden erledigen. Da kommen schnell mehrere Tage zusammen. Aber das kann man ohne Erstanalyse des Quellcodes nicht näher sagen.
 
cumulonimbus8 schrieb:
Verschlüsselte EXE dunnemals schützen den Quellcode. Akzeptiert.
Also sollte ein «JAVA-Programm»(-Paket) dies a priori für sich auch tun. OK.
Habe ich wiederum alle Quelldaten sollte es doch nur noch eines Konzeptionellen Knopfdrucks bedürfen alles nach Anpassungen wieder zu einem Block zusammenzugießen (bildlich) ohne einen Almauftrieb veranstalten zu müssen. Eigenartige Ergonomie.
Ich musste das jetzt mehrmals lesen, um es zu verstehen. Nichts gegen dich, aber deine Ausdrucksweise ist teilweise echt "schwierig"... oder in anderen Ecken von Deutschland ist das normaler Sprachgebrauch, keine Ahnung...

Du sprichst hier sehr "theoretisch". Hast du nun den Quellcode oder nicht?
Ist diese Software so geheim oder wäre es möglich uns einfach einmal eine der Dateien zur Verfügung zu stellen?
Dann können wir dir sagen, ob es (zumindest mit dieser Datei) möglich ist, diese in Eclipse oder sonst wo zu öffnen. Im Zweifel auch die JAR.
Wie bereits geschrieben, habe ich das, was du vorhast, bereits selbst gemacht, dies funktioniert aber eben nicht mit allen JAR-Dateien und ist auch nicht auf "Knopfdruck" möglich. Den Gedanken solltest du verwerfen.

Du solltest aber nicht erwarten, dass dann jemand die Änderung direkt für dich macht, denn wie gesagt ist das eine Arbeit, die mehrere Stunden oder sogar Tage in Anspruch nimmt und das macht niemand umsonst für Fremde.
 
Ich hab mir das mal alles durchgelesen. Also wenn das alles so klick klick fertig und easy wäre wie du das "theoretisch" beschreibst, dann würde man uns Programmierern nicht soviel Geld anbieten.

Mal abgesehen davon das du versuchst ohne Quellen mit Code rumzuspielen, was nochmal eine ganze schippe drauf legt. Reverse engeneering machen sehr wenige Leute, normalerweise hat man halt Quellcode. Also ein eingeschränktes Fachgebiet.

Und zur Krönung ist es dann natürlich noch sicherheitsrelevant.

Das heist 3 Punkte zu erfüllen die schon für jemand der sich auskennt schwierig zu stemmen sind, vorallem Punkt 2.

Du merkst selber das dir die Ahnung dazu fehlt. Kauft jemand ein der es machen soll. Stellt nen blöden Proxy davor (dafür wurden die entwickelt, um eben nivht so ein quatsch machen zu müssen)
Und das Ding ist durch. Raspery pi als proxy sind vllt 80 euro kosten plus einrichten, das bekommst du mit tuts an einem tag hin.

Ja raspery pi ist kein industrieprodukt, aber von dem was er vorhat denke ich das das ausreicht.


cumulonimbus8 schrieb:
Für Dumme also: mit was für einem befähigten Tool öffne ich unmittelbar eine .JAR, steige bis zur Codebene hinab, ändere was, gebe ein Speichern und erhalte die angepasste .JAR?
Nicht anders als wie für eine gewöhnliche DOC beschrieben. Das kann doch kein Hexenwerk sein?

Sorry das so sagen zu müssen, du hast absolut keine Ahnung von der Materie. Das auch absolut nicht schlimm, dafür hast du dein Fachgebiet wo wir dir auch nicht sagen das das alles viel einfacher gehen muss.

Jars sind nicht dafür gemacht als Grundlage zu dienen, sie sind ein Endprodukt in einer Kette bei der Entwicklung. Ja man kann mit spezialtools und Wissen etwas damit machen. Selbst wenn es ein wundertool gäbe was du bedienen kannst, Frag ich mich wie du den Code ändern willst, wenn du davon auch keine Ahnung hast.
 
  • Gefällt mir
Reaktionen: TheCadillacMan, DefconDev, wahli und eine weitere Person
Reicht es nicht, die Software auf localhost einen zusätzlich installierten MTA ansprechen zu lassen, der dann wiederum nach außen hin die verschlüsselte Übertragung übernimmt?
 
Ich habe die Diskussion mit gewissen Vergnügen gelesen.

Und ich schalte mal auf logisch-stur:
Was immer programmiert wurde muss in etwas gewandelt werden das ein Prozesssor abarbeiten kann. Auch verschlüsselte EXEs müssen sich selbst entschlüsseln sonst würde ihr verquirlter viraler Code nie zum Zuge kommen. Was den Hinweg kann muss logisch ach eine Rückweg können. Ob die Kodierung völlig anders als das Original ausfällt ist gleich wenn das Dekodieren wieder den korrekten Inhalt hegibt.

Sorry das so sagen zu müssen, du hast absolut keine Ahnung von der Materie. Das auch absolut nicht schlimm, dafür hast du dein Fachgebiet wo wir dir auch nicht sagen das das alles viel einfacher gehen muss.
Stimmt, ich habe da von all der Komplexität mit Modulen jonglierend die was Funktionierendes ergeben keine ausreichende Ahnung. Und meine Logik um Logisches wie Einsen und Nullen zuckt mit den Schultern.

Stellen wir also an die Erfahren hier die offenbar spannende Frage:
Welches PlugIn sollte ich an Eclipse verfüttern das das was der JD kann dort zu Stande bringt?

CN8

PS: ich erwähne es erneut - die Sache hat Ecken und Kanten die nicht einfach mit Programmieren und Programmieren zu tun haben. Ich bin da nur der der geldsparend eine Lösung finden soll, mehr als klappen könnte es ja nicht. Denn an der pekuniären Quelle sitze nicht ich.
 
In Post #2 werden u.A. auch Eclipse Plugins genannt. Die laufen aber nicht zwingend mit einer aktuellen Eclipse-Version. Muss es denn jetzt unbedingt ein Plugin sein? Wenn du es nicht schaffst, in Eclipse ein neues Projekt anzulegen und den von einem separaten Tool dekompilierten Code zu importieren, kannst du das Vorhaben eh vergessen. Denn dann wirst du auch nicht in der Lage sein, die von dir gesuchte Stelle im Code zu finden und so abzuändern, dass das ganz wieder fehlerfrei kompiliert werden kann.
 
Zurück
Oben