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




目录
相关文章
|
前端开发 Java
Java Process类Runtime.getRuntime().exec() 执行bat脚本程序
Java Process类Runtime.getRuntime().exec() 执行bat脚本程序
889 0
|
消息中间件 缓存 安全
抱歉,Xposed真的可以为所欲为——终 · 庖丁解码(下)
Xposed的使用不难,API也就那些,难点是: 逆向弄清楚Hook APP的方法调用流程,怎么调,参数都是干嘛的等。 经过反复练习,逆向Hook一个普通的APP(非企业级加固)写出可用的Xposed插件早已驾轻就熟(主要是磨时间),但有一个顾虑一直萦绕心间:不知道Xposed底层的具体实现原理。Tips:Xposed通常只能 Hook java层 及 应用资源的替换,有两个实现版本:4.4前的Dalvik虚拟机实现 和 5.0后ART虚拟机实现,本文针对后者进行分析,同时搭配 Android 5.1.1_r6 源码食用。
1980 0
|
前端开发 安全 iOS开发
手把手教你做iOS逆向分析,突破微信的群发多选数量限制
很久没碰iOS开发了,最近都在web前端持续输出,加了很多推文群,每次群发文章的时候都要受到这个最多只能选择9个聊天的限制。 很不爽,好歹我也曾是一名iOS开发者呀,弄它~
832 0
手把手教你做iOS逆向分析,突破微信的群发多选数量限制
|
2月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
JSON 数据格式
Blob格式转json格式,拿到后端返回的json数据
文章介绍了如何将后端返回的Blob格式数据转换为JSON格式,并处理文件下载和错误提示。
1143 0
Blob格式转json格式,拿到后端返回的json数据
|
SQL 数据采集 机器学习/深度学习
WAF绕过思路
WAF绕过思路
1115 2
|
关系型数据库 MySQL Linux
Navicat 连接 Windows、Linux系统下的MySQL 各种错误,修改密码。
使用Navicat连接Windows和Linux系统下的MySQL时可能遇到的四种错误及其解决方法,包括错误代码2003、1045和2013,以及如何修改MySQL密码。
1237 0
|
存储 安全 JavaScript
使用Python的Flask框架开发验证码登录功能
使用Python的Flask框架开发验证码登录功能
527 0
|
存储 SQL 关系型数据库
MySQL之深入InnoDB存储引擎——redo日志
我们知道数据的修改首先是在Buffer Pool中进行的,之后再定时刷到磁盘中。那么如果在事务提交后还没刷新到磁盘中,系统就崩溃了,那么此时数据就丢失了,这就不满足事务的持久性了。而如果我们考虑每次提交之后,都同步将事务中所有的页面刷新到磁盘,这样确实可以保证持久性,但是这种方法存在以下两种问题:
|
编译器 Python
【python】控制台中文输出乱码解决方案
【python】控制台中文输出乱码解决方案
630 0

热门文章

最新文章