查看原文
其他

开源LLVM打碎控制流图和字符串加密

malokch 看雪学院 2019-09-18

字符串加密效果见:https://bbs.pediy.com/thread-251631.htm


下面介绍打碎控制流。


>>>>

原理


将llvm中的条件br指令替换成一个 call 和 indirectbr。这个 call 返回的是跳转的目的地址。


处理前:

%7 = icmp eq i32 %6, 2
br i1 %7, label %8, label %13

处理后:

%8 = icmp eq i32 %7, 2

%
9 = call i8* @brkcfg(i1 %8, i32 0)

indirectbr i8* %9, [label %15, label %10]



>>>>

用法:


-mllvm -brkcfg 使能打碎控制流

-mllvm -encstr 使能加密字符串


代码中使用以下注解来对指定函数开关打碎控制流:


__attribute__((annotate("loveida")))

__attribute__((annotate("hateida")))


真值表:

            hateida     loveida     default



default Y              N              N


brkcfg  Y              N              Y



在目前的实现中,打碎控制流中的call并没有加密跳转表,因此对抗脚本分析效果不怎么好。等那天闲着无聊再弄吧。


代码较为简短,所以就直接发代码了。本来想发binary的,但是编译一次release太久太占硬盘,就不弄了。感兴趣的自己编译吧。使用的llvm版本是release/8.x。


>>>>

效果:







- End -





看雪ID:malokch

https://bbs.pediy.com/user-453009.htm  



本文由看雪论坛 malokch  原创

转载请注明来自看雪社区




⚠️ 注意


2019 看雪安全开发者峰会门票正在热售中!

长按识别下方二维码即可享受 2.5折 优惠!





往期热门回顾

1、实践中学习CVE-2016-5195

2、极光行动----漏洞分析

3、【Part II】 CVE-2018-8897 原理深度漫游、漏洞利用、调试实战

4、【Part I】CVE-2018-8897 原理深度漫游、漏洞利用、调试实战








公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com




↙点击下方“阅读原文”,查看更多干货

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存