首页
社区
课程
招聘
[原创]LLVM Pass编写及去除——虚假控制流
发表于: 2026-4-28 20:36 2170

[原创]LLVM Pass编写及去除——虚假控制流

2026-4-28 20:36
2170

虚假控制流使用大量不透明谓词组成恒真或恒假的算式,每个基本块之间用条件跳转连接,用不可达基本块和条件跳转达成混淆的目的

与控制流平坦化相比,它的cfg更加细长

其中会有多个if语句,也可能参杂一些函数加大混淆难度,这些函数往往返回定值

具体代码如下

题目来自ciscn2025初赛

典型的虚假控制流特征,里面出现了大量不透明谓词,先进行重命名方便分析

可以发现,除了不透明谓词之外夹杂着一些函数增大混淆难度,有些函数返回定值,有些返回参数。

接下来讲解去除的两种方式

根据x86函数调用约定,a1参数为rcx,a2参数为rdx,而函数的返回值为rax。所以对于所有函数替换,只需要将原来的call指令替换成对eax的赋值即可。

而对于不透明谓词,则是替换相应赋值的寄存器,直接改为常量。

需要注意的是指令长度,图中所做的改变均比原始指令长度短,假如指令长度超过原始字节,则需要考虑nop掉无用字节进行修改。

写idc脚本批量替换

去混淆效果如下

去除非常完美

一般来说,编写恒真恒假条件时不会编写太多完全不同的条件,而是对一个条件进行变化衍生出其他条件


[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
免费 5
支持
分享
最新回复 (1)
雪    币: 104
活跃值: (8407)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
tql
2026-4-29 10:51
0
游客
登录 | 注册 方可回帖
返回