Ist Java Code-Verschleierung tatsächlich effektiv gegen Decompiler? [geschlossen]

8

Ich bin neugierig genug darüber nachzudenken, keinen bestimmten Code in Java zu schreiben, weil er einfach zu dekompilieren ist. Gibt es eine Möglichkeit, dass ich in Java schreiben kann und mir keine Sorgen um Decompiler machen muss? Ich verstehe, dass alles mit genügend Zeit rückentwickelt werden kann, also frage ich: Ist Java-Klasse-Obfuscator effektiv genug, um die Dekompilierung zu verhindern?

    
Zombies 11.02.2010, 03:28
quelle

7 Antworten

10
  

sind Java-Klasse-Obfuscatoren wirksam genug, um die Dekompilierung zu verhindern?

Ich würde "nein" sagen. Wenn ich den Quellcode dekompiliere, um herauszufinden, wie jemand etwas gemacht hat, weiß ich bereits, wonach ich suche. Ich muss also nicht das ganze Programm verstehen - nur das eine Stück, das mich damals interessiert. Mit genug Rätselraten über Methoden und Backtracking ein bisschen nach oben in der Aufrufkette, ist es in der Regel möglich zu bestimmen, was unter der Haube ist, ohne einen übermäßigen Aufwand.

    
John Feminella 11.02.2010 03:34
quelle
6

Wenn Ihre Frage ist Kann ich sicherstellen, dass niemand meinen Code hacken kann, wäre die Antwort NEIN .. Ob in JAVA oder Visual C ++. Solange Ihre Software, die aus Byes oder Bits besteht, direkt vom Hacker erreichbar ist.

Der Grund ist einfach.

Wie auch immer Sie es codiert haben, das kann entschlüsselt werden.

Die beste Strategie könnte darin bestehen, einen Webdienst zu erstellen und dort Ihre geheime Logik einzusetzen. Lassen Sie andere Ihren Dienst nutzen, ohne Zugriff auf Ihre Schreibweise zu haben.

    
Sreejesh 11.02.2010 05:32
quelle
3

Aus persönlicher Erfahrung, die Java dekompiliert, werde ich sagen, dass die Verschleierung die Versuche von jemandem, sehr sehr irritierend und schwierig zu dekompilieren, dazu bringen kann. Am ärgerlichsten ist es für mich, wenn die finalen Build-Klassendateien alle "a.class, b.class, c.class" usw. heißen und eine große Anzahl von Dummies hineingeworfen wird. Was die Codeverschleierung angeht, versuchen Sie es / Fänge machen einen guten Job, Dinge für den Decompiler zu verpfuschen.

Im Allgemeinen ist alles, was Sie dekompilieren, nicht kompilierbar, sondern gibt Ihnen Hinweise auf die allgemeine Funktionsweise des Programms.

    
revenantphoenix 11.02.2010 03:32
quelle
3

Verschleierung, in Java und anderen Sprachen, ist nur eine Abschreckung. Es hebt einfach die Messlatte für den Angreifer. Das bedeutet nicht, dass Verschleierung keinen Wert hat, es ist einfach keine Garantie.

Was möchten Sie schützen und auf welche Art von Markt zielen Sie?

Verschleierung zum Schutz eines Lizenzalgorithmus in einem Markt, der voller Piraterie ist, wird nicht viel bedeuten. Für SMB kann es jedoch ausreichen, um die meisten Gelegenheits-Piraten auszusondern.

Wenn Sie versuchen, IP vor Konkurrenz zu schützen, sehe ich zwei Antworten. Die Idee wird schwer zu schützen sein. Ein fähiger Ingenieur, der den Code betrachtet, wird die Edelsteine ​​der Logik herausfinden und neu implementieren können. Die Verschleierung macht es für die Menschen sehr viel schwerer, den Code einfach in sein eigenes Produkt aufzunehmen. Die Wartungskosten werden weiter wachsen, wenn sie versuchen, Änderungen vorzunehmen (ich würde sagen, das gilt auch für sauber dekompilierten Code).

Die Java-Produkte, die ich für meine Firma entwickle, sind verschleiert. Haben sie uns vor Diebstahl geschützt? Ich bezweifle es. Aber im Zusammenhang mit unseren Entwicklungskosten war die Verschleierung nicht so teuer. Ein kleines bisschen Schutz für einen kleinen Preis ist kein schlechter Kompromiss.

    
Jim Rush 13.02.2010 14:04
quelle
2

"Effektiv genug" hängt ganz davon ab, wie effektiv Sie es brauchen. Und das hängt davon ab, was Sie schützen und von wem. Keine der herkömmlichen Methoden (Verschleierung, Verschlüsseln der Bytecodes, Kompilieren zu einer "exe") wird einen erfahrenen und entschlossenen Angreifer mit genügend Zeit und Ansporn aufhalten. Aber das gilt für alle Formen der Programmierung. (Sie können auch C / C ++ - Anwendungen disassemblieren oder dekompilieren ...)

Der einzige Weg, wie Sie vor einem ernsthaften Reverse-Engineering-Aufwand schützen können, ist die Verwendung einer sicheren Ausführungsplattform. z.B. etwas basierend auf TPM verwenden. Selbst wenn die Schlechten einen Logikanalysator an ein System anschließen können, auf dem der Code ausgeführt wird, können sie (theoretisch) den ausgeführten nativen Code erfassen und dann auf dem Reverse-Engineering-Pfad starten.

BEARBEITEN : Jemand hat Berichten zufolge Erfolg beim Brechen eines populären TPM-Chips unter Verwendung eines Elektronenmikroskops; siehe diesen Registrierungsartikel . Interessanterweise war seine ursprüngliche Motivation, Xbox 360 Konsolen zu hacken!

    
Stephen C 11.02.2010 04:36
quelle
0

Ehrlich gesagt Nein. Egal wie lächerlich Sie den Code verschleiern, wenn jemand weiß, dass er eine Million Dollar aus Ihrem Code machen kann, wird er Ihre Klassendateien dekompilieren und den Code bekommen.

Es gibt jedoch Alternativen:

  1. Konvertieren Sie Ihr Java-Programm in exe beofre-Verteilung. Sie müssen wissen, dass es hier Fänge gibt.

  2. Verschlüsseln Sie Klassendateien mit einem Schlüssel. Erstellen Sie einen benutzerdefinierten Klassenlader, der die Klassendateien mit dem privaten Schlüssel dekodieren kann, bevor er in den Speicher geladen wird. Hier gibt es zwei Probleme, a) Ladezeit erhöht, b) wie Sie den privaten Schlüssel verbergen.

Suraj Chandran 11.02.2010 03:49
quelle
0

Wenn Sie lesen, meine Post Ссылка Sie werden sehen, dass ich nicht eine gute Java-de-obfuscator finden konnte, die tatsächlich funktioniert wie erwartet.

so lautet die aktuelle Antwort: NEIN.

    
taitelman 23.05.2017 11:53
quelle

Tags und Links