banner
PPKun

Puniverse

bilibili

基於Hikari的LLVM Pass

項目地址: 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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。