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,我们可以使用高级 Ctypedef语法cy# fopen = (typedef void* (char *, char *)

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

被折叠的 条评论
为什么被折叠?



