android 使用ollvm混淆so

使用到的工具

  1. ndk 21.4.7075529(android studio上下载的)
  2. cmake 3.10.2.4988404(android studio上下载的)
  3. llvm-9.0.1
  4. llvm-mingw-20230130-msvcrt-x86_64.zip
  5. Python 3.11.5

环境配置

添加cmake mingw环境变量如下图:
在这里插入图片描述

编译

  1. 下载好[llvm-9.0.1源码后解压到文件夹新建一个build文件夹
    在这里插入图片描述
  2. 在新建的build文件夹下面新建一个空的文本文件并重命名为CMakeLists.txt
    在这里插入图片描述
  3. 使用cmd cd到这个build文件夹并执行预编译指令
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ../
  1. 执行编译命令
mingw32-make.exe -j8

j8:代表开启 8个线程去编译 如果电脑性能好的话可以自行添加如就j16 j32等

  1. 编译完成如下图
    在这里插入图片描述

移植到ndk

!!!必须使用自己电脑编译后生成的文件替换

  1. 复制头文件
    将编译出的\obfuscator-llvm-9.0.1\build\lib\clang\9.0.1\include目录下的头文件(__stddef_max_align_t.h、stddef.h、stdarg.h、float),复制
    \Android\Sdk\ndk\21.4.7075529\sysroot\usr\include目录下
  2. 将编译出的\obfuscator-llvm-9.0.1\build\bin目录下的clang.exe、clang++.exe、clang-format.exe文件替换到android_sdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\bin目录下

混淆使用

在工程中的CMakeLists.txt添加这个配置

#设置llvm debug模式混淆编译
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf" )
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf" )

#设置llvm release模式混淆编译
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf ")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf")

混淆说明

OLLVM 的使用

 Instructions Substitution (指令替换)

-mllvm -sub: 启用instructions substitution

-mllvm -sub_loop=3: 对每个函数混淆3次,默认1词



 Control Flow Flattening (控制流平坦化)

-mllvm -fla: 启用control flow flattening

-mllvm -split: 启用block切分,提升平展程度

-mllvm -split_num=3: 对每个block混淆3次,默认1词



 Bogus Control Flow (虚假控制流)

-mllvm -bcf: 启用 bogus control flow

-mllvm -bcf_loop=3: 对一个函数混淆3次,默认1次

-mllvm -bcf_prob=40: 代码块被混淆的概率是40%,默认30%



-mllvm -sobf: 字符串加密

过程中遇到的坑

  1. 一直完后编译项目报错:
    1
    解决方法:再sdk里面的cmake文件夹中的android.toolchain.cmake文件中添加如下代码后重启AndroidStudio
SET (CMAKE_C_COMPILER_WORKS 1)
SET (CMAKE_CXX_COMPILER_WORKS 1)

在这里插入图片描述
在这里插入图片描述

  1. 实测必须使用在本机上编译生成的exe文件替换ndk下面的文件才会生效

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

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

相关文章

在Windows中查找电脑序列号的几种方法,看看有没有适合你的

序言 Windows不会在其界面的任何位置显示PC的序列号,流行的系统信息工具也不会。但你通常可以通过简单的命令、在BIOS中查看或在硬件本身上查找PC的序列号。 运行WMIC命令 打开命令提示符或PowerShell窗口以开始。在Windows 11、Windows 10或Windows 8上,右键单击开始按钮…

蓝桥杯刷题第六天(昨天忘记发了)

今天想从不一样的角度来解题:从时间紧张暴力求解到思路阔达直接通过所有案例 暴力方法: 思路第一眼看到这个问题我就想到了第一个思路就是先用两个数组一个存石子数一个存颜色状态,每次遍历一遍看看有没有相邻石子颜色一样且为和最小的。 im…

64B66B编码详解

文章目录 前言一、64B66B的实现方式二、64B66B数据帧格式 前言 参考:https://blog.chinaaet.com/justlxy/p/5100064750 64B66B是我们在高速通信协议中的一种处理PHY层发送数据的编码。为何我们要编码,直接把原数据发送出去不行吗?答案是当然…

opengl草稿复习,承上启下(一)

目录 1、链接文件夹中的cpp 2、链接资源到输出目录 3、多编译目标 4、cmakelist添加库 4、添加glfw和glad 5、glfw运行 6、NDC、VBO、VAO 7、渐变三角形 8、渲染两个三角形 9、渲染两个三角形,同时基于原来颜色进行渐变 10、三角形渲染模块化 11、纹理渲…

26版SPSS操作教程(初级第十四章)

前言 #由于导师最近布置了学习SPSS这款软件的任务,因此想来平台和大家一起交流下学习经验,这期推送内容接上一次第十三章的学习笔记,希望能得到一些指正和帮助~ 粉丝及官方意见说明 #针对官方爸爸的意见说的推送缺乏操作过程的数据案例文件…

GT收发器PHY层设计(2)GT_module模块设计

