首页
社区
课程
招聘
[原创]某加固对抗主动加载的方法
发表于: 2022-10-26 23:13 8117

[原创]某加固对抗主动加载的方法

2022-10-26 23:13
8117

一句话概括: 在DEX中插入无用类,检测到无用类的加载后随机kill自己

 

在用FART脱壳时经常出现方法没枚举完App就crash的情况,因此开始本次的分析。 某加固的指令抽取是通过hook classlinker的LoadMethod方法来实现的,codeitem的debug offset被壳用来做方法索引。

 

根据系统不同版本拼接需要hook 的LoadMethod方法签名

 

原始LoadMethod方法执行完后进入壳自己的LoadMethod

 

在壳合法的debugInfoOffset范围内,用mprotect修改insns页面权限

 

insns解密前会先比较debug info offset是否在黑名单中,每次解密如果计数器dword_C00DC非0,那么计数器+1, 需要满足计数器dword_C00DC的值小于dword_C00EC

 

比较debug info是否匹配黑名单(C00E0,C00E4,C00E8),有匹配的话 计数器dword_C00DC从零置为1

 

初始化debug info黑名单的地方

 

有一个线程会监控计数器dword_C00DC的值,如果计数器大于dword_C00EC就会kill self

 

在检测到DexHunter/FUPK 的特征导出函数时也会给计数器置1

 

计数器和上限初始化的地方,可以看到上限dword_C00EC是随机的。

 

总结: 在DEX中插入无用类,记录这些类的debug info offset作为黑名单;正常运行时不会加载这些无用类(没有任何引用),而当FART进行枚举方法主动调用时,会触发这些类的加载,从而导致计数器置1。计数器递增到达上限后触发kill self,App表现为随机的crash,从而中断枚举过程。

 

如何反制这种对抗:

  • hook kill,在这个例子里计数器到达上限后就不再解密指令了,hook kill阻止了崩溃但是也继续无法dump
  • 使黑名单无效,比如hook 这个例子里的atoi返回值。
  • crash后跳过之前的类继续dump?缺点是需要记录dump进度

第一次发帖,欢迎大家提出建议和想法~


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-10-26 23:14 被zqqz编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (3)
雪    币: 479
活跃值: (3837)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
 大佬,你id有点眼熟
2022-10-27 10:06
0
雪    币: 6765
活跃值: (2978)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
ijm的垃圾类?
2022-10-27 14:32
0
雪    币: 756
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
ijm企业版?
2023-7-8 14:17
0
游客
登录 | 注册 方可回帖
返回
//