美文网首页
【Toki从零学iOS逆向】四、通过Cycript实现动态修改A

【Toki从零学iOS逆向】四、通过Cycript实现动态修改A

作者: TokiHunter | 来源:发表于2022-09-10 23:01 被阅读0次

目录

运行环境

2022年9月
MBP M1 macOS Monterey 12.4
iPhone 8 iOS 14.2
Human Proficient in iOS & Cycript development

控台环境

环境 提示符
#iPhone Toki-iPhone: root# command
#cycript cy# command

安装目标App

本文以学习为目的,目标App不宜用他人商业作品,也不宜逻辑复杂,所以我自己准备了一个简单的受害者 TKVictim
下载后在已越狱的iPhone上运行该App。
该App模拟了一个怪怪的密码锁,可以通过查看远码的CodedLock类来了解它的解锁逻辑。

该App存在如下两种状态,本文的目的就是通过Cycript实现解锁功能。

上锁 解锁

安装 Cycript

Cycript官网 http://www.cycript.org/

  1. 打开 Sileo,在搜索Tab中搜索 Cycript (by Jay Freeman (saurik))。
  2. 点击 Cycript 条目进入详情页,点击获取,将其加入队列。
  3. 点击底部队列进入队列界面,队列中会同时添加Cycript的依赖项,点击确认开始执行队列,等待安装完成。

查询目标App的进程

关闭iPhone内目标App以外的所有App,确保iPhone的多任务处理界面只有目标App进程。(* " /var/……" 前面有一个空格,用以区分 "/private/var/……" 相关的进程*)

Toki-iPhone: root# ps -e | grep " /var/containers/Bundle/Application"
 5434 ??         0:00.15 /var/containers/Bundle/Application/15BD55A8-E850-46B0-82A9-1AC4B210C6FF/TKVictim.app/TKVictim
 5480 ttys000    0:00.01 grep  /var/containers/Bundle/Application

通过cycript注入进程

Toki-iPhone: root# cycript -p 5434
cy# |

对App执行动态操作

本文不讨论代码解析相关内容,假设我们已经破译了项目的全部代码。

1. 直接调用现有函数

  • 现在查看项目源码,我们可以了解到根控制器已存在 unlocked 函数,现在直接调用这个函数即可直接解锁。
cy# [[UIApp keyWindow].rootViewController unlocked];

2. 用Swilling技巧修改现有函数

这里不必通过runtime去实现修改,可以使用Cycript提供的函数赋值方式修改。

  • 所有实例都有prototype属性,可以通过 instance.prototype['_selector_name_'] = function () {} 的方式修改其函数实现逻辑。
cy# ViewController.prototype['unlock:'] = function(id) { this.unlocked(); }
  • class也是一个实例,可以通过 _class_name_->isa 的方式获取。
cy# CodedLock->isa.prototype['unlock:'] = function(long) { return 1; }

补充说明

  1. 本文只是抛砖引玉,需要实现更多功能还需要自身对iOS研发和Cycript有更多理解。
  2. Cycript不止可以通过命令行方式执行,也可以编写 x.cy 脚本,下篇文章中会说到。

相关文章

网友评论

      本文标题:【Toki从零学iOS逆向】四、通过Cycript实现动态修改A

      本文链接:https://www.haomeiwen.com/subject/xezanrtx.html