iOS逆向-day3:Cycript

一、Cycript 简介

  • 1.1、Cycript 是Objective-C++、ES6(JavaScript)、Java等语法的混合物,可以用来探索、修改、调试正在运行的 Mac / iOS APP
    官网
    文档
    通过Cydia安装Cycript,即可在iPhone上调试运行中的APP
  • 1.2、Cycript的开启和关闭
    • 开启(进程的查看需要借助 PS指令,请看1.3)

      cycript
      cycript -p 进程ID
      cycript -p 进程名称
      
      • 爱奇艺的进程是 2613,那么输入:cycript -p 2613,之后的操作都是在调试爱奇艺
      • 建议使用进程名称(如爱奇艺:cycript -p iQiYiPhoneVideo),因为进程的ID一直在变
    • 取消输入:Ctrl + C

    • 退出:Ctrl + D

    • 取消输入:Command + R

  • 1.3、ps 命令
    • 安装 adv-cmds
    • ps命令是 process status的缩写,使用ps命令可以列出系统当前的进程
      • 列出所有的进程

        ps –A
        ps aux
        

        提示:输入上面的指令是在 终端连接iphone的情况下


        上图左边进程 ID右边进程的可执行文件,右边最后一个单词可以称为进程的名称,如上图的:launch、amfid、syslogd.......

      • 搜索关键词,如果是爱奇艺,可以搜索 Video

        ps –A | grep 关键词
        

二、Cycript常用语法

  • 2.1、常用语法一

    • (1)、获取UIApplication 对象,下面等价

      UIApp
      [UIApplication sharedApplication]
      
      • 说明爱奇艺的UIApplication 就是 UIApplication,没有改名字
    • (2)、定义变量:var 变量名 = 变量值

       // 获取 app的Window
       var appWindow = UIApp.keyWindow
       // 获取根控制器
       app.rootViewController
      

      以爱奇艺为例打印的是:<RootViewController: 0x12e075600>",说明爱奇艺的根控制器就是:RootViewController

    • (3)、用内存地址获取对象:#内存地址

    • (4)、ObjectiveC.classes:已加载的所有OC类,如下查看 糗事百科的主界面

      WechatIMG45.jpeg
    • (5)、查看对象的所有成员变量:*对象,如查看 UIApplication 里面的所有成员变量,可以如下

      *UIApp
      
  • 2.2、常用语法二

    • (1)、递归打印view的所有子控件(跟LLDB一样的函数)

      view.recursiveDescription().toString()
      
    • (2)、筛选出某种类型的对象

      choose(UIViewController)
      choose(UITableViewCell)
      
  • 2.3、上面的使用太繁琐了,我们可以使用 MJ 老师的工具: mjcript,它是基于Cycript实现的一些实用函数

    • 安装
    • 步骤
    • (1)、下载mjcript库
    • (2)、将mjcript.cy文件拖到/usr/lib/cycript0.9,建议下载 funbox 来管理文件
    • (3)、SSH连接iOS设备,这个如果不会的可以参考 上一篇博客
    • (4)、使用Cycript监听APP,通过 @import导入mjcript


  • 2.4、mjcript 工具的用法

    • 一些常用属性
    • 拿到显示在最前面的控制器,下面以糗事百科为例
    • 我们可以看到 糗事百科 我的界面的控制器叫做:QBMeViewController
    • 获得某个类的 对象方法名列表,支持正则表达式查询

      MJInstanceMethodNames(控制器的名字 或者 #地址)
      // 举个正则的例子,找有关login的对象方法
      MJInstanceMethodNames(控制器的名字 或者 #地址,/login/) 
      
      • 我这里是以糗事百科的设置界面为例
    • 获得某个类的 类方法名列表,支持正则表达式查询

      MJClassMethodNames(控制器的名字 或者 #地址)
      
    • 获取界面的 view,下面以糗事百科的登录界面为例

      MJSubviews(#地址.view)
      

      接着我们可以在登录界面的文本框上动手脚,比如修改


      用: #内存地址.text = "190" 来修改手机号的输入

      #0x1443a7e00.text = "190"  
      

      我们还可以找到登录按钮 ,把它移除掉,如下


      拿到登录的按钮地址,做如下操作

      [#0x1443b9f60 removeFromSuperview]  
      
      • 这里做一个小提示:汉子与unicode码转换的方式,下面是用Python

        python
        unicode('登录','UTF-8')
        u'\u767b\u5f55'
        

三、封装Cycript - .cy文件

  • 3.1、.cy文件 的简单写法,我的文件名是:jkcycript

    (function(exports) {
         // 这里面可以填充我们需要的东西
    
    })(exports);
    

    函数 和 常量的定义

    (function(exports) {
         //  求和
         sum = function(a,b) {
             return a + b
         };
         //  求差
         minus = function(a,b) {
             return a - b
         };
    })(exports);
    // 在使用的时候我们需要如下操作
    // 导入: @import jkcycript
    @import jkcycript
    sum(2,3) // 结果是:5
    

    上面是全局的,如果想要前缀可以写为

    (function(exports) {
         //  求和
         exports.sum = function(a,b) {
             return a + b
         };
         //  求差
         exports.minus = function(a,b) {
             return a - b
         };
    })(exports);
    // 在使用的时候我们需要如下操作
    // 导入: @import jkcycript
    @import jkcycript
    jkcycript.sum(2,3) // 结果是:5
    
    • exports 参数名固定,用于向外提供接口
    • .cy文件存放到/usr/lib/cycript0.9目录下
  • 3.2、更多的可以参考MJ老师的mjcript

四、Reveal (UIView层级分级工具)

Reveal
  • 4.1、Reveal是一款调试iOS程序UI界面的神器
    官网:https://revealapp.com
    下载:https://revealapp.com/download/
    破解版:提取码: y8ri
    建议下载至少Reveal4版本,支持USB连接调试,速度快。低版本的只能WiFi连接调试

    提示 :Reveal 只能识别 UIView 的层级结构,想要是识别控制器的结构,我们可以使用 mjcript

  • 4.2、Reveal 调试环境配置 (越狱设备)

    • 调试环境配置 一 :iPhone上安装Reveal Loader
      软件源:http://apt.so/codermjlee,不要安装其他源的版本,有可能不支持新版Reveal


    • 调试环境配置 二
      安装完Reveal Loader后,打开【设置】,选择需要调试的APP

    • 调试环境配置 三
      找到Mac的Reveal中的 RevealServer 文件,覆盖iPhone的/Library/RHRevealLoader/RevealServer文件,我们可以用 iFunBox 打开


      WechatIMG61.jpeg
      • 重启SpringBoard或者重启手机,可以在iPhone上输入终端命令
        重启SpringBoard:killall SpringBoard
        重启手机: reboot
  • 4.3、在上面的操作做完,我们再重新打开 Reveal ,就可以看到使用中的iphone

    选择USB方式开始调试:速度更快

    屏幕快照 2019-11-29 下午1.01.29.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355