首页
社区
课程
招聘
[原创]ollvm分析及反混淆
发表于: 2023-5-21 22:26 28506

[原创]ollvm分析及反混淆

2023-5-21 22:26
28506

百度加固libbaiduprotect.so


1、本文是对特定样本ollvm的分析,提供一种反混淆的方法思路,包含详细的分析过程和针对该样本的反混淆脚本,不包含通用的ollvm反混淆脚本。

2、本文仅分析init_array中的第一个函数sub_88060 ,其余函数的反混淆可按照本文的思路自行处理。


对bcf和fla进行还原





ida查看函数的伪代码,包含大量的 ((dword_C0118 * (dword_C0118 - 1)) & 1) == 0 || dword_C0120 < 10 判断。

通过简单计算可知,该判断条件的结果永远为 false

所以我们要想办法把该判断识别出来,并把无效跳转给 nop 掉。


转到汇编窗口,找到该条件的汇编指令,

通过分析可知,最后的 B.EQ 永远不会跳转,所以把该指令 nop 即可。


先简单写个脚本尝试一下,按顺序匹配指令。


脚本执行后,发现只处理了一部分,

找到未识别的地方,查看汇编指令,发现这些指令并不全在一起,中间可能插入其他指令。

然后发现,未识别的这个地方最后8条指令是和前面分析的一致,而且前面的指令是取值,核心的判断逻辑是后面这8条指令,

于是直接把脚本中多余的指令判断全删除,只保留 AND 开始的指令。


ida重新加载so上一次脚本把部分跳转指令nop掉了,直接执行会导致本次nop掉正常的跳转

删除部分指令判断后,重新执行脚本,发现任然有部分未被处理。

分析后发现,最后几条指令之间也可能插入有其他指令。


再次修改脚本,在每两条指令中间,都加上判断。


ida重新加载so上一次脚本把部分跳转指令nop掉了,直接执行会导致本次nop掉正常的跳转

执行修改后的脚本,查看伪代码,判断条件全都被清除了。



此处再提供一种简单的处理方法,ida生成的伪代码之所以这么多垃圾代码,是因为bcf所引用的内存属性包含可写属性,所以我们可以通过将其引用的内存地址变为不可写,这样ida就会自动进行优化。

通过查看代码可知,bcf所引用的地址为 dword_C0118 和 dword_C0118  ,这两个地址都属于.bss段


.bss段的内存属性为可读可写,为了不影响ida对.bss中其他变量的分析,把这两个地址单独放在一个段。

发现这两个变量在.bss段的末尾,而.prgend段在.bss后面,并且.prgend没有内容,

因此可直接修改这两个段的大小,然后把.prgend段属性改为不可写。


手动设置比较麻烦,直接通过脚本设置一下。


执行脚本修改段属性后,效果和直接nop跳转一样




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

最后于 2023-6-6 08:44 被卧勒个槽编辑 ,原因:
上传的附件:
收藏
免费 22
支持
分享
最新回复 (17)
雪    币: 1331
活跃值: (1934)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大佬强
2023-5-22 08:16
1
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
tql
2023-5-22 09:02
1
雪    币: 1266
活跃值: (1307)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
tql
2023-5-22 09:50
0
雪    币: 1671
活跃值: (215817)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
tql
2023-5-22 09:59
0
雪    币: 5330
活跃值: (5464)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
666
2023-5-22 11:10
0
雪    币: 7201
活跃值: (21965)
能力值: ( LV12,RANK:550 )
在线值:
发帖
回帖
粉丝
7
666
2023-5-22 19:54
0
雪    币: 129
活跃值: (4485)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
6666
2023-5-23 09:39
0
雪    币: 2552
活跃值: (4423)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
感谢老哥 刚好在搞fla的混淆 学习了
2023-5-23 11:10
0
雪    币: 324
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
楼主太强了
2023-5-26 00:25
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
先向大佬学习idapython的知识 
2023-6-14 22:40
1
雪    币: 573
活跃值: (1009)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
玛卡巴卡
2023-6-15 11:10
0
雪    币: 498
活跃值: (4186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
6666
2023-6-15 11:22
0
雪    币: 0
活跃值: (123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
大佬牛逼, 有个问题请教一下, 为什么我修复控制流平坦之后IDA没有正确修复控制流图呀, 把跳转指令NOP之后的基础块还是有两个出口 
2023-9-20 10:24
0
雪    币: 0
活跃值: (738)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
先码后看
2023-12-18 11:57
0
雪    币: 1985
活跃值: (1800)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我勒个草,牛逼
2024-1-18 16:57
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
大哥 这个只能分析后+定制代码的方式去分析吗?有没有自动处理的方法啊?
2024-5-27 21:16
0
雪    币: 709
活跃值: (1532)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
cs_jackw 大哥 这个只能分析后+定制代码的方式去分析吗?有没有自动处理的方法啊?
想啥呢,混淆也是定制的呀。。。
2024-8-21 17:54
0
游客
登录 | 注册 方可回帖
返回
//