发布于 

LLVM 简介和移植过程

OLLVM 简介

OLLVM(Obfuscator-LLVM)是一个增强LLVM编译器安全性的项目。它为LLVM添加了多种代码混淆的技术,比如控制流平坦化指令替换伪造控制流等,用来提高生成的二进制文件的复杂性。这使得分析和理解软件逻辑更加困难,从而保护应用程序不易被恶意用户攻击逆向

OLLVM的移植过程指的是将OLLVM集成到现有的开发流程中,使得你可以使用OLLVM提供的混淆功能来编译你的代码。

OLLVM 4.0 源码移值到LLVM 9.0

step

移植OLLVM通常包括以下几个步骤:

  1. 获取OLLVM源码:首先需要从OLLVM的官方仓库(通常托管在GitHub上)克隆项目至本地。

  2. 编译OLLVM:根据OLLVM的文档说明进行编译,为目标平台生成OLLVM编译器。这可能需要构建工具如CMakeLLVM特定版本的构建环境。

  3. 整合到项目中:将编译好的OLLVM编译器整合到你的项目构建流程中。这通常意味着你需要替换掉原来使用的标准LLVMGCC编译器链,指向OLLVM提供的编译器路径。

  4. 配置混淆参数OLLVM允许你通过编译器的命令行参数来配置混淆技术的实现等级和具体表现。你需要基于你的安全要求来设置这些参数。

  5. 代码混淆和测试:使用OLLVM编译你的代码,并进行混淆处理。编译后,你需要认真测试程序,以确保混淆没有导致任何功能上的退化或不期望的行为。

要注意的是,虽然OLLVM可以提高软件安全性,但也可能会带来性能上的损失,同时让调试变得更加困难。因此,在决定使用OLLVM时,需要权衡保护强度和应用性能之间的关系,并针对软件的特定部分或关键算法进行混淆,以获得最佳效果。在某些情况下,这可能需要高级的专业知识来实现最优化的混淆配置。

实际流程

  • 1.打开llvm项目,下载OLLVM项目

  • 2.切换分支,复制代码

    • OLLVM源码中的include -> llvm -> transforms -> Obfuscation 迁移到 LLVM include -> llvm -> transforms -> Obfuscation
    • CryptoUtils.h 放到llvm中 ,保持一样的结构
    • PassManagerBuilder 放到 llvm 中, 如果已经编辑过了,那么include 的头要引入