Wie kann ich meine Java-Anwendung in eine ausführbare jar verpacken, die nicht dekompiliert werden kann (zum Beispiel von Jadclipse)?lassen Sie Ihr Jar nicht dekompiliert werden
Antwort
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.
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.)
GCJ ist ein kostenloses Tool, das entweder zu Bytecode oder nativem Code kompilieren kann. Wenn man bedenkt, dass das den Zweck von Java besiegt.
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
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.
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.
- 1. Welche Arten von ausführbaren Dateien können dekompiliert werden?
- 2. bearbeiten apk Code dekompiliert
- 3. Lassen Sie zwei Container miteinander verknüpft werden
- 4. Facebook: Ihr Link nicht
- 5. Generieren Sie Ihr Datenwörterbuch?
- 6. lassen Sie var oder var zu lassen
- 7. Erstellen Sie Ihr eigenes HRESULT?
- 8. log4j2 Protokolle werden nicht in Datei geschrieben, wenn sie als jar ausgeführt werden
- 9. lassen Sie in cond
- 10. Maus Geben/Lassen Sie Nachrichten nicht funktionieren?
- 11. kann nicht innerhalb .jar
- 12. Aktualisieren Sie Ihr Spiel mit neuen Variablen
- 13. Was schreiben Sie in Ihr Logbuch?
- 14. Wie testen Sie Ihr Interrupt-Handling-Modul?
- 15. Javacpp: Gemeinsame Bibliothek in einem Jar kann nicht verknüpft werden
- 16. Wie Keystores zurücksetzen, wenn Sie ihr Passwort nicht kennen?
- 17. Lassen Sie Ihre WebSite von Chrome als Suchmaschine erkannt werden
- 18. Lassen Sie alle eingehenden E-Mails in CRM verfolgt werden
- 19. Docker: Erstellen Sie Ihr eigenes Bild Problem
- 20. Werbebanner entfernen und App nicht zu Vollbild werden lassen
- 21. Wie richten Sie Ihr Domänenmodell ein?
- 22. Erstellen Sie ausführbare Jar mit Einstiegspunkt in einem eingebetteten Jar
- 23. Wie kann man das TabBarItem Image klein erscheinen lassen und es gleichzeitig nicht pixelig werden lassen?
- 24. Maven-Paket ausführbare-jar kann nicht ausgeführt werden "NoClassDefFoundError"
- 25. JAR-Datei kann nicht ausgeführt werden (Maven Project)
- 26. Hibernate - Frühjahr annotierte Entitäten, die nicht aus jar gescannt werden
- 27. SpringBoot loader.path Externes Jar kann nicht geladen werden
- 28. Java kann nicht ausgeführt werden jar keine Haupt-Manifest Attribut
- 29. SnappyCodec kann nicht mit hadoop jar verwendet werden: NullPointerException
- 30. Xamarin .jar Bindung - ‚Bitmap konnte nicht gefunden werden‘
Wie, was und wo ein solches Szenario anwenden Sir? – danielad