-
-
[原创]对目前开源OLLVM的跳转加密混淆学习笔记
-
发表于:
2020-10-30 02:07
3931
-
[原创]对目前开源OLLVM的跳转加密混淆学习笔记
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编辑
,原因: