返回首页

微信公众号

课时16:更强抽取壳的DUMP组件理论分析和脱壳实战
设置弹幕颜色
设置弹幕类型
0:00 / 0:00
速度
显示弹幕
海量弹幕
弹幕透明度
0.5
0.75
正常
1.25
1.5
2
[x]
Player version
Player FPS
Video type
Video url
Video resolution
Video duration
课件

更强脱壳器的不同思路

分析FartYoupk的整体dump组件



Fart整体dump思路的演进



1.0:classloader中dump

1、时机

  • APP中的Application类中的attachBaseContext和onCreate函数是app中最先执行的方法。

  • 因此需要选在在Application的onCreate函数执行之后才开始被调用的任意一个函数中。

  • 比如选择在ActivityThread中的performLaunchActivity函数作为时机,来获取最终的应用的Classloader。
      

2、方式:“hook” →、反射和“dump”

  • 获取到应用解密后的dex文件最终依附的Classloader之后

  • 通过java的反射机制最终获取到对应的DexFile的结构体,并完成dex的dump


v1.0:classloader中dump


1、时机:ActivityThread.java

2、方式:art/runtime/native/dalvik_system_DexFile.cc



v2.0:更多”海量“的脱壳点


1、时机:

  • 所有类和方法的装载和链接/编译和执行流程之中


2、方式:基于“hook”→ ”dump“

  • ART下DexFile类中定义了两个关键的变量: begin_、size_以及用于获取这两个变量的Begin()和Size()函数

  • 这两个变量分别代表着当前DexFile对象对应的内存中的dex文件加载的起始位置和大小。

  • 只要有了这两个值,我们就可以完成对这个dex的dump。



类装载的流程



1、装载:查找和导入Class文件

2、链接:其中解析步骤是可以选择的
    (a)检查:检查载入的class文件数据的正确性
    (b)准备:给类的静态变量分配存储空间
    (c)解析:将符号引用转成直接引用

3、初始化:即调用<clinit>函数,对静态变量,静态代码块执行初始化工作



Fart整体dump思路的演进



 v3.0:优中选优后 的脱壳点

1、时机:

  • 找到绕过dex2oat的时机

  • 类的初始化函数始终运行在ART下的inpterpreter模式
       

2、方式:

  • 在解释执行<clinit>时进行脱壳 实现“绕过”dex2oat

  • 因此必然进入到interpreter.cc文件中的Execute函数,进而进入ART下的解释器解释执行



v 4.0:优中选优 + 双保险

1、时机和方法:

  • 同时在dex2oat和类的初始化流程函数设置“hook”


Youpk的整体dump思路



 v 4.0:优中选优 + 双保险

1、时机:

  • App启动后10s开始


2、方式:

  • 禁用dex2oat:在dex2oat中设置 CompilerFilter 为仅验证
    compiler_options_->SetCompilerFilter(CompilerFilter::kVerifyAtRuntime);


  • 从ClassLinker中遍历DexFile对象并dump


    推荐阅读:https://bbs.pediy.com/thread-254028.htm






Youpk+Fart 整体dump进一步提升


  • 每个脱壳点都可以脱壳DexFile


  • 在安卓8上禁用dex2oat

  • 结合fart所提出的海量脱壳点

  •       每个脱壳点都可以脱壳



推荐阅读


- https://bbs.pediy.com/thread-252630.htm

- https://bbs.pediy.com/thread-254028.htm


账号登录
验证码登录

忘记密码?
没有账号?立即免费注册