iOS逆向与安全5.3:Cycript

Cycript

Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaScript语法的解释器,这意味着我们能够在一个命令中使用Oc或者JavaScript,甚至两者并用。它能够挂钩正在运行的进程,能够在运行时修改很多东西。

高级语言语言 --> 二进制(对应架构)

解释型(同声翻译):Python

编译型(翻译成书):OC

Cycript 程序运行状态下,不用停止 ,就可以调试显示

Cycript的安装

  • 下载 官网

  • 将资源放入指定位置
    一般放在 /opt/位置


    文件位置
  • 配置环境变量
    编辑 vim ~/.bash_profile文件

  export cycript_src=/opt/cycript_0.9.594/
  export PATH=$PATH:$cycript_src

更新刚配置的环境变量

    $ source .bash_profile

编辑 ~/.zshrc 不用每次手动执行source .bash_profile

    $ vim ~/.zshrc

加入

source /Users/looha/.bash_profile

保存即可

Cycript的使用

  • 连接手机
    通过WIFI 端口连接 非越狱手机无法打开端口,借助于monkey, monkey套包会为应用申请端口6666
image.png

cycript -r ip地址

cycript -r  192.168.3.222:666

image.png
  • 使用
UIWindow.keyWindow() 获取keyWindow
UIApp 获取APPlication单例对象
recursiveDescription() 循环打印子视图
toString() 格式化打印(遇到\n换行)
# 对象地址。拿到该对象,可用于调用方法
#0xxxxxx.allTargets() 获取所有Target
#0xxxxxx.allControlEvents() 获取所有Target
获取target 
[0xxxx actionsForTarget:target forControlEvent:64]

* 对象地址。可以取出对象的成员变量
Choose(类名) 查询当前进程中该类型的对象。
var keyWindow =  UIWindow.keyWindow()  定义变量

[I for (I in * keyWindow)] 遍历循环打印

choose(UIView) 搜索选择

com + D 退出

获取targetAction
image.png
遍历循环打印
层级关系
格式化层级关系
搜索选择

脚本自动连接

可以在个人文件根目录下建立sh文件 :LHShell

cycript -r  192.168.3.222:666

vim ~/.bash_profile

配置环境变量

export LHShell=~/LHShell
export PATH=$LHShell:$CY
base_profile
  • 登录 sh
sh cycriptLogin.sh

. cycriptLogin.sh

source cycriptLogin.sh

动态修改

在app运行时,用于cycript登录 ,修改界面 可及时看到修改界面

高级用法

  • 输出当前所有的类
ObjectiveC.classes
  • 输出bundle id
APPID
  • pviews
pviews 控件
pviews()

pvcs()控制器

pvcs()

响应者 pactions(*0xxxxxxxx)

pactions(*0xxxxxxxx)
响应者

响应者链条 rp(#0xxxxxxxx)

 rp(#0xxxxxxxx)
响应链
monkey cy 文件封装

cy文件封装

Cy文件

Cycript是一门脚本语言,它可以加载封装好的.cy文件。
我们会将常见的Cycript常用功能封装到.cy文件中,便于调试。

非越狱中导入.cy文件

利用MonkeyDev工具导入.cy文件
MonkeyDev本身集成了Cycript。我们只需要将.cy文件通过xcode导入Framworks目录即可。
在monkey工程中

  • 新建空文件Empty文件


    image.png
image.png
  • 添加到frameworks


    image.png
  • cycript 导入

@import test
导入
常用变量命名

PS 在cy文件中,定义的变量一旦加载后,就固定了,再不会变。为避免这个问题,可以用function()写成动态

正确写法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 之前文章已经对LLDB进行了介绍和使用。LLDB在我们调试应用的时候确实很爽,但他每次都要断住程序,这在分析并且修...
    一缕清风扬万里阅读 2,738评论 8 10
  • Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaScript语...
    king_jensen阅读 1,965评论 0 0
  • 一、简介 Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaSc...
    KinKen阅读 5,631评论 0 13
  • 如果你渴望成为一名精通iOS逆向开发的工程师,但却缺乏自己的工具集,那么在着手实战开发之前,提前准备好逆向开发工具...
    听木子说心语阅读 3,536评论 6 18
  • 理性障碍的定义:尽管具有足够的智力,却缺乏理性思考和行动的能力。 有理性障碍的人,智力很高,却存在认知缺陷,理性思...
    自在_安然阅读 1,401评论 7 6