赞
踩
LLVM
是low 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
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这个版本虽然不是最新,但是用着问题不多。
PATH="/Applications/CMake.app/Contents/bin":"$PATH"
执行完之后执行cmake -version
会在当前命令行窗口生效,新打开一个窗口就不识别这个命令,所以还要执行sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
。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目录下,我们只需要复制bin
和lib
目录即可。
4、配置ndk的llvm
将build
下的bin
和lib
复制到ndk下的/android-ndk-r16b/toolchains/llvm/prebuilt/darwin-x86_64
目录中替换覆盖。
到这obfuscator-llvm
源码编译与配置就完事了。
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。