点击上方蓝字关注我们
前言
原文:
https://blog.csdn.net/z929118967/article/details/77062267
I 、常用Logos语法
1.1 语法简介
- %hook 指定需要hook的类名,以%end结尾
- %log 用来打印log的,将信息输入到syslog中,如%log((NSString *)@"ZeluLi")
- %orig 执行被hook函数的原始代码,类似于super.method功能
- %group 该指令用于%hook的分组,%group后边跟的是组名,%group也是必须以%end结尾,其中可以包含多个%hook
- %init 该指令用来初始化某个%group,一个group只有被初始化后才可生效,init必须在hook中进行执行。
- %ctor tweak的构造器,用来初始化,如果不显式定义,Theos就会自动生成一个%ctor,并在其中调用%init(_ungrouped). 如:%ctor { %init(_ungrouped)}
- %new 该指令用来给现有的class添加一个新的函数。与Runtime中的class_addMethod相同。
- %c 该指令用来获取一个类的名称,类似于objc_getClass。
1.2 简单的demo例子
1、输入新建工程的命令
代码语言:javascript复制devzkndeMacBook-Pro:~ devzkn$ $THEOS/bin/nic.pl
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/cydget
[4.] iphone/flipswitch_switch
[5.] iphone/framework
[6.] iphone/ios7_notification_center_widget
[7.] iphone/library
[8.] iphone/notification_center_widget
[9.] iphone/preference_bundle_modern
[10.] iphone/tool
[11.] iphone/tweak
[12.] iphone/xpc_service
Choose a Template (required): 11
Project Name (required): testTweakDemo
Package Name [com.yourcompany.testtweakdemo]:
Author/Maintainer Name [devzkn]:
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.apple.UIKit
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:
Instantiating iphone/tweak in testtweakdemo/...
Done.
其中Package Name :输入deb包的名字(类似于bundle identifier) [iphone/tweak] MobileSubstrate Bundle filter :tweak目标app的bundle identifier,也就是你需要hook的App的bundle Id
比如微信的bundle Id :com.tentcent.xin
- 作用于所有的app的方法
这里的com.apple.springboard是iOS的桌面app,如果我们的tweak是想作用于所有的app呢?那么这里应该填 com.apple.UIKit`
II、工程目录下文件介绍
新建一个工程之后,会生成四个文件:control、plist、Makefile、Tweak.xm,这几个文件分别有什么用?
代码语言:javascript复制devzkndeMacBook-Pro:testtweakdemo devzkn$ ls -lrt
total 32
-rw-r--r-- 1 devzkn staff 51 Aug 10 17:07 testTweakDemo.plist
-rw-r--r-- 1 devzkn staff 223 Aug 10 17:07 control
-rw-r--r-- 1 devzkn staff 1045 Aug 10 17:07 Tweak.xm
-rw-r--r-- 1 devzkn staff 189 Aug 10 17:07 Makefile
2.1 control文件
ntrol文件主要是项目有关的信息,比如项目的名称、版本、开发者等信息
代码语言:javascript复制Package: com.yourcompany.testtweakdemo
Name: testTweakDemo
Depends: mobilesubstrate
Version: 0.0.1
Architecture: iphoneos-arm
Description: An awesome MobileSubstrate tweak!
Maintainer: devzkn
Author: devzkn
Section: Tweaks
2.2 plist文件
代码语言:javascript复制devzkndeMacBook-Pro:testtweakdemo devzkn$ more testTweakDemo.plist
{ Filter = { Bundles = ( "com.apple.UIKit" ); }; }
plist文件的作用主要是设置需要被逆向的app的bundle Id,如果需要逆向多个APP,就在Bundles数组中添加其bundle Id。
2.3 Makefile文件
代码语言:javascript复制devzkndeMacBook-Pro:testtweakdemo devzkn$ more Makefile
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = testTweakDemo
testTweakDemo_FILES = Tweak.xm
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
devzkndeMacBook-Pro:testtweakdemo devzkn$
Makefile文件主要是设置工程需要用到的文件、框架、库等信息。
1)testTweakDemo_FILES设置工程需要引用的文件,如果你还需要加入一些自己写的文件,多个文件之间以空格分隔: