内容简介:字符串加密效果见:下面介绍打碎控制流。
字符串加密效果见: 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 原创
转载请注明来自看雪社区
:warning: 注意
2019 看雪安全开发者峰会门票正在热售中!
长按识别下方 二维码 , 即可享受 2.5折 优惠!
﹀
﹀
﹀
公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com
↙ 点击下方“阅读原文”,查看更多干货
以上所述就是小编给大家介绍的《开源LLVM打碎控制流图和字符串加密》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 查找一个字符串中最长不含重复字符的子字符串,计算该最长子字符串的长度
- (三)C语言之字符串与字符串函数
- 算法笔记字符串处理问题H:编排字符串(2064)
- 如何在JavaScript中检查字符串是否包含子字符串?
- 字符串、字符处理总结
- 高频算法面试题(字符串)leetcode 387. 字符串中的第一个唯一字符
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。