效果:当iphone锁屏弹出一个提示
cd LockScreenTest
export THEOS=/Users/tqh/theos
/Users/tqh/theos/bin/nic.pl
11
工程目录
Makefile文件
ARCHS = armv7 armv7s arm64
SDKVERSION = 10.3
TARGET = iPhone:clang:10.3:7.0
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = Alert
Alert_FILES = Tweak.xm
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
Tweak.xm文件
找到对应的类文件SBLockScreenManager.h其中有方法
- (void)lockUIFromSource:(NSUInteger)source withOptions:(NSDictionary *)options
代码实现
%hook SBLockScreenManager
- (void)lockUIFromSource:(NSUInteger)source withOptions:(NSDictionary *)options{
%orig;
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"这是个锁屏测试" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
}
%end
常用Logos语法简介
- %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。
- 更多:http://iphonedevwiki.net/index.php/Logos
control
control文件中存储的内容记录了deb包管理系统所需的基本信息,会被打包进deb包里。下方就是control中内容,其中存储的就是一些包名、工程名、版本、作者等等,与打包安装后在Cydia中看到的信息相同。
工程demo:
https://github.com/tqhnet/Tweak-Alert
参考链接:
http://security.ios-wiki.com/issue-3-6/
http://www.cnblogs.com/ludashi/p/5714095.html