JNI和NDK开发(5)_使用Obfuscator-LLVM混淆JNI代码

什么是LLVM

LLVMlow level virtual machine的简称,其实是一个编译器框架。llvm随着这个项目的不断的发展,已经无法完全的代表这个项目了,只是这种叫法一直延续下来。
llvm是一个开源的项目。它最早的时候是Illinois的一个研究项目,主要负责人是Chris Lattner,他现在就职于Apple. Apple 目前也是llvm项目的主要赞助者之一。
llvm的主要作用是它可以作为多种语言的后端,它可以提供可编程语言无关的优化和针对很多种CPU的代码生成功能。此外llvm目前已经不仅仅是个编程框架,它目前还包含了很多的子项目,比如最具盛名的clang.
llvm的优点是开源,有一个表达形式很好的IR语言,模块化作的特别好。
llvm这个框架目前已经有基于这个框架的大量的工具可以使用。
llvm的官方网站地址是:llvm.org。在这里可以下载最新的发布代码,也可以找到介绍llvm的相关文档
摘自:https://blog.csdn.net/snsn1984/article/details/8036032

Obfuscator-LLVM介绍

OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学安全实验室于2010年6月份发起的一个针对LLVM代码混淆项目,主要作用是增加逆向难度,从而一定程度上保护代码的安全。因为后期转向了商业项目strong.protect,所以项目的进度一度停滞,而在17年3月,LLVM已经更新到了4.0版本,新版本的一些特性导致老版本的OLLVM存在一定的局限性。
github仓库最新版本:https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0
摘自:https://baijiahao.baidu.com/s?id=1572199238543099&wfr=spider&for=pc

运行环境

运行环境:我使用的是Mac笔记本,其实跟Linux差不多。
IDE:Android Studio 3.1.2
Android SDK版本:

compileSdkVersion 26
buildToolsVersion '26.0.2'

NDK版本:android-ndk-r16b
我查了网上很多使用NDK 10的资料,有些老旧,NDK 16这个版本虽然不是最新,但是用着问题不多。

搭建环境

  • 安装CMake
    CMake是一个比make更高级的跨平台的安装、编译、配置工具,可以用简单的语句来描述所有平台的安装(编译过程)。并根据不同平台、不同的编译器,生成相应的Makefile或者project文件。
    1、下载CMake官网:https://cmake.org/download/
    在这里插入图片描述
    下载图中标注的cmake-3.14.0-rc3-Darwin-x86_64.dmg安装文件,在Mac上安装即可。
    2、配置CMake环境变量
    安装完成后,点击CMake图标打开,会弹出提示,选择打开即可。
    在这里插入图片描述
    选择左上角Tools,打开How to Install For Command Line Use
    在这里插入图片描述
    会弹出配置环境的提示框,如下图所示:
    在这里插入图片描述
    使用命令:PATH="/Applications/CMake.app/Contents/bin":"$PATH"执行完之后执行cmake -version会在当前命令行窗口生效,新打开一个窗口就不识别这个命令,所以还要执行sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
    这样就配置好了camke环境。
    参考这篇文章:https://blog.csdn.net/baimafujinji/article/details/78588488

编译obfuscator-llvm源码

1、从https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0下载最新代码,这个分支下有好几个版本。
在这里插入图片描述
我下载的是4.0版本,下载完成后解压即可,git clone会有点慢,所以我直接把压缩包下载下来了。解压后在同级目录创建build目录。
在这里插入图片描述
2、下面就是编译源码的过程了,是重点:

  • 进入build目录,cd build
  • 编译源码cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator-llvm-4.0/,后面的是目录名,网上文章一般是cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/,所以后面你的目录是什么就执行什么命令。这个编译很快,控制台会出现很多not found,这都不影响下一步操作。
  • 最后执行命令make -j7,这个过程会有点久,控制台会显示执行进度,大约15分钟到30分钟。

3、编译完成后会生成obfuscator-llvm的编译源码,在build目录下,我们只需要复制binlib目录即可。
在这里插入图片描述
4、配置ndk的llvm
build下的binlib复制到ndk下的/android-ndk-r16b/toolchains/llvm/prebuilt/darwin-x86_64目录中替换覆盖。
到这obfuscator-llvm源码编译与配置就完事了。

混淆JNI代码

1、新建LLVMDemo带JNI的工程,如果不了解JNI开发的可以先看下文章:https://blog.csdn.net/u010982507/article/details/85345985
2、配置CMakeLists.txt文件

cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib SHARED src/main/cpp/native-lib.cpp )
find_library( log-lib log )
# 源码编译混淆配置
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mllvm -fla -mllvm -bcf -mllvm -sub")
SET(CMAKE_CXX_FLAGS_R
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ruiurrui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值