首页
社区
课程
招聘
[原创]混合布尔算术运算的混淆及反混淆
2021-11-21 09:48 18673

[原创]混合布尔算术运算的混淆及反混淆

2021-11-21 09:48
18673

前言

最近看了几篇关于混合布尔算术MBA(Mixed Bitwise-Arithmetic)的论文,可以用于处理vmp万用门的混淆,所以写出来和大家分享一下。混合布尔算术运算结合了算术运算(加法、减法和乘法等)和布尔运算(与、或、非和异或)。混合布尔算术运算的混淆可以将一个简单的表达式等价地转换到难以理解和分析的复杂表达式。针对静态和动态的分析,该混淆技术可以用于隐藏某些常量或者一些运算。

MBA表达式的定义

先说明一下,本文所讨论的运算都是针对整数类型的变量。
MBA可以划分为线性MBA和多项式MBA。定义如下:
图片描述

MBA混淆

线性MBA表达式

如果E=0成立,就可以得到一个恒等式,比如下面这个
图片描述
那么就可以使用右边的表达式代替x+y,从而达到混淆的目的。我们可以使用z3化简一下,但是效果不尽人意。利用z3验证上面这个等式不恒等时,check输出为unsat,说明等式是成立的。
图片描述
上述恒等式可以通过真值表来构造,在构造之前需要用到一个重要的结论。
同一个MBA表达式,n位变量的情况和1位变量同样适用
这个结论是MBA混淆的基础。因为真值表是针对1位变量的情况,可以枚举出布尔表达式所有可能的值,这就可以很方便的构造出MBA恒等式。那么根据之前这个重要结论就可以把利用真值表构造出来的MBA恒等式应用于n位的情况。证明细节可以看以下两个论文
Information Hiding in Software with Mixed Boolean-Arithmetic Transforms
MBA-Blast: Unveiling and Simplifying Mixed Boolean-Arithmetic Obfuscation
这里我以两个变量作为例子构造MBA表达式。
图片描述
用z3验证如下
图片描述
这个例子虽然简单,但通过上述方法可以构造出比较复杂的MBA表达式
图片描述
b图中的z可以为任意的整数,只要在构造MBA时,z前面的系数为0即可

多项式MBA表达式

多项式MBA可以通过多项式来构造。
图片描述
图片描述
当P(Q(X)+E)中的X为常量时,可以达到隐藏变量的目的。不过需要注意的是表达式E里面最好包含一个常数项,因为展开之后可能会泄露出来。
图片描述

MBA反混淆

通过前面构造MBA的过程中可以看出,真值表是构造MBA恒等式的基础,同样也可以用来化简MBA的混淆。继续以两个变量x和y为例,首先构造一个行列式不为0的真值表,如下图所示
图片描述
因为行列式不为0,说明列向量是线性无关的,其它任意向量都可以由上面4个列向量线性表出。其它布尔表达式对应的真值看成一个列向量的话,那么它就可以由上面4个列向量线性表出。
图片描述
上面那个表格的第一列为第二列布尔表达式的真值,第三列为第二列布尔表达式的MBA形式。可以看到第三列MBA表达式都可以由x,y,x∧y,-1的线性组合表示。针对一个MBA表达式,如果是隐藏的x和y的某种算术运算,可以通过上面那个表格把MBA每一项的布尔表达式替换成对应第三列的MBA表达式,最后合并同类项化简。
图片描述
如果MBA表达式代表的是一个布尔运算,在合并同类项化简之后可以和一些常见的布尔表达式的真值进行匹配,如果真值相同,那么就是对应的布尔运算。
现在回过头来看看vmp的万用门混淆,vmp里面使用not_not_and 和not_not_or模拟了其它逻辑运算指令和一些算术运算指令。
MBA-Blast: Unveiling and Simplifying Mixed Boolean-Arithmetic Obfuscation这篇论文后面给出了一些vmp万用门混淆化简的例子
图片描述
这里我再给出我上篇文章《利用机器学习分析vmp的思路》中反编译后遇到的一个表达式

