有没有任何地方可以开始进行MobileSubstrate插件编程?

32

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

首先,我想只使用普通的%hooks来完成它。您有任何提示可以告诉我从哪里开始吗?

3个回答

126

这篇简介适用于那些有一定Objective-C知识并知道他在做什么的人。

注意:我将把theos安装路径称为$THEOS。可以是~/theos/var/theos/usr/theos等等。

创建MobileSubstrate扩展(也称为tweaks)的最流行方式是使用Dustin Howetttheos构建套件。详情如下:

theos是什么?

所以,我们首先应该了解theos不是什么

  • 操作系统
  • 希腊神话中的神
  • 编译器

当然,theos不能做到以下几点

  • 教你如何编码。
  • 在没有让你思考的情况下创建tweak
  • 设置整个构建环境和/或安装iOS SDK。

theos是一个跨平台开发工具套件,可管理、开发和部署iOS软件,无需使用Xcode,包括:

  • 由GNU Make驱动的稳健构建系统,使其Makefile可以轻松地通过安装了theos的任何地方部署。

  • NIC,一个项目模板系统,可创建各种用途的就绪空项目。

  • Logos,一个内置的基于预处理器的指令库,旨在使MobileSubstrate扩展开发易于实现且产生最佳代码。

  • 自动打包:Theos能够直接创建DEB包,在越狱界中使用最广泛的Cydia中进行分发。

如何安装theos?

  • OSX上:先安装iOS SDK,然后按照这些说明进行操作。
  • iOS上:从Cydia安装BigBoss Recommended Tools软件包,然后运行installtheos3
  • Linux上:安装工具链,然后按照这些说明进行操作。
  • Windows上:没有不可能的事情,但如果你真的做到了,请告诉我。:P

如何使用theos?

这是一个非常常见且模糊的问题。由于theos是一整套开发工具,因此问“如何使用theos”并没有意义,更准确地说,应该是问“如何使用theos创建软件”。

首先,始终要有Theos Makefile Reference这个参考手册。它涵盖了创建theos Makefile的基础知识,包括解决连接问题并将框架或私有框架添加到项目中

现在,你可以从头开始创建自己的Makefile,创建自己的小型theos克隆/符号链接并开始编码,但theos使这一步更容易。你只需使用nic.pl

使用NIC创建示例的简单步骤可以在此处找到。它非常直接,让你立即开始编程。

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

使用theos创建修改工具

首先,不要$THEOS/bin目录下运行NIC。NIC将在你运行它的地方创建项目目录,并避免在$THEOS/bin中创建任何项目。因此,你将遇到一个简单的错误,可以通过在适当的位置创建项目目录来避免。

运行$THEOS/bin/nic.pl并选择iphone/tweak模板。系统会提示您填写简单信息,您可能已经非常了解如何回答,除了最后一个字段:MobileSubstrate bundle filter

由于 MobileSubstrate 的大部分内容不仅包括挂钩程序(将原始方法/函数替换为您的方法/函数的库),还包括加载器(使您的挂钩程序插入到某些进程中的部分),因此您必须提供此基本信息,以便加载器知道要加载您的修改。这个字段正是项目将被插入的应用程序的bundle标识符

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

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

因此,许多调整都在这里进行,从像应用程序启动这样微不足道的行为到全屏UI的外观。

使用Logos编写调整程序

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

  • Theos Makefile,其中您将更改与编译相关的信息
  • control文件,其中您将更改与打包相关的信息
  • 指向$THEOS的符号链接(或快捷方式),名为theos/
  • 主代码文件,默认为Tweak.xm。它已添加到Makefile以进行编译,因此您可以立即开始编码!

了解该做什么

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

从那里开始(涉及一些猜测和记录方法调用),您可以开始对调整进行操作。

当然,如果您不是钩取SpringBoard,则可以像在其他二进制文件(如UIKitMobileSafari等)中一样使用class-dump-z

