将OLLVM-3.6.1加入 android-ndk-r14b编译链

编译环境信息

Ubuntu 18.04.1 + android-ndk-r14b+OLLVM-3.6.1

OLLVM下载编译

OLLVM托管在github上,可直接clone项目进行编译。依次执行下列命令进行编译

 $ git clone -b llvm-3.6.1 https://github.com/obfuscator-llvm/obfuscator.git
 $ mkdir build
 $ cd build
 $ cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/
 $ make -j5

执行命令

$ cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/

如果出现错误

CMake Error at cmake/modules/AddLLVM.cmake:1163 (add_custom_target):
add_custom_target cannot create target "check-llvm-bindings-ocaml" because
another target with the same name already exists. The existing target is a
custom target created in source directory
"/home/xxx/obfuscator/test". See documentation
for policy CMP0002 for more details.
Call Stack (most recent call first):
cmake/modules/AddLLVM.cmake:1226 (add_lit_target)
test/CMakeLists.txt:150 (add_lit_testsuites)

则修改为以下命令再次尝试

$ cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF ../obfuscator/

编译完成后,在build目录下生成编译后的文件,这里我门只需要bin和lib这两个目录下的文件。

将OLLVM加入NDK编译链

在NDK下新建编译链

打开目录android-ndk-r14b/toolchains,复制文件llvm并重命名为obfuscator-llvm-3.6,进入目录obfuscator-llvm-3.6/prebuilt/linux-x86-64,删除其中的bin目录和lib64目录,并将之前编译生成的bin和lib拷贝到此目录下。

配置编译链

进入目录android-ndk-r14b/build/core/toolchains,复制文件arm-linux-androideabi-clang并重命名为arm-linux-androideabi-clang3.6-obfuscator。 打开arm-linux-androideabi-clang3.6-obfuscator目录, 修改setup.mk的内容为:

##########修改前#########
#LLVM_TOOLCHAIN_ROOT := $(call get-toolchain-root,llvm)
#LLVM_TOOLCAHIN_PREFIX := $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/
########################
########修改后##########
LLVM_VERSION := 3.6
LLVM_NAME := onfuscator-llvm-$(LLVM_VERSION)
LLVM_TOOLCHAIN_ROOT := $(LLVM_NAME)
LLVM_TOOLCHAIN_PREBUILT_ROOT := $(call get-toolchain-root,$(LLVM_TOOLCHAIN_ROOT))
LLVM_TOOLCAHIN_PREFIX := $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/

#其余内容不变
........

配置使用OLLVM混淆编译

在Application.mk中加入:

NDK_TOOLCHAIN_VERSION := clang3.6-obfuscator

在Android.mk中配置混淆参数

LOCAL_CFLAGS += -mllvn -sub -mllvm -bcf -mllvm -fla

参数说明

-fla for the control flow flattening pass 控制流扁平化
-sub for the instruction substitution pass 指令替换
-bcf for the bogus control flow pass 伪造控制流

说明

以上配置只是32位arm的编译链配置步骤,故只能编译armeabi和armeabi-v7a的.so文件,如果需要编译其它平台的.so文件,则按照类似步骤配置编译链即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值