-
-
[原创] NDK集成最新版Pluto
-
发表于: 2025-3-31 09:00 1645
-
相信Pluto项目的z3导入问题一定挡住了很多想为NDK集成Pluto的人
Ubuntu版本 22.04.5 ndk版本 r25c
安装编译所需环境
1 | sudo apt install -y vim git build-essential clang clangd bison flex libz3-dev rsync python3 python-is-python3 python3-pip unzip cmake ninja-build |
按照这篇文章里的步骤把r25c的repo sync下来 https://bbs.kanxue.com/thread-271271.htm
编译
1 | python toolchain/llvm_android/build.py --no-build windows,lldb --skip-tests |
复制Pluto的整个 llvm/lib/Transforms/Obfuscation/ 目录 和 llvm/include/Transforms/Obfuscation/目录到源码中
修改 llvm/lib/Transforms/Obfuscation/CMakeLists.txt
下载z3的linux预编译包,把so加入链接,配置include_path,一定要绝对路径
# Set custom Z3 paths
set(Z3_INCLUDE_DIR "/home/xxx/ndk_obfu/z3/z3-4.14.0-x64-glibc-2.35/include")
set(Z3_LIBRARIES "/home/xxx/ndk_obfu/z3/z3-4.14.0-x64-glibc-2.35/bin/libz3.so")
# Include Z3 headers
include_directories(${Z3_INCLUDE_DIR})
add_llvm_component_library(LLVMObfuscation
HelloWorld.cpp
CryptoUtils.cpp
Flattening.cpp
MBAUtils.cpp
MBAObfuscation.cpp
Substitution.cpp
IndirectCall.cpp
BogusControlFlow.cpp
GlobalEncryption.cpp
Pipeline.cpp
LINK_COMPONENTS
Core
Support
Analysis
TransformUtils
LINK_LIBS
${Z3_LIBRARIES}
)
llvm/lib/Transforms/IPO/CMakeLists.txt 添加内容
1 2 3 4 5 6 7 | llvm/lib/Transforms/IPO/CMakeLists.txt@@ -73,4 +73,5 @@ add_llvm_component_library(LLVMipo Vectorize Instrumentation Scalar+ Obfuscation ) |
llvm/lib/Transforms/CMakeLists.txt 添加内容
1 2 3 4 5 6 | llvm/lib/Transforms/CMakeLists.txt@@ -9,3 +9,4 @@ add_subdirectory(Hello) add_subdirectory(ObjCARC) add_subdirectory(Coroutines) add_subdirectory(CFGuard)+add_subdirectory(Obfuscation) |
llvm/lib/Passes/PassBuilderPipelines.cpp 添加内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | llvm/lib/Passes/PassBuilderPipelines.cpp@@ -126,6 +126,7 @@ #include "llvm/Transforms/Vectorize/LoopVectorize.h" #include "llvm/Transforms/Vectorize/SLPVectorizer.h" #include "llvm/Transforms/Vectorize/VectorCombine.h"+#include "llvm/Transforms/Obfuscation/Pipeline.h" using namespace llvm; @@ -1278,6 +1279,8 @@ PassBuilder::buildPerModuleDefaultPipeline(OptimizationLevel Level, // Now add the optimization pipeline. MPM.addPass(buildModuleOptimizationPipeline(Level, LTOPreLink)); + MPM.addPass(buildObfuscationPipeline());+ if (PGOOpt && PGOOpt->PseudoProbeForProfiling && PGOOpt->Action == PGOOptions::SampleUse) MPM.addPass(PseudoProbeUpdatePass());@@ -1777,6 +1780,8 @@ ModulePassManager PassBuilder::buildO0DefaultPipeline(OptimizationLevel Level, MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); MPM.addPass(createModuleToFunctionPassAdaptor(CoroCleanupPass())); + MPM.addPass(buildObfuscationPipeline());+ for (auto &C : OptimizerLastEPCallbacks) C(MPM, Level); |
llvm/lib/LTO/LTOBackend.cpp 添加内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | diff --git a/llvm/lib/LTO/LTOBackend.cpp b/llvm/lib/LTO/LTOBackend.cppindex 7694c9848384..c6b658c01a97 100644--- a/llvm/lib/LTO/LTOBackend.cpp+++ b/llvm/lib/LTO/LTOBackend.cpp@@ -45,6 +45,7 @@ #include "llvm/Transforms/Scalar/LoopPassManager.h" #include "llvm/Transforms/Utils/FunctionImportUtils.h" #include "llvm/Transforms/Utils/SplitModule.h"+#include "llvm/Transforms/Obfuscation/Pipeline.h" using namespace llvm; using namespace lto;@@ -306,6 +307,7 @@ static void runNewPMPasses(const Config &Conf, Module &Mod, TargetMachine *TM, if (!Conf.DisableVerify) MPM.addPass(VerifierPass()); + MPM.addPass(buildLTOObfuscationPipeline()); MPM.run(Mod, MAM); } |
打开 toolchain/llvm_android/do_build.py,注释874-882行(删除test流程)
再次编译
1 | python toolchain/llvm_android/build.py --no-build windows,lldb --skip-tests |
编译完成后打包 out/install/linux-x86/clang-dev
复制并替换原来ndk中的bin目录
1 | cp -rf ~/ndk_obfu/clang-dev/bin/* ~/ndk_obfu/android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/bin/ |
编译测试,输出如下代表成功

赞赏记录
参与人
雪币
留言
时间
wx_Dispa1r
感谢你的贡献,论坛因你而更加精彩!
2025-12-3 12:58
mb_powghrzn
谢谢你的细致分析,受益匪浅!
2025-4-5 07:49
mb_ygbywaup
这个讨论对我很有帮助,谢谢!
2025-3-31 16:24
你瞒我瞒
感谢你的贡献,论坛因你而更加精彩!
2025-3-31 09:13
赞赏
他的文章
- [原创] NDK集成最新版Pluto 1646
- [原创] 腾讯游戏安全技术竞赛2024决赛 安卓方向解题报告 14755
- [原创]记一次仿写一个内核DWM绘制 34629
- [原创] 初探安卓隐藏Bootloader锁 35036
- [原创] QEMU/KVM + moonlight实现串流游戏作弊 24018
赞赏
雪币:
留言: