利用Soot插装Android App

原文地址:点击打开链接

  在Soot里我们增加了对读写Dalvik bytecode的支持。主要包含两个模块,第一个称作Dexpler ,主要由Alexandre Bartel 团队开发,Ben Bellamy 、Eric Bodden、Frank Hartmann 和 Michael Market 对其做了增强。Dexpler将 Dalvik 字节码转换成 Jimple的三地址格式代码(three-address code)。

  如何插装

首先下载soot的最新版本,比如 soot 的nightly buid版本。同时查看https://github.com/Sable/android-platforms下的目录。这个目录包含不同版本的Android标准库,Soot需要利用这些来解析你分析或者插装的应用程序里的类型。接着我们实现一个驱动类(driver class),在这个类中有一个主方法包含以下代码:

第一条操作告知Soot装载Android apk文件,第二条告知Soot输出一个Dex/APK 文件(理论上,你也可以将Java转换成Dex或者将Dex转换成Java等),最后两个操作告诉Soot装着两个类,我们在插装的时候需要这两个类,但可能被插装的APK不需要这两个类。

接着我们往Soot里添加一个Transform:

这会遍历APK里所有Bodies里的所有Units并且对于每一个InvokeStmt将会调用标注”code here”里的代码。

在“code here”这个标注里面插入下面的代码:

这使得Soot在方法调用之前插入 System.out.println(“HELLO”),但是这个方法调用的目标必须是 onDraw方法。

最后,别忘了调用Soot的主方法:

很简单不是吗后你只需要带以下参数来运行你的驱动类(driver class): 这里,path/to/android-platforms 是你之前下载的Android 平台jar包路径,your.apk是你要插装的APK路径,选项 -process-dir告知Soot处理这个APK里所有的类。最后你会在目录 ./sootOutput里发现一个同名的APK。

完整代码如下:

来源:zlp1992

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年1月2日
下一篇 2015年1月2日

相关推荐