OLLVM4 0 NDK編譯環境搭建

2021-08-15 21:50:28 字數 3155 閱讀 2083

將ndk解壓到/opt/android/ndk/

解壓後的目錄

/opt/android/ndk/android-ndk-r10b

$ sudo gedit /etc/profile

#在檔案尾新增以下內容設定ndk環境變數

export ndk_home=/opt/android/ndk/android-ndk-r10b

export path=$ndk_home:$path

$ source /etc/profile 使之生效

如果環境變數未生效可以嘗試將內容新增在「~/.bashrc」檔案內

$sudo gedit ~/.bashrc

配置好環境變數之後,需要驗證一下是否搭建成功,在命令列下輸入ndk-build,有如下提示則表示搭建成功了。

安裝編譯工具

apt-get install cmake

apt-get install g++

編譯ollvm原始碼

git clone -b obfuscator-llvm-4.0

mkdir build

cd build

cmake -dcmake_build_type:string=release ../

make -j7

在build目錄下會生成編譯後的程式,我們只會用到bin和lib目錄下的檔案

字串混淆功能新增方法參考此處

cd /opt/android/ndk/android-ndk-r10b/toolchains/

mkdir obfuscator-llvm-4.0

將toolchains目錄下的llvm-3.3目錄中的下列目錄和檔案拷貝到obfuscator-llvm-4.0中

1.prebuilt目錄和檔案 

2.config.mk

3.setup.mk

4.setup-common.mk

將obfuscator-llvm-4.0/prebuilt/linux-x86下的bin和lib替換為我們編譯好的bin和lib

然後將下面檔案複製乙份,改名稱如下

arm-linux-androideabi-clang3.4->arm-linux-androideabi-obfuscator4.0

mipsel-linux-android-clang3.4-> mipsel-linux-android-obfuscator4.0

x86-clang3.4-> x86-obfuscator4.0

分別將以上三個拷貝後的資料夾中的的 setup.mk 中的 llvm_version、llvm_name 的值更改為

llvm_version=4.0	

llvm_name := obfuscator-llvm-$(llvm_version)

0.混淆引數詳解

-mllvm -fla 開啟控制流平台化

-mllvm -sub 開啟指令替換

-mllvm -bcf 開啟虛假控制流

-mllvm -sobf 開啟字串混淆

-mllvm -seed=0xdeadbeaf 指定隨機數種子生成器

bcf可以配合下面引數使用

-mllvm -bcf_loop=3 設定函式混淆次數為3次 不加此選項預設為1次

-mllvm -bcf_prob=40 設定**塊被混淆的概率是40%,預設30%

1.建立工程目錄 此處為hello

2.建立子目錄jni

3.在jni目錄下建立android.mk並根據需求編寫mk檔案

local_path := $(call my-dir)

include $(clear_vars)

local_module := hello

local_src_files := hello.c

local_cflags += -mllvm -sub -mllvm -bcf -mllvm -bcf_loop=3 -mllvm -bcf_prob=40 -mllvm -fla -mllvm -split_num=10 -mllvm -sobf

local_arm_mode := arm

include $(build_executable)

local_path := $(call my-dir)

include $(clear_vars)

ndk_toolchain_version := obfuscator4.0

include $(build_executable)

5.在jni目錄下建立**檔案hello.c

#include int main(int argc, char** argv)

else

return 0;

}

6.在工程目錄下執行ndk-build命令

7.未混淆的效果

8.混淆後的效果

字串混淆效果

bcf不支援invoke指令

在實際使用過程中,發現ollvm目前不支援@synchronized、try…catch等少數語法,然後導致bcf報錯。這些語法會生成invoke指令,目前可以在bcf前過濾包含invokeinst的方法,具體**可以參考該github位址。

win7搭建NDK編譯環境

win7 ndk編譯c 2 解壓ndk到指定目錄,如d盤 3 配置ndk環境變數 在windows下配置環境變數 新建環境變數 ndkroot 值為 d programfiles androidndk 值換成你的ndk根目錄位置 注意這個變數名一定要是ndkroot,至少在ndk r9版本的時候是這...

ubuntu中openwrt編譯環境的搭建

搭建openwrt編譯環境要保證ubuntu系統中磁碟空間足夠,並且所有操作最好在普通使用者許可權下進行,如果使用的是root許可權,需要執行exit命令退出root許可權,否則後續編譯的時候可能出現一些出錯。逐條輸入如下命令檢查更新並搭建好開發環境 sudo apt get install g s...

ubuntu下qt4 7 3交叉編譯環境的搭

本人是為了在dm8168上執行qt程式而進行了qt的交叉編譯。1.安裝交叉編譯工具。arm 2009q1 203 arm none linux gnueabi.bin 直接執行安裝。命令列輸入 arm none linux gnueabi g v 驗證是否安裝成功。可能需要exportpath 安裝...