lufei's Studio.

Mac App 动态库注入

字数统计: 467阅读时长: 1 min
2020/06/12 Share

前言

MacOS 上的 App 的动态库注入,可以为目标 App 扩展一些新的功能,经过我的小小的探索,大概有两个方案。

方案一

首先利用 Xcode 生成一个动态库 libTest.dylib,在动态库 Test.m 中加入一段代码:

1
2
3
4
5
6
+ (void)load {

NSLog(@" libTest loaded !!! ");

}

方便我们判断是否注入成功。

使用 Xcode 创建 Example App,把 Example.app 文件夹找到。

创建 ExampleInject.app 文件夹,并创建一个子文件夹,名字叫 Contents

ExampleInject.app/Contents 下创建一个名为 Frameworks 的文件夹,将动态链接库 libTest.dylib 拷贝到这个文件夹中。

ExampleInject.app/Contents 下新建文件夹 MacOS,然后在这个文件夹下新建一个 shell 脚本文件,名字为 ExampleInject

脚本内容:

1
2
3
#!/bin/sh
CurrentAppPath=$(cd $(dirname $0) && cd .. && pwd)
DYLD_INSERT_LIBRARIES=${CurrentAppPath}/Frameworks/libTest.dylib /Example.app/Contents/MacOS/Example

为脚本添加可执行权限

1
chmod +x ExampleInject.app/Contents/MacOS/ExampleInject

随后 运行 ExampleInject ,就可以在系统的控制台看到注入的 log :

libTest loaded !!!

方案二

利用 insert_dylib 直接向目标 App 进行注入动态库

首先利用 Xcode 创建 动态库 libTest.dylib (同上)和目标 App Example

insert_dylib 的可执行文件 和 Example.applibTest.dylib 放到同一个目录下

运行下面命令:

1
2
./insert_dylib libTest.dylib ./Example.app/Contents/MacOS/Example

Example.app -> Contents -> MacOS 目录下,出现了一个 Example_patched 的文件,这个就是注入成功的可执行文件。

如果出现找不到 libTest.dylib 的情况,可以直接把 libTest.dylib 拷贝到 Example.app -> Contents -> MacOS 目录下

运行 Example_patched 文件后,同样可以在系统的控制台看到注入的 log。

参考

macOS 逆向之生成动态注入 App

macOS 应用注入开发简介与实践

CATALOG
  1. 1. 前言
  2. 2. 方案一
  3. 3. 方案二
  4. 4. 参考