在论坛上搜索后,我发现了类似的问题,它使我重定向到一个教程,该教程为他们提供了有关使用CapitainHook操纵SpringBoard的一些基本说明。
首先,我只想用普通的%hooks来做。有什么提示我可以开始的吗?
最佳答案
因此,由于我(希望我)现在已经远离使用MobileSubstrate编程的新手,并且认为这个问题非常受欢迎,因此我决定创建一个答案,以期简要介绍您需要了解的有关该主题的所有知识。
这份简短的介绍适用于对Objective-C 有很少了解并且知道他在做什么的人。
注意:我将theos的安装路径称为$THEOS
。这可能是~/theos
,/var/theos
,/usr/theos
……是的。
创建MobileSubstrate扩展的最流行方法(也称为调整)是使用Dustin Howett的 theos build suite 。详细信息如下:
什么是神灵?
因此,我们应该从theos是而不是开始:
当然,theos 不执行:
Theos是的跨平台开发工具套件,用于在不使用Xcode的情况下管理,开发和部署iOS软件,具有:
如何安装theos?
installtheos3
。 如何使用theos?
这是一个非常提出的问题,也太含糊。由于theos是一整套开发工具,因此询问如何使用它并没有多大意义,而是询问如何使用theos创建软件。
首先,请始终握有Theos Makefile Reference。它涵盖了创建theos Makefile的基础知识,其中包括解决您的链接问题,向项目添加框架或私有(private)框架。
现在,您可以从头开始创建自己的Makefile,创建小小的theos克隆/符号链接(symbolic link)并开始编码,但是theos使此步骤更加容易。您可以只使用
nic.pl
。可以在here中找到一个运行NIC来创建内容的非常简单的示例。这非常简单明了,可让您立即进行编程。
现在,这是我们开始回到主题的地方。
用theos进行调整
首先,在
$THEOS/bin
内时不要运行NIC。 NIC将完全在您运行项目的位置创建项目目录,并且避免在$THEOS/bin
中创建任何项目。因此,您将得到一个简单的错误,可以通过在适当的位置创建项目目录来避免该错误。运行
$THEOS/bin/nic.pl
并选择iphone/tweak
模板。除了最后一个字段MobileSubstrate bundle filter
之外,您将被简单的信息提示,您可能会很好地知道该如何回答。由于MobileSubstrate的很大一部分不仅是挂钩(用于与您的原始方法/功能进行切换的库),而且还包括加载程序(将您的挂钩插入到某些进程中的那一部分),因此您必须提供这些基本信息,以使Loader知道将调整内容加载到何处。该字段只是要在其中插入此项目的应用程序的 bundle 包标识符。
com.apple.springboard
,默认选项是SpringBoard的 bundle 包标识符,该应用程序是:因此,这里发生了许多调整,将行为从像应用程序启动这样琐碎的事情变为整个主屏幕UI的样子。
用徽标编程调整
现在,NIC生成的目录将包含:
Makefile
,您将在其中更改与编译control
文件,您将在其中更改与包装相关的信息$THEOS
的theos/
的符号链接(symbolic link)(或快捷方式)Tweak.xm
。它已经添加到Makefile中进行编译,因此您可以立即开始使用它进行编码! 知道该怎么办
现在,您无需使用SpringBoard的源代码,也无法猜测应该从何处钩住什么方法。因此,您需要一个SpringBoard header 集。为此,您需要使用一个名为
class-dump-z
的工具并将其运行到SpringBoard
二进制文件(位于iOS文件系统内部)中,以获取包括应用程序内所有类声明及其方法的头文件。由此(涉及猜测和记录方法调用的事务),您可以开始进行调整以弄乱所需的内容。
当然,如果您没有钩住SpringBoard,则可以像在其他二进制文件中一样使用
class-dump-z
,例如UIKit
,MobileSafari
等。请注意,当反转 App Store应用程序时,它们将被加密。您需要解密这些文件(很遗憾,我不允许您告诉您如何操作),然后仅对它们运行
class-dump-z
。关于获取私有(private) header
诸如首选项之类的东西需要专用框架的 header ,在这种情况下为
Preferences
框架的 header 。否则,您将无休止地丢失声明错误(就像我猜想的那样)。获取它们具有与上一步相同的逻辑。在这种情况下,在
class-dump-z
二进制文件上运行Preferences
,并将 header 放在INCLUDEPATH
上。 INCLUDEPATH
是编译器将在其中查找包括#include <stdio.h>
之类的 header 的地方。是的,stdio.h
在构建编译器的INCLUDEPATH
的目录之一内!使用theos Makefile进行编译时,
$THEOS/include
会算作INCLUDEPATH
的一部分,这意味着,您可以将转储的 header 放在那儿,以后再包含它们。(请注意,类转储的 header 并不总是完美的,因此您可能会遇到一些与 header 相关的编译错误,可以通过删除
#import
指令或对其进行更改或添加一些声明来轻松解决这些错误。 )程式码提示
%c
定义的Logos objc_getClass
指令或<objc/runtime.h>
函数来获取它。示例:[%c(SBUIController) sharedInstance]
,[objc_getClass("SBUIController") sharedInstance]
。 结语
等等,好的地方在哪里?在哪里可以了解
Tweak.xm
的编码?好吧,最初的问题实际上是如何启动MobileSubstrate调整编程?您已经完成所有设置,希望已放置所有 header ,可以键入
make
并查看使用theos神奇地编译的项目。现在您需要做的就是真正挖掘标题或反汇编,然后进行钩挂,调用等!
Logos Reference确切包含了如何挂钩和使用徽标的其他功能,并且MobileSubstrate article on the devwiki也是一本好书。
祝你好运。如果有任何疑问,请立即加入
irc.saurik.com #theos
IRC channel 。这是讨论与theos相关的主题并提出问题的好方法。我主要在这里,还有其他一些非常聪明的人;)关于objective-c - 在哪里可以启动MobileSubstrate调整编程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6118814/