请注意,当反向处理应用商店应用程序时,它们将被加密。您需要解密它们(我很遗憾不能告诉您如何),然后只需在上面运行class-dump-z即可。

获取私有头文件

像首选项束之类的东西需要私有框架的头文件,在这种情况下是Preferences框架的头文件。否则,您将获得无尽的缺少声明错误(我想您可能已经猜到了)。

获取它们的方法与前一步相同。在这种情况下,运行class-dump-z命令对Preferences二进制文件进行操作,并将头文件放入您的INCLUDEPATH中。编译器将在INCLUDEPATH中查找包含如#include <stdio.h>这样的头文件。是的,stdio.h在构建编译器的一个目录中,成为编译器的INCLUDEPATH之一!
使用theos Makefile编译时,$THEOS/include也被视为您的INCLUDEPATH的一部分,这意味着您可以将转储的头文件直接放在其中,并稍后进行包含。
(请注意,class-dumped头文件并不总是完美的,因此您可能会遇到一些与头文件相关的编译错误,这些错误很容易通过删除或更改#import指令或添加一些声明来修复。)
代码提示:
  • 无法链接到SpringBoard,因此每当需要从SpringBoard中请求类时,必须使用Logos的%c指令或<objc/runtime.h>中定义的objc_getClass函数来获取它。例如:[%c(SBUIController) sharedInstance][objc_getClass("SBUIController") sharedInstance]
  • 不知道SpringBoard中的某个方法是做什么或如何工作时,请尝试使用IDA等反汇编工具将其反汇编。我使用IDA Demo这个反汇编工具。
  • 查看示例代码对于学习和理解SpringBoard或其他内容(再次提醒!)非常有帮助。在GitHub上,您可以找到很多优秀的人,例如rpetrichchpwnDHowettEvilPenguin等等。
  • 要了解SpringBoard和其他内容的工作原理,请查看iPhone Dev Wiki中有关类的文章!
结语:

等等,好玩的那部分呢?我如何学习Tweak.xm编程?

实际上,最初的问题是“如何开始MobileSubstrate Tweak的编程?”现在您已经准备好开始输入make并看到您的项目奇妙地与theos一起编译了,所有您需要做的就是深入研究头文件或反汇编,并进行钩子、调用等操作!

Logos参考文献详细说明了如何钩取和使用Logos的其他功能,devwiki上的MobileSubstrate文章也非常值得一读。

如果有任何疑问,请加入irc.saurik.com #theos IRC频道。这是一个讨论与theos相关话题和提问的好方式。我经常在那里,还有其他非常聪明的人;)


61
这是我见过的关于Theos最好、最深入的回答。作为Theos的作者,我诚实地认为应该雇用这个人撰写文档。 - Dustin Howett
这里是如何在Windows环境下使用theos的说明书:https://coolstar.org/theos.pdf - Mardok

2
您正在寻找由DHowett创建的Theos。 Theos允许您进行调整,但它并不提供您所需的所有内容。您无法获得iOS的每个标题,因此您需要从iOS SDK中的框架/私有框架中进行class-dump-z。在这里开始:http://iphonedevwiki.net/index.php/Theos/Getting_Started,或者加入irc.saurik.net #theos以获取更多帮助。您还可以查看使用Theos的我的项目:https://github.com/evilpenguin

1
你听起来像在寻找theos。看一下this,它应该会帮助你入门。

我已经厌倦了Theos。我想学习如何开始学习Theos编程。 - Matoe
看一下使用theos创建新tweak时生成的Tweak.xm文件,那应该会展示你需要了解的所有内容。Theos大部分没有文档记录。如果需要更多帮助,请在irc.saurik.com的#theos频道中询问。 - edc1591
我现在又遇到了一个问题。当将首选项捆绑包添加到应用程序中时,它找不到Preferences.h :( - Matoe
1
使用首选项捆绑模板在theos中创建一个新项目,并查看相关帮助。除了基本的调整之外,我对theos并不是很了解。 - edc1591

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接