iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)

前言

Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物,可以用来探索、修改、调试正在运行的Mac\iOS APP
官网: http://www.cycript.org/
文档: http://www.cycript.org/manual/
通过Cydia安装Cycript,即可在iPhone上调试运行中的APP

iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第1张图片
image.png

iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第2张图片
image.png

安装adv-cmds
iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第3张图片
image.png

ps命令是process status的缩写,使用ps命令可以列出系统当前的进程
列出所有的进程
ps –A
ps aux
搜索关键词
ps –A | grep 关键词

首先在逆向环境下登录iPhone, 输入ps -A 即可得到下图所示


iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第4张图片
image.png
Cycript的基本使用方法
  • Cycript的开启和关闭
    开启
    cycript
xinuowangdeiPhone6:~ root# cycript
cy#

cycript -p 进程ID

xinuowangdeiPhone6:~ root# cycript -p 4832
cy#

cycript -p 进程名称

xinuowangdeiPhone6:~ root# cycript -p imeituan
cy#

注意:这几个操作不可以同时进行,需要退出Cycript(control + D),才可以执行不同的指令

快捷键

取消输入:Ctrl + C
退出:Ctrl + D
清屏:Command + R

常用语法
  • UIApp

  • [UIApplication sharedApplication]


    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第5张图片
    image.png
  • 用内存地址获取对象

  • 内存地址


    image.png
  • 定义变量

  • var 变量名 = 变量值


    image.png
  • ObjectiveC.classes

  • 已加载的所有OC类


    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第6张图片
    image.png
  • 查看对象的所有成员变量

  • *对象


    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第7张图片
    image.png
  • 递归打印view的所有子控件(跟LLDB一样的函数)
  • view.recursiveDescription().toString()


    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第8张图片
    image.png
  • 筛选出某种类型的对象
  • choose(UIViewController)
  • choose(UITableViewCell)
封装Cycript - .cy文件编写

我们可以将常用的Cycript代码封装在一个.cy文件中
利用SublimeText创建一个.cy文件


iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第9张图片
image.png

exports参数名固定,用于向外提供接口


iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第10张图片
image.png
具体用法

将.cy文件存放到/usr/lib/cycript0.9目录下(也可以用终端指令 scp -P 10010 ~/Desktop/cytool.cy root@localhost:/usr/lib/cycript0.9)

iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第11张图片
image.png

首先导入.cy文件 @import cytool
iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第12张图片
image.png

推荐 mjcript.cy https://github.com/CoderMJLee/mjcript

Cycript实战演练

  • 对app界面进行修改 输入代码后回车 即可注入
/** 显示通知个数 */
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:999] 
/** 隐藏状态栏 */
 [[UIApplication sharedApplication] setStatusBarHidden:YES]
iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第13张图片
image.png

iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第14张图片
image.png
  • 对手机界面进行修改(修改微信钱包金额)
    首先拿到当前控制器 --> 拿到当前控制器view的所有子控件


    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第15张图片
    image.png

    中文转unicode 钱包 -- > \u96f6\u94b1 -- > 搜索


    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第16张图片
    image.png

    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第17张图片
    image.png

    可以通过OC的代码来修改app界面的内容
    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第18张图片
    image.png

    iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App)_第19张图片
    image.png

你可能感兴趣的:(iOS逆向工程 -- Cycript(探索,修改,调试正在运行的Mac/iOS App))