1
2
3
4
5
MEMORY[0x5036EDC] = ~(~(MEMORY[0xFFFFCFB4] - 0x34C612) & 0x6963) & ~((MEMORY[0xFFFFCFB4] - 0x34C612) & 0xFFFF969C)
E = MEMORY[0x5036EDC]
x = MEMORY[0xFFFFCFB4] - 0x34C612
y = 0xFFFF969C

那么E = ~(~x & ~y) & ~(x & y)就是一个纯粹的布尔表达式, E对应的真值表为
图片描述
可以看出E的真值和x异或y是相同的,那么根据前面那个重要结论得到E = x^y,从而得到

1
MEMORY[0x5036EDC] = (MEMORY[0xFFFFCFB4] - 0x34C612) ^ 0xFFFF969C

图片描述

总结

根据前面提到的论文的描述和实验结果表明,MBA混淆确实能够有效的抵抗一些约束求解器的分析。所以在利用约束求解器分析前,有必要进行一定的化简或者去混淆。同时,MBA混淆方式也同样可以运用到不透明谓词。其实,在没有给定特定的名称之前,混合算术和位运算符的表达式已经广泛使用了。处理器中能够支持的任意位运算符或算术运算符都可以用于构造MBA表达式。比如刚刚化简的那个vmp表达式

1
MEMORY[0x5036EDC] = (MEMORY[0xFFFFCFB4] - 0x34C612) ^ 0xFFFF969C

可能这种类型的混合运算表达式太常见了,还不足以达到混淆的程度,所以没有引起大家的特别注意。

参考文献

Boosting SMT Solver Performance on Mixed-Bitwise-Arithmetic Expressions
Obfuscation with Mixed Boolean-Arithmetic Expressions : reconstruction, analysis and simplification tools
Information Hiding in Software with Mixed Boolean-Arithmetic Transforms
MBA-Blast: Unveiling and Simplifying Mixed Boolean-Arithmetic Obfuscation


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞10
打赏
分享
最新回复 (7)
雪    币: 1402
活跃值: (4135)
能力值: ( LV9,RANK:195 )
在线值:
发帖
回帖
粉丝
天水姜伯约 4 2021-11-21 11:58
2
0
发MBA Blast的那个老哥tql,就mba不光发了一篇usenix,差不多的内容改了下又发了篇pldi
雪    币: 20680
活跃值: (5274)
能力值: ( LV12,RANK:529 )
在线值:
发帖
回帖
粉丝
会飞的鱼油 8 2021-11-21 13:48
3
0
天水姜伯约 发MBA Blast的那个老哥tql,就mba不光发了一篇usenix,差不多的内容改了下又发了篇pldi[em_85]
两篇的区别感觉就是加了个所谓的签名向量
雪    币: 14299
活跃值: (10655)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
34r7hm4n 7 2021-12-9 11:23
4
0
非常好的文章,值得反复研究
雪    币: 20
活跃值: (494)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
普通人张三 2022-4-10 02:19
5
0
b图中的z可以为任意的整数,只要在构造MBA时,z前面的系数为0即可。
朋友你好,这句话没太看懂,能不能举一个例子呀,感谢
雪    币: 20680
活跃值: (5274)
能力值: ( LV12,RANK:529 )
在线值:
发帖
回帖
粉丝
会飞的鱼油 8 2022-4-10 10:28
6
0
张三_107922 b图中的z可以为任意的整数,只要在构造MBA时,z前面的系数为0即可。 朋友你好,这句话没太看懂,能不能举一个例子呀,感谢
b图中的表达式里没有单独的z,也就是它前面的系数为0消掉了。消不消掉这个z看自己选择的系数
雪    币: 2108
活跃值: (2917)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
Invert 1 2022-8-4 13:19
7
0
arybo 可以用來化簡 MBA,很好用
雪    币: 3748
活跃值: (5465)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huangjw 2022-8-22 22:28
8
0
tql,谢谢分享
游客
登录 | 注册 方可回帖
返回