3、ollvm移植

news2024/12/23 14:18:02

github:

https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0

先复制 include Obfuscation:

/home/nowind/llvm/ollvm/obfuscator/include/llvm/Transforms/Obfuscation

/home/nowind/llvm/llvm-project-9.0.1/llvm/include/llvm/Transforms/Obfuscation

lib Obfuscation:

/home/nowind/llvm/ollvm/obfuscator/lib/llvm/Transforms/Obfuscation

/home/nowind/llvm/llvm-project-9.0.1/llvm/lib/Transforms/Obfuscation

再复制:

/home/nowind/llvm/ollvm/obfuscator/include/llvm/CrytoUtils.h

/home/nowind/llvm/llvm-project-9.0.1/llvm/include/llvm/CrytoUtils.h

在/home/nowind/llvm/llvm-project-9.0.1/llvm/lib/Transforms/目录中的

CMakeLists.txt 中增加 add_subdirectory(Obfuscation)

LLVMBuild.txt中增加 Obfuscation

在/home/nowind/llvm/llvm-project-9.0.1/llvm/lib/IPO/ 中增加Obfuscation

修改PassManagerBuilder 文件

报错:/home/nowind/llvm/llvm-project-9.0.1/llvm/lib/Transforms/Obfuscation/Flattening.cpp:68:25: error: ‘createLowerSwitchPass’ was not declared in this scope

增加#include "llvm/Transforms/Utils.h"

ninja LLVMObfuscation

ninja clang

fix bug:https://github.com/obfuscator-llvm/obfuscator/pull/76/files

混淆的4种特性:https://github.com/obfuscator-llvm/obfuscator/wiki/Features

1、指令替换Instructions Substitution ,加减等运算符替换,增加无用数值

clang -mllvm -sub hello_ollvm.c -o hello_ollvm_sub IDA已做优化,可直接识别

clang -mllvm -sub -mllvm -sub_loop=3 hello_ollvm.c -o hello_ollvm_sub2,替换3次

2、虚假的控制流程 bogus control flow,bcf

clang -mllvm -bcf hello_ollvm_bcf.c -o hello_ollvm_bcf

clang -mllvm -bcf -mllvm -bcf_loop=3 hello_ollvm_bcf.c -o hello_ollvm_bcf

clang -mllvm -bcf -mllvm -bcf_prob=40 hello_ollvm_bcf.c -o hello_ollvm_bcf 混淆百分比

3、控制流程平坦化 Control Flow Flattening 转成switch

clang -mllvm -fla hello_ollvm_bcf.c -o hello_ollvm_fla 其中hello_ollvm_fla为可执行文件

clang -mllvm -fla -mllvm -split hello_ollvm_bcf.c -o hello_ollvm_fla

clang -mllvm -fla -mllvm -split_num=3 hello_ollvm_bcf.c -o hello_ollvm_fla

4、给函数增加混淆特性:

__attribute((__annotate__(("fla"))));

__attribute((__annotate__(("nosub")))) __attribute((__annotate__(("nobcf"))));

混合:

clang -mllvm -fla -mllvm -split -mllvm -split_num=3 -mllvm -bcf -mllvm -bcf_loop=3 -mllvm -bcf_prob=40 -mllvm -sub -mllvm -sub_loop=3 hello_ollvm_bcf.c -o hello_ollvm_obf

clang -mllvm -fla -emit-llvm -S hello_ollvm_bcf.c -o hello_ollvm_fla.ll 生成ll文件

clang -mllvm -fla -S hello_ollvm_bcf.c -o hello_ollvm_fla.s 生成汇编文件

在源码外编译使用ollvm:

git 切换到最初始的源码,没有ollvm的代码中,我这里是master分支,

ollvm 源码外下载的资料:

https://download.csdn.net/download/ahjxly/88624738icon-default.png?t=N7T8https://download.csdn.net/download/ahjxly/88624738使用clang 执行ollvm:

