Quelltext schützen

Hallo,

es besteht ja generell das Problem das man *.class files wieder decompilen kann und dann jeder das java sehr schön lesen u.U. verstehen kann.

Habe es gerade mit einer eigenen *.class getestet, das ganze wird wirklich 1:1 decompilet.

Eine Lösung wäre jetzt ein fertiges JAR in eine EXE zu compilen. Dazu habe ich eine gute Software gefunden, http://www.excelsior-usa.com/landing/jet-obfuscator.html , die es auch ermöglicht die entsprechenden JAVA Laufzeitumgebungen mit in die EXE zu packen, so dass man auch kein portablilitäts Problem haben dürfte. Hab es gerade mit der Trial Version getestet, funktioniert sehr gut.

Jetzt wollte ich mal wissen wie ihr darüber denkt? Hat hier schon jemand Erfahrungen gesammelt, evtl. auch schon mit oben genannter Software?

ich sehe das als eine absolut falsche Sache, weil Portabilität ist dadurch gleich 0. Da es NUR auf Windows Systemen läuft (oder hast du schoneinmal eine EXE Datei unter Linux zum Laufen gebraucht ;))

Es gibt eine bessere Sache dafür die nennt sich Obfuscator diese verändern einen Java Quellcode so das fast nur noch abc und so drin auftaucht wenn man ihn decompilet, daher ist er sehr schlecht zu lesen (wie ASM Code ;))
hier ist z.B. eins http://www.retrologic.com/retroguard-main.html

Naja, wie ASM-Code ist doch leicht übertrieben :wink:

Das kann ja nur die Namen von eigenen Klassen, Methoden und Variablen ändern.

joa aber hab mal eine Klasse die nur aus a.a() a.c(a) besteht :wink:
das hat viel Ähnlichkeiten mit mit den move Sachen von ASM :wink:

In der Zeit, in der man versucht, diesen so entstellten kryptischen Code zu entschlüsseln, hat man die ganze Sache höchstwahrscheinlich schneller selber geschrieben. Das wird auch der Hintergrund dieses Tools sein. Aber wirklich sicher ist das nicht, das stimmt… Und wenn am Ende eine .exe rauskommen soll, nimmt man doch besser andere Programmiersprachen. :slight_smile:

ja das seh ich auch so zumal ich mir vorstellen kann das in dieser EXE da oben das Javaprogramm bestimmt auch “leicht” ausfindig gemacht werden kann und dann hat man den Quellcode auch wieder. Weil ich kann mir vorstellen das diese EXE nicht mehr als eine Art gepacktes Archiv ist.

Excelsior JET macht daraus eine Binärdatei, also nativen Code, ist also nicht mit Exe-Wrappern wie bspw. JeStart zu verwechseln, die das Java-Programm nur umhüllen und es zum Ausführen irgendwo hin entpacken.

hmmm ok dann klingt es ganz gut, nur dann ist dann fast alles was man durch Java gewonnen hat wieder weg, weil Plattformunabhängig ist es dann nichtmehr.
Außerdem hätte ich Bedenken was die Kompatibilität und Sicherheit angeht, auch wenn da steht das es alles erfüllt, die Sun RE ist einfach mehr getestet.

Aber hast du in deinem Code was zu verbergen :wink: zumal du da eh oft Probleme mit anderen Libs bekommen kannst, da sie oft unter GPL stehen.

Hm ja gut, also ich habe es gestest, es wird eigentlich alles reingepackt was notwendig ist, kann man ja auch von einer Software erwarten die in der Standard Version 1200 US Dollar kostet und sonst eigentlich nichts anderes kann.

Alternativ zur EXE kann man auch speziell was für Linux compilen lassen, das ist auch nicht mehr Aufwand, drei click’s mehr, daher wird der Aufwand nicht mehr und Vorteil JAVA bleibt erhalten, wenn man bedenkt das man ja z.B. unter C denn Quellcode schon für Windows und Linux anpassen muß…

Na ja, den Code verbergen bringt schon Vorteile wenn man mal mit dem Gedanken spielt seine Software verkaufen zu wollen. Was nutzt es sonst z.B. extra Gedanken und Lösungen anzubringen um einen Kopierschutz zu implementieren wenn dann einer der sich etwas auskennt das JAR entpackt und die class’es decompilet?

Ok, aber bis es mal soweit ist, reicht glaube ich mein Programmierstil, sprich das Chaos da drin…da kennt sich nach decompilen sowieso keiner mehr aus! :stuck_out_tongue:

