前言
三代壳,在函数粒度上保护代码,将函数指令全部替换为Nop或无效指令,在执行时还原代码。今天这篇文章带来的是Fart下通过主动调用实现脱壳的代码层分析,主要就是通过主动调用函数,然后利用dex区段解析完成。
正文
先从网上下载源码:
https://github.com/hanbinglengyue/FART
函数入口:
来到这里
继续往下
这里获取了classloader,反射调用获取了dalvik.system.DexPathList$Element,通过,利用Element类存储的dex的路径信息,获得DexFile的mCookie,之后遍历类名,往下传入调用loadClassAndInvoke。
这里继续调用dumpMethodCode函数。
继续往下调用
往下查看,这里可以看到通过设置self判断是否是系统调用。
继续往下
开始进入dump正节,前半段就是上一章写过的整体dump
这里来看下半部分针对函数粒度保护的dump.
先是判断有无异常处理段,然后如果有的话,就进入语句内,计算try结尾的部分,然后开始继续计算并往下步入catch部分,最后就到了结束的部分
之后开始写入,命名规则:name,函数的名字,method_idx 来源FART新增的函数,offset 是该函数的CodeItem相对于dex文件开始的偏移,code_item_len CodeItem的长度
到这里,Fart主动调用脱壳的部分就分析结束, 它还有被动脱壳和修补的部分。
原文始发于微信公众号(Th0r安全):Fart完成函数粒度脱壳分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论