有什么地方我可以开始MobileSubstrate调整编程?

Mat*_*toe 28 cocoa-touch objective-c jailbreak ios

在论坛上搜索后,我发现了一个类似的问题,并将它重定向到一个教程,该教程给出了一些关于使用CapitainHook操作SpringBoard的基本指令.

首先,我想只使用普通的%hooks.我能开始的任何暗示?

Mat*_*toe 119

所以,既然我(希望我)现在远离一个使用MobileSubstrate编程的菜鸟,并且看到这个问题非常受欢迎,我决定创建一个答案,涵盖你需要了解的关于这个主题的所有内容.

这个小小的介绍适用于对Objective-C知之甚少且知道自己在做什么的人.

注意:我将把theos安装路径称为$THEOS.这可能是~/theos,/var/theos,/usr/theos...是啊.

最流行的创建MobileSubstrate扩展的方法,也称为调整,是使用Dustin Howetttheos构建套件.细节如下:

什么是theos?

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

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

当然,还有什么不做的:

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

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

  • 由GNU Make驱动的强大的构建系统,使其Makefiles可以通过安装theos轻松部署到任何地方.

  • NIC,一个项目模板系统,可以为不同目的创建可立即构建的空项目.

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

  • 自动包装:Theos能够直接创建DEB包,用于在Cydia中分发,这是越狱场景中最受欢迎的包裹分发方式.

如何安装theos?

  • OSX上:安装iOS SDK并按照这些说明操作.
  • iOS上:从Cydia 安装BigBoss推荐工具包并运行installtheos3.
  • Linux上:找到安装工具链的方法,并按照这些说明操作.
  • Windows上:没有什么是不可能的,但如果你真的设法这样做,请告诉我.:P

怎么用theos?

这是一个非常被问到的问题而且太模糊了.由于theos是一整套开发工具,因此询问如何使用它是没有意义的,更具体地说,询问如何使用theos创建软件.

首先,总是手头有Theos Makefile Reference.它涵盖了创建theos Makefile的基础知识,其中包括解决链接问题,为项目添加框架或私有框架.

现在,您可以从头开始创建自己的Makefile,创建您的小theos clone/symlink并开始编码,但theos使这一步更容易.你可以使用nic.pl.

可以在此处找到运行NIC以创建内容的一个非常简单的示例.它非常简单,可以让您立即进行编程.

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

用theos创建一个调整

首先,内部时不要运行NIC $THEOS/bin.NIC将精确地创建项目目录,并避免在其中创建任何项目$THEOS/bin.因此,您最终会得到一个简单的错误,可以通过在某个地方创建项目目录来避免这种错误.

运行$THEOS/bin/nic.pl并选择iphone/tweak模板.除最后一个字段外,您可能会收到一些您可能知道如何回答的简单信息:MobileSubstrate bundle filter.

由于MobileSubstrate的很大一部分不仅仅是钩子(用你的原始方法/函数切换的库),而且还有加载器(将你的钩子插入某些进程的部分),你必须提供这个基本信息让Loader知道在哪里加载你的调整.此字段只是将插入此项目的应用程序包标识符.

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

  • iOS主屏幕
  • 常见应用的发射器/显示器
  • iOS状态栏
  • 处理一些高级基本背景流程

因此,在那里进行了许多调整,将应用程序启动时的行为改变为微不足道的行为,就像整个主屏幕UI看起来一样.

使用Logos编程调整

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

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

知道该怎么做

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

从那里(涉及到一个猜测和记录方法调用的交易)你可以开始在调整中搞乱你想要的东西.

当然,如果你不挂钩跳板,您可以使用class-dump-z您在其他二进制文件,如会UIKit,MobileSafari等等.

请注意,对于逆转App Store应用程序时,它们将被加密.你需要解密那些(遗憾的是我不允许告诉你操作方法),然后再运行class-dump-z它们.

获取私有标头

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

获取它们与上一步应用的逻辑相同.class-dump-z在这种情况下,运行Preferences二进制文件并将标题扔到您的INCLUDEPATH.这INCLUDEPATH是编译器将寻找你包含的标题的地方#include <stdio.h>.是的,stdio.h是在构建编译器的目录之一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看到项目的好人rpetrich,chpwn,DHowett,EvilPenguin,当然还有更多.
  • 要了解SpringBoard和其他工作原理(...),请查看iPhone Dev Wiki上的一篇文章!

结语

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

那么,最初的问题实际上是如何启动MobileSubstrate调整编程?.你们都进行了设置,希望放置所有标题,准备输入make并查看使用theos神奇编译的项目.

您现在需要做的就是实际挖掘您的标题或拆卸并进行挂钩,呼叫等等!

Logos Reference包含如何挂钩和使用Logos的其他功能,而devwiki上的MobileSubstrate文章也是一本很好的读物.

祝好运.如果有任何疑问,请不要犹豫加入irc.saurik.com #theosIRC频道.这是讨论与theos相关的主题并提出问题的好方法.我和其他非常聪明的人一起在那里;)

  • 这是我见过的关于Theos的最好,最深入的答案.写完Theos之后,我应该诚实地聘请这个人来撰写文档. (56认同)