Un déobfuscateur Dalvik basé sur un modèle qui utilise une exécution limitée pour améliorer l'analyse sémantique. De plus, l'inspiration pour un autre déobfuscateur Android: simplifier.
Avant
Après
SHA1: A68D5D2DA7550D35F7DBEFC21B7DEEBE3F4005F3
MD5: 2DD2EEEDA08AC8C15BE8A9F2D01ADBE8
Puisque vous êtes un inverseur Android d'élite, je suis sûr que vous avez déjà des smali et des baksmali sur votre chemin. Si pour une raison étrange, ce n'est pas déjà installé, cela devrait vous aider à démarrer, mais veuillez l'examiner attentivement avant de courir:
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 Assurez-vous que adb est sur votre chemin.
gem install dex-oracleOu, si vous préférez construire à partir de la source:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle installVous devez avoir un émulateur en cours d'exécution ou un appareil branché pour que Oracle fonctionne. La version Android minimale requise est de 5,0!
Oracle doit exécuter des méthodes sur un système Android en direct. Cela peut être sur un appareil ou un émulateur (préféré). S'il s'agit d'un appareil, assurez-vous que cela ne vous dérange pas d'exécuter un code potentiellement hostile dessus .
Si vous souhaitez utiliser un émulateur et que le SDK Android soit déjà installé, vous pouvez créer et démarrer des images d'émulateur avec:
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
Par exemple, pour désobfusquer uniquement les méthodes dans une classe appelée Lcom/android/system/admin/CCOIoll; à l'intérieur d'un apk appelé obad.apk :
dex-oracle -i com/android/system/admin/CCOIoll obad.apkOracle prend Android Apps (APK), Dalvik Executables (DEX) et SMALI Fichiers en entrées. Premièrement, si l'entrée est un APK ou Dex, il est démonté en fichiers SMALI. Ensuite, les fichiers SMALI sont transmis à divers plugins qui effectuent une analyse et des modifications. Les plugins recherchent des modèles qui peuvent être transformés en quelque chose de plus facile à lire. Afin de comprendre ce que fait le code, certaines méthodes Dalvik sont réellement exécutées et la sortie est collectée. De cette façon, certains appels de méthode peuvent être remplacés par des constantes. Après cela, tous les fichiers SMALI sont mis à jour. Enfin, si l'entrée était un fichier APK ou Dex, les fichiers SMALI modifiés sont recompilés et un APK ou Dex mis à jour est créé.
L'exécution de la méthode est effectuée par le pilote. L'APK, DEX ou SMALI d'entrée est combiné avec le pilote dans un seul DEX à l'aide de Dexmerge et est poussé sur un appareil ou un émulateur. Les plugins peuvent ensuite utiliser le pilote qui utilise la réflexion Java pour exécuter des méthodes à partir du dex d'entrée. Les valeurs de retour peuvent être utilisées pour améliorer l'analyse sémantique au-delà de la simple reconnaissance des modèles. Ceci est particulièrement utile pour de nombreuses méthodes de décryptage de cordes, qui prennent généralement une chaîne cryptée ou un tableau d'octets. Une limitation est que l'exécution est limitée aux méthodes statiques.
Il y a trois plugins qui viennent avec Oracle:
Si vous rencontrez un nouveau type d'obscurcissement, il peut être possible de désobfusquer avec Oracle. Regardez le smali et déterminez si le code peut être:
Si l'un ou l'autre de ces deux est le cas, vous devriez essayer d'écrire votre propre plugin. Il y a quatre étapes pour construire votre propre plugin:
Les plugins inclus devraient être un bon guide pour comprendre les étapes n ° 3 et n ° 4. Le conducteur est conçu pour aider à l'étape # 2.
Bien sûr, vous êtes toujours les bienvenus pour partager tout obscurcissement que vous rencontrez et quelqu'un peut éventuellement y accéder.
Tout d'abord, assurez-vous que dx est sur votre chemin. Cela fait partie du SDK Android, mais ce n'est probablement pas sur votre chemin à moins que vous ne soyez hardcore.
Le dossier Driver est un projet Java géré par Gradle. Importez-le dans Eclipse, Intellij, etc. et apportez toutes les modifications que vous aimez. Pour terminer la mise à jour du pilote, exécutez ./update_driver . Cela reconstruira le pilote et convertira le pot de sortie en un dex.
S'il y a un problème d'exécution du code de pilote sur votre émulateur ou votre appareil, assurez-vous d'ouvrir monitor (une partie du SDK Android) et consultez les indices là-bas. Même si l'erreur n'a pas de sens pour vous, cela vous aidera si vous le publiez avec le problème que vous créez.
Toutes les plates-formes Android ne fonctionnent pas bien avec Dex-Oracle. Certains d'entre eux se font juste de la merde lorsque vous essayez d'exécuter des fichiers Dex arbitraires. Si vous rencontrez des problèmes avec les segfaults ou les accidents de pilote, essayez d'utiliser Android 4.4.2 Niveau 19 avec ARM.
Il est possible qu'un plugin voit un motif qu'il pense être l'obscurcissement, mais est en fait un code qu'il ne devrait pas exécuter. Cela semble peu probable parce que les modèles d'obscurcissement sont vraiment inhabituels, mais c'est possible. Si vous trouvez qu'un plugin particulier cause des problèmes et que vous êtes sûr que l'application n'est pas protégée par cet obfuscateur particulier, c'est-à-dire que l'application n'est pas dexguard mais le plugin Dexguard essaie d'exécuter des choses, il suffit de le désactiver.