头图

**注入工具的GitHub地址:
https://github.com/Tyilo/insert_dylib**


1、准备如下所需内容:
image.png

2、cd到上图所示的目录下,执行以下命令行,提示输入后,输入y回车:
image 2.png

命令执行完毕之后会生成如下图文件:
image 3.png

然后将命令生成的目标文件替换为原可执行文件的名字,删除原可执行文件;
然后用另外的命令行工具otool来进行查看目标文件需要加载的库,命令如下图:
image 4.png

在命令执行完之后,会看到在最后有 name libHelloLib.dylib (offset 24),这个就是注入的我们自己生成的动态库:
image 5.png

接下来需要修改动态库的安装名,命令如下:
image 7.png

然后在目标app/Content下,新建Frameworks文件夹,将一开始生成的动态库copy进去,如图:
image 6.png

到此处已经注入并处理完成,当前的app处理未签名状态,如需签名,请使用签名工具codesign -options来进行签名;证书签名查询命令:security find-identity -v -p codesinging

最后验证上述操作,看是否将动态库注入进目标程序。
image 9.png
image 8.png
当看到有我们动态库中的日志输出,说明已经注入成功了。

注入命令中,命令行第一个参数问题参悟:
通过查看注入的代码得知,其实该参数就是在上述流程中修改name的路径,可以直接传入你设置的路径,后需不需要修改。
请查看注入的代码,非源码,只说明注入过程:
image 10.png

注:Apple的dyld开源地址 https://github.com/opensource-apple/dyld

macOS 注入后运行问题记录:

  • 使用工具进行注入:
    ./insert_dylib libHelloLib.dylib ./Example.app/Contents/MacOS/Example
  • 注入之后修改动态库的加载名字:
    install_name_tool -change libHelloLib.dylib @loader_path/../Frameworks/libHelloLib.dylib ~/Desktop/inject/Example.app/Contents/MacOS/Example
  • 如果修改动态库加载名字还不行的话,就添加@rpath:
    install_name_tool -add_rpath "@loader_path/../Frameworks/libHelloLib.dylib" ~/Desktop/inject/Example.app/Contents/MacOS/
  • 用命令查看动态库的所有RPARTH的加载命令:
    otool -l ~/Desktop/inject/Example.app/Contents/MacOS/Example

挺住_彡锅
1 声望0 粉丝

心有远山不造作,静而不争远是非。