一起学习LLVM(二)

一、llvm opt优化介绍:

在学习LLVM的过程中可以看出:

 

最重要的是优化这一块,包括平台无关的优化和平台相关的优化。

平台相关的优化是涉及到后端中具体指令的生成,在这一块只是简单的来说明平台无关的优化:如下图所示为关于O1、O2、O3的优化选项:

 

比如以下这个例子:

 

不优化的时候直接生成对应的字节码:

进行优化:

1.寄存器优化

./opt -mem2reg 1.bc >1.reg.bc

2.常量优化

./opt -constprop 1.reg.bc >1.cp.bc

 

 

 

二、延申拓展:

1.反混淆

链接:

https://github.com/JonathanSalwan/Tigress_protection

大致的逻辑是:

通过解析二进制文件,提取出来加载到模拟器内存中,然后根据Triton进行模拟执行提取相关的指令,模拟符号执行提取表达式,然后再转为LLVM-IR,进一步通过pass的优化,最后生成反混淆以后的二进制文件。

 

缺点:不支持arm

 

2.提供漏洞挖掘测试:

基于clang static analyzer的源码漏洞检测插件;

通过优化的pass 来实现 tuple 信息的记录,在此过程中会对每一基本块都插入探针进行测试,

参考链接:

https://github.com/GoSSIP-SJTU/TripleDoggy

https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458295644&idx=1&sn=441408f8272e2c33fd74510a31076619&chksm=b181add686f624c06af3537b845516c19cc9e3a7f73e00d3a6f82cf26079baaa842c84859b0b&scene=0&xtrack=1&key=f7bb43d4492422e0c1a588123a991a83f59f7a8d77a4cdd813bdc133f83c1bcd58cb87eb6419c749af9d40f7a81dc26d96f6f18827311d18cc4668cadc93e82daac9c1f0f47dabb4d4f58c2e1474666a&ascene=1&uin=MTg0NzAzOTMyMw%3D%3D&devicetype=Windows+10&version=62060728&lang=zh_CN&pass_ticket=SDU9pG2AR8t6jih%2FQ8niXog5DDiCI22UXWpcH8BWogWzj62XuV0fbSw3PPTNQPDJ

 

三、总结:

         通过本文可以大致了解在编译的时候通过Pass进行各个方面的优化,应用到安全代码混淆上就是反优化,才有了OLLVM这种代码混淆。在逆向的时候可以把这种Pass优化作为中间状态的一个状态的优化,就是反混淆了。同时在漏洞检测上由于LLVM 框架设计的良好性,通过对漏洞在中间状态所呈现的特征进行匹配检测,就可以进行漏洞检测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值