Cycript、python、Reveal
Cycript
- Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物
- 可以用来探索、修改、调试正在运行的Mac\iOS APP
- 官网
- 文档
- 通过Cydia安装Cycript,即可在iPhone上调试运行中的APP
Cycript的开启和关闭
- 开启
cycript
cycript -p 进程ID
cycript -p 进程名称
- 取消输入:
Ctrl + C
- 退出:
Ctrl + D
- 清屏:
Command + R
ps命令
- 安装adv-cmds
- ps命令是process status的缩写,使用ps命令可以列出系统当前的进程
- 列出所有的进程
ps –A
ps aux
- 搜索关键词
ps –A | grep 关键词
- 列出所有的进程
常用语法
- UIApp
[UIApplication sharedApplication]
- 定义变量
var 变量名 = 变量值
- 用内存地址获取对象
#内存地址
- 已加载的所有OC类
ObjectiveC.classes
- 查看对象的所有成员变量
*对象
- 递归打印view的所有子控件(跟LLDB一样的函数)
view.recursiveDescription().toString()
- 筛选出某种类型的对象
choose(UIViewController)
choose(UITableViewCell)
封装Cycript - .cy文件编写
- 我们可以将常用的Cycript代码封装在一个.cy文件中
- exports参数名固定,用于向外提供接口
封装Cycript - 存放和使用.cy文件
- 将.cy文件存放到/usr/lib/cycript0.9目录下
-
在Cycript中引用.cy文件,并使用它提供的接口
- 执行命令
scp -P 10010 ~/Documents/qlcript.cy root@localhost:/usr/lib/cycript0.9
定位网易云登陆方法
- 注入网易云进程
- 导入工具类
qlcript
- 拿到当前控制器
QLFrontVc
- 取出当前控制器的所有方法
QLInstanceMethodNames(#控制器地址)
- 调用登陆方法
[#控制器地址 loginButtonClicked:nil]
- 界面展示
删除登陆按钮
- 思路:
找到
登录
文字的unicode - 利用python工具
- 调用
[#按钮地址 removeFromSuperview]
现在删除的只是内存的中的东西,退出当前界面重新进入仍然存在哦,因为我们当前的调试都是在内存中调试,想永久删除请听下回分解……
Reveal
调试环境配置
- iPhone上安装Reveal Loader
- 软件源
- 不要安装其他源的版本,有可能不支持新版Reveal
- 安装完Reveal Loader后,打开【设置】,选择需要调试的APP
- 找到Mac的Reveal中的RevealServer文件,覆盖iPhone的/Library/RHRevealLoader/RevealServer文件
- 重启SpringBoard或者重启手机,可以在iPhone上输入终端命令
- 重启SpringBoard:killall SpringBoard
- 重启手机:reboot
选择USB方式开始调试