Android Apk dekompilieren scheint einfach
War ich einfach nur Herumspielen. Ich habe die dex2jar http://code.google.com/p/dex2jar/ und die Java-Decompiler JD-GUI http://java.decompiler.free.fr/?q=jdgui
Bekam ich meine eigenen apk-Datei (signed, sealed und auf Google Play), verwendet dex2jar, um es in ein jar-repository.
Kommandozeile (Windows-Benutzer verwenden .bat, alle anderen .sh):
d2j-dex2jar.bat -f MyAwesomeApp.apk
Ich gezogen und die Ausgabe in eine JD-GUI, und alle class-Dateien, die original-code wieder aufgetaucht.
Ich stutzte ein bisschen. Ist meine java - /Android-code, der diese ausgesetzt? Wie ist ProGuard Schutz meines apk, wenn es sein kann dekompiliert und regeneriert so leicht? Es scheint nicht verschleiert an alle...
Vielen Dank im Voraus.
- LOL! Haben Sie nicht angewendet, proguard, um Ihre apk? Wenn die Antwort Nein ist, dass ist Ihre Antwort! 🙂
- Sie konfigurieren müssen ProGuard developer.android.com/tools/help/proguard.html Auch, Sie würde vielleicht werfen Sie einen Blick auf NDK developer.android.com/tools/sdk/ndk/index.html
- Ich habe verwendet, Proguard und das Projekt bearbeitet.properties-Datei vor rel;gegen meine app. Ich sollte erwähnen, dass die Namen der Klassen sind nicht mein original, aber alle Methodennamen scheinen, originell zu sein. I. e. Umkehrung meiner app ist einfach, da nur die Namen der Klassen geändert haben. EDIT: Auch scheint es, statische Methode Namen geändert haben. Aber die Umkehrung dieser ist kaum Hexenwerk.
- Können Sie Ihre proguard.cfg? Und haben Sie überprüft, Beispiele
- Klingt wie Sie haben nicht das setup proguard richtig - für noch mehr Verschleierung check out saikoa.com/dexguard
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obfuscators in der Regel einfach ändern, Klassen, Methoden und Felder Namen-Namen, die keine Bedeutung haben. Also, wenn Sie "ScoreCalculator.computeScore(Player p, Match m)" am Ende mit "A. zk(F f, R r -)". Dies ist ähnlich zu dem, was hässlich machen oder Closure compiler tun für javascript, mit der Ausnahme, dass in javascript ist es zu reduzieren, Quelle Länge.
Ist es möglich, zu verstehen, was die Methode tut ja eh, es ist nur schwieriger.
Aslo, Java späte Bindung (wie DLLs oder SO-Dateien). So, Aufrufe, gehen Sie außerhalb Ihres code (wie auf java.util, java.lang etc.. Pakete) werden nicht verschleiert. Auch, wenn Ihr code benötigt, um Anrufe von außerhalb (ein typisches Beispiel, registrieren Sie einen listener auf einem button), dass der code nicht obfuscated. Geschieht dasselbe für eine DLL, wo man kann deutlich sehen, den Namen der Methode, die aufgerufen werden müssen form, außerhalb der DLL und ruft zu anderen DLLs.
Jedoch, die Zuordnung zwischen einem bestimmten Quellcode und der kompilierte code ist nicht unbedingt eins zu eins. Ältere C-Compiler verwendet, um zu produzieren das gleiche op-code für eine gegebene Quell-Richtlinie, so decompilers waren sehr effektiv. Dann C-Compiler viele Optimierungen, um die daraus resultierenden op-code, und diese Optimierungen decompiler meist unwirksam [1]
Java nie umgesetzt (viel) Optimierungen zur compile-Zeit, da laufen auf verschiedenen Plattformen (es gibt unter anderem verschiedene android-Geräte), Java beschloss, ernsthafte Optimierungen später, zur Laufzeit, basierend auf der Architektur und hardware-Eigenschaften der ausgeführten Gerät (das ist, was "HotSpot" wird meist über [2]).
Gut obfuscators in der Regel auch neu anordnen, bytecode-Anweisungen, oder legen Sie etwas nutzlos, oder gelten einige Optimierungen im Voraus zu machen decompilers nicht in der Lage (oder weniger) zum ableiten von source-code, so leicht.
Diese Technik ist nutzlos, wenn es um Menschen geht, die Lesen können-bytecode, als mögliche C-Verschleierung ist nutzlos, wenn eine person Lesen können assembler-code.
Als viele cracking-Software zu demonstrieren, reverse engineering wird immer möglich ist, auch mit C-oder anderen Sprachen, auch auf firmware (denke über iPhone-firmwares), bewirken, dass der client der code ausgeführt wird, ist immer nicht vertrauenswürdigen, und kann immer manipuliert werden.
Wenn Sie sehr mission critical code, etwas, das es Wert eine Menge Geld, die jemand anderes stehlen kann, würde ich vorschlagen, um es zum laufen server-Seite, oder überprüfen Sie server-side-irgendwie.
Könnte ich auch hinzufügen, dass es eine moderne alternative zu dieser APKTool->dex2jar->JD-GUI route!
Nur versuchen, open-source APK und DEX-decompiler genannt Jadx: https://sourceforge.net/projects/jadx/files/
Es hat auch die online-version Sie hier: http://www.javadecompilers.com/apk