iOS逆向系列-Cycript

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS逆向系列-Cycript相关的知识,希望对你有一定的参考价值。

概述

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

Cycript基本使用

开启
cycript

退出
ctrl + D

清屏
commond + R

调试App
cycript -p 进程ID
cycript -p 进程名称

要获取iPhone安装app进程ID,首先需要安装adv-cmds插件。执行ps -A指令。 可以通过ps -A | grep 关键词快查找。
如果想通过ps -A命令找到某个App的进程ID,一定先保证该App运行。

cycript常见语法

获取应用的程序的IUApplication
UIApp

定义变量
var 变量名 = 变量值

用内存地址访问对象
#内存地址

获取App所有的类
ObjectiveC.classes

查看对象的所有成员变量
*对象

递归打印View的所有子空间(跟LLDB一样的函数)
view.recursiveDescription().toString()

获取当前页面的所有控制器
choose(UIViewController)

mjcript框架

第三方框架mjcript对于常用的一些语法的封装更好的帮助我们调试
常用的方法

MJClassMethodNames(对象) // 获取一个对象所有的类方法
MJInstanceMethodNames(对象) // 获取一个对象的所有对象方法
MJFrontVc() // 当前控制器
MJAppId // BoundID
MJAppPath // App安装路径
MJCachesPath // 沙盒路径
MJSubviews(view) // 递归View的子view
MJRectMake(0, 0, 100, 200) // 创建CGRect

查找某个控件:可以通过MJSubviews控制器的view,然后根据属性进行定位比如UIButton的lable的text。但是中文文本在终端显示的Unicode编码。这个时候我们可以使用终端利用Python获取中文的Unicode编码再去搜索。

Cycript库的封装

封装Cycript文件

对于一些经常使用的代码我们可以将其封装在一个.cy文件中。

编写一个简单的test.cy文件。

exports参数是固定写法,用于向外提供接口。JS语法。

将编译写test.cy存放到手机目录/usr/lib/cycript0.9。可以直接鼠标拖拽方式也可以使用下面的命令拷贝方式

// 先开启端口映射
python tcprelay.py -t 22:10086
// 将Mac目录的test.cy 拷贝到IPhone的对应目录
scp -P 10086 test.cy root@localhost:/usr/lib/cycript0.9

通过Cycript进入调试某个App中。首先导入该cycript库。

调用调用库中的方法,库文件名.方法名() 库文件名.变量名

全局函数

对于上面通过exports方式的定义的函数都是私有函数,exports赋值给本文件对象,调用时通过文名调用。可以定义全局函数直接通过类名调用。

注意对于可变的一定使用函数获取,对于固定的值可以使用变量获取。因为脚本从上到下执行变量执行过后就是固定值。函数是当被调用的时候内部代码才回去执行,并且每次调用都是实时获取的。

以上是关于iOS逆向系列-Cycript的主要内容,如果未能解决你的问题,请参考以下文章

逆向工程二之Cycript

iOS逆向之分析工具的安装和使用

iOS逆向实战二:微信聊天界面实现飘气球效果

逆向APP的思路

Swiftshield:SwiftOBJ-C 代码混淆工具

不越狱修改钉钉位置打卡(实现除了砸壳,都可以在不越狱的前提下进行逆向工程)