5.11---5.14
该阶段主要还是摸清soot反编译APK方法流程。
针对soot反编译APK时,过滤.dex文件内android.包下各种class的load问题,在github上问了下,得到如下回复:
![]()
![]()
但目前还是无法对soot中的Transformer有进一步理解,相关的还有Phase等;
后通过对源码单步跟踪,初步给出以下办法:
在soot.Scene.loadNecessaryClasses()中,通过过滤android.包名阻止soot加载该包下的相关类,从而最后生成只有apk中src下的源码文件对应Jimple文件。但该做法对后期生成数据流图和控制流图可能存在影响,目前还未验证。
![]()
![]()
最后输出Jimple文件如下:
![]()
该阶段主要还是摸清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文件如下:
本文介绍了使用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文件,但可能影响后期生成的数据流图和控制流图。
2255

被折叠的 条评论
为什么被折叠?



