Crcript高级用法
脚本链接
- cycript -r 192.168.3.223:6666
- 建议创建一个文件夹放自己常用的Shell脚本 -> 去到自己的Shell文件夹下
- vi cyConnect.sh -> 创建一个脚本
- cycript -r 192.168.3.223:6666 -> :x 保存
- 脚本自动连接
- 配置环境变量 -> 定义一个脚本路径 -> 加入PATH -> 重新加载终端
- source ~/.zshrc -> 重新加载
- sh cyConnect.sh
- cy# [UIApp setApplictionBadgeString: @"999"] -> 改外面未读数
- 改微信红包上的数字
- choose(UILabel)
- #对象地址.text = @"¥8888.00"
- Crcript -> Xcode不运行,也能连上APP
- MonkeyDev里面 -> Config -> MDConfig.plist -> Cycript -> MS.cy/md.cy -> 就是封装好的Crcript语法
封装自己的cy文件
- 去到工程目录 -> vi test.cy
- sum = function(a,b){return a + b;} -> :x保存
- 放置在后面名字为Dylib文件下,让其参与编译
- Build Phases -> Copy Files -> 添加该文件 不用勾选
- 编译项目
- 链接手机 -> sh cyConnect.sh
- @import test -> 导入引入的cy文件 -> 调用sum(10,20)测试
- Sublime Text -> 软件(需要下载) -> cy文件查看 -> 右下角可以选择语言
Logos语法
拿到可执行文件的头文件
- 准备工作
- 一个项目的可执行文件
- class-dump -H Demo -o DemoHeaders/ -> 导出该可执行问价的头文件
- 用Sublime Text打开文件夹
- 将上一步编译生成的文件放到新建的MonkeyDev工程里面进行安装
- Logos文件 -> .xm -> type -> Objective-C++ Pre
Logos语法展示
%hook
hook ViewController 下的 loginBtnClick
#import <UIKit/UIKit.h>
@interface ViewController:UIViewController
@end
%hook ViewController
- (void)loginBtnClick:(id)arg1{
UIAlertController * alertVC = [UIAlertController alertControllerWithTitle:@"HOOK成功group2!!" message:nil preferredStyle:(UIAlertControllerStyleAlert)];
UIAlertAction * cancel = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleCancel) handler:nil];
[alertVC addAction:cancel];
[self showViewController:alertVC sender:nil];
}
%end
%group
注意: group声明的组必须要用
%group iOS8
%hook IOS8_SPECIFIC_CLASS
// your code here
%end // end hook
%end // end group ios8
%group iOS9
%hook IOS9_SPECIFIC_CLASS
// your code here
%end // end hook
%end // end group ios9
//group构造
%ctor {
if (kCFCoreFoundationVersionNumber > 1200) {
%init(iOS9);
} else {
%init(iOS8);
}
}
%log
打印与方法有关的所有信息
%orig
调用原来的方法
- 如果有返回值
- id result = %orig; -> retrun (result + 1); 还可以做修改
%new & %c
- 添加一个方法, 该界面没有实现的, 必须在%hook %end内
%new
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
//调用类方法
[%c(ViewController) HK_classMethod];
}
%new
+(void)HK_classMethod{
NSLog(@"这是一个类方法!");
}
总结
Logos语法分三大类
- Block Level
- 这一类型的指令会开辟一个代码块,以%end结束。
- %group、%hook、% subclass 、 %end
- Top Level
- 这个TopLevel指令不放在BlockLevel中。
- %config、%hookf、%ctor、%dtor
- Function Level
- 这一块的指令就放在方法中。
-
%init、%class、 %c、 %orig、%log