Fart完成函数粒度脱壳分析

admin 2022年10月7日19:53:29评论146 views字数 652阅读2分10秒阅读模式

前言


三代壳,在函数粒度上保护代码,将函数指令全部替换为Nop或无效指令,在执行时还原代码。今天这篇文章带来的是Fart下通过主动调用实现脱壳的代码层分析,主要就是通过主动调用函数,然后利用dex区段解析完成。

正文


先从网上下载源码:

https://github.com/hanbinglengyue/FART

函数入口:

Fart完成函数粒度脱壳分析

Fart完成函数粒度脱壳分析

来到这里

Fart完成函数粒度脱壳分析

继续往下

Fart完成函数粒度脱壳分析

这里获取了classloader,反射调用获取了dalvik.system.DexPathList$Element,通过,利用Element类存储的dex的路径信息,获得DexFile的mCookie,之后遍历类名,往下传入调用loadClassAndInvoke。

Fart完成函数粒度脱壳分析

这里继续调用dumpMethodCode函数。

Fart完成函数粒度脱壳分析

继续往下调用

Fart完成函数粒度脱壳分析

往下查看,这里可以看到通过设置self判断是否是系统调用。

Fart完成函数粒度脱壳分析

继续往下

Fart完成函数粒度脱壳分析

开始进入dump正节,前半段就是上一章写过的整体dump

Fart完成函数粒度脱壳分析

这里来看下半部分针对函数粒度保护的dump.

Fart完成函数粒度脱壳分析

先是判断有无异常处理段,然后如果有的话,就进入语句内,计算try结尾的部分,然后开始继续计算并往下步入catch部分,最后就到了结束的部分

Fart完成函数粒度脱壳分析

之后开始写入,命名规则:name,函数的名字,method_idx 来源FART新增的函数,offset 是该函数的CodeItem相对于dex文件开始的偏移,code_item_len CodeItem的长度

Fart完成函数粒度脱壳分析

到这里,Fart主动调用脱壳的部分就分析结束, 它还有被动脱壳和修补的部分。

原文始发于微信公众号(Th0r安全):Fart完成函数粒度脱壳分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月7日19:53:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Fart完成函数粒度脱壳分析http://cn-sec.com/archives/1335450.html

发表评论

匿名网友 填写信息