首页
社区
课程
招聘
[原创]对目前开源OLLVM的跳转加密混淆学习笔记
发表于: 2020-10-30 02:07 3931

[原创]对目前开源OLLVM的跳转加密混淆学习笔记

2020-10-30 02:07
3931

Hikari的indirectBr:
为每个condition BR生成一个[2xi8*]的BrTable存放2个BiasicBlock的Lable符号
将condition BR替换成通过gep用cmp的结果来取BrTable的跳转目标Lable符号
然后调用indirectbr指令进行跳转

如果是非conditon BR, 则生成GlobalTable存放所有的BR目标Lable符号
将BR指令替换成通过gep用index取GlobalTable存放的目标Lable符号
然后调用indirectbr指令进行跳转

测试:
对于非condition BR, 最终指令为连续的 mov eax,[TableN] + jmp eax
对于condition BR, 最终指令为连续的 mov eax,[TableX+ecx*8] + jmp eax

因为Br的两个分支Lable分别以明文存储在BrTable中, 这样保护强度很有限

Goron的indirectBr:
基本与hikari一致, 主要区别是生成的BrTable中存放的是gep Lable符号+随机数索引,
这样最终编译出来的BrTable中不是明文的Lable地址, 使用的时候读出来再用Key解密得到Lable, 对于加密强度有很大提升. 而且对于解密的Key, 分成了两个数, 其中一个数通过store指令存储在函数的局部变量中, 另一个通过sub指令进行运算. 这样最终编译出来之后的指令为
mov [esp+n], key1
Mov ebx, [esp+n]
...FunctionCode
mov eax, [TableX+ecx*8]
Mov edx, key2
sub edx, ebx
Add eax, edx
jmp eax


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-10-30 02:14 被wx_tuancc编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
跳转加密在trace下毫无用处
2020-10-30 11:57
0
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
3
期待更多内容~~
2020-11-2 10:30
0
游客
登录 | 注册 方可回帖
返回
//