aus java binaries für linux
-
danke
und wie sicher ist das ?
ist es dann genauso schwer daraus wieder den sourcecode zu gewinnen wie aus den .exe ?
ich frag nur weil ich absolut ka von linux habe.
-
Wenn du so sehr drauf stehst deinen Code für dich zu behalten, dann nimm doch c/c++. Da kannst du exen für Win und Lin machen.
-
Hier mal ein Beispiel, was bei einer Dekompilierung rauskommen kann. Das Beispiel kommt von Javaworld.
Original:
public LList Sort_Short_LList (CompareFunction fn) { LList out_list = this; LList l=this; LList in_list = l.next; l.next = null; while(in_list!=null) { /* scan through the in list, performing an insertion sort into the out list */ LList current_list = in_list; Object current_item = current_list.contents; LList scan_list = out_list; LList prev_scan_list = null; in_list = in_list.next; while(scan_list!=null && !fn.InOrder(current_item,scan_list.contents)) { prev_scan_list = scan_list; scan_list = scan_list.next; } current_list.next = scan_list; if(prev_scan_list!=null) { prev_scan_list.next = current_list; } else { out_list = current_list; } } return(out_list); }
Nach Dekompilierung:
public LList Sort_Short_LList(CompareFunction arg1) { LList obj5 = null; LList obj4 = null; LList obj3 = null; Object obj2 = null; LList obj1 = null; LList obj = null; int CTL_PC = 1; while (true) { switch (CTL_PC) { case 1: { obj5 = this; obj4 = this.next; this.next = null; CTL_PC = 2; break; } case 2: { if (obj4 != null) { CTL_PC = 3; break; } CTL_PC = 10; break; } case 10: { return obj5; } case 3: { obj3 = obj4; obj2 = obj3.contents; obj1 = obj5; obj = null; obj4 = obj4.next; CTL_PC = 4; break; } case 4: { if (obj1 == null) { CTL_PC = 7; break; } CTL_PC = 5; break; } case 5: { if (!(arg1.InOrder(obj2, obj1.contents))) { CTL_PC = 6; bre ak; } CTL_PC = 7; break; } case 7: { obj3.next = obj1; if (obj == null) { CTL_PC = 8; break; } CTL_PC = 9; break; } case 9: { obj.next = obj3; CTL_PC = 2; break; } case 8: { obj5 = obj3; CTL_PC = 2; break; } case 6: { obj = obj1; obj1 = obj1.next; CTL_PC = 4; break; } } } }
Zugegeben, das war ein Negativbeispiel. In dem entsprechenden Artikel von Javaworld gab es auch bessere Rekonstruktionen. Es wurden 3 Dekompiler getestet und aus meiner Sicht war wohl das Schlimmste, dass man dem dekompilierten Code nicht trauen konnte. Alle 3 Decompiler produzierten nicht immer korrekten Code. Teilweise wurde dadurch sogar die Semantik des Codestücks geändert.
Allerdings ist der Artikel schon ziemlich alt und ich weiß nicht, inwiefern sich da etwas getan hat.
Da ist er: http://www.javaworld.com/javaworld/jw-07-1997/jw-07-decompilers.html
-
Man braucht doch nur logisch denken. Bytecode ist auch nicht mehr als eine Art Asseblercode. Zusätzlich kennt man noch die Schnittstellen der Klassen, die ja natürlich in den .class-Files stehen müssen.
Also Dinge, die nicht private sind.
Ohne Debug-Informationen hat man auch keine Zeilennummern mehr und kannst nur noch von irgendwelchen Tools einrücken lassen.
Der Rest ist Müll. Wenn du irgendwas geiles hast, kann man den Code bei echter Maschinensprache genauso nachvollziehen. Vielleicht ist ein bisschen mühsamer, aber keineswegs weniger möglich.
Und was gleich ist: In beiden Fällen hat der Dekompilierer keinen besonders ansehlichen und wartbaren Code, mit dem er noch unglaublich viel anfangen kann.
Wenn das sogar stimmt, dass die Semantik teilweise verändert ist (was ich sofort glaube), dann ist es sogar unbrauchbar.Ich in das Thema ein bisschen Leid. Ihr könnts doch eh alle keinen schützenswerten Code produzieren. Zur Begriffserklärung: Binaries sind in Java der Bytecode - Assemblersprache für den virtuellen Prozessor.
-
Optimizer schrieb:
Ihr könnts doch eh alle keinen schützenswerten Code produzieren.
Du solltest nicht von dir auf andere schließen! Selbst der Code meines Notepad-Clons ist schützenswert!
-
Pogo schrieb:
Optimizer schrieb:
Ihr könnts doch eh alle keinen schützenswerten Code produzieren.
Du solltest nicht von dir auf andere schließen! Selbst der Code meines Notepad-Clons ist schützenswert!
Ich stimme bei dieser Meinung komplett mit Optimizer überein. Leute, die Fragen wie diese stellen, kennen sich normalerweise sehr wenig mit Java aus. Für mich sehen solche Fragen immer danach aus, dass jemand für sich selbst eine Rechtfertigung sucht, Java nicht zu lernen. Vielleicht hat derjenige nicht genug Erfolgserlebnisse bei den anfänglichen Versuchen mit Java gehabt oder es ist etwas ähnliches passiert. Zumindest möchte derjenige krampfhaft damit aufhören und sucht nun einen Grund, das zu rechtfertigen.
Und es ist sowieso klar, dass 99% des Codes, der produziert wird, eigentlich nicht schützenswert ist. Ich habe auch noch keinen schützenswerten Code produziert und ein Notepad-Clone ist garantiert nicht schützenswert. Davon gibt es zig Varianten als OpenSource. Niemand macht sich da die Mühe, den Code von irgendwem zu dekompilieren und danach in eine lesbare Form zu bringen. Er nimmt einfach ein Programm, bei dem der Code offen ist oder schreibt sich das selbst. Denn jemand, der die Fähigkeit hat, mit dem dekompilierten Code von deinem Notepad umzugehen, der hat auch die Fähigkeit, soetwas mehr oder weniger ohne Probleme selbst zu schreiben.
-
Zusatz:
Es ist im Gegenteil sogar so, dass die vielen Informationen, die einer class-Datei zu entnehmen sind, ein enormer Vorteil von Java sind. Nur dadurch werden Dinge wie Reflection, Introspection oder dynamisches Klassenladen möglich. Auch die sehr guten Fehlermeldungen, die die JVM bei einem Bug eines Programms ausgibt, sind nur deshalb möglich.
-
Die Smilies hast du aber schon gesehen, ja? ^^
Wie auch immer, trotzdem hat er ja gesagt, dass "ihr alle" keinen schützenswerten Code generieren könnt.
Wann ist Code eigentlich schützenswert?
-
Pogo schrieb:
Wann ist Code eigentlich schützenswert?
Aus meiner Sicht ist Code ab dann schützenswert, wenn er neue Dinge enthält. Also bisher allgemein nicht bekannte Algorithmen, Datenstrukturen, Designprinzipien und so weiter. Also im Großen und Ganzen die Art von Dingen, die die Großen Firmen sofort als Patent anmelden würden. Dinge, die eine enorme geistige Arbeit außerhalb des tippens des Codes und der normalen Planung des Projekts implizieren.
-
Wie zum Beispiel ein sich bewegendes, den Fortschritt anzeigendes Icon?
-
Pogo schrieb:
Wie zum Beispiel ein sich bewegendes, den Fortschritt anzeigendes Icon?
Ich meinte natürlich nicht Trivialpatente. Denkst du, diese Trivialpatente, von denen man öfter mal hört, sind für Patente allgemein repräsentativ?
-
Nein, es sind nur die, die sich am besten einprägen.
-
ich such kein grund mit java auszuhören. im gegenteil, ich will damit richtige komplexe programme schreiben und deswegen ist die frage gewesen.
und man sollte wirklich nicht von sich auf andere schliesen optimizer. wenn jemand denkt sein code ist schützenswerten, so soll es halt sein.
-
DEvent schrieb:
und man sollte wirklich nicht von sich auf andere schliesen optimizer.
Ich schließ nicht von mir auf dich. Die Feststellung, dass ich das mache (und damit selber nicht in der Lage bin schützenswerten Code produziere) ist interessant, aber auch korrekt. Mein Code ist nicht schützenswert und unabhängig davon stelle ich anhand deiner Postings fest, dass es deiner auch nicht ist.
Das findest du jetzt natürlich nicht ok, denn ich habe deinen Code nie gesehen. So ist es aber in einem Forum. Man muss das auswerten, was man von einem mitkriegt und ordnet einen Menschen dann entsprechend ein. Leider bist du nicht in der Kategorie "gerissener, fieser, in einem Forschungslabor arbeitender Hacker, der seit 10 Jahren etwas geniales erforscht" gelandet. Macht aber nichts, jeder fängt mal klein an.Du hast aber das kleine Problem, dass du ein falsches Verständnis davon hast. Es ist keine schützenswerte Erkenntniss, dass deine Klasse eine Methode getFooBar() hat, sondern es wäre schützenswert, wenn du irgendnen genialen Algorithmus entwickelst. Den kann man aber immer rekonstruieren, auch wenn in C++ oder direkt in einer Assemblersprache programmierst. Dass deine Klasse irgendne Methode hat, kann man in C++ nicht mehr feststellen, vielleicht sogar nicht mal mehr, dass du überhaupt ne Klasse hast. Aber das ist nichts, was irgendwie schützenswert ist.
Es kommt auf was ganz anderes an und das kannst du nicht schützen. Dumm gelaufen. Wenn du auf mich schon nicht hören willst (denn ich produzier ja schließlich keinen schützenswerten Code), dann hör halt auf Gregor.
-
Ich glaube ihr seht das viel zu strikt. Ein Code kann auch dann schützenswert sein, wenn die Daten die der Code nutzt, verändert oder ausgibt schützenswert sind. Dass man nicht für jedes Stück Code ein Patent anmelden kann ist klar - anders sieht das mit Daten aus, die über ein Stück Code produziert werden. Insofern stellt sich die Frage nach schützenswertem Code für mich schon auch.
Betreibt man Programmierung als Hobby und bewegt sich eh nur (fast) in OpenSource Gefilden ist das dann natürlich lachhaft einen Code schützen zu wollen.
-
Das mit den Daten ist aber wieder etwas, was du IMHO nicht schützen kannst. Es ist doch völlig egal, ob du Bytecode oder Maschinencode hast, wenn du es disassemblierst, kannst du nachvollziehen, wie diese Daten entstehen.
Man kann ja sowas auch ohne Probleme debuggen. Das ist das, was ich meine: Was schützenswert wäre, kann man IMHO nicht schützen.Wenn du nen Algorithmus hast, der sensible Daten erzeugt, darfst du den Code überhaupt nicht clientseitig einsetzen.
-
Optimizer schrieb:
Wenn du auf mich schon nicht hören willst (denn ich produzier ja schließlich keinen schützenswerten Code), dann hör halt auf Gregor.
Optimizer: So ein Pech, ich habe auch schon zugegeben, dass ich noch keinen schützenswerten Code produziert habe. Vermutlich sind wir DEvent diesbezüglich einfach meilenweit unterlegen.
Hast du eigentlich schonmal Code produziert, der durch Patente von anderen geschützt ist? Wenn ja: Wie gehst du damit um? Ich habe gerade das Problem, dass ich den Marching Cubes Algorithmus in meinem Programm benutzen möchte, aber auf dem liegen leider 2 Patente von 1987. Ich glaube, die sind 20 Jahre lang gültig, oder? Ich müßte dann bis 2007 warten, bevor ich mein Programm ins Netz stelle. Andererseits würde ich es vermutlich eh nicht früher ins Netz stellen. ...naja.
-
Getan habe ich es bestimmt, ich weiß es nur nicht.
Man kann Algorithmen patentieren? Ich dachte, Mathematik ist frei. Krass, langsam wird's echt schlimm.
-
Sensible Daten selbst lassen sich übrigens nicht patentieren - aber der Weg um sie zu erstellen (inkl. Gerät) - also der Weg um an sie zu kommen schon
-
Stimmt *an TrueType denk*