iOS逆向-Cycript

Cycript简介

Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物
可以用来探索、修改、调试正在运行的Mac\iOS APP
通过Cydia安装Cycript,即可在iPhone上调试运行中的APP

官网: http://www.cycript.org/
文档: http://www.cycript.org/manual/
Tricks:http://iphonedevwiki.net/index.php/Cycript_Tricks

Github工具

https://github.com/CoderMJLee/mjcript
https://github.com/Tyilo/cycript-utils
https://github.com/limneos/weak_classdump


辅助工具

1、ps命令

安装adv-cmds
ps命令是process status的缩写,使用ps命令可以列出系统当前的进程

通过ps命令获取正在运行的进程ID和进程名称

  • 列出所有的进程
    ps –Aps aux
  • 搜索关键词
    ps –A | grep 关键词

2、利用python打印字符

cy# python
Python 2.7.16 (default, May  8 2019, 10:58:04)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> unicode('中文','UTF-8')
u'\u4e2d\u6587'
>>> print u'\u4e2d\u6587'
中文

Cycript语法

  • 进入Cycript环境
    cycript -p 进程IDcycript -p 进程名称

常用语法

cy# UIApp
cy# [UIApplication sharedApplication]
定义变量 var 变量名 = 变量值
cy# var shareApp = [UIApplication sharedApplication]
用内存地址获取对象 #内存地址
cy# 0x123456789
查看已加载的所有OC类
cy# ObjectiveC.classes
查看对象的所有成员变量 *对象
cy# *UIApp
递归打印view的所有子控件(跟LLDB一样的函数)
cy# view.recursiveDescription().toString()
筛选出某种类型的对象
cy# choose(UIViewController)
cy# choose(UITableViewCell)

封装Cycript脚本

我们可以将常用的Cycript代码封装在一个.cy文件中
exports参数名固定,用于向外提供接口

1、新建一个myCript.cy文件,命名随意

用编辑器比如Sublime Text进行编辑,然后保存

(function(exports) {
    AppPath = [NSBundle mainBundle].bundlePath;
    keyWin = function() {
       return UIApp.keyWindow;
    };
})(exports);
2、将myCript.cy文件拖到iphone/Device/usr/lib/cycript9.0/,可使用iFunBox
3、SSH连接iOS设备
4、使用Cycript监听APP,通过@import导入mjcript
cy# @import cycripttest
{}
cy# AppPath
cy# keyWin()

你可能感兴趣的:(iOS逆向-Cycript)