吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13358|回复: 41
收起左侧

[原创] 移除ollvm中的控制流平坦化、不透明谓词

  [复制链接]
小远zi 发表于 2021-8-30 19:25
本帖最后由 小远zi 于 2021-9-20 17:22 编辑

llux

ollvm de-obfuscator

移除ollvm中的控制流平坦化、不透明谓词

ll取自ollvmux取自lux,寓意混淆之中的光亮和线索

image image image image image

Description

* 实现了在x86_64架构下,开启代码优化后,控制流平坦化以及不透明谓词的移除
* 实现原理不同于符号执行,是自实现的一个路径探索方法,无需条件约束,在遇到bcf增加的死循环块的时候,依然可以完成路径遍历
* 针对ollvm进行了充分地优化,速度对于符号执行框架angr速度较快,且可以处理复杂样本
* 暂未开源,因为这样会使得混淆对抗太过于简单,这里只提供了工具方便使用

Usage 1

我们有如下代码,使用函数注解的形式开启了ollvm的全部的混淆功能,使用较低的bcf概率 -mllvm -bcf_prob=3,在开启较高概率时,可以对部分条件进行手动patch,最终在程序运行结束之后会提示一些无法到达的基本块,手动删除即可,参考Usage 3
* fla:控制流平坦化
* sub:指令替换
* split:基本块拆分
* bcf:伪造控制流

Image

编译后的CFG(控制流程图)

Image

在要去除混淆的函数入口下断(硬件断点),并运行到

Image

dump堆栈内存

Image

dump模块内存

Image

编写subroutine.txt

Image

将dump的内存和subroutine.txt按如下方式布局

Image

程序在短暂运行后会在当前路径下生成code.asm

image

拿到vs进行编译

Image

经过对代码进行一定的修改,使得其可以通过编译(修改后的代码上传到了Release)

Image

Image

观察到不透明谓词

Image

其中是dword_14001DA48,dword_14001DA4C分别是ollvm bcf功能中的int类型的全局变量x和y,地址连续,值恒为0
 mov    eax,dword_14001DA48

 手动修改成如下代码化简逻辑

 mov    eax,0
 cmp    dword_14001DA4C, 0ah
 cmovl  eax, r13d

 手动修改成如下代码化简逻辑

;cmp    dword_14001DA4C, 0ah
 mov    eax, r13d
 mov    eax, 0ff85a711h
 mov    ecx, 4ef55c6dh
 cmovl  eax, ecx
;jmp    1400012f0h
 cmp    eax,0ff85a711h
 je     loc_1400013a1
 jmp    loc_140001459

 手动修改为如下代码化简逻辑

;mov    eax, 0ff85a711h
;mov    ecx, 4ef55c6dh
;cmovl  eax, ecx
;jmp    1400012f0h
;cmp    eax,0ff85a711h
 jl     loc_140001459
 jmp    loc_1400013a1
按照上述的方法对代码进行一些调整,得到:

Image

使用函数返回值对比验证逻辑的正确性,通过

Image

我们在基于angr框架的deflat.py了进行了测试,结果是失败的

image

Usage 2 multi-dispatcher

按照上述操作,我们同样地实现了更加复杂且拥有多个分发器样本的去混淆

Image

编译后的CFG(控制流程图)

Image

短暂运行后,我们过滤掉了无法到达的基本块140001cd7、1400025c5(这里是程序逻辑本身就不可达,并不是BCF,因为我们没有进行patch)

image

诸如此类的逻辑会出现不可能到达的基本块,这是因为ollvm的混淆pass会优先于llvm的优化pass

image

手动删除未到达的基本块140001cd7、1400025c5
手动删除死循环块

Image

手动删除死循环块的引用

Image

按照上述的方法对代码进行一些调整,得到:

Image

使用函数返回值对比验证逻辑的正确性,通过

Image

Usage 3 bcf patch

我们将Usage 1中的代码使用默认的bcf概率-mllvm -bcf_prob=30进行编译,相较于-mllvm -bcf_prob=3的概率明显复杂了一些。我们需要寻找类似箭头所指的bcf块,特点是有多个前驱,后继为分发器,这种情况是因为编译优化造成的

