基于模式的DALVIK DEOBFUSCATOR,它使用有限的执行来改善语义分析。另外,另一个Android DeobFuscator的灵感:简化。
前
后
SHA1:A68D5D2DA7550D35F7DBEFC21B7DEEBE3F4005F3
MD5:2DD2EEDA08AC8C15BE8A9F2D01ADBE8
由于您是精英Android Reverser,因此我确定您的道路上已经有Smali和Baksmali。如果出于某种奇怪的原因尚未安装,这应该可以让您开始,但是请在运行之前仔细检查它:
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确保adb在您的道路上。
gem install dex-oracle或者,如果您愿意从来源构建:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install您必须具有运行的模拟器或插入设备才能使Oracle工作。所需的最低Android版本为5.0!
Oracle需要在实时Android系统上执行方法。这可以在设备或模拟器上(首选)。如果是设备,请确保您不介意在其上运行潜在的敌对代码。
如果您想使用仿真器,并且已经安装了Android SDK,则可以使用以下方式创建并启动模拟器图像。
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
例如,仅在称为Lcom/android/system/admin/CCOIoll;在一个名为obad.apk的apk内部:
dex-oracle -i com/android/system/admin/CCOIoll obad.apkOracle将Android Apps(APK),Dalvik可执行文件(DEX)和Smali文件作为输入。首先,如果输入是APK或DEX,则将其分解为Smali文件。然后,Smali文件传递给执行分析和修改的各种插件。插件搜索可以将其转换为更容易阅读的模式。为了了解代码在做什么,实际执行了一些Dalvik方法并收集了输出。这样,可以将某些方法调用替换为常数。之后,所有SMALI文件均已更新。最后,如果输入是APK或DEX文件,则重新编译修改后的SMALI文件,并创建更新的APK或DEX。
方法执行由驱动程序执行。输入APK,DEX或SMALI与驱动程序结合使用Dexmerge,并将其推入设备或模拟器上。然后,插件可以使用使用Java反射的驱动程序从输入DEX执行方法。返回值可用于改善仅仅模式识别的语义分析。这对于许多字符串解密方法特别有用,该方法通常采用加密的字符串或某些字节数组。一个限制是执行仅限于静态方法。
有三个带有Oracle的插件:
如果您遇到一种新型的混淆,则可能会与Oracle脱落。查看smali并找出代码是否可以是:
如果这两种情况中的任何一个,您应该尝试编写自己的插件。构建自己的插件有四个步骤:
随附的插件应该是了解步骤3和4的好指南。驾驶员旨在帮助第2步。
当然,您总是欢迎您分享您遇到的任何混淆,并最终可能会遇到。
首先,确保dx在您的路上。这是Android SDK的一部分,但是除非您是铁杆,否则它可能不在您的道路上。
驱动程序文件夹是由Gradle管理的Java项目。将其导入Eclipse,Intellij等,并进行您喜欢的任何更改。要完成更新驱动程序,请运行./update_driver 。这将重建驱动程序并将输出罐转换为DEX。
如果在模拟器或设备上执行驱动程序代码存在问题,请确保打开monitor (Android SDK的一部分)并检查那里的任何线索。即使错误对您没有意义,如果您将其与您创建的问题一起发布,也将有所帮助。
并非所有的Android平台都可以与Dex-Oracle合作。当尝试执行任意DEX文件时,其中一些只是废话。如果您在Segfaults或驱动程序崩溃方面遇到麻烦,请尝试使用Android 4.4.2 API级19级使用ARM。
插件可能会看到它认为是混淆的模式,但实际上是某些代码不应该执行的代码。这似乎不太可能,因为混淆模式确实很不寻常,但这是可能的。如果您发现特定的插件会引起问题,并且确定该应用程序不会受到该特定的offuscator的保护,那么该应用程序不会被删除,但是DexGuard插件正在尝试执行内容,只需将其禁用即可。