ja da hast du im gewissen Sinne schon recht, nur (wie immer hab ich auch dagegen was;)) wenn du Software hast die du per Kopierschutz sichern musst dann hilft dir auch C/C++ nicht mehr wie man ja auch vielen Webseiten sieht wo du Cracks bekommst :wink:
Bei einfachen Software Sachen bekommste das leicht raus weil man hat ja meistens einen übersehbaren Kundenkreis, andererseits wenn du Software hast die nicht auf Programmierer abzielt alles machen weil die meisten Leuten den Code eh nicht lesen können ;). Und wenn du wie du schon gesagt hast einen schrecklichen Stil hast (oder nur mal „vortäuscht“) kann man alles noch schlechter lesen :smiley:

du willst einen Kopierschutz in Java implementieren ? viel spass…

ansonsten seh ich nicht das problem. Wenn du gute Software hast, dann kannst du die verkaufen. Ob jetzt jemand den Quellcode anschauen kann oder nicht ist egal… Hast du angst dass jemand deine Idee nachprogrammiert ? oeh dann hast du einiges in der open source bewegung verschlafen… denn jede idee wird schon meist nachprogrammiert.

Also ich habe noch nie verstanden weswegen man eine Angst hat dass jemand seinen code sehen kann, ausser er ist so miserabel programmiert, dass man sich schaemt :stuck_out_tongue_winking_eye:

Ich hatte letztes Jahr das vergüngen mir mit Excesior Jet genauer anzuschauen. Das erstellen einer exe ist recht einfach, problem ist aber das Swing Code z.b nicht komplett unterstützt wird. Java hat Anonyme Klassen was den Compiler ist bedrängnis bringt. Evtl hat sich da was geändert. Ich habe ein recht komplexes Programm mit viel NIO Code nicht wirklich zum fliegen bringen können. Mag sein das das mit hilfe der Consultans von dennen irgendwann gegangen wäre, leider ist das Projekt nicht dafür bestimmt das man sich damit brüsten darf das man es geschreiben hat. Daher ist auch der Kontakt zu dennen nicht möglich gewesen.
An alternativen mit dem Gcc wird noch gearbeitet, könnte irgendwann aber eine gute und günstige alternative bieten.

Ich würde eher zu yGuardRaten, damit kann man Quellcode ersthaft offuskieren und es werden auch neuere Java Versionen unterstützt. Gerade die Option das Programm grösser zu machen als es wirklich ist ist sehr gut, man hat dadurch zum einen Dateinamen die einen standart entzipper verzweifeln lassen und weiterhin gibts einfach eine menge an klassen die keine funktion haben, dennoch so aussehen wie der rest. Reflection wird ebenfall recht gut unterstützt. Das es einen ANT Task gibt der das ganze einfach in einen Automatisierten Build Prozess integriert muss ich wohl nicht mehr erwähnen .

Meine 2 Pfennig,
Mac

[QUOTE=deathbyaclown]
Also ich habe noch nie verstanden weswegen man eine Angst hat dass jemand seinen code sehen kann, ausser er ist so miserabel programmiert, dass man sich schaemt ;P[/QUOTE]
Wenn du irgendwann einmal professionell programmierst, dann ist die Idee der Obfuskation / Verschlüsselung des eigenen Sourcecode ganz schnell ganz schön attraktiv, ausserdem ist dies in manchen Fällen sogar PFLICHT, so zb. bei kryptographischen Methoden & Routinen, die die Sicherheit der Kunden gewährleisten sollen.

Closed Source war und ist eine der wichtigsten Sachen auf diesem Planeten, ohne den extrem obfuskierten Sourcecode von Windows würde dieses Forum wahrscheinlich nicht existieren, es gäbe weitaus weniger Menschen die etwas von PC´s verstehen und das Leben an sich wäre viel schwerer (!). Open Source & „Closed“ Source sind wie Yin und Yang, beide ergänzen sich und wenn einer wegfällt entsteht automatisch Chaos … pure Logik, pure Wahrheit das. :stuck_out_tongue_winking_eye:

Nicht jeder will das ganze Leben lang ein Spaghetti-Programmierer bleiben, so manch einer strebt nach höheren, und muss sich auch mit dem eventuellen Schutz des eigenen geistigen Gutes beschäftigen, so zb. ich. Ich werde dennoch viele Dinge offen verbreiten, um der Unix-Gemeinde zu danken. Trotz allem kann ich nicht immer meine Methoden preisgeben, dies würde mich zum Verbrecher und schlechten Programmierer / Sysadmin machen.

Das war das Wort zum Sonntag. ::uglylol

Ob Open- oder ClosedSource is ja deine Sache (ich persönlich gehöre zur ersten “Fraktion”^^). Aber mit der Kryptographie das is Schmarrn. Die Sicherheit einer Verschlüsselung sollte NIEMALS auf der Geheimhaltung des Algorithmus beruhen. Im Gegenteil: Wirklich gut ist ein solcher erst, wenn er lang und breit öffentlich diskutiert wird, und trotzdem noch keine Lücke bekannt ist…

