SOOT学习【1】

本文介绍了使用Soot反编译APK的过程,包括Finding Classes、Sootification和Jimplification三个步骤。在Finding Classes阶段,通过DexClassProvider建立class name到dex文件的映射。Sootification阶段将.dex中的class转换为SootClass。Jimplification阶段将Dalvik字节码转为Jimple指令。同时,针对反编译时遇到的android包过滤问题,提出了在soot.Scene.loadNecessaryClasses()中过滤android.包名的方法,以生成只包含源码文件对应的Jimple文件,但可能影响后期生成的数据流图和控制流图。
5.11---5.14

该阶段主要还是摸清soot反编译APK方法流程。
1、Finding Classes
为了让soot在一个.dex文件中找到所有的class,DexClassProvider构建了一个index,用来map一个class name和dex文件中对应的class definition。这个对应关系最终保存在SourceLocator中。
2、Sootification
这一步指的是将.dex中的所有class用sootclass来抽象表示,该过程有DexResolver完成。
3、Jimplification
这一步指的是根据每一个sootclass,从Dalvik bytecodes转化成Jimple指令,由DexBody.jimplify以及InstructionFactory实现。


针对soot反编译APK时,过滤.dex文件内android.包下各种class的load问题,在github上问了下,得到如下回复:


但目前还是无法对soot中的Transformer有进一步理解,相关的还有Phase等;

后通过对源码单步跟踪,初步给出以下办法:
在soot.Scene.loadNecessaryClasses()中,通过过滤android.包名阻止soot加载该包下的相关类,从而最后生成只有apk中src下的源码文件对应Jimple文件。但该做法对后期生成数据流图和控制流图可能存在影响,目前还未验证。


最后输出Jimple文件如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值