clang -Xclang -load -Xclang /home/nowind/llvm/pro/pro4/OLLVM/cmake-build-debug/ollvm/lib/Transforms/Obfuscation/LLVMObfuscation.so -mllvm -fla /home/nowind/llvm/pro/pro4/example/hello_ollvm_fla.c -emit-llvm -S -o /home/nowind/llvm/pro/pro4/example/hello_llvm_fla.ll

 断点的话要使用clang-9:

/home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-debug/bin/clang-9 -cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -disable-free -main-file-name hello_ollvm_fla.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -coverage-notes-file /home/nowind/llvm/pro/pro4/example/hello_llvm_fla.gcno -resource-dir /home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-debug/lib/clang/9.0.1 -internal-isystem /usr/local/include -internal-isystem /home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-debug/lib/clang/9.0.1/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-debug/bin -ferror-limit 19 -fmessage-length 0 -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -load /home/nowind/llvm/pro/pro4/OLLVM/cmake-build-debug/ollvm/lib/Transforms/Obfuscation/LLVMObfuscation.so -mllvm -fla -faddrsig -o /home/nowind/llvm/pro/pro4/example/hello_llvm_fla.ll -x c /home/nowind/llvm/pro/pro4/example/hello_ollvm_fla.c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1307174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法Hot100系列】两数相加

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

深度学习|词嵌入的演变

文本嵌入,也称为词嵌入,是文本数据的高维、密集向量表示,可以测量不同文本之间的语义和句法相似性。它们通常是通过在大量文本数据上训练 Word2Vec、GloVe 或 BERT 等机器学习模型来创建的。这些模型能够捕获单词和短语之间的复杂关系&#x…

利用poi实现将数据库表字段信息导出到word中

研发文档对于开发人员来说都不陌生了,而研发文档里重要的一部分就是表结构设计,需要我们在word建个表格把我们数据库中的表字段信息填进去,表多的话靠我们手动去填非常累人!!! 因此作为开发人员可不可以写…

HarmonyOS—实现UserDataAbility

UserDataAbility接收其他应用发送的请求,提供外部程序访问的入口,从而实现应用间的数据访问。Data提供了文件存储和数据库存储两组接口供用户使用。 文件存储 开发者需要在Data中重写FileDescriptoropenFile(Uriuri,Stringmode)方法来操作文件&#xf…

记账本选择标签选择时间,计算器---记录一下

html部分 <template><view class"pages-main"><!-- 标题栏 --><!-- #ifndef MP-TOUTIAO --><view class"" :style"height:barHeight px;"></view><!-- #endif --><!-- #ifdef MP-TOUTIAO -->&…

zookeeper1==zookeeper源码阅读,源码启动ZK集群

下载源码 Tags apache/zookeeper GitHub https://codeload.github.com/apache/zookeeper/zip/refs/tags/release-3.9.1 JDK8 MAVEN3.8.6 mvn -DskipTeststrue package 配置ZK1 zkServer.cmd中指出了启动类是 QuorumPeerMain QuorumPeer翻译成集群成员比较合理&#xf…

Nacos配置Mysql数据库

目录 前言1. 配置2. 测试前言 关于Nacos的基本知识可看我之前的文章: Nacos基础版 从入门到精通云服务器 通过docker安装配置Nacos 图文操作以下Nacos的版本为1.1.3 1. 配置 对应的配置文件路径如下: 对应的application.properties为配置文件 需配置端口号 以及 mysql中的…

Mysql的事务日志

Mysql的事务具有四个特性&#xff1a;原子性、一致性、隔离性、持久性。那么事务的四种特性分别是靠什么机制实现的呢&#xff1f; 事务的隔离性由锁机制来保证 事务的原子性、一致性、持久性则由redo log和Undo log来保证。 - redo log是重做日志&#xff0c;提供再写入操作&…

docker-compose安装nacos和msql

docker-compose安装nacos和msql 前言前提已经安装docker-compose&#xff0c;如果没有安装&#xff0c;则可以查看上面系列文章中的安装教程。并且文章中使用的是mobaxterm连接虚拟机。 1、下载2、创建并运行 前言 前提已经安装docker-compose&#xff0c;如果没有安装&#x…

BugKu-Web-Flask_FileUpload(模板注入与文件上传)

