在论坛上搜索后,我发现了一个类似的问题,并将它重定向到一个教程,该教程给出了一些关于使用CapitainHook操作SpringBoard的基本说明。
首先,我想用普通的%hooks来做。我可以从哪里开始提示?
答案 0 :(得分:117)
所以,既然我(希望我)现在远离使用MobileSubstrate编程的菜鸟,并且看到这个问题非常受欢迎,我决定创建一个答案,涵盖您需要了解的有关该主题的所有内容。 p>
这个小小的介绍适用于对Objective-C 知之甚少的人,并且知道他在做什么。
注意:我将theos安装路径称为$THEOS
。这可能是~/theos
,/var/theos
,/usr/theos
......是的。
创建MobileSubstrate扩展程序的最常用方法(也称为 tweaks )正在使用Dustin Howett theos build suite 。详情如下:
所以,我们应该从什么是而不是:
开始当然,没有做什么:
Theos是一套跨平台的开发工具套件,用于管理,开发和部署iOS软件,无需使用Xcode ,具有以下功能:
A robust build system driven by GNU Make ,这使得Makefile可以通过安装了theos的任何地方轻松部署。
NIC ,一个项目模板系统,可为不同目的创建可立即构建的空项目。
Logos ,一个内置的基于预处理程序的指令库,旨在使MobileSubstrate扩展开发变得简单并生成最佳代码。
自动打包:Theos能够直接创建DEB软件包,以便在Cydia中进行分发,这是越狱场景中最受欢迎的软件包分发方式。
installtheos3
。这是一个非常提出的问题而且太模糊了。由于theos是一整套开发工具,因此询问如何使用是没有意义的,但更具体地说,要求如何使用theos创建软件
首先,始终拥有Theos Makefile Reference。它涵盖了创建theos Makefile的基础知识,其中包括解决将项目框架或私有框架添加到项目中的链接问题。
现在,你可以从头开始创建自己的Makefile,创建你的小theos clone / symlink并开始编码,但是这些使这一步更容易。您可以使用nic.pl
。
可以找到运行NIC来创建内容的一个非常简单的示例here。它非常直接,可以让您立即进行编程。
现在,我们开始回到主题。
首先,不在$THEOS/bin
内部运行NIC。 NIC将在您正在运行它的位置创建项目目录,并避免在$THEOS/bin
中创建任何项目。因此,您最终会得到一个简单的错误,可以通过在某个地方创建项目目录来避免这种错误。
运行$THEOS/bin/nic.pl
并选择iphone/tweak
模板。除最后一个字段外,您可能会收到一些您可能知道如何回答的简单信息:MobileSubstrate bundle filter
。
由于MobileSubstrate的很大一部分不仅仅是 hooker (用你的原始方法/函数切换的库),还有 loader (得到的部分)你要挂钩进入某些过程),你必须为装载机提供这些基本信息,以便知道在哪里加载你的调整。此字段只是将插入此项目的应用程序的包标识符。
com.apple.springboard
,默认选项是SpringBoard的包标识符,应用程序是:
因此,在那里进行了许多调整,将行为从应用程序启动等微不足道的行为改为整个主屏幕UI的样子。
现在,NIC生成的目录将包含:
Makefile
,您将更改与编译相关的信息control
文件,您将在其中更改与包装相关的信息$THEOS
theos/
的符号链接(或快捷方式)
Tweak.xm
。它已添加到Makefile中进行编译,因此您可以立即开始编码!现在,您还没有SpringBoard的源代码,您无法猜出哪些方法无处可摘。因此,您需要 SpringBoard标头集。为此,您需要使用名为class-dump-z
的工具并将其运行到SpringBoard
二进制文件(在iOS文件系统中)以获取头文件,包括应用程序内的所有类声明及其方法。 / p>
从那个(涉及到一个猜测和记录方法调用的交易),你可以开始在调整中搞乱你想要的东西。
当然,如果你没有挂钩SpringBoard,你可以像使用其他二进制文件一样使用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
等内容轻松修复指令或更改它,或添加几个声明。)
%c
指令或objc_getClass
函数,如{{1}中所定义} 为拿到它,为实现它。示例:<objc/runtime.h>
,[%c(SBUIController) sharedInstance]
。等等,哪里有好处?我在哪里学习[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,它应该有助于您入门。