这是 insert_dylib 的 Rust 重写版本,用于向 Mach-O 二进制注入新的 LC_LOAD_DYLIB(或 LC_LOAD_WEAK_DYLIB)load command。
该工具会直接修改二进制文件。请务必先备份,并在分发前自行验证结果。
- 宿主平台支持:macOS、Linux、Windows
- 处理对象支持:Mach-O thin / fat binary
- 实现只依赖可移植的
std文件 I/O,没有宿主系统专属 API。
- 注入
LC_LOAD_DYLIB或LC_LOAD_WEAK_DYLIB - 支持 thin Mach-O 与 fat binary
- 支持原地修改(in-place)或输出到新文件
- 支持可选移除代码签名 load command(并尝试调整相关
__LINKEDIT信息) - 交互式安全确认,支持
--all-yes无人值守
cargo build --release生成的可执行文件位于:
- macOS / Linux:
target/release/insert-dylib - Windows:
target/release/insert-dylib.exe
insert-dylib [options] <dylib_path> <binary_path> [new_binary_path]若未提供 new_binary_path(且未使用 --inplace),默认输出为:
<binary_path>_patched
--inplace直接修改输入文件--weak使用LC_LOAD_WEAK_DYLIB,而不是LC_LOAD_DYLIB--overwrite允许无提示覆盖输出文件--strip-codesig在可行时强制移除LC_CODE_SIGNATURE--no-strip-codesig不移除LC_CODE_SIGNATURE--all-yes对所有交互提示自动回答yes--ios将 dylib 的 Mach-O 平台字段从macOS改为iOS(必须配合--dylib-path)--dylib-path <path>配合--ios使用的本地 dylib 文件路径,用于平台字段改写
更多案例见 examples/。
注入 dylib,输出到默认文件:
insert-dylib @executable_path/libHook.dylib MyApp使用弱依赖并原地修改:
insert-dylib --weak --inplace @rpath/libHook.dylib MyApp强制剥离代码签名并覆盖输出:
insert-dylib --strip-codesig --overwrite @loader_path/libHook.dylib MyApp MyApp.patched写入 iOS install name,并对本地 dylib 文件执行平台改写:
insert-dylib --ios --dylib-path libarcaea_function.dylib @executable_path/Frameworks/libarcaea_function.dylib Arc-mobile若移除了 LC_CODE_SIGNATURE,原签名会失效。需要的话请对补丁后的文件重新签名。下面的 codesign 命令本身仅在 macOS 上可用:
codesign --force --sign - MyApp.patched请仅对你有权限修改的二进制使用本工具。