Von wegen C/C++ verhindert Plattformunabhängigkeit ist auch nicht so ganz richtig… Es gibt dutzende Bibliotheken (die nicht-opensource Leute wahrscheinlich nicht kennen), die alle System-Schnittstellen abstrahieren, sodass man einmal mit der Windows Version und einmal mit der Linux Version linken kann (auf Handys und ähnlichen “ungewöhnlichen” Ziel-Plattformen funktioniert das natürlich nicht, aber ob Java in diesem Punkt so viel besser ist…).

Ach noch was (Frei nach RMS & co^^): Aber ist es nicht irgentwie eh… naja, unmoralisch, jemandem ein Produkt (halt ein ClosedSorce-Programm) zu verkaufen, und zu verhindern dass dieser es nach eigenen Vorstellungen benutzen kann? Wenn ich mir nen Staubsauger kaufe, hab ich auch das volle Recht, ihn aufzuschrauben, mir anzuschauen was er macht, und ihn sogar zu reparieren. Bei ClosedSource Software wird dem Kunden dieses Recht genommen, es wird alles daran gesetzt zu verheimlichen, was das Programm eigentlich tut (immerhin stellt es das auf meiner Hardware an, es geht mich also sehrwohl was an.

btw: Aus diesem Grund verkauft Microsoft Windows Vista ja auch nicht. Wer sich die Lizenz/EULA mal durchliest wird festellen, das der Kunde nur “das Recht erwirbt, die Software zu bestimmen, von Microsoft festgelegten Zwecken, und in festgelegtem Rahmen zu verwenden, Windows Vista bleibt immer alleiniges Eigentum der MS Coporation”.

sry für das ganze Offtopic fg

du weisst nicht wirklich, wie, wann und warum etwas verschlüsselt wird, oder? Wenn der Alogorithmus zur Gänze bekannt ist (also auch der individuelle Seed, IV usw.), dann kann man ALLES entschlüsseln → Damit ist der Sinn der Verschlüsselung komplett negiert, es gibt keine Geheimnisse (Passwörter & co) mehr. Es gibt ja auch Algorhithmen, die mathematisch nicht rückführbar sind … und das hat auch einen guten Grund. Das bitte einmal überlegen, bevor du über Dinge redest, in die du bisher noch keinen Einblick hattest… no Offense, though!

richtig, aber selbst dann müssen die individuellen Daten immer unbekannt bleiben, ergo ist das ganze nicht 100%ig einsehbar.

BITTE überleg dir in Zukunft besser, was du sagst. Java ist plattformunabhängig, ergo läuft es auf Handys + anderen kleinen Geräten (Java ME), normalen PC´s (Java SE) und auch Server-Systemen, egal welches Betriebssystem oder welche Hardware-Konfiguration vorliegt.

Ob Open- oder ClosedSource is ja deine Sache

Du hast nur einige wenige Worte meines Textes gelesen, und dann impulsiv und hirnlos deinen Kommentar dazugekloppt … ich bin kein Closed-Source-Befürworter, ganz im Gegenteil: Ich liebe Open Source. Aber Closed S. ist unabdingbar, ohne diese hättest du deine obigen Worte nicht schreiben können.

[QUOTE=specializt]du weisst nicht wirklich, wie, wann und warum etwas verschlüsselt wird, oder? Wenn der Alogorithmus zur Gänze bekannt ist (also auch der individuelle Seed, IV usw.), dann kann man ALLES entschlüsseln --> Damit ist der Sinn der Verschlüsselung komplett negiert, es gibt keine Geheimnisse (Passwörter & co) mehr. Es gibt ja auch Algorhithmen, die mathematisch nicht rückführbar sind … und das hat auch einen guten Grund. Das bitte einmal überlegen, bevor du über Dinge redest, in die du bisher noch keinen Einblick hattest… no Offense, though!
[/QUOTE]
Da muss ich dir vollkommen widersprechen, eine gute Verschlüsslung ist sicher wenn ihr Algo bekannt sein kann und sie trotzdem Sicher sein kann, siehe RSA oder EIGamal … Weil einen Algo bekommt man sehr schnell raus, egal in welcher Sprache er geschrieben ist.

du hast dich wohl verschrieben … du willst tatsächlich RSA von AES anhand des chiffrierten Strings unterscheiden können? In dem Falle bist du wohl Gott persönlich.
Einzig der Charset könnte evtl Aufschluss darüber geben, aber selbst das ist nicht sicher, denn die Zeichen überschneiden sich überall.

So… eine Verschlüsselung kann sicher sein, wenn jemand den IV, den Seed, den Key kennt UND meinenn chiffrierten Text hat? Stimmt, es ist sicher, und zwar ungefähr 0,2 Sekunden lang, so hoch ist nämlich die Dauer, wenn du diese Daten in dein Script eingibst und auf “entschlüsseln” drückst.

Anscheinend hast du nicht verstanden, was ich schrieb … ich hatte es von den INDIVIDUELLEN DATEN des Algos, der ganze Rest (also der allergrösste Teil) ist natürlich egal, der kann bekannt sein.

Entschuldigunf, falls das offensiv klingen sollte aber anders lässt sich ein Lesefehler eurerseits wohl nicht offenbaren, denke ich

ich hab nichts davon gesagt von Erkennen oder so, nur das ein Algo nur sicher ist wenn er auch mit bekanntem Algo nicht dechiffrierbar ist.

Ja klar wenn du deinen (Private)Key weggibst biste selbst schuld :wink: aber sonst sind die anerkannten Verfahren (noch)nicht Knackbar

Wenn du willst kannste dich ja daran mal versuchen :wink:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.7 (MingW32) - WinPT 1.2.0

hQEMA1nV2dgMcyD3AQgAtKOs6aYSikdtDvG3kIgsj2EvQrRsyRqJESUcOrHAjWVE
Rr3yw7pHRFzlN1tjtnR8v0FwLffyq9tNcztPmhwAH9NX9vYFbJxE6zVqCMlaTxf1
vM08OpHtX1WEH3/MdwPdL3LK7rFlhQBTLf9JVujujlrUhFFVk23hixjmPJD5tIc+
G0U1Edx9aCjLoh0aLYBukwKWDdrCQLdF0r9ynA6gmkJyGAYfhF2cUsmFb8yRKTlZ
3UMovp0CHBlwBxmozS3JfzRJW2ElSm4FptgxHN2dRXxa4jJ2X2s45HFo353AtPLU
CCgh/YV5gcOTnXIo8iAPCYtVrhOdXsa/Fekj2rC43dJvATNiLGO8D6PuFT5UdZ2G
PNCjfgA3ECLMWQUjIsMeyHa95OMeAjmQyM6xoLa6SEqX3xn3gKCxgHrQmPtcJ+ng
kVPR1vckEQZb4uvEB4Q1WbCunG2DWcNgfJ2DDopmxQSBKaT/bzbXcr8yrcFLLtnu
=na4K
-----END PGP MESSAGE-----

Es gibt keine individuellen Daten eines Algos seidenn du zählst die Public/Private Keys dazu.

Und zeig mir ein Verfahren was laut nach den deutschen Gesetzen als sicher anerkannt ist wo das Verfahren nicht offengelegt ist

gib mir nen Supercomputer und ich knack dir das Teil … alles nur eine Frage von Rechenpower. Vor kurzem wurden 60-bit geknackt, nach ca. 2 Jahren durch ein Netzwerk aus über 2000 PC´s … das gibt zu denken auf, wenn man berücksichtigt dass Quantencomputer in 20 oder 30 Jahren die Rechenpower des Otto Normalverbrauchers ca. um den Faktor 1000 erhöhen werden, das theoretische Limit an Rechenleistung für diese existiert nicht (!!).

es gibt keine individuellen Daten eines Algos

ähm … falsch:
Seed, IV, Salt … das und mehr sind alles individuelle Daten (zumindest sollten sie das!). Dazu kommt dann der Public-Key oder der Public und der Private-Key (bei asymmetrischer Verschlüsselung), diese sind die einzigen individuellen Daten, welche vom Benutzer selbst erzeugt werden. Insbesonders der Seed ist meisstens fix vorgegeben, oft ein Array aus Bytes … und da liegt schon der erste Programmierfehler, aber das is n anderes Thema.

Wie du siehst ist ein nicht unbedeutender Teil vom Algorithmus auch Bestandteil der Verschlüsselungsmethode selbst … somit kann man zumindest eine anfängliche Annäherung an die Entschlüsselung wagen, wenn der Sourcecode vorliegt. Ergo muss hier noch einiges geleistet werden → alle Daten, die auch nur annähernd zur ENTschlüsselung beitragen sollten obfuskiert werden. Ausgenommen ist natürlich der Verarbeitungsteil, also ca. 70% des gesamten Quelltextes.

Genau dieses Prinzip verfolgt man auch beim Militär, durch Minimierung der öffentlich sichtbaren, individuellen Daten verfielfacht man die Sicherheit.

naja 60 Bit knacken ist ja auch nichts besonderes, wenn man bedenkt das viele Verschlüsselungsalgos mit 1024 oder mehr arbeiten
Aber um auf das eigentliche Thema zurück zu kommen, geheimhalten des Algos hilft dir absolut nichts um eine Verschlüsselung sicherer zu machen. Weil gib einem der mit Reverseengeneering gut ist das Programm und du kannst wahrscheinlich zusehen wie er dir deinen Algo als Quellcode hinschreibt