Frage

Gibt es eine Möglichkeit, ein Java-Programm in einem Format bereitzustellen, das nicht-engineerable umkehren?

Ich weiß, wie meine Anwendung in eine ausführbare JAR-Datei zu konvertieren, aber ich möchte sicherstellen, dass der Code nicht Reverse Engineering werden, oder zumindest nicht leicht.

Verschleierung des Quellcodes zählt nicht ... es macht es schwieriger, den Code zu verstehen, aber es nicht verbergen.

Eine verwandte Frage ist Wie kompiliert sperren Java-Klassen Dekompilierung zu verhindern?


Nachdem ich das Programm abgeschlossen haben, hätte ich noch Zugriff auf die Originalquelle, so die Aufrechterhaltung der Anmeldung nicht das Problem sein würde. Wenn die Anwendung verteilt ist, würde ich nicht will keines des Benutzers in der Lage sein, es zu dekompilieren. Obfuscation nicht dieses Ziel zu erreichen, da die Benutzer noch in der Lage wäre, es zu dekompilieren, und während sie Schwierigkeiten haben würde, im Anschluss an die Aktion fließt, würden sie in der Lage sein, den Code zu sehen und möglicherweise Informationen nehmen aus ihm heraus.

Was mich betrifft im Begriff ist, wenn es keine Informationen in den Code für den Remotezugriff beziehen. mit einem User-ID und Passwort gibt es eine Vielzahl an dem die Anwendung durch den Anwender verbindet. Gibt es eine Möglichkeit des Host-Adresse von dem Benutzer zu verbergen, wenn die Adresse innerhalb des Quellcodes ist?

War es hilfreich?

Lösung

Sie können Ihre JAR-Datei mit YGuard verschleiern. Es ist nicht zu verschleiern Ihr Quellcode , aber die kompilierten Klassen, so gibt es kein Problem mit später dem Code beibehalten wird.

Wenn Sie eine Schnur ausblenden möchten, können Sie es verschlüsseln konnte, was es schwieriger macht, um es durch den Quellcode suchen (es ist noch besser, wenn Sie die JAR-Datei zu verschleiern).

Andere Tipps

Die kurze Antwort ist „Nein, es existiert nicht“.

Reverse Engineering ist ein Prozess, bedeutet nicht, überhaupt auf dem Code suchen . Es ist im Grunde versucht, die zugrunde liegenden Mechanismen zu verstehen und sie dann imitieren. Zum Beispiel, dass, wie JScript von MS Labs angezeigt wird, durch Kopieren JavaScript Verhalten des Netscape, ohne Zugriff auf den Code zu haben. Die Kopie war so perfekt, dass selbst die Fehler kopiert wurden.

Wenn Sie wissen, welche Plattformen Sie zielen, bekommen etwas, das Ihr Java in nativen Code kompiliert, wie GCJ .

Kurz kommt, dass Sie nie den Quellcode in der Lage sein zu verstecken, da der Benutzer immer Ihre Bytecode hat und Jad es.

Sie schreiben in einer Sprache, die Selbstbeobachtung als Teil der Kernsprache hat. Es erzeugt .class Dateien, deren Spezifikationen weithin bekannt sind (so dass andere Anbieter Reinraum- Implementierungen von Java Compiler und Interpreter produzieren).

Das heißt, es sind öffentlich zugängliche decompilers. Alles was man braucht ist ein paar Google-Suchen, und Sie haben einige Java-Code, der die gleiche Sache wie Sie tut. Nur ohne die Kommentare, und einige der Variablennamen (aber die Funktionsnamen gleich bleiben).

Wirklich, Verschleierung ist über alle können Sie erhalten (obwohl der dekompilierten Code wird bereits leicht verschleiert werden), ohne zu C zu gehen oder einer anderen voll kompilierte Sprache, sowieso.

Sie keine interpretierte Sprache benutzen? Was versuchen Sie trotzdem zu schützen? Wenn es wertvoll genug ist, kann alles Reverse Engineering werden. Die Chancen, dass jemand fürsorglich genug Ingenieur die meisten Projekte rückgängig ist minimal. Obfuscation bietet zumindest eine minimale Hürde.

