在论坛上搜索后,我发现了类似的问题,它使我重定向到一个教程,该教程为他们提供了有关使用CapitainHook操纵SpringBoard的一些基本说明。

首先,我只想用普通的%hooks来做。有什么提示我可以开始的吗?

最佳答案

因此,由于我(希望我)现在已经远离使用MobileSubstrate编程的新手,并且认为这个问题非常受欢迎,因此我决定创建一个答案,以期简要介绍您需要了解的有关该主题的所有知识。

这份简短的介绍适用于对Objective-C 有很少了解并且知道他在做什么的人。

注意:我将theos的安装路径称为$THEOS。这可能是~/theos/var/theos/usr/theos……是的。

创建MobileSubstrate扩展的最流行方法(也称为调整)是使用Dustin Howett theos build suite 。详细信息如下:

什么是神灵?

因此,我们应该从theos是而不是开始:

  • 操作系统
  • 希腊神
  • 编译器

  • 当然,theos 不执行:
  • 教您如何编码。
  • 进行调整,而无需考虑
  • 设置整个建筑环境和/或安装iOS SDK。

  • Theos是的跨平台开发工具套件,用于在不使用Xcode的情况下管理,开发和部署iOS软件,具有:
  • A robust build system driven by GNU Make ,这使得它的Makefile易于在安装了theos的任何地方进行部署。
  • NIC ,一个项目模板系统,可以创建可随时用于不同目的的空项目。
  • Logos ,这是一个基于预处理器的内置指令库,旨在简化MobileSubstrate扩展开发并优化代码生成。
  • 自动化包装:Theos能够直接创建DEB软件包以在Cydia中分发,这是越狱场景中最流行的软件包分发方式。

  • 如何安装theos?
  • 上OSX :安装iOS SDK并遵循these instructions
  • 上iOS :从Cydia安装BigBoss推荐工具包并运行installtheos3
  • 上Linux :找到一种手段来安装工具链,然后按照these instructions进行操作。
  • Windows上:没有什么是不可能的,但是如果您确实做到了,请告诉我。 :P

  • 如何使用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 包标识符,该应用程序是:
  • iOS主屏幕
  • 常用应用程序的启动器/显示器
  • iOS状态栏
  • 一些高级基本后台处理程序的处理程序

  • 因此,这里发生了许多调整,将行为从像应用程序启动这样琐碎的事情变为整个主屏幕UI的样子。

    用徽标编程调整

    现在,NIC生成的目录将包含:
  • Theos Makefile,您将在其中更改与编译
  • 有关的信息
  • control文件,您将在其中更改与包装相关的信息
  • 名为$THEOStheos/的符号链接(symbolic link)(或快捷方式)
  • 主代码文件,默认为Tweak.xm。它已经添加到Makefile中进行编译,因此您可以立即开始使用它进行编码!

  • 知道该怎么办

    现在,您无需使用SpringBoard的源代码,也无法猜测应该从何处钩住什么方法。因此,您需要一个SpringBoard header 集。为此,您需要使用一个名为class-dump-z的工具并将其运行到SpringBoard二进制文件(位于iOS文件系统内部)中,以获取包括应用程序内所有类声明及其方法的头文件。

    由此(涉及猜测和记录方法调用的事务),您可以开始进行调整以弄乱所需的内容。

    当然,如果您没有钩住SpringBoard,则可以像在其他二进制文件中一样使用class-dump-z,例如UIKitMobileSafari等。

    请注意,当反转 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指令或对其进行更改或添加一些声明来轻松解决这些错误。 )

    程式码提示
  • 您无法链接到SpringBoard,因此每当需要SpringBoard中的类时,都必须使用%c定义的Logos objc_getClass指令或<objc/runtime.h>函数来获取它。示例:[%c(SBUIController) sharedInstance][objc_getClass("SBUIController") sharedInstance]
  • 当不知道某个方法在SpringBoard中的作用或工作原理时,请尝试将其与IDA或其他方法进行反汇编。我使用IDA Demo(
  • 查看示例代码对学习和弄清楚SpringBoard或其他内部的工作原理很有帮助(再次)。 GitHub上有个值得研究的项目的人是rpetrich,chpwn,DHowett,EvilPenguin,当然还有更多。
  • 要了解SpringBoard和其他工具的工作原理(...),请查看iPhone Dev Wiki上的类(class)文章!

  • 结语

    等等,好的地方在哪里?在哪里可以了解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/

    10-09 13:01