LLVM编写Pass对程序进行obfuscate

对程序进行obfuscate在软件安全领域有诸多应用,其直接的目的就是对那些试图进行逆向工程的努力带来一些困扰。假设你已经阅读了本系列文章中前面的几篇,并已经掌握了在LLVM中编写Pass的基本方法,本文将介绍如何通过在LLVM中加入相关Pass的方法实现对程序的扰乱。本文主要根据文献【1】整理而得,部分英文摘自原文。

〇、一些准备工作

我们所有的实验都是在 mac OS 上进行的,所用的IDE是Xcode。当然你使用cmake或者ninja来build程序,或者在Ubuntu下开展如下实验也是可以的,大体方法都是一致的。首先我们编写一个简单的pass如下,它的作用是遍历每个Basic Block,当它遇到一个Basic Block时,就输出一条信息“I am running a block...”。

#include "llvm/Pass.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/raw_ostream.h"

#include "llvm/Transforms/IPO/PassManagerBuilder.h"

using namespace llvm;

namespace {

  class MyObfPass01 : public BasicBlockPass {

    public:
      static char ID;
      MyObfPass01() : BasicBlockPass(ID) {}

      bool runOnBasicBlock(BasicBlock &BB) override {
        errs

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客
应支付19.90元
点击重新获取
扫码支付

支付成功即可阅读