安装:

步骤一. 安装Smali / Baksmali

我确定如果你是安卓逆向精英,那你的路径中肯定已经有smali和baksmali了。

步骤二. 安装安卓 SDK / ADB

确保你的路径中有adb。

步骤三. 安装Gem

gem install dex-oracle
或者,你也可以选择使用这种方式获得源:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install

步骤四. 连接设备或者模拟器

你必须有一个模拟器运行或者一个接入Oracle能够工作的设备。
Oracle需要在一个live的安卓系统上执行方法。你可以选择真正的安卓设备,也可以选择模拟器(推荐)。如果你选择了真正的安卓设备,确保你不介意在上面运行潜在的恶意代码。
如果你更喜欢使用模拟器,并且已经安装了Android SDK,你可以创建并启动模拟器,如图:
android avd

用法

Usage: dex-oracle [opts]
-h, –help 显示屏幕
-s ANDROID_SERIAL, 执行驱动的设备ID, default=””

–specific-device
-t, –timeout N ADB 命令执行超时, default=”120″
-i, –include PATTERN 仅仅是优化方法和类匹配模式, e.g. Ldune;->melange()V
-e, –exclude PATTERN 从优化中排除这些类型,包括重写
–disable-plugins STRING[,STRING]*
禁用插件, e.g. stringdecryptor,unreflector
–list-plugins 列出可用插件
-v, –verbose 详细内容
-V, –vverbose 非常详细的内容
举个例子,对于在一个类里面的唯一的deobfuscate方法调用Lcom/android/system/admin/CCOIoll,而不是一个APK调用obad.apk;

dex-oracle -i com/android/system/admin/CCOIoll obad.apk

如何运行

Oracle把Android app(APK), Dalvik可执行文件(DEX)和Smali文件作为输入源。第一,如果输入源是一个APK或者DEX,它会被分解成很多个Smali文件。然后,这个Smali文件会被传递给很多执行粉丝和修改的插件。插件搜索能够被转化为更易读的模式。为了了解代码做了什么工作,一些Dalvik方法真的被执行了,然后我们收集了输出。这样,一些方法调用可以被替换为常量。之后,所有的Smali文件都被更新了。最后,如果输入是一个APK或者一个DEX文件,被修改的Smali文件会被重新编译,一个已更新的APK或者DEX就被创建了。

方法执行是被驱动执行的。输入APK, DEX或者Smali都被和驱动混合进了一个使用dexmerge的DEX,然后被压入了一个安卓设备或者安卓模拟器。无论插件是否请求,Oracle之后都会发送方法执行信息到驱动。驱动程序在自己的DEX使用Oracle提供的参数使用Java反射来执行方法,结果返回任何输出或异常。这种方法对于很多字符串解密方法都非常有用,通常情况下,使用加密字符串或者一些one limitation都是执行是限制的静态方法。

攻击

1. 创建自己的插件

这里有三个带有Oracle的插件:
Undexguard – 删除某些特定类型的Dexguard混淆
Unreflector – 删除某些Java反射
String Decryptor – 简单的能够删除一些常见加密字符串的插件
如果你遇到一类新的混淆,它可能会用Oracle反混淆。查看Smali并找出是否代码可以这样:

1. 重新排列

2. 执行一些静态方法理解

以上任何一种情况,你都应该尝试并写出你自己的插件。下面的四个步骤教你如何创建自己的插件:

1. 确定Smali模式

2. 搞清楚如何简化模式

3. 搞清楚如何与驱动交互并调用方法

4. 搞清楚如何直接应用修改

这里包含的插件应该是理解步骤3、4的很好的指导。驱动被设计帮助步骤2 。

当然,我们非常欢迎你分享任何你遇到的混淆。
更新驱动程序
首先,确保DX在你的路径上。这是Android SDK的一部分,但是它可能不在你的路径上,除非你是硬核。
驱动程序文件夹是一个由Gradle管理的Java项目。将它导入Eclipse,IntelliJ等,然后进行修改。为了完成驱动的更新,运行./update_driver。这将重建驱动并转换输入JAR进入一个DEX。

更多相关文章

  1. Android(安卓)getView中的position问题解决方案
  2. Android(安卓)RadioGroup中设置默认选中RadioButton 后,选中两个
  3. 解决“Cannot merge new index 67208 into a non-jumbo instruct
  4. Android(安卓)BigDecimal工具类
  5. 【整理】学习Android(安卓)Studio时遇到的错误及解决方法(持续更
  6. Android(安卓)ListView详解
  7. Android的volley框架心得
  8. Android:SQLite数据库
  9. 软键盘常用控制方法

随机推荐

  1. Android(安卓)TypeArray
  2. Android主流IOC框架浅析(Java注解反射原理
  3. android maven lion
  4. Android Studio 使用技巧(1)
  5. 【android studio】导入项目后无法运行,修
  6. android 源码获取
  7. Linux创建应用快捷方式
  8. android RecyclerView checkbox复用解决
  9. Android 优惠卷样式
  10. Android虚拟键(NavigationBar)适配问题