2009-05-28 16 views

Antwort

9

Sie können nicht. Wenn die JRE sie ausführen kann, kann sie von einer Anwendung dekompiliert werden.

Das Beste, auf das Sie hoffen können, ist es sehr schwer zu lesen (ersetzen Sie alle Symbole durch Kombinationen von 'l' und '1' und 'O' und '0', fügen Sie viel nutzlosen Code und so weiter ein). Sie würden überrascht sein, wie unlesbar Sie Code erstellen können, selbst mit einem relativ dummen Übersetzungstool. Dies wird als Verschleierung bezeichnet und ist zwar nicht perfekt, aber manchmal ausreichend.

Denken Sie daran, Sie können den entschlossenen Hacker nicht mehr stoppen als der entschlossene Einbrecher. Was du versuchst, ist, die Dinge für den gelegentlichen Angreifer sehr schwer zu machen. Wenn sie mit den Symbolen , O001llll10O, OO01l1ll10O, O0Ol11ll10O und O001l1ll1OO dargestellt werden, und Code, der nichts nützliches zu tun scheint, werden die meisten Leute einfach aufgeben.

+0

Wie, was und wo ein solches Szenario anwenden Sir? – danielad

3

Zunächst können Sie nicht vermeiden, dass Leute Ihren Code reverse engineeren. Der JVM-Bytecode muss einfach sein, um ausgeführt zu werden, und es gibt mehrere Programme, um ihn zurückzuentwickeln (dasselbe gilt für .NET CLR). Sie können es immer schwieriger machen, die Barriere (d. H. Kosten) zu erhöhen, um Ihren Code zu sehen und zu verstehen.

Üblichen Weg ist obfuscate die Quelle mit einem Werkzeug. Klassen, Methoden und Felder werden in der Codebasis umbenannt, auch wenn Sie mit ungültigen Bezeichnern versehen sind, wodurch der Code fast unmöglich zu verstehen ist. Ich hatte gute Ergebnisse mit JODE in der Vergangenheit. Verwenden Sie nach dem Verschleiern einen Decompiler, um zu sehen, wie Ihr Code aussieht ...

Neben der Verschleierung können Sie Ihre Klassendateien (alle außer einer kleinen Starterklasse) mit einer Methode verschlüsseln und einen benutzerdefinierten Klassenlader verwenden, um sie zu entschlüsseln. Leider kann die Classloader-Klasse nicht selbst verschlüsselt werden, sodass die Leute den Entschlüsselungsalgorithmus durch Lesen des dekompilierten Codes Ihres Klassenladeprogramms herausfinden können. Aber das Fenster zum Angriff auf deinen Code wurde kleiner. Das hindert die Leute nicht daran, deinen Code zu sehen, macht es nur für den gelegentlichen Angreifer schwieriger.

Sie könnten auch versuchen, die Java-Anwendung in einige Windows-EXE zu konvertieren, die den Hinweis verbergen, dass es überhaupt Java ist (bis zu einem gewissen Grad) oder wirklich in Maschinencode kompiliert, abhängig von Ihrem Bedarf an JVM-Funktionen. (Ich habe das nicht versucht.)

2

GCJ ist ein kostenloses Tool, das entweder zu Bytecode oder nativem Code kompilieren kann. Wenn man bedenkt, dass das den Zweck von Java besiegt.

+0

ich würde mich freuen, wenn Sie mehr über Ihre Suche teilen, können Sie nach der covertion laufen oder in der Lage sein, sie als Bibliothek zu nennen oder sind Sie in der Lage, sie von commmnad Zeile oder ausführbare ausführen? – danielad

1

Ein bisschen spät weiß ich, aber die Antwort ist nein.

Auch wenn Sie in C schreiben und auf systemeigenen Code kompilieren, gibt es Disasasembler/Debugger, die es Benutzern ermöglichen, durch Ihren Code zu gehen. Zugegeben - das Debuggen von optimiertem Code ohne symbolische Information ist ein Schmerz - aber es kann gemacht werden, ich musste es gelegentlich tun.

Es gibt Schritte, die Sie ergreifen können, um dies schwieriger zu machen - z. Unter Windows können Sie die API IsDebuggerPresent in einer Schleife aufrufen, um zu sehen, ob jemand Ihren Prozess debuggt, und wenn ja, und es sich um einen Release-Build handelt - beenden Sie den Prozess. Natürlich könnte ein ausreichend bestimmter Angreifer Ihren Aufruf an IsDebuggerPresent abfangen und immer false zurückgeben.

Es gibt eine ganze Reihe von Techniken, die aufgetaucht sind - Leute, die etwas schützen wollen und Leute, die es weit aufreißen wollen, es ist ein regelrechtes Wettrüsten!Sobald du diesen Pfad eingeschlagen hast - du musst ständig deine Verteidigung aktualisieren/verbessern, es gibt kein Halten mehr.

0

Dies ist nicht meine praktische Lösung, aber hier denke ich gute Sammlung oder Ressource und Tutorials für die Durchführung auf höchstem Niveau der Zufriedenheit.

A suggestion from this website (Oracle Community)

(saubere Art und Weise), Obfuscate Code, gibt es viele Open Source und kostenlos obfuscator Tools, hier ist eine einfache Liste von ihnen: [Open source obfuscators lis t]. Diese Werkzeuge machen Ihren Code unlesbar (obwohl Sie immer noch es dekompilieren können), indem Sie Namen ändern. Dies ist der gängigste Weg, um Ihren Code zu schützen.

2. (Nicht so saubere Art und Weise) Wenn Sie eine bestimmte Zielplattform haben (wie Windows) oder Sie können verschiedene Versionen für unterschiedliche Plattformen haben, Sie Sprache ein ausgeklügeltes Teil Ihrer Algorithmen in einer niedrigen Niveau schreiben können wie C (das ist sehr schwer zu dekompilieren und zu verstehen) und verwenden Sie es als eine native Bibliothek in Ihrer Java-Anwendung. Es ist nicht sauber, , weil viele von uns Java für seine plattformübergreifenden Fähigkeiten verwenden, und diese Methode blendet diese Fähigkeit aus.

und dieses unter einen Schritt für Schritt folgen: ProtectYourJavaCode

Viel Spaß! Halten Sie Ihre Lösungen hinzugefügt wir brauchen das mehr.

Verwandte Themen