0%

用ollvm混淆native代码

本文只是对【清羽】Windows10 下编译 OLLVM-14.x 的用法做记录,不涉及任何原理分析.

配置环境

1.ndk
原文里大佬用的是 ndk25.
https://dl.google.com/android/repository/android-ndk-r25-beta3-windows.zip

2.llvm-mingw64
https://github.com/mstorsjo/llvm-mingw/releases/download/20220323/llvm-mingw-20220323-ucrt-x86_64.zip
解压后把

1
...(你解压的文件夹)\llvm-mingw-20220323-ucrt-x86_64\bin

配到环境变量里, 否则会提示找不到 libc++.dll 等.

3.clang
下载大佬已经编译好的 clang
https://gitee.com/qingyu_yyy/ollvm-project/attach_files/985049/download/clang-14.0.0.zip
解压后把 clang.exe 这个复制 3 份,分别命名为 clang.exe,clang++.exe,clang-cl.exe.
粘贴到

1
...\android-ndk-r25-beta3\toolchains\llvm\prebuilt\windows-x86_64\bin\

4. 复制 lib 库

1
...\android-ndk-r25-beta3\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang

复制到

1
...\android-ndk-r25-beta3\toolchains\llvm\prebuilt\windows-x86_64\lib\

里.
然后把该文件夹的 14.0.1 改成 14.0.0

编译使用

1.Android.mk
加上

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

2.CMakeLists.txt

1
set(CMAKE_CXX_FLAGS "-mllvm -fla -mllvm -sub -mllvm -sobf")

在 Android studio 指定 ndk 路径 local.properties.

1
ndk.dir=C\:\\Users\\Shocker\\AppData\\Local\\Android\\Sdk\\ndk\\android-ndk-r25-beta3

貌似在 Android studio 加上 - mllvm -bcf 编译卡死.
可以在外面 ndk-build 后拖进项目里.

单独混淆某函数
函数名后加上

1
__attribute__ ((__annotate__ (("sub"))))

例如:

1
void printText(int number)  __attribute__ ((__annotate__ (("sub")))) __attribute__ ((__annotate__ (("bcf")))){}

注:
目前 gitee 已经无法访问,我已将原作者的 clang 上传至百度网盘

链接:https://pan.baidu.com/s/1861eK-qwKoZ6pT9IlHRswg
提取码:g6hm