Flask Flask是一个使用Python编写的轻量级Web应用框架。它是一个微型框架&#xff0c;因为它的核心非常简单&#xff0c;但可以通过扩展来增加其他功能。Flask的核心组件包括Werkzeug&#xff0c;一个WSGI工具箱&#xff0c;以及Jinja2&#xff0c;一个模板引擎。 Flask使用BSD…

Windows提权方法

简介 内网提权&#xff0c;本意为通过某些服务的漏洞&#xff0c;从而获取到该服务器的shell&#xff0c;进而内网渗透&#xff0c;最终从普通用户变成超级管理员的一个过程 以下是一些常见的内网提权原理和方法&#xff1a; 横向移动&#xff1a;攻击者通过在内网中的一台受感…

fuxploide,一款针对文件上传的Fuzz检测工具

fuxploide,一款针对文件上传的Fuzz检测工具 1.工具概述2.安装3.参数解析4.使用案例1.工具概述 Fuxploider 是一种开源渗透测试工具,可自动检测和利用文件上传表单缺陷。该工具能够检测允许上传的文件类型,并能够检测哪种技术最适合在所需的 Web 服务器上上传 Web Shell 或任…

【同步FIFO_2023.12.13】

同步fifo&#xff0c;写时钟和读时钟为同一个时钟&#xff0c;用于交互数据缓冲 fifo的深度&#xff1a;同一块数据内存的大小 reg [2:0] Mem [8];//宽度3&#xff0c;深度8典型同步fifo的三部分 fifo写控制逻辑&#xff1a;写地址、写有效信号&#xff0c;fifo写满、写错等状…

Linux中的权限问题【详解】

shell命令以及运行原理 Windows以图形化界面为主要交互方式&#xff0c;简单高效&#xff0c;易于日常使用。Linux以命令行界面为主要交互方式&#xff0c;操作相较windows&#xff0c;mac来说比较困难一些&#xff0c;但linux也有向着图形化界面努力的桌面系统&#xff0c;例…

遥感深度学习:如何读取TIFF文件和切片成256*256?

博客已同步微信公众号&#xff1a;GIS不要炒茄子 01 前言 最近打算认真从头开始学习深度学习和遥感结合的相关内容&#xff0c;主要通过Python进行处理。此前用深度学习进行遥感相关的学习一直都是用 tensorflow3.0 框架&#xff0c;但是考虑很多因素我后面打算换用 Pytorch…

JetBrains2023年度报告,编程领域的风向标

前言 JetBrains是一家位于捷克的软件开发公司&#xff0c;有很多知名的开发IDE都是他们家的&#xff0c;比如IntelliJ IDEA、CLion、PyCharm、WebStorm等等&#xff0c;还有Kotlin编程语言也是JetBrains开发的&#xff0c;后来成为Android官方开发语言。 自2017年JetBrains发…

HNU-算法设计与分析-讨论课2

第二次小班讨论 &#xff08;以组为单位&#xff0c;每组一题&#xff0c;每组人人参与、合理分工&#xff0c;ppt中标记分工&#xff0c;尽量都有代码演示&#xff09; 算法分析题 3-4、4-1(要求:有 ppt和代码演示讲解 算法实现题 3-23、4-1(要求:有ppt 和代码演示讲解 数学之…

使用HTTP协议在Linux上进行API调用

在Linux系统上使用HTTP协议进行API调用是一种常见的操作&#xff0c;有时候我们需要调用一些外部API来获取数据或者进行自动化操作。下面是一个使用HTTP协议在Linux上进行API调用的代码示例&#xff0c;希望能够帮助你更好地理解这个过程。 首先&#xff0c;我们需要使用curl命…

【Docker】swarm stack部署多service应用

前面我们已经学习过了Docker Compose&#xff0c;它可以用来进行一个完整的应用程序相互依赖的多个容器的编排的&#xff0c;但是缺点是只能在单机模式使用&#xff0c;不能在分布式多机器上使用&#xff1b;前面我们也学习了Docker swarm&#xff0c;它可以将单个服务部署为多…