生成vs工程
cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release -T host=x64
如果装了多个版本vs,还需要添加 -G参数
Visual Studio 17 2022 = Generates Visual Studio 2022 project files.
Use -A option to specify architecture.
Visual Studio 16 2019 = Generates Visual Studio 2019 project files.
Use -A option to specify architecture.
Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
Optional [arch] can be "Win64" or "ARM".
Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
Optional [arch] can be "Win64" or "ARM".
打开 LLVM.sln
编译clang
产物
等待漫长时间后
注意:不是ollvm,不具备混淆功能。
编译ollvm
項目结构
生成vs工程
cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF -T host=x64
剩下就和llvm过程一样了
验证
native-lib.cpp
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
混淆前
混淆后
cppFlags '-mllvm -fla', '-mllvm -sub' ,'-mllvm -bcf' ,'-mllvm -sobf'
指令替换
虚假控制流
控制流平坦化
字符串混淆
完美增加逆向难度。