將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 安裝...