首页
社区
课程
招聘
so 混淆的一种新方式
2021-8-18 15:26 6410

so 混淆的一种新方式

2021-8-18 15:26
6410

最近分析一个so的时候,发现一个应该是新的混淆方式吧,ida F5之后函数调用都变成了如下形式:


(*(__int64 (__fastcall **)(_QWORD *))(*a1 + 0x60LL))(a1) & 1) != 0 )


函数地址被替换成了*a1 + 0x60LL,这样xref看调用关系就没用了,且从上往下跟的话,静态分析也不知道调用的哪个函数了,分析起来就很麻烦,这种混淆有专有名词吗?


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 29
活跃值: (5120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2021-8-18 15:31
2
0
https://github.com/amimo/goron/blob/llvm-10.x/llvm/lib/Transforms/Obfuscation/IndirectCall.cpp
雪    币: 1461
活跃值: (1367)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
hackdaliu 1 2021-8-19 10:13
3
0
不吃早饭 https://github.com/amimo/goron/blob/llvm-10.x/llvm/lib/Transforms/Obfuscation/IndirectCall.cpp
谢谢,这种应该还没有人提供现成脚本来破解吧
雪    币: 2428
活跃值: (2864)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
boursonjane 2021-8-19 10:36
4
0
父类对象调用基类成员函数吧, 正常的信息损失, 没特意混淆.
雪    币: 1461
活跃值: (1367)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
hackdaliu 1 2021-8-19 14:07
5
0
boursonjane 父类对象调用基类成员函数吧, 正常的信息损失, 没特意混淆.

不是的,很多不相关的类都是这样调用的,出现次数太多了肯定是混淆了,而且样本里面还有很多其他混淆方式,不能阻止分析,但是确实效率低了

最后于 2021-8-19 14:07 被hackdaliu编辑 ,原因:
雪    币: 2945
活跃值: (2592)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
小调调 2021-8-19 14:31
6
0
这种不是类似,C++类和类成员方法,成员变量嘛
雪    币: 29
活跃值: (5120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2021-8-19 16:06
7
0

之前没仔细看,楼主你这明显是c++虚函数啊,*a1获取虚函数表,*(__int64 (__fastcall **)(_QWORD *))(*a1 + 0x60LL))获取偏移为0x60的虚函数指针,*(__int64 (__fastcall **)(_QWORD *))(*a1 + 0x60LL))(a1),传入a1作为this指针,完美契合虚函数调用特征。真正的混淆应该是这样的

雪    币: 5695
活跃值: (2515)
能力值: ( LV3,RANK:31 )
在线值:
发帖
回帖
粉丝
wjhwjhn 2021-8-19 20:29
8
0
把a1类型改成JNIEnv *试试
雪    币: 1461
活跃值: (1367)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
hackdaliu 1 2021-8-20 16:13
9
0
确实是虚函数,草率了
游客
登录 | 注册 方可回帖
返回