文章目录 前言一、设计框图二、例化IP核端口三、common_reset_i模块四、gt_usrclk_source模块五、IBUFDS_GTE2和gtwizard_0_common模块六、顶层模块gt_module总结 前言 根据官方的example design设计一个自定义协议的高速PHY设计 一、设计框图 设计思路及代码思路参考FPGA奇哥…

mysql 数据库基本操作

mysql 数据库基本操作 1、创建五张表 – user 表:后台用户表 – product 表:产品表 – account 表:客户账户表 – product_account 表 : 客户购买表 – customer 表 : 客户表 2、创建表 SQL 语句: 注意&#xff1a…

简单而复杂的Python

Python是一种简单&复杂的编程语言。简单的时候可以到极致: print(hello world!)另一方面,Python 也具有许多复杂的语法特性,例如面向对象编程、装饰器、迭代器、生成器等等。这些特性使得 Python 适用于各种不同的编程任务和项目。 当我…

ROS中的栅格地图

目录 一、ROS中栅格地图格式 二、C节点发布地图 2.1 发布者发布地图的C实现 三、python节点发布地图 一、ROS中栅格地图格式 机器人导航所使用的地图数据,就是ROS导航软件包里的map_server 节点,在话题/map中发布的消息数据,消息类型是na…

智能锁也能用上GPT技术了?大扭力电机更配中国门?这家公司再次引领行业

智能锁也能用上GPT技术了?小小智能锁电机,竟然能拉动2.5吨SUV? 今日,中国智能锁领军品牌德施曼在北京举办「2024德施曼创新技术预沟通会」,德施曼技术研发中心总监桑胜伟揭秘了两项行业突破性技术——GPTfinger及龙霆…

vulnhub pWnOS v2.0通关

知识点总结: 1.通过模块来寻找漏洞 2.msf查找漏洞 3.通过网站源代码,查看模块信息 环境准备 攻击机:kali2023 靶机:pWnOS v2.0 安装地址:pWnOS: 2.0 (Pre-Release) ~ VulnHub 在安装网址中看到,该靶…

Deferred library xxx was not loaded

Deferred 延迟修饰词作用下的文件库尚未完成载入

Mysql的MHA

目录 一、MHA概念 1.1 MHA 的组成 1.2 MAH特性 1.3 MHA原理 1.4当主挂了以后会给哪个从服务器? 二、搭建MysqlMHA 2.1实验思路 2.2实验准备 2.3服务搭建 1. 关闭防火墙和selinux 2、修改 master(192.168.91.103)、Slave1&#xff0…

vue3鼠标向下滑动,导航条改变背景颜色和logo的封装

代码中使用了element-plus组件&#xff0c;需先安装 向下滑动前 向下滑动后&#xff08;改变了logo 字体 背景颜色&#xff09; <script lang"ts" setup> import router from /router; import { ArrowDown } from element-plus/icons-vue import { ref, …

课程15 光在晶体中的传播(三)(视频P53-55)

旋光与菲涅尔棱镜 旋光现象 说明从石英晶片出射的&#xff0c;依然是线偏振光&#xff0c;其偏振面却发生了旋转。 左旋石英与右旋石英 ![左旋石英与右旋石英![](https://img-blog.csdnimg.cn/direct/6ead0356c3c740169ba6e723863b743b.png) 旋光异构体 右旋石英表现出φR &a…

基于单片机30mv和300v量程的电压表仿真设计

**单片机设计介绍&#xff0c;基于单片机30mv和300v量程的电压表仿真设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机30mV和300V量程的电压表仿真设计&#xff0c;是一个旨在通过单片机实现宽量程电压测量和显示的综合性项目…

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之RTE模块配置详解(上)

RTE模块配置详解 - 上 一、RTE模块配置实操1.1 打开RTE模块1.2 RTE模块错误消除在这里插入图片描述 这里我们利用工具的自动处理功能。二、Configurator工具Validation总结本节我们就手把手详解RTE配置实现,其实也没有什么过多的操作。。。这个模块更多是工具自动处理的。 一、…

python当中的复数到底有什么用

复数看起来很简单&#xff0c;就是一个数加另外一个数&#xff0c;然后带有J的就是复数。 复数在 Python 中的内部类型是 complex。Python 提供了对复数的内置支持&#xff0c;因此可以直接进行复数的相关计算。复数由实部和虚部构成&#xff0c;可以使用 "j" 或 &qu…

golang语言系列:Authentication、OAuth、JWT 认证策略

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 golang语言系列 文章&#xff0c;主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习 1.Basic Authentication认证 每个请求都需要将 用户名密码 进行base64编码后&#xff0c;放在请求头的Aut…

Scikit-Learn K均值聚类

Scikit-Learn K均值聚类 1、K均值聚类1.1、K均值聚类及原理1.2、K均值聚类的优缺点 2、Scikit-Learn K均值聚类2.1、Scikit-Learn K均值聚类API2.2、K均值聚类案例 1、K均值聚类 K-均值&#xff08;K-Means&#xff09;是一种聚类算法&#xff0c;属于无监督学习。K-Means在机器…