Image

bcf块内容如下,一般情况两个cmov都是条件都是满足的,可以看做mov

Image

所以逐一对bcf块的所有前驱进行简单的patch操作

Image

bcf块进行nop操作

Image

按照Usage 1中演示的方法进行操作。llux对一些基本块进行了合并,并提示了无法到达的基本块

Image

手动删除因为基本块合并导致重定义的符号

Image

并按照之前的方法对代码进行一定的调整,最终得到

Image

使用函数返回值对比验证逻辑的正确性,通过

Image

2021年9月9日 更新 Stantinko ollvm 浅析

SHI1:6b06a15c3029e1cfbfc47e0bc3f62ffa0e6b0091

基于参数的不透明谓词(bcf)

image

不透明谓词(bcf) + 循环 + 基于跳转表的 Switch 实现的控制流平坦化

Image

循环混淆

image

一些函数的控制流流程图(CGF)

image

2021年9月20日 更新 Emotet

image

Reference

Github

https://github.com/llxiaoyuan/llux

免费评分

参与人数 29吾爱币 +30 热心值 +27 收起 理由
dd5201341 + 1 + 1 热心回复!
NoooomoRe + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lyk1115 + 1 我很赞同!
max2012 + 1 热心回复!
nnicetry + 1 + 1 我很赞同!
怜渠客 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
itachi137 + 1 + 1 热心回复!
JPK + 1 + 1 我很赞同!
imaegoo + 1 + 1 我很赞同!
victos + 1 + 1 谢谢@Thanks!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Bizhi-1024 + 1 用心讨论,共获提升!
10Bang + 1 + 1 我很赞同!
soyiC + 1 + 1 用心讨论,共获提升!
gaosld + 1 + 1 谢谢@Thanks!
辰星PsychoPrior + 1 + 1 我很赞同!
yixi + 1 + 1 谢谢@Thanks!
Lugia + 1 + 1 谢谢@Thanks!
duhao1027 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
debug_cat + 1 + 1 热心回复!
pdcba + 1 + 1 谢谢@Thanks!
z13430334348 + 1 + 1 热心回复!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
剑来…… + 1 + 1 tql
fengshengshou + 1 + 1 谢谢@Thanks!
shiyucj + 1 + 1 我很赞同!
努力加载中 + 1 + 1 热心回复!
你与明日 + 3 + 1 这熟悉的VS界面,字体,还有这熟悉的Git名字

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sm3p666 发表于 2021-8-31 00:00
1111111111111111

免费评分

参与人数 3吾爱币 -54 违规 +1 收起 理由
Hmily -50 + 1 请勿灌水,提高回帖质量是每位会员应尽的义务!
侃遍天下无二人 -3 请勿灌水,提高回帖质量是每位会员应尽的义务!
剑来…… -1 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

 楼主| 小远zi 发表于 2021-8-31 21:33
kilo 发表于 2021-8-31 18:29
点赞从未停止,学习从未开始

ps: 说实话现在完全看不懂,所以想问下要看懂贴子需要哪些前置知识呢

ollvm先了解一下,应该就差不多了
nj001 发表于 2021-8-30 22:12
多学学angr,用二进制框架分析,写脚本才是正途
LittleCloud 发表于 2021-8-30 23:51
看起来很厉害,但是我不懂
Bruce_HD 发表于 2021-8-31 09:59
来看看,支持支持!
超越生命的飞行 发表于 2021-8-31 10:56
技术大佬,学习了
fengshengshou 发表于 2021-8-31 13:03
膜拜大佬
kilo 发表于 2021-8-31 18:29
点赞从未停止,学习从未开始

ps: 说实话现在完全看不懂,所以想问下要看懂贴子需要哪些前置知识呢
C_Ryan 发表于 2021-9-1 09:14
本帖最后由 C_Ryan 于 2021-9-1 09:17 编辑

删除删除
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 07:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表