Ein Musterbasis Dalvik Deobfuscator, das eine begrenzte Ausführung verwendet, um die semantische Analyse zu verbessern. Auch die Inspiration für einen anderen Android Deobfuscator: vereinfachen.
Vor
Nach
SHA1: A68D5D2DA7550D35F7DBEFC21B7DEEBE3F4005F3
MD5: 2DD2EEEDA08AC8C15BE8A9F2D01ADBE8
Da Sie ein Elite -Android -Umkehrer sind, bin ich sicher, dass Sie bereits Smali und Baksmali auf Ihrem Weg haben. Wenn es aus irgendeinem seltsamen Grund nicht bereits installiert ist, sollte dies Ihnen den Einstieg bringen. Untersuchen Sie es jedoch sorgfältig vor dem Ausführen:
mkdir ~ /bin || cd ~ /bin
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali-2.2.5.jar && mv smali- * .jar smali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.2.5.jar && mv baksmali- * .jar baksmali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali
chmod +x ./smali ./baksmali
export PATH= $PATH : $PWD Stellen Sie sicher, dass adb auf Ihrem Weg ist.
gem install dex-oracleOder, wenn Sie es vorziehen, aus Quelle zu bauen:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle installSie müssen entweder einen Emulator ausgeführt oder ein Gerät angeschlossen, damit Oracle funktioniert. Die minimal erforderliche Android -Version ist 5.0!
Oracle muss Methoden auf einem Live -Android -System ausführen. Dies kann entweder auf einem Gerät oder einem Emulator (bevorzugt) sein. Wenn es sich um ein Gerät handelt, stellen Sie sicher, dass es Ihnen nichts ausmacht, potenziell feindlichen Code darauf auszuführen .
Wenn Sie einen Emulator verwenden möchten und bereits die Android -SDK installieren lassen, können Sie Emulatorbilder erstellen und starten mit:
android avd Usage: dex-oracle [opts] <APK / DEX / Smali Directory>
-h, --help Display this screen
-s ANDROID_SERIAL, Device ID for driver execution, default=""
--specific-device
-t, --timeout N ADB command execution timeout in seconds, default="120"
-i, --include PATTERN Only optimize methods and classes matching the pattern, e.g. Ldune;->melange()V
-e, --exclude PATTERN Exclude these types from optimization; including overrides
--disable-plugins STRING[,STRING]*
Disable plugins, e.g. stringdecryptor,unreflector
--list-plugins List available plugins
-v, --verbose Be verbose
-V, --vverbose Be very verbose
Zum Beispiel, um nur Methoden in einer Klasse namens Lcom/android/system/admin/CCOIoll; Innerhalb einer APK namens obad.apk :
dex-oracle -i com/android/system/admin/CCOIoll obad.apkOracle nimmt Android Apps (APK), Dalvik Executables (DEX) und SMALI -Dateien als Eingaben. Erstens, wenn die Eingabe ein APK oder Dex ist, wird er in Smali -Dateien zerlegt. Anschließend werden die Smali -Dateien an verschiedene Plugins übergeben, die Analysen und Änderungen durchführen. Plugins suchen nach Mustern, die in etwas leichteres Lesen umgewandelt werden können. Um zu verstehen, was der Code tut, werden einige Dalvik -Methoden tatsächlich ausgeführt und die Ausgabe wird gesammelt. Auf diese Weise können einige Methodenaufrufe durch Konstanten ersetzt werden. Danach werden alle Smali -Dateien aktualisiert. Wenn die Eingabe eine APK- oder eine DEX -Datei war, werden die geänderten SMALI -Dateien neu kompiliert und eine aktualisierte APK oder Dex erstellt.
Die Methodenausführung wird vom Treiber durchgeführt. Die Eingangs -APK, Dex oder Smali wird mit dem Treiber mit Dexmerge in einen einzigen Dex kombiniert und auf ein Gerät oder einen Emulator gedrückt. Plugins können dann den Treiber verwenden, der Java Reflection verwendet, um Methoden aus dem Eingabe -Dex auszuführen. Die Rückgabewerte können verwendet werden, um die semantische Analyse über die bloße Mustererkennung hinaus zu verbessern. Dies ist besonders nützlich für viele String -Entschlüsselungsmethoden, die normalerweise eine verschlüsselte Zeichenfolge oder ein Byte -Array annehmen. Eine Einschränkung besteht darin, dass die Ausführung auf statische Methoden beschränkt ist.
Es gibt drei Plugins mit Oracle:
Wenn Sie auf eine neue Art von Verschleierung stoßen, kann es möglich sein, mit Oracle zu deobfuscieren. Schauen Sie sich den Smali an und finden Sie heraus, ob der Code entweder sein kann:
Wenn einer dieser beiden der Fall ist, sollten Sie versuchen, Ihr eigenes Plugin zu schreiben. Es gibt vier Schritte, um Ihr eigenes Plugin zu erstellen:
Die mitgelieferten Plugins sollten ein guter Leitfaden für das Verständnis der Schritte Nr. 3 und Nr. 4 sein. Der Fahrer ist so konzipiert, dass er mit Schritt 2 hilft.
Natürlich können Sie immer gerne die Verschleierung teilen, auf die Sie stoßen, und jemand kann irgendwann dazu kommen.
Stellen Sie zunächst sicher, dass dx auf Ihrem Weg ist. Dies ist Teil des Android SDK, aber es ist wahrscheinlich nicht auf Ihrem Weg, es sei denn, Sie sind Hardcore.
Der Treiberordner ist ein von Gradle verwaltetes Java -Projekt. Importieren Sie es in Sonnenfinsternis, Intellij usw. und nehmen Sie alle Änderungen vor, die Sie mögen. Um den Treiber zu aktualisieren, rennen Sie ./update_driver . Dadurch wird der Treiber wieder aufgebaut und das Ausgangsglas in einen Dex umgewandelt.
Wenn ein Problem beim Ausführen von Treibercode auf Ihrem Emulator oder Gerät vorliegt, öffnen Sie monitor (Teil des Android SDK) und prüfen Sie, ob Sie dort Hinweise geben. Auch wenn der Fehler für Sie keinen Sinn ergibt, hilft es, wenn Sie ihn zusammen mit dem Problem veröffentlichen, das Sie erstellen.
Nicht alle Android-Plattformen funktionieren gut mit Dex-Oracle. Einige von ihnen machen nur aus, wenn sie versuchen, willkürliche DEX -Dateien auszuführen. Wenn Sie Probleme mit Segfaults oder Treiberabstürmen haben, verwenden Sie Android 4.4.2 API Level 19 mit Arm.
Es ist möglich, dass ein Plugin ein Muster sieht, von dem es glaubt, dass es sich um Verschleierung handelt, aber tatsächlich ein Code ist, den es nicht ausführen sollte. Dies erscheint unwahrscheinlich, weil die Verschleierung Muster wirklich ungewöhnlich sind, aber es ist möglich. Wenn Sie feststellen, dass ein bestimmtes Plugin Probleme verursacht und dass die App nicht von diesem bestimmten Verschleiftungskörper geschützt ist, wird dh die App nicht dexGuarded, aber das DexGuard -Plugin versucht, Dinge auszuführen, deaktivieren Sie es einfach.