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

时间:2011-05-25 02:11:14

标签: objective-c cocoa-touch ios jailbreak

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

首先,我想用普通的%hooks来做。我可以从哪里开始提示?

3 个答案:

答案 0 :(得分:117)

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

这个小小的介绍适用于对Objective-C 知之甚少的人,并且知道他在做什么。

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

创建MobileSubstrate扩展程序的最常用方法(也称为 tweaks )正在使用Dustin Howett theos build suite 。详情如下:

这是什么?

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

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

当然,没有做什么

  • 教你如何编码。
  • 创建调整而不必考虑
  • 设置整个建筑环境和/或安装iOS SDK。

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

  • 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的基础知识,其中包括解决将项目框架或私有框架添加到项目中的链接问题

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

可以找到运行NIC来创建内容的一个非常简单的示例here。它非常直接,可以让您立即进行编程。

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

使用theos

创建调整

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

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

由于MobileSubstrate的很大一部分不仅仅是 hooker (用你的原始方法/函数切换的库),还有 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文件系统中)以获取头文件,包括应用程序内的所有类声明及其方法。 / p>

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

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

请注意,在逆转 App Store应用时,它们会被加密。您需要解密这些(我很遗憾不允许告诉您操作方法),然后只需对它们运行class-dump-z

获取私有标题

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

获取它们与上一步应用的逻辑相同。在这种情况下,运行class-dump-z Preferences二进制文件并将标题投放到INCLUDEPATHINCLUDEPATH是编译器将查找包含#include <stdio.h>的标头的位置。是的,stdio.h位于构建编译器INCLUDEPATH的其中一个目录中!

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

(请注意,类转储标题并不总是完美的,因此您可能会遇到一些与标题相关的编译错误,可以通过删除#import等内容轻松修复指令或更改它,或添加几个声明。)

代码提示

  • 您无法链接SpringBoard,因此每当您需要SpringBoard中的类时,您必须使用Logos %c指令或objc_getClass函数,如{{1}中所定义} 为拿到它,为实现它。示例:<objc/runtime.h>[%c(SBUIController) sharedInstance]
  • 如果不知道方法在SpringBoard中的作用或工作原理,请尝试使用 IDA 或其他方法对其进行反汇编。我使用 IDA Demo (&lt; - noob!)进行反汇编。
  • 查看示例代码非常有用用于学习和弄清楚SpringBoard或其他内容(再次......)的工作原理。在GitHub看到项目的好人是 rpetrich chpwn DHowett EvilPenguin ,当然更多。
  • 还要了解SpringBoard和其他作品(...)如何查看iPhone Dev Wiki上的课程文章!

后记

等等,哪里有好处?我在哪里学习[objc_getClass("SBUIController") sharedInstance]编码?

嗯,最初的问题实际上是如何启动MobileSubstrate调整编程?。您完成所有设置,希望放置所有标题,准备输入Tweak.xm并查看您的项目,并使用theos进行神奇编译。

现在你需要做的就是真正深入挖掘你的标题或你的反汇编,然后去挂钩,打电话等等!

Logos Reference包含如何挂钩和使用徽标的其他功能,MobileSubstrate article on the devwiki也是一个很棒的读物。

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

答案 1 :(得分:2)

您正在寻找由DHowett创建的Theos .. Theos允许您进行调整,但它并不能为您提供所需的一切。你没有得到iOS的每一个头,所以你必须从iOS SDK中类框架/私有框架类转储。从这里开始:http://iphonedevwiki.net/index.php/Theos/Getting_Started,或加入irc.saurik.net #theos以获取更多帮助。您还可以查看使用theos的项目:https://github.com/evilpenguin

答案 2 :(得分:1)

你听起来像是在寻找theos。看一下this,它应该有助于您入门。