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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。