Stellen Sie sicher, dass Ihr geistiges Eigentum (IP) über andere Mechanismen geschützt ist. Vor allem für Sicherheitscode, es ist wichtig, dass Menschen in der Lage sein, Implementierungen zu prüfen, so dass die Sicherheit in dem Algorithmus ist, nicht in der Quelle.

Ich bin versucht zu fragen, warum Sie dies tun wollen würde, aber ich werde verlassen, dass allein ...

Das Problem, das ich sehe, ist, dass die JVM, wie die CLR, muss in der Lage Dir Code, um JIT-Kompilierung intrepert und ausführen. Sie können es mehr machen „komplex“ aber wenn man bedenkt, dass die Spezifikation für Bytecode ist ziemlich gut dokumentiert, und besteht auf einem viel höheren Niveau als so etwas wie die x86-Assembler-spec, dann ist es unwahrscheinlich, dass Sie können „verstecken“, um den Prozessablauf, da wurde es ist um dort für das Programm in erster Linie zu arbeiten.

Es kann nicht getan werden.

Alles, was übersetzt werden kann, werden de-zusammengestellt. Das Beste was Sie tun können, ist die Hölle es aus verschleiern.

Davon abgesehen, gibt es einige interessante Sachen in Quantum Cryptography passiert. Im Wesentlichen wird jeder Versuch, die Nachricht zu lesen ändert es. Ich weiß nicht, ob dies auf dem Quellcode angewandt werden könnte oder nicht.

Auch wenn Sie den Code in nativen Maschinensprache übersetzen, gibt es alle Arten von Programmen, die Sie im Wesentlichen decompile es in Assembler-Sprache und folgen Sie den Prozessablauf (OlyDbg, IDA Pro).

lassen

Machen Sie es in einen Web-Service. Dann sind Sie der einzige, der den Quellcode sehen können.

Es kann nicht getan werden. Dies ist kein Java Problem. Jede Sprache, die kompiliert werden kann, kann für Java werden dekompilierten, es ist nur einfacher.

Sie versuchen, jemand ein Bild zu zeigen, ohne sie tatsächlich zu zeigen. Es ist nicht möglich. Sie können auch nicht Ihre Gastgeber verstecken, auch wenn Sie auf der Anwendungsebene zu verstecken. Jemand kann es immer noch grap über Wireshark oder andere Netzwerk-Sniffer.

Als jemand oben gesagt, Reverse Engineering konnte immer die ausführbare Datei dekompilieren. Die einzige Möglichkeit, den Quellcode (oder Algorithmus) zu schützen, ist nicht die ausführbare Datei zu verteilen.

trennen Ihre Anwendung in einem Server-Code und einer Client-Anwendung, verstecken den wichtigen Teil Ihres Algorithmus in Ihrem Server-Code und es in einem Cloud-Server laufen, nur den Client-Code verteilen, die nur als Daten Getter und Senter arbeitet.

Durch diese sogar Ihre Kundennummer wird dekompilierten. Sie verlieren nichts.

Aber sicher, dass dies die Leistung und Benutzerfreundlichkeit verringern.

ich denke, das ist nicht die Antwort sein kann, das Sie suchen, sondern nur andere Idee zu erhöhen Quellcode zu schützen.

Mit etwas irgendwann interpretiert sie verarbeitet werden muss „im klaren“. Der String würde klar wie der Tag erscheint, sobald der Code durch JAD ausgeführt wird. Sie könnten einen Verschlüsselungsschlüssel mit Ihrer App bereitstellen oder einen grundlegenden Ceasar Cipher tun die Host-Verbindung info zu verschlüsseln und zur Laufzeit entschlüsseln ...

Aber an einem gewissen Punkt während der Verarbeitung der Host-Verbindungsinformationen muß für Ihre Anwendung in den klaren gestellt werden, um mit dem Host zu verbinden ...

So Sie es statisch verbergen können, aber man kann es nicht während der Laufzeit verstecken, wenn sie einen Debugger ausgeführt

Das ist unmöglich. Die CPU wird Ihr Programm auszuführen, das heißt Ihr Programm in einem Format vorliegen, das eine CPU verstehen kann. CPUs sind viel dümmer als der Mensch. Ergo, wenn eine CPU Ihr Programm verstehen kann, ein Mensch kann.

Mit Bedenken über den Code zu verbergen, würde ich laufen ProGuard trotzdem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top