|
作者:微信文章
Theos开发iPhone开发框架
当你用心写代码的时候你就会发现~
没有比脚更长的路,没有比人更高的山,
成功没有捷径,要的就是坚持不懈。
Tweak工程文件说明
1 control文件
首先介绍的是control文件,该文件记录了工程的基本信息,
Tweak工程中control文件各字段内容如下:
Package: com.gameprotect.testName: testDepends: mobilesubstrateVersion: 0.0.1Architecture: iphoneos-armDescription: An awesome MobileSubstrate tweak!Maintainer: xxxAuthor: xxxSection: Tweaks
从上面的内容可以看出,Package、Name、Maintainer、Author等字段是在建立工程时由命令行输入的;
而Depends、Version、Description等字段从字面意义也很好理解,值得说明的是Depends字段,读者可以根据需要指定工程的固件版本、软件程序等依赖条件,若运行环境不满足依赖条件则程序无法运行,
这三个字段在一般情况下可以不用更改;最后是Architecture和Section字段,该字段指定了要安装的程序的设备架构以及程序类型,不能更改。
MakeFile文件
MakeFile文件,该文件用来指定工程要用到的文件、框架等信息,
Tweak工程中MakeFile文件各字段内容如下:
include theos/makefiles/common.mkTWEAK_NAME = testtest_FILES = Tweak.xminclude $(THEOS_MAKE_PATH)/tweak.mkafter-install:: install.exec "killall -9 SpringBoard"
其中第一行的include字段指定了工程的common.mk文件,该文件通常不会变化,因此不需修改;
TWEAK_NAME字段填入的是建立工程时命令行输入的Project Name;test_FILES字段指定工程包含的源文件,如果工程中需要用到多个源文件则用空格将各个文件名分开;
第三行的include字段指定工程的mk文件,这里新建的是tweak工程,所以填入的是tweak.mk文件,还可以根据需求填入application.mk以及tweak.mk文件;
最后一行after-install字段指定安装程序后需要执行的操作,这里需要注入SpringBoard进程并执行自己的代码,因此需要重启SpringBoard进程达到目的。
MakeFile文件除了自动生成的这些字段外,还可以根据功能手动添加其他字段:ARCHS字段可以用来指定处理器架构,
一般情况下填写ARCHS = armv7(废弃) arm64 arm64e即可;
TARGET字段用来指定SDK版本;framework字段可以指定要导入的框架,
比如这里填写的是“XLsnow_FRAMEWORKS = UIKit”,UIKit为后续测试代码需要用到的框架,
另一方面,还可以通过test_PRIVATE_FRAMEWORKS字段指定要导入的私有库,格式不变。
plist文件
接下来介绍plist文件。plist文件记录了工程的配置文件,主要作用是指定程序的作用范围,具体内容如下所示:
[图片]
可以看到,该文件的内容是一系列的Dictionary,最外层为Root键,Root键下为Filter键,Filter键下的array即为要设置的部分。
该部分分为三类,
一类是Bundles,即所编写程序的作用对象,这个类型的字段就是所要注入的程序Bundle名,这里要注入的进程为SpringBoard,所以填入com.apple.springboard;
第二类是Classes,即指定要注入的类名,同样是根据填入的字符串来筛选注入的类名;
第三类是Executables,即指定要注入的可执行文件名。这三类Array可以根据需要来设定,测试程序中只需注入SpringBoard,没有其他特殊筛选规则,因此此处设定便如上图所示,无需更改。
Tweak.xm文件
最后需要介绍的是Tweak.xm文件,该文件是实现具体功能的关键所在,是实现具体功能的源文件,这个文件支持Logos和C、C++语法,
为了更好地理解编写规则,先介绍默认生成的Tweak.xm中的注释内容:
/* How to Hook with LogosHooks are written with syntax similar to that of an Objective-C @implementation.You don't need to #include , it will be done automatically, as willthe generation of a class list and an automatic constructor.%hook ClassName// Hooking a class method+ (id)sharedInstance {return %orig;}// Hooking an instance method with an argument.- (void)messageName:(int)argument {%log; // Write a message about this call, including its class, name and arguments, to the system log.%orig; // Call through to the original function with its original arguments.%orig(nil); // Call through to the original function with a custom argument.// If you use %orig(), you MUST supply all arguments (except for self and _cmd, the automatically generated ones.)}// Hooking an instance method with no arguments.- (id)noArguments {%log;id awesome = %orig;[awesome doSomethingElse];return awesome;}// Always make sure you clean up after yourself; Not doing so could have grave consequences!%end*/
以上的注释展示了基本的Logos语法,具体可以分为三类:一类是%hook和%end,其中%hook后面指定要hook的类名,
另一方面,hook的整块逻辑完成后结尾要加上%end,在hook逻辑中可以添加要hook的函数,并在函数体内部实现想要添加的代码逻辑;
第二类是%orig,该语句代表执行原函数逻辑,即完成hook操作后可以选择是否调用原函数的代码,若需要调用则加上“%orig;”即可;
第三类是%log,这类代码的作用是在log中打印hook的函数的类名、参数等信息。
make package
Tweak工程的命令行编译操作也比较简单:
首先在命令行下将目录切换至要编译的工程目录,
随后使用make命令或make package命令编译工程,
其中make命令编译生成的是dylib文件,
make package命令生成的是deb文件。
还可以通过“make package install”命令编译
并将程序直接安装到手机上,不同于前两种编译方式,
该方法需要在MakeFile文件的头部加上手机的IP地址
“THEOS_DEVICE_IP = [device_ip_address]”
若出现编译不通过的情况,请读者确认以下文件的正确性及权限:
(1) Ldid下载到/opt/theos/bin/,随后执行chmod 777 提升权限;
(2) Libsubstrate.dylib:scp root@[ios_device_ip]:
/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate /opt/theos/lib/libsubstrate.dylib (手机安装了CydiaSubstrate的情况下)
(3) dkpg-deb:下载到/opt/theos/bin/并重命名为dkpg-deb,随后执行chmod 777 提升权限;
(4) 命令行输入命令:sudo perl -i -pe ‘y|\r||d’ /Users/[username]/[project]/theos/bin/dpkg-deb,其中[username]为Mac的用户名,[project]为要编译的工程路径。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|