Cycript高级用法 & Logos (19)

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操作。语法简单,功能强大且稳定。

Logos语法Git

拿到可执行文件的头文件

  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 
@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

调用原来的方法

  1. 如果有返回值
    1. id result = %orig; -> retrun (result + 1); 还可以做修改

%new & %c

  • 添加一个方法, 该界面没有实现的, 必须在%hook %end内
%new
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
    //调用类方法
    [%c(ViewController) HK_classMethod];
}

%new
+(void)HK_classMethod{
    NSLog(@"这是一个类方法!");
}

总结

Logos语法分三大类

  1. Block Level
    1. 这一类型的指令会开辟一个代码块,以%end结束。
    2. %group、%hook、% subclass 、 %end
  2. Top Level
    1. 这个TopLevel指令不放在BlockLevel中。
    2. %config、%hookf、%ctor、%dtor
  3. Function Level
    1. 这一块的指令就放在方法中。
    2. %init、%class、 %c、 %orig、%log


      image.png

你可能感兴趣的:(Cycript高级用法 & Logos (19))