項目地址: Hikari-LLVM19
enable-strcry 在 rust 中可能存在問題,其他自行測試
Warning: 僅在 mac arm64 上編譯通過,未經過完全測試
混淆插件提取自 Hikari-LLVM15 By 61bcdefg 項目。
第一次做這種東西,非常感謝 0xlane 大佬的代碼讓我少踩很多坑,在這裡貼上他的項目地址 ollvm-rust
編譯#
環境#
Macos 15.2
LLVM 19.1.7
cmake -G "Ninja" -S . -B ./build \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DLT_LLVM_INSTALL_DIR=/opt/homebrew/opt/llvm@19
注意要將 LT_LLVM_INSTALL_DIR 換為自己,CMake 裡硬編碼了,也要替換
rust 動態加載#
動態加載 llvm pass 插件需切換到 nightly 通道
rustup toolchain install nightly
生成一個示例項目,通過 -Zllvm-plugins
參數加載 pass 插件,並通過 -Cpasses
參數指定混淆開關:
cargo new helloworld --bin
cd helloworld
cargo +nightly rustc --release -- -Zllvm-plugins="path/to/libHikari.dylib" -Cpasses="hikari(enable-fco,enable-strcry)..."
opt 動態加載#
# 使用 clang 編譯源代碼並生成 IR
clang -emit-llvm -c input.c -o input.bc
# 使用 opt 工具加載和運行自定義 Pass
opt -load-pass-plugin="path/to/libHikari.dylib" --passes="hikari(enable-fco,enable-strcry)..." input.bc -o output.bc
# 將 IR 文件編譯為目標文件
llc -filetype=obj output.bc -o output.o
# 連接目標文件生成可執行文件
clang output.o -o output
感謝#
Hikari-LLVM15 By 61bcdefg
ollvm-rust By 0xlane