llvm迁移到ollvm

llvm迁移到ollvm步骤

总的概念
pass开发,熟悉llvm接口,操作IR中间码

LegacyPass

wget https://heroims.github.io/obfuscator/LegacyPass/ollvm14.patch
git clone --depth 1 -b release/14.x git@github.com:llvm/llvm-project.git
cd llvm-project
git apply --reject --ignore-whitespace ../ollvm14.patch

NewPass

wget https://heroims.github.io/obfuscator/NewPass/ollvm14.patch
git clone --depth 1 -b release/14.x git@github.com:llvm/llvm-project.git
git apply --reject --ignore-whitespace ../ollvm14.patch

LegacyPass方式更改如下

在这里插入图片描述

Obfuscation 源码解析

LegacyPass 方式

结构

位于LLVM 解决方案 Libraries 目录
在这里插入图片描述

sobf 继承ModulePass

非函数级别,针对整个模块操作
总的来说就2个步骤

  1. 源字符逐个异或替换,异或key为随机生成
  2. 添加一个解密函数,函数命名开头.datadiv_decode+ 随机字符 ,并添加到 init_arrary 内,保证加载后源字符串还原

针对方式,静态patch 或者运行dump即可

sub 继承 FunctionPass

  1. runOnFunction Pass回调
  2. 指令等价替换,参考下图add指令2种实现方式,原始指令 a=b+c
    在这里插入图片描述
    在这里插入图片描述

这块补充的是与或非转换的规则

 ① 与
Y=A · B =AB

② 或
Y=A+B

③ 非
Y=A'

④ 异或
Y=A⊕B= AB' + A'B

逻辑运算符,优先级 非 与 或

部分推导过程

andSubstitution

 a = b & c => a = (b^~c)& b
a = bc = bc + 0 = bbc + b'bc' = (bc + b'c')b
= (b⊕c')b  

xorSubstitutionRand

a = a ^ b = a ^ b ^ r ^ r = (a ^ r) ^ (b ^ r)
= (a'r + ar') ^ (b'r + br')
= (a⊕r)(b⊕r) // 异或公式
= a⊕b

fla 继承 FunctionPass

  1. 保存函数中所有指令到vector
  2. 创建一个大循环,把所有指令放到switch分发
  3. 修复堆栈

bcf 继承 FunctionPass

在原先正常流程下,添加一些虚假流程代码
addBogusFlow(basicBlock, F);

附录

编译
参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骇客之技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值