有什么地方我可以启动MobileSubstrate调整编程?

在论坛上search之后,我发现了一个这样的问题,它将我redirect到一个教程,给了他们一些关于使用CapitainHook操纵SpringBoard的基本指导。

要开始我想用普通的%钩子只做。 任何暗示,我可以开始?

所以,既然我(希望我)现在已经远离了MobileSubstrate编程的noob,并且看到这个问题颇为stream行,我决定创build一个答案,涵盖您希望简要地了解这个主题的所有内容。

这个小小的介绍是针对那些对Objective-C有最less的知识并且知道他在做什么的人的。

:我将参考theos安装path为$THEOS 。 这可能是~/theos/var/theos/usr/theos …是的。

创buildMobileSubstrate扩展的最stream行的方法是使用Dustin Howett的theos构build套件 。 详情如下:

什么是他们?

所以,我们应该从什么不是

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

当然,他们不能做什么

  • 教你如何编码。
  • 创造调整,而不需要你去思考
  • build立一个完整的build筑环境和/或安装iOS SDK。

Theos是一个跨平台的开发工具套件,用于在不使用Xcode的情况下pipe理,开发和部署iOS软件 ,具有以下特点:

  • 由GNU Make驱动的一个健壮的构build系统 ,使得它的Makefiles可以在任何地方轻松地部署,并且安装了它们。

  • 网卡 ,一个项目模板系统,可以为不同的目的创build可立即制作的空项目。

  • Logos是一个内置的基于预处理器的指令库,旨在使MobileSubstrate扩展的开发变得简单,并实现最佳的代码生成。

  • 自动化包装 :Theos能够直接创buildDEB包,用于在Cydia中发行,而Cydia是越狱场景中最受欢迎的包装发行平均。

如何安装theos?

  • OSX上 :安装iOS SDK并按照这些说明操作 。
  • iOS上 :安装Cydia的BigBoss推荐工具软件包并运行installtheos3
  • Linux上 :find安装工具链的意思,并按照这些指示 。
  • Windows上 :没有什么是不可能的,但如果你真的设法这样做,请让我知道。 :P

如何使用theos?

这是一个非常疑问的问题,太模糊了。 由于theos是一整套开发工具,所以询问如何使用它 ,更具体一点,就是问如何使用theos来创build软件

首先,总是有Theos Makefile Reference 。 它涵盖了创buildtheos Makefile的基础知识,包括解决您的链接问题,将框架或私有框架添加到项目中

现在,您可以从头开始创build自己的Makefile,创build自己的小克隆/符号链接并开始编码,但是这使得这一步变得更容易。 你可以使用nic.pl

运行网卡创build一个非常简单的例子可以在这里find。 这是非常直接的,让你立即编程。

现在,我们开始回到主题。

创build一个与他们的调整

首先, 不要$THEOS/bin里面运行网卡。 网卡将在您正在运行的位置创build项目目录,并避免在$THEOS/bin创build任何项目。 因此,你最终会得到一个简单的错误,通过创build项目目录可以避免这个错误。

运行$THEOS/bin/nic.pl并selectiphone/tweak模板。 除了最后一个字段: MobileSubstrate bundle filter之外,您还可以通过简单的信息提示您可以很好地知道如何回答。

由于MobileSubstrate的很大一部分不只是钩子 (与你的原始方法/函数交换的库),还有装载器 (钩住某个进程的部分),你必须提供这些基本的信息为加载器知道在哪里加载你的调整。 该字段不过是该项目将被插入的应用程序包标识符

com.apple.springboard ,默认选项是SpringBoard的包标识符,应用程序是:

  • iOS主屏幕
  • 常见应用程序的启动器/显示器
  • iOS状态栏
  • 处理一些高层次的基本后台进程

因此,有许多调整发生,改变从应用程序启动到像整个主屏幕UI的样子一样的微不足道的行为。

用Logos编程一个调整

现在,由NIC生成的目录将包含:

  • Theos Makefile ,您将在其中更改与编译相关的信息
  • control文件,您将在其中更改与包装相关的信息
  • 一个符号链接(或捷径) $THEOS命名theos/
  • 主代码文件默认为Tweak.xm 。 它已经被添加到Makefile进行编译,所以你可以马上开始编码!

知道该怎么做

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

从这个angular度来看(涉及到一个方法调用的猜测和日志logging),你可以开始搞调整你想要的东西。

当然,如果你不挂钩SpringBoard,你可以像使用UIKitMobileSafari等其他二进制文件一样使用class-dump-z

请注意,在反转App Store应用程序时 ,它们将被encryption。 你需要解密这些(不幸的是我不能告诉你怎么做),然后运行class-dump-z

在获得私人标题

喜欢首选项包的东西需要私有框架的头文件,在这种情况下, Preferences框架的头文件。 否则,你会得到无尽的声明错误(我想你可以假设)。

获得它们与前面的步骤具有相同的逻辑。 运行class-dump-z ,在这种情况下, Preferences二进制文件,并在您的INCLUDEPATH标头。 INCLUDEPATH是编译器将寻找头文件的地方,像#include <stdio.h> 。 是的, stdio.h在构build编译器的INCLUDEPATH的目录之一中!

使用theos Makefile进行编译时, $THEOS/include将作为INCLUDEPATH一部分,这意味着,您可以将倾倒的标题放在那里,并在稍后添加它们。

(请注意,类转储头并不总是完美的,所以你可能会遇到一些与头相关的编译错误,这些错误可以通过删除一个#import指令或改变它,或者添加一些声明。)

代码提示

  • 你不能链接到SpringBoard,所以无论何时需要SpringBoard的类,你都必须使用Logos %c指令或objc_getClass函数(在<objc/runtime.h>定义)来获取它。 例如: [%c(SBUIController) sharedInstance][objc_getClass("SBUIController") sharedInstance]
  • 如果不知道某种方法的作用或SpringBoard中的某些工作,请尝试使用IDA或其他方法进行反汇编。 我使用IDA Demo (< – noob!)进行反汇编。
  • 查看示例代码对于学习和弄清楚SpringBoard或其他内容(再次)如何工作是非常有帮助的 。 在GitHub有很多人看过的项目是rpetrichchpwnDHowettEvilPenguin ,当然还有更多。
  • 也可以findSpringBoard和其他作品(…),看看iPhone Dev Dev上的一个类的文章!

结语

等等,好的部分在哪里? 我在哪里可以学习Tweak.xm编码?

那么,原来的问题其实是如何启动MobileSubstrate调整编程? 。 你所有的设置,希望所有的标题放置,准备inputmake ,看看你的项目用神奇的编译。

所有你需要做的是现在实际上挖掘你的头或你的反汇编,去挂钩,调用等!

Logos Reference包含了如何钩住和使用Logos的其他function, Devwiki上的MobileSubstrate文章也是一个很好的阅读。

祝你好运。 如果有任何疑问,请不要犹豫,joinirc.saurik.com #theos IRC频道。 讨论与理论相关的话题并提出问题是一个很好的方法。 我大部分在那里,还有其他非常聪明的人;)

您正在寻找由DHowett创build的Theos。Theos允许您进行调整,但它不会给您所需的一切。 你没有得到iOS的所有头文件,所以你必须从iOS SDK中转储框架/私有框架。 从这里开始: http : irc.saurik.net #theos ,或者joinirc.saurik.net #theos寻求更多的帮助。 你也可以看看我的项目,使用theos: https : //github.com/evilpenguin

你听起来像是在寻找他们。 看看这个 ,它应该帮助你开始。