
Ein musterbasierter Dalvik-Deobfuskator, der begrenzte Ausführung nutzt, um die semantische Analyse zu verbessern.
Ein musterbasierter Dalvik-Entschleierer, der begrenzte Ausführung nutzt, um die semantische Analyse zu verbessern. Außerdem die Inspiration für einen weiteren Android-Entschleierer: Simplify.
Vorher

Nachher

sha1: a68d5d2da7550d35f7dbefc21b7deebe3f4005f3
md5: 2dd2eeeda08ac8c15be8a9f2d01adbe8
Da Sie ein versierter Android-Rückentwickler sind, bin ich mir sicher, dass Sie Smali und Baksmali bereits in Ihrem Pfad haben. Falls es aus irgendeinem seltsamen Grund noch nicht installiert ist, sollte Sie dies in Gang bringen, aber bitte überprüfen Sie es vor der Ausführung sorgfältig:
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 in Ihrem Pfad ist.
gem install dex-oracle
Oder, wenn Sie es aus dem Quellcode erstellen möchten:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install
Sie müssen entweder einen laufenden Emulator oder ein angeschlossenes Gerät haben, damit Oracle funktioniert. Die minimale Android-Version ist 5.0!
Oracle muss Methoden auf einem lebenden Android-System ausführen. Dies kann entweder auf einem Gerät oder einem Emulator (bevorzugt) sein. Wenn es ein Gerät ist, stellen Sie sicher, dass es Ihnen nichts ausmacht, potenziell feindlichen Code darauf auszuführen.
Wenn Sie einen Emulator verwenden möchten und das Android SDK bereits installiert haben, können Sie Emulator-Images 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 zu entschleiern:
dex-oracle -i com/android/system/admin/CCOIoll obad.apk
Oracle nimmt Android-Apps (APK), Dalvik-Ausführbare (DEX) und Smali-Dateien als Eingabe. Zuerst wird die Eingabe, falls es sich um eine APK oder DEX handelt, in Smali-Dateien zerlegt. Dann werden die Smali-Dateien an verschiedene Plugins übergeben, die Analysen und Modifikationen durchführen. Plugins suchen nach Mustern, die in eine besser lesbare Form 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. Schließlich, falls die Eingabe eine APK- oder DEX-Datei war, werden die modifizierten Smali-Dateien neu kompiliert und eine aktualisierte APK oder DEX erstellt.
Die Methodenausführung erfolgt durch den Driver. Die Eingabe-APK, DEX oder Smali wird mit dem Driver mittels dexmerge zu einer einzigen DEX kombiniert und auf ein Gerät oder einen Emulator übertragen. Plugins können dann den Driver verwenden, der Java-Reflection nutzt, um Methoden aus der Eingabe-DEX auszuführen. Die Rückgabewerte können verwendet werden, um die semantische Analyse über die reine Mustererkennung hinaus zu verbessern. Dies ist besonders nützlich für viele String-Entschlüsselungsmethoden, die normalerweise einen verschlüsselten String oder ein Byte-Array nehmen. Eine Einschränkung ist, dass die Ausführung auf statische Methoden beschränkt ist.
Es gibt drei Plugins, die mit Oracle ausgeliefert werden:
Wenn Sie auf eine neue Art von Verschleierung stoßen, ist es möglicherweise möglich, diese mit Oracle zu entschleiern. Betrachten Sie den Smali-Code und überlegen Sie, ob der Code entweder:
Wenn einer dieser beiden Fälle zutrifft, sollten Sie versuchen, Ihr eigenes Plugin zu schreiben. Es gibt vier Schritte, um ein eigenes Plugin zu erstellen:
Die enthaltenen Plugins sollten eine gute Anleitung zum Verständnis der Schritte #3 und #4 sein. Der Driver ist darauf ausgelegt, bei Schritt #2 zu helfen.
Natürlich sind Sie jederzeit willkommen, jede Verschleierung, auf die Sie stoßen, zu teilen, und jemand wird sich möglicherweise irgendwann darum kümmern.
Stellen Sie zunächst sicher, dass dx in Ihrem Pfad ist. Dies ist Teil des Android SDK, aber es ist wahrscheinlich nicht in Ihrem Pfad, es sei denn, Sie sind hardcore.
Der driver-Ordner ist ein Java-Projekt, das mit Gradle verwaltet wird. Importieren Sie es in Eclipse, IntelliJ usw. und nehmen Sie alle gewünschten Änderungen vor. Um den Driver zu aktualisieren, führen Sie ./update_driver aus. Dies erstellt den Driver neu und konvertiert das Ausgabe-JAR in eine DEX.
Wenn es ein Problem bei der Ausführung des Driver-Codes auf Ihrem Emulator oder Gerät gibt, öffnen Sie monitor (Teil des Android SDK) und suchen Sie dort nach Hinweisen. Selbst wenn der Fehler für Sie keinen Sinn ergibt, hilft es, ihn zusammen mit dem Issue, das Sie erstellen werden, zu posten.
Nicht alle Android-Plattformen funktionieren gut mit dex-oracle. Einige von ihnen brechen einfach ab, wenn sie versuchen, beliebige DEX-Dateien auszuführen. Wenn Sie Probleme mit Segfaults oder Driver-Abstürzen haben, versuchen Sie Android 4.4.2 API Level 19 mit ARM.
Es ist möglich, dass ein Plugin ein Muster sieht, das es für eine Verschleierung hält, aber tatsächlich Code ist, den es nicht ausführen sollte. Dies scheint unwahrscheinlich, da die Verschleierungsmuster wirklich ungewöhnlich sind, aber es ist möglich. Wenn Sie feststellen, dass ein bestimmtes Plugin Probleme verursacht und Sie sicher sind, dass die App nicht durch diesen speziellen Verschleierer geschützt ist, d.h. die App ist nicht DexGuarded, aber das DexGuard-Plugin versucht, Dinge auszuführen, deaktivieren Sie es einfach.