Cycript(一):基础简介

Cycript是一个结合Objective-C++和JavaScript语法的工具,允许开发者在运行时探索和修改iOS及macOS应用程序。它支持注入进程、Objective-C消息、JavaScript扩展、对象模型桥接等功能,可用于hook函数、调试和原型设计。Cycript还提供了丰富的附加语法和JavaScript1.6+特性,如数组推导、方法选择器、类型转换等。此外,它还能将源代码编译成JavaScript1.5格式。Cycript在iOS越狱社区和逆向工程中扮演着重要角色。

Cycript 简介

  • 什么是 Cycript ?

    Cycript 允许开发者通过具有语法高亮显示和代码补全功能的交互式控制台,使用 Objective-C++ 和 JavaScript 语法的混合体,来探索和修改 iOS 或 macOS 上正在运行的应用程序(Cycript 还可以在 Android 和 Linux 上独立运行,并提供对 Java 的访问,但是不能注入进程)

    可以将 Cycript 看成是一个理解 Objective-C 语法的 JavaScript 解释器,Cycript 二进制文件也是该语言的交互式解释器(Read-Eval-Print Loop)

  • Cycript 的特点

    ① 注入进程(Inject Into Processes)

    bash# cycript -p SpringBoard
    

    ② Objective-C 消息(Objective-C Messages)

    cy# [UIApp description]
    @"<SpringBoard: 0x10ed05e40>"
    

    ③ JavaScript 扩展(JavaScript Extensions)

    cy# [for (x of [1,2,3]) x+1]
    [2,3,4]
    

    ④ 毫不费力地进行探索(Effortless Exploration)

    cy# choose(CALayer)[0]
    #"<CALayer: 0x115807910>"
    

    ⑤ 桥接对象模型(Bridged Object Model)

    cy# @[0,1] instanceof Array
    true
    

    ⑥ 外部函数调用(Foreign Function Calls)

    cy# var a = malloc(128)
    0x1147c9d00
    

    ⑦ 神奇的 Tab 键代码补全(Magical Tab-Complete)

    cy# ({
         
         m: 4, b: 5}).<Tab><Tab>
    b m
    

    ⑧ C++11 Lambda 语法(C++11 Lambda Syntax)

    cy# [&](int a)->int{
         
         return a}
    0x111001000
    
  • 使用示例:hook fopen 函数

    假设我们有一个程序可以打开 /etc/passwd 来检查我们的密码。我们希望它使用 /var/passwd-fake。 首先,我们需要 fopen 函数的地址

    cy# fopen = dlsym(RTLD_DEFAULT, "fopen")
    (typedef void*)(0x7fff900c34ec)
    

    但是,我们不能在没有类型签名的情况下调用此函数,所以让我们将它转换为 Functor。使用 Cycript,我们可以使用高级 C typedef 语法

    cy# fopen = (typedef void* (char *, char *)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值