
前言
Cycript是允许开发者使用Objective-C++
和Javascript
组合语法查看及修改运行时APP内存信息的工具。
在越狱设备上安装
Cycript
是saurik
提供的工具,在Cydia
中搜索Cycript
并安装即可。
安装完成后,用SSH登录设备输入cycript
命令,就可以进入交互界面。
在越狱设备上,可以使用一些命令注入目标进程,调试目标函数。下面例子:脚本注入到SpringBoard(桌面)中,使其弹出一个提示框。
iPad:~ root# cycript -p SpringBoard
cy# var alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"Hello, wold!" delegate:nil cancelButtonTitle: @"cancel" otherButtonTitles: nil]
#"<UIAlertView: 0x1348bd1f0; frame = (0 0; 0 0); layer = <CALayer: 0x1321c89b0>>"
cy# [alert show]
这是《iOS应用逆向与安全》中给出的一个简单的例子。
Cycript
分析应用
上面例子中使用了一条命令cycript -p SpringBoard
,通过该命令可以调试指定APP。该命令有两种使用方式,除了上面的cycript -p 程序名称
,还可以通过cycript -p 程序进程ID
。注意这里的程序的名称并不是APP的名称。
查看程序的名称和进程ID可以通过安装一个插件adv-cmds
。通过它使用ps
命令查看当前运行程序的进程ID及可执行文件的路径。
安装完成后,通过ps -A
命令查看当前设备的进程ID和可执行文件的路径。同时,支持关键词搜索ps -A | grep 关键词
。
例如,查看简书的路径和进程ID

由于程序的进程ID是会发生变换的推荐使用名称。
下面就以简书为例,学习如何使用cycript
的使用。
查看应用信息
cy# NSHomeDirectory() // 沙盒路径
cy# NSBundle.mainBundle().bundleIdentifier //BundleID
cy# NSBundle.mainBundle().bundlePath //mainBundlePath
cy# NSSearchPathForDirectoriesInDomains (NSDocumentDirectory , NSUserDomainMask , YES)[0] // Document Path
cy# NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES)[0] // cache Path
查看APP
的Application
信息,例如:查看简书的Application
对象,为自定义的HGApplication
。
cy# UIApp
# "<HGApplication: 0x154d49910>"
查看rootViewController
。
cy# UIApp.keyWindow .rootViewController
#"<HGTabBarController: 0x155006200>"
还可以使用地址查看信息。例如:查看HGTabBarController
的view
。
cy# #0x155006200.view
#"<UILayoutContainerView: 0x154fca480; frame = (0 0; 1024 768); autoresize = W+H; layer = <CALayer: 0x154f65a20>>"
另外Cycript提供了choose()
函数选择某个类的实例数组。例如:学习简书中所有的Button类的所有实例数组。
cy# choose(UIButton)
[#"<UIButton: 0x157210600; frame = (0 8.5; 685 16); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15705f020>>",
#"<HGAvatarButton: 0x15724ead0; baseClass = UIButton; frame = (16 14.5; 45 45); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1572088b0>>".....]
以上是cycript
的基本用法。
cycript
高级用法
每次要输入那么多的代码是在有点麻烦,能不能将常用的代码封装起来呢?答案是肯定的。
Cycript本身是支持加载自己的脚本的,可以通过@import
命令加载。例如:加载mjscript脚本。
cy# @import mjcript
关于如何将自己学的脚本添加到手机上查看【越狱-逆向】基于Cycript实现的一些实用函数文档,对如何添加,如何使用写的比较详细,这里就不再重复赘述。
小结
以上学习了cycript
安装和基本使用,这些仅仅是入门后面还很很多功能需要去探索。
参考
- 《iOS应用逆向与安全》作者:刘培庆
- 小码哥逆向开发课程
网友评论