在论坛上搜索后,我发现了一个类似的问题,并被重定向到了一个教程,该教程为我提供了一些有关使用CapitainHook操纵SpringBoard的基本指令。
首先,我想只使用普通的%hooks来完成它。您有任何提示可以告诉我从哪里开始吗?
在论坛上搜索后,我发现了一个类似的问题,并被重定向到了一个教程,该教程为我提供了一些有关使用CapitainHook操纵SpringBoard的基本指令。
首先,我想只使用普通的%hooks来完成它。您有任何提示可以告诉我从哪里开始吗?
这篇简介适用于那些有一定Objective-C知识并知道他在做什么的人。
注意:我将把theos安装路径称为$THEOS
。可以是~/theos
,/var/theos
,/usr/theos
等等。
创建MobileSubstrate扩展(也称为tweaks)的最流行方式是使用Dustin Howett的theos构建套件。详情如下:
所以,我们首先应该了解theos不是什么:
当然,theos不能做到以下几点:
theos是一个跨平台开发工具套件,可管理、开发和部署iOS软件,无需使用Xcode,包括:
由GNU Make驱动的稳健构建系统,使其Makefile可以轻松地通过安装了theos的任何地方部署。
NIC,一个项目模板系统,可创建各种用途的就绪空项目。
Logos,一个内置的基于预处理器的指令库,旨在使MobileSubstrate扩展开发易于实现且产生最佳代码。
自动打包:Theos能够直接创建DEB包,在越狱界中使用最广泛的Cydia中进行分发。
installtheos3
。这是一个非常常见且模糊的问题。由于theos是一整套开发工具,因此问“如何使用theos”并没有意义,更准确地说,应该是问“如何使用theos创建软件”。
首先,始终要有Theos Makefile Reference这个参考手册。它涵盖了创建theos Makefile的基础知识,包括解决连接问题并将框架或私有框架添加到项目中。
现在,你可以从头开始创建自己的Makefile,创建自己的小型theos克隆/符号链接并开始编码,但theos使这一步更容易。你只需使用nic.pl
。
使用NIC创建示例的简单步骤可以在此处找到。它非常直接,让你立即开始编程。
现在,我们开始回到主题。
首先,不要在$THEOS/bin
目录下运行NIC。NIC将在你运行它的地方创建项目目录,并避免在$THEOS/bin
中创建任何项目。因此,你将遇到一个简单的错误,可以通过在适当的位置创建项目目录来避免。
运行$THEOS/bin/nic.pl
并选择iphone/tweak
模板。系统会提示您填写简单信息,您可能已经非常了解如何回答,除了最后一个字段:MobileSubstrate bundle filter
。
由于 MobileSubstrate 的大部分内容不仅包括挂钩程序(将原始方法/函数替换为您的方法/函数的库),还包括加载器(使您的挂钩程序插入到某些进程中的部分),因此您必须提供此基本信息,以便加载器知道要加载您的修改。这个字段正是项目将被插入的应用程序的bundle标识符。
com.apple.springboard
是默认选项,它是SpringBoard的bundle标识符,该应用程序是:
因此,许多调整都在这里进行,从像应用程序启动这样微不足道的行为到全屏UI的外观。
现在,由NIC生成的目录将包含:
Makefile
,其中您将更改与编译相关的信息control
文件,其中您将更改与打包相关的信息$THEOS
的符号链接(或快捷方式),名为theos/
Tweak.xm
。它已添加到Makefile以进行编译,因此您可以立即开始编码!现在,您没有SpringBoard的源代码,也无法猜测要从何处挂钩方法。因此,您需要一个SpringBoard头文件集。为此,您需要使用一个名为class-dump-z
的工具,并将其运行到iOS文件系统中的SpringBoard
二进制文件中,以获得包括应用程序内所有类声明及其方法的头文件。
从那里开始(涉及一些猜测和记录方法调用),您可以开始对调整进行操作。
当然,如果您不是钩取SpringBoard,则可以像在其他二进制文件(如UIKit
、MobileSafari
等)中一样使用class-dump-z
。
请注意,当反向处理应用商店应用程序时,它们将被加密。您需要解密它们(我很遗憾不能告诉您如何),然后只需在上面运行class-dump-z
即可。
像首选项束之类的东西需要私有框架的头文件,在这种情况下是Preferences
框架的头文件。否则,您将获得无尽的缺少声明错误(我想您可能已经猜到了)。
class-dump-z
命令对Preferences
二进制文件进行操作,并将头文件放入您的INCLUDEPATH
中。编译器将在INCLUDEPATH
中查找包含如#include <stdio.h>
这样的头文件。是的,stdio.h
在构建编译器的一个目录中,成为编译器的INCLUDEPATH
之一!$THEOS/include
也被视为您的INCLUDEPATH
的一部分,这意味着您可以将转储的头文件直接放在其中,并稍后进行包含。#import
指令或添加一些声明来修复。)%c
指令或<objc/runtime.h>
中定义的objc_getClass
函数来获取它。例如:[%c(SBUIController) sharedInstance]
,[objc_getClass("SBUIController") sharedInstance]
。等等,好玩的那部分呢?我如何学习Tweak.xm
编程?
实际上,最初的问题是“如何开始MobileSubstrate Tweak的编程?”现在您已经准备好开始输入make
并看到您的项目奇妙地与theos一起编译了,所有您需要做的就是深入研究头文件或反汇编,并进行钩子、调用等操作!
Logos参考文献详细说明了如何钩取和使用Logos的其他功能,devwiki上的MobileSubstrate文章也非常值得一读。
如果有任何疑问,请加入irc.saurik.com #theos
IRC频道。这是一个讨论与theos相关话题和提问的好方式。我经常在那里,还有其他非常聪明的人;)
irc.saurik.net #theos
以获取更多帮助。您还可以查看使用Theos的我的项目:https://github.com/evilpenguin。