DyamkClient 0.0.1

DyamkClient 0.0.1

Soulghost维护。



Dyamk

运行时原生代码注入器,仅用于调试。

为什么使用 Dyamk

Dyamk 可以帮助您在不重新编译和重启应用的情况下运行 Objective-C 代码,它可以帮助您调试 UI 等,它基于 dlopen,因此它仅用于调试。当您完成调试后,只需将正确代码复制到您的应用程序中即可。

Dyamk 使用套接字与生成的 dylib 和项目进行通信,它作为一个方面运行在主应用中,因此它对主应用没有侵入性,尽情享受吧!

架构与原理

安装

  • 克隆仓库并进入它。
git clone https://github.com/Soulghost/Dyamk
cd Dyamk
  • 运行 install.sh(需要 root 权限在 /opt 中创建目录,您可以自行检查安全性)。
sh install.sh
  • 一些脚本是用 Python3 编写的,因此您需要 Python3 环境,如果没有,请尝试 pyenv

如何开始

在“Dyamk”文件夹中有两个项目,分别是 DyamkInjectorDyamkDemoApp,前者是动态库生成和注入项目,后者是用于在运行时注入的示例应用程序,当您使用此框架为自己的应用程序时,您的应用程序将是后者,现在我们只讨论示例。

示例应用程序

  • 进入 DyamkDemoApp 文件夹,使用 Xcode 打开它,如果未安装 CocoaPod 库,请在项目根目录下运行 pod install
  • 使用 iOS 模拟器运行它,默认情况下此框架不支持真实设备。
  • 因为 Dyamk 库需要 socket 接收注入器的构建消息,将出现一个确认提示。
  • 如果没有错误,您可以在下面的控制台中看到日志。
2018-06-22 21:01:03.051985+0800 DyamkDemoApp[52912:50098406] DYA Server start at 2224
  • 现在示例应用程序已准备好注入代码,现在您可以离开项目,但保持应用在模拟器上运行。

DyamkInjector 项目

  • 进入 DyamkInjector 目录,并使用 Xcode 打开项目。
  • 将构建目标更改为 BuildMe
  • BuildMe 目标打开 构建阶段 选项卡,并修改 [Dyamk] 触发更新 脚本的 shell 为您的 Python3 位置,您可以在终端中使用 which python 找到位置,如果您没有 python3,请尝试 pyenv
  • 打开 DyamkCodePlayground.m,您可以看到函数 __dyamk_debug_code_goes_here,您的代码注入将在这里。
void __dyamk_debug_code_goes_here() {
    // a simple code to inject
    UIWindow *window = [UIApplication sharedApplication].windows.lastObject;
    UIViewController *vc = window.rootViewController;
    vc.view.backgroundColor = [UIColor redColor];
}
  • 构建项目,您可以在模拟器上运行看到的示例应用程序,它已将视图的背景色更改为红色。
  • 您可以在 __dyamk_debug_code_goes_here 函数中编写一些代码,当您构建时,这些代码将被注入到示例应用程序中。