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

so 混淆的一种新方式

2021-8-18 15:26
7208

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


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


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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

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

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

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

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