Xcode,终极的调试和破解工具

调试一直是我在计算机上的一部分经验,甚至在学习编码之前也是如此。 但是,展开二进制文件和修改程序行为的满意度从未如此轻松。

通常,调试包括从十六进制编辑器来回切换到调试器,应用程序,终端,计算器等,更不用说程序退出了,您必须遵循很长的配方,直到调试会话突然结束。 不好…

但是几个月前,以破解适用于macOS的Twitter为借口,我决定最小化此问题并优化此流程。 这就是Xcode进行救援的时候。

设定

首先,我们需要创建一个以Cocoa框架为目标的Xcode项目。

调试

我们将使用嵌入式lldb控制台进行动态调试。

想象一下,适用于macOS的Twitter是我们要调试的应用程序。 通常,我们需要运行lldb并从调试器启动该进程,相反,每次我们单击Run按钮时,Xcode都会为您执行此操作。

为此,请在我们框架方案的“运行”配置中选择Twitter应用程序作为可执行文件。

这样,将编译我们的框架,并在进程附加了lldb的情况下启动Twitter应用程序。

注入代码

到目前为止,我们所做的可能已经足够了,我们可以轻松地创建针对应用程序的调试会话,还可以利用Xcode提供的自动完成功能。 但是注入代码呢?

代码注入通常涉及编译动态库并修补二进制文件,以便它链接到我们的库。 尽管如此,调试注入的代码仍然是一项繁琐的任务,并且尽管我们始终可以使部分代码自动化,但该过程缓慢而重复。

现在,借助Xcode灵活的配置方案和一些魔术,我们可以轻松修补正在检查的应用程序的运行时,而无需修改其二进制文件(双赢)。

例如,让我们注入一些代码,记录每次对viewDidLoad调用。
Cocoa Framework项目模板创建一个名为nameOfTheProject.h的头文件。 我们将创建其各自的.m文件,并将混乱的逻辑放入其中。

照原样,Xcode将编译我们的框架,并在调试器附加到其过程的情况下启动Twitter应用程序。 链接这两者就像使用环境变量运行过程一样容易,该环境变量迫使位于给定路径上的库加载。 这个环境变量是DYLD_INSERT_LIBRARIES ,是我们库${TARGET_BUILD_DIR}/${TARGET_NAME}.framework/Versions/A/${TARGET_NAME}的路径。

在方案的“运行配置的“ 参数”选项卡中设置环境变量后,单击“运行”按钮。 我们的代码应该已经正确注入到Twitter流程中。

还不够好? Xcode提供的所有其他调试工具也都可用,从视图层次结构到内存图调试器。

加起来

无论您是否进行逆向工程,我都建议您尝试一下,也可以使用TwitterX来获得有关此设置功能的更多信息。