3、ollvm移植

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.mfbz.cn/a/242461.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

13.字符串长度【2023.12.5】

1.问题描述 获取字符串长度是编程过程中常用的操作之一。编写一个程序,输入一个字符串,然后输出字符串的长度。 2.解决思路 输入一个字符串。程序将输入的字符串的长度输出。使用内置函数len()获取字符串的长度 3.代码实现 strinput("请输入一…

C语言实现简易版扫雷游戏

由于前面所讲知识点有限,无法实现扫雷游戏的全部功能,本期为各位呈现的是相对简单且易于编写的扫雷游戏。 第一步 设计游戏可玩多次的循环框架 这里在之前猜数字游戏时使用的循环框架一致,但是上次讲解不够深入,这里补充一下。这…

minio可用性磁盘/节点故障恢复的研究

做poc真的很累。年初的报告拿出来按topic拿出来分享一下。 目的 通过模拟各类条件下的minio集群状态,确认minio是否符合官方“N/2硬盘在线,数据可读取;N/21硬盘在线,数据可读写”的描述。 同时通过停止minio集群中节点的服务停止…

青少年CTF-Crypto(Morse code/ASCII和凯撒)

FLAG:你这一生到底想干嘛 专研方向: Web安全 ,Md5碰撞 每日emo:不要因为别人都交卷了,就乱选答案 文章目录 1.Morse code2、ASCII和凯撒的约定 1.Morse code 题目提示摩尔斯电码,这个是给的附件 直接用摩尔斯解密&am…

基础算法(1):排序(1):选择排序

今天对算法产生了兴趣,开始学习基础算法,比如排序,模拟,贪心,递推等内容,算法是很重要的,它是解决某个问题的特定方法,程序数据结构算法,所以对算法的学习是至关重要的&a…

【数组Array】力扣-5 最长回文子串

目录 题目描述 题解labuladong 题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab"…

Spring上IOC之@EnableAspectJAutoProxy

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

〖大前端 - 基础入门三大核心之JS篇(53)〗- 构造函数与类

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司…

Git应用——代码提交规范 feat ,fix ,style

当前使用 feat 增加新功能fix 修复问题/BUGstyle 代码风格相关无影响运行结果的perf 优化/性能提升refactor 重构revert 撤销修改test 测试相关docs 文档/注释chore 依赖更新/脚手架配置修改等workflow 工作流改进ci 持续集成types 类型定义文件更改wip 开发中 别处看到 fea…

Mac安装Anaconda3最新实用教程

Anaconda3安装 1、Anaconda3下载 我用的是这个链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 可以按需要选择自己需要的版本,也可以自行搜索其他网站下载 下载完成之后一路默认安装就可以了。 安装好之后可以在终端试一下:…

Java 基础学习(八)多态、接口、造型与内部类

1 多态 1.1 多态 1.1.1 多态的意义 一个类型的引用在指向不同的对象时会有不同的实现。依然借助前面案例中的 Person类、Student类和 Teacher 类举例,看如下的代码: Person p1 new Student(); Person p2 new Teacher(); p1.schedule(); p2.schedul…

【lesson14】MySQL表的基本查询(1)

文章目录 表的基本操作介绍retrieveselect列建表基本测试 where子句建表基本测试 表的基本操作介绍 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) retrieve select列 建表 基本测试 插入数据 全列查询 …

本来以为 AI 生成视频没什么想象空间了

用 AI 来生成视频,以及是一件最没有想象力的事情,但看了两家后起之秀的 AI 视频生成厂家,Pika 和 Runway,还是小小被震撼一下,视频效果确实够打,来看看对比: 这里来自推友 maxescu 制作的 Pika …

【内存函数】

目录 memcpy使用和模拟实现memmove使用和模拟实现memset使用memcmp使用 1. memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num) ; 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存的位置这个函数在遇到…

【数据结构】哈希经典应用:位图——[深度解析](8)

前言 大家好吖,欢迎来到 YY 滴 数据结构 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴 数据结构 专栏!更多干货持续更新!以下是传送门! 目录 一.位图的基本概念二…

ETLCloud详解,如何实现最佳实践及问题排查

ETLCloud介绍 ETLCloud是新一代全域数据集成平台,领先于市场同类产品的数据集成平台(DataOps),只需单击几下即可完成数据清洗转换、传输入仓等操作,具备高效、智能、一站式的全域数据集成优势,如: 毫秒级实时数据同步 …

《PySpark大数据分析实战》-06.安装环境准备

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

马斯克回应聊天机器人 Grok 抄 ChatGPT 作业;Figma 推出宏编程键盘丨 RTE 开发者日报 Vol.105

开发者朋友们大家好: 这里是「 RTE 开发者日报 」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

解决ps找不到MSVCP140.dll的5种方法,完美解决

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到MSVCP140.dll”。这个问题通常出现在安装Adobe Photoshop(简称PS)时。MSVCP140.dll是Microsoft Visual C 2015 Redistributable的一个组件,它提供…