Bester Java-Verschleierer? [geschlossen]

106

Ich entwickle eine Sicherheitssoftware und möchte meinen Java-Code verschleiern, damit ein Reverse Engineering nicht mehr möglich ist. Was ist der zuverlässigste Java-Verschleierer?

Xinus
quelle
10
@Xinus "unmöglich rückgängig zu machen" - kaum, am besten versucht und gescheitert
Ameise
210
Ich hatte einige Kollegen, die stark verschleierten Code erstellt haben. Aber das war nicht ihre Absicht.
Steve McLeod
7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.- Dilbert
Ameise
7
Reverse Engineering ist nicht zu vermeiden.
Mnementh
11
@Mnementh: Es reicht aus, Reverse Engineering für Ihre spezielle App unerschwinglich teuer zu machen.
Dmitry Leskov

Antworten:

98

Zunächst müssen Sie wirklich bedenken, dass es nie unmöglich ist, etwas zurückzuentwickeln. Alles ist hackbar. Ein intelligenter Entwickler, der eine intelligente IDE verwendet, kann bereits weit genug kommen.

Nun, hier finden Sie eine Liste. ProGuard ist ziemlich gut. Ich habe es selbst verwendet, aber nur, um Java-Code zu "minimieren".

BalusC
quelle
1
@BalusC: Welches Tool verwenden Sie also, um Java-Code zu verschleiern? Sie verschleiern Ihren Java-Code, nicht wahr?
Thinhbk
@Thinhbk Obfuscation macht es schwieriger, nützliche Stapelspuren zu erhalten.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen: Zustimmen. IMO, Verschleierung wird dazu führen, dass Stapelspuren größtenteils unbrauchbar werden. In diesem Fall verwende ich einen Trick mit der Protokollnachricht, der helfen kann.
Thinhbk
2
@Thinhbk Proguard generiert eine Karte, um verschleierte Stapelspuren zurück in den ursprünglichen Code zu übersetzen. Andernfalls würden Stapelspuren, wie Sie sagten, unbrauchbar (aber wer bekommt sowieso nicht erfasste Ausnahmen ... ;-))
Matthieu
@Matthieu: Ist es möglich, Stack-Trace, der gesichert ist, automatisch in den Originalcode zu übersetzen? Es wäre großartig und neu für mich. Ich weiß nur, dass eine manuelle Rückübersetzung schwierig sein kann, wenn die Codebasis riesig ist.
Thinhbk
33

Wenn ein Computer es ausführen kann, kann ein entsprechend motivierter Mensch es rückentwickeln.

Thorbjørn Ravn Andersen
quelle
3
Wie viele Leute können verschleierten Code lesen und die Logik verstehen? Ich habe viele Freunde von Ingenieuren und sie können das nicht. Nur John Nash kann das;)
Kodmanyagha
5
@kodmanyagha Wenn sie motiviert genug wären, würden sie es lernen. Es ist nicht schwer.
Thorbjørn Ravn Andersen
1
Im mathematischen Sinne ist es möglich, ohne eine Möglichkeit zum Reverse Engineering zu laufen. Darum geht es bei der homomorphen Verschlüsselung, aber es gibt einige Hindernisse, die gelöst werden müssen, damit sie im Gegensatz zu SaaS auf Computersoftware praktisch verwendet werden kann. Wir bewegen uns langsam dorthin. Grundlegende Arbeiten von Gentry über vollständig homomorphe Verschlüsselung und "mathematische Puzzles" von Amit Sahai et al. machte einen großen Sprung in diese Richtung. Es fehlt nur ein Element (das ich als "Barrierefunktion" bezeichne), das das gesamte Schema durchführbar machen würde. Was jetzt unmöglich ist, wird in Zukunft möglich sein.
Ogggre
30

In meinem Artikel Schützen Sie Ihren Java-Code - durch Obfuscators und darüber hinaus [Archiviert] finden Sie eine Diskussion über die Verschleierung im Vergleich zu drei anderen Möglichkeiten, das Reverse Engineering Ihrer Apps teurer zu machen, sowie eine Sammlung von Links zu Tools und weiterführendem Lesematerial.

Dmitry Leskov
quelle
1
Das brauche ich eigentlich. Ich möchte PHP Obfuscator für meine Projekte schreiben. Die Logik ist überall gleich. Danke ...
Kodmanyagha
1
Cooler und umfangreicher Artikel über Java-Verschleierung und Software-Sammlung.
m3nda
15

Ich denke, dass Proguard das Beste ist. Es ist auch möglich, es in Ihre IDE zu integrieren (zum Beispiel NetBeans). Bedenken Sie jedoch, dass es schwierig sein kann, Probleme in Ihren Protokollen zu verfolgen, wenn Sie Ihren Code verschleiern.

andrew0007
quelle
6
+1 für "Bedenken Sie, dass es schwierig sein kann, Probleme in Ihren Protokollen zu verfolgen, wenn Sie Ihren Code verschleiern". Gerade als Sie dachten, dass das Debuggen schwer genug war ...
Adam Paynter
7
Ein guter Verschleierer, der Namen und Zeilennummern ändert, sollte ein Protokoll erstellen, mit dem der Prozess umgekehrt werden kann. Auf diese Weise bleiben zumindest Stapelspuren für verschleierte Binärdateien nützlich.
Joachim Sauer
3
ProGuard erstellt solche Reverse-Dateien zum Debuggen. :-)
Malax
10

Ich habe Allatori benutzt und es hat seine Arbeit ziemlich gut gemacht.

der Verlust
quelle
7

Es ist wahr, dass es immer möglich ist, einen Code zurückzuentwickeln, genauso wie es unmöglich ist, ein Haus zu schützen, damit niemand jemals davon stehlen kann. Das hält mich jedoch nicht davon ab, die Tür zu verschließen. Eigentlich bin ich nicht in der Java-Welt, ich benutze BitHelmet für .net.

Daniel Dolz
quelle
7
+1, um Sie zurück zu net 0 zu bringen. Diese Antwort ist nicht nicht hilfreich.
HaloWebMaster
6

Ich habe in meiner vorherigen Firma mit Klassmaster gearbeitet und es funktioniert sehr gut und kann ziemlich gut in Build-Systeme integriert werden (Maven-Unterstützung ist ausgezeichnet). Aber es ist nicht kostenlos.

Anoop
quelle
6

Ich weiß nicht genau, ob die Lösung sicher ist, aber über die ClassGuard- Lösung ist es interessant, den Artikel und den Kommentar unter folgender Adresse zu lesen: http://www.javaworld.com/community/?q=node/1604#comment -12296

Renato
quelle
Eine weitere Alternative, bei der anstelle von defineClass auch nativer Code verwendet wird, ist JarCrypt
Renato
Ein Artikel, der lehrt, wie man ClassGuard knackt : setrst.blogspot.com/2010/04/classguard-unguarded.html . Ich weiß nur nicht, ob dies bei der neuesten Version noch funktioniert.
Renato