Cycript高级用法 & Logos (19)

简介: Crcript高级用法

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

调用原来的方法


  1. 如果有返回值


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语法分三大类


  1. Block Level


       1.这一类型的指令会开辟一个代码块,以%end结束。

       2.%group、%hook、% subclass 、 %end


  1. Top Level


       1.这个TopLevel指令不放在BlockLevel中。

       2.%config、%hookf、%ctor、%dtor


  1. Function Level


       1.这一块的指令就放在方法中。

       2.%init、%class、    %c、 %orig、%log



微信图片_20220509231538.png
image.png




目录
相关文章
|
8月前
|
NoSQL 编译器 Linux
gdb调试工具的使用方法
gdb调试工具的使用方法
90 1
|
7月前
|
Java Linux 网络安全
Linux常用50个命令分享:功能、示例与实用技巧
Linux常用50个命令分享:功能、示例与实用技巧
|
Linux Shell
Linux常用命令用法及实现方式
3.查找定位文件 (1)pwd命令:pwd命令用于显示用户当前所处的工作目录,英文全称为“print working directory”,输入该命令后按回车键执行即可。 (2)cd命令:cd命令用于切换当前的工作路径,英文全称为“change directory”,语法格式为“cd [参数] [目录]”。 (3)ls命令:ls命令用于显示目录中的文件信息,英文全称为“list”,语法格式为“ls [参数] [文件名称]”。 (4)tree命令:tree命令用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。
|
缓存 BI Linux
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
96 0
|
缓存 JavaScript iOS开发
iOS 逆向编程(十五)Cycript 语法进阶(封装 .cy 脚本文件)
iOS 逆向编程(十五)Cycript 语法进阶(封装 .cy 脚本文件)
199 0
|
Web App开发 存储
Mac 技术篇-通过AppScript编写脚本实现设置快捷键打开指定程序实例演示
Mac 技术篇-通过AppScript编写脚本实现设置快捷键打开指定程序实例演示
525 0
  Mac 技术篇-通过AppScript编写脚本实现设置快捷键打开指定程序实例演示
|
C++ Windows
Windbg脚本和扩展工具开篇
好长一段时间没写文章了,最近一直忙于为项目的可调式性做一些脚本和扩展工具,鉴于对windbg强大威力的震撼,以及相对较少的资料,笔者决定写一系列关于如何开发Windbg脚本和扩展命令的文章,您的支持是我最大的动力,希望本系列文章对您有所帮助。
1169 0