Crcript高级用法
脚本链接
1. cycript -r 192.168.3.223:6666 2. 建议创建一个文件夹放自己常用的Shell脚本 -> 去到自己的Shell文件夹下 3. vi cyConnect.sh -> 创建一个脚本 1. cycript -r 192.168.3.223:6666 -> :x 保存 2. 脚本自动连接 3. 配置环境变量 -> 定义一个脚本路径 -> 加入PATH -> 重新加载终端 1. source ~/.zshrc -> 重新加载 4. sh cyConnect.sh 5. cy# [UIApp setApplictionBadgeString: @"999"] -> 改外面未读数 6. 改微信红包上的数字 1. choose(UILabel) 2. #对象地址.text = @"¥8888.00" 7. Crcript -> Xcode不运行,也能连上APP 1. MonkeyDev里面 -> Config -> MDConfig.plist -> Cycript -> MS.cy/md.cy -> 就是封装好的Crcript语法
封装自己的cy文件
1. 去到工程目录 -> vi test.cy 1. sum = function(a,b){return a + b;} -> :x保存 2. 放置在后面名字为Dylib文件下,让其参与编译 1. Build Phases -> Copy Files -> 添加该文件 不用勾选 2. 编译项目 3. 链接手机 -> sh cyConnect.sh 1. @import test -> 导入引入的cy文件 -> 调用sum(10,20)测试 4. Sublime Text -> 软件(需要下载) -> cy文件查看 -> 右下角可以选择语言 1. 查看文件hank 2. 编译并调用hank.cy来试试(记得导入@import hank) 3. HKCurrentVC() -> pvcs() 这样来快速找视图
Logos语法
Logos语法其实是CydiaSubstruct框架提供的一组宏定义。便于开发者使用宏进行HOOK操作。语法简单,功能强大且稳定。
拿到可执行文件的头文件
1. 准备工作 1. 一个项目的可执行文件 2. class-dump -H Demo -o DemoHeaders/ -> 导出该可执行问价的头文件 3. 用Sublime Text打开文件夹 2. 将上一步编译生成的文件放到新建的MonkeyDev工程里面进行安装 3. 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
1.这一类型的指令会开辟一个代码块,以%end结束。
2.%group、%hook、% subclass 、 %end
- Top Level
1.这个TopLevel指令不放在BlockLevel中。
2.%config、%hookf、%ctor、%dtor
- Function Level
1.这一块的指令就放在方法中。
2.%init、%class、 %c、 %orig、%log
image.png