Cycript是Objective-C、JavaScript和Java等语法的混合物,可以用来探索、修改、调试正在运行的Mac/iOS App
逆向前的准备:
- 可越狱的手机
可通过爱思助手进行越狱,暂时只支持iOS12以下设备。 - 通过Cydia(越狱成功后产生)安装以下插件
- Apple File Conduit "2"(可以访问整个iOS设备的文件系统)
- iFile (类似安卓系统的文件夹管理器)
- OpenSSH(电脑远程登录iPhone)
- Cycript (调试iPhone正在运行的App)
Cydia安装软件方法可自行百度,这里就不多讲了。
- 电脑安装iFunBox
使用OpenSSH远程登录手机
- 需要手机和Mac处于同一局域网
- 在Mac终端输入ssh 用户名@服务器主机地址
2.1.用户名: iPhone默认有两个用户(root/mobile),root最高权限用户,mobile普通权限用户,这里用root账户登录
2.2. 服务器主机地址:这里的服务器就是越狱的iPhone手机,从连接的wifi网络详情里查看IP地址
2.3. 初始密码alpine
2.4.exit
退出登录
登录成功
通过USB进行SSH登录
- 下载usbmuxd工具包
- 将iPhone的22端口(默认ssh通信端口)映射到任意非保留 端口:
cd 下载路径/usbmuxd-1.0.8/python-client
python tcpreplay.py -t 22:10010
-
保持当前页面,另开一个终端页,
ssh root@localhost -p 10010
登录成功
usb登录比wifi远程登录要快很多,所以推荐usb登录
ssh密钥认证:
因为每次ssh登录都要输入密码比较麻烦,所以通过密钥认证,达到不需要输入密码的效果.
- 电脑在终端输入:
ssh-keygen
,一路回车即可。 -
ssh-copy-id root@服务器ip
,输入密码即可。
Cycript相关操作
- 打开想要调试的app,
ps -A
找到要调试的进程,由于此命令输出的内容比较多,不容易查找可以 通过ps -A|grep /var/mobile/Containers/Bundle/Application
查找
进程 -
开启cycript:
cycript -p 进程ID
或者cycript -p 进程名称
进程ID会变
连接喜马拉雅 - cycript 语法:
- UIApp 相当于[UIApplication shareApplication]
-
#内存地址
访问对象:eg:获取喜马拉雅根控制器
喜马拉雅根控制器 - 定义变量:
var 变量名 = 变量值
- 加载已加载类
ObjectiveC.class
- 查看某对象的所有成员变量
*对象
- 递归打印view的所有子控件:
view.recursiveDescription().toString()
- 筛选出某种类型的对象:
choose(UIViewController)
eg:将喜马拉雅登录页面里的登录按钮隐藏
效果前后对比
实现步骤:查看已加载的所有UIViewController
: choose(UIViewController)
发现
XMALoginViewController
是登录界面的控制器#0x140e0bf60.view.recursiveDescription().toString()
查看当前登录界面所有View视图,通过搜索\u767b\u5f55
("登录"的UTF-8编码形式),定位到XMALoginButton
,[#0x140e04600 removeFromSuperview]
删除按钮-
模块封装
通过以上步骤是不是发现每次操作比较麻烦,是不是可以通过封装成各种方法直接调用会比较方便,答案是肯定的。我们可以将经常用的方法放在一个.py
文件中,将.py文件放在iPhone的/usr/lib/cycript0.9
目录下
.py
文件格式:假设叫 test.cy
(function(exports) {
// bundle ID
AppId = NSBundle.mainBundle.bundleIdentifier;
//根控制器
RootVC = function() {
return [UIApplication sharedApplication].keyWindow.rootViewController;
};
})(exports);
使用:
cy# @import test
{}
cy# AppId
@"com.gemd.iting"
cy# RootVC()
#"<XMMainTabBarController: 0x13f968200>"
推荐一个比较好的脚本文件,包含获取最上层控制器等非常好用的方法
网友评论