转载

iOS逆向 - Cycript基本用法

cycript是混合了objective-c与javascript语法的一个工具,让开发者在命令行下和应用交互,在运行时查看和修改应用。

基本使用方法。以SpringBoard为例

在mac上ssh登录手机,或者在手机上安装 Terminal ,找到SpringBoard进程

didi:~ root# ps -e | grep SpringBoard
1759 ?? 0:22.40 /System/Library/CoreServices/SpringBoard.app/SpringBoard
1835 ttys000 0:00.01 grep SpringBoard

获取到进程的id是 1759 ,然后用 cycript - p 命令注入这个进程

didi:~ root# cycript - p 1759

想要在SpringBoard界面弹出一个提示框,上节使用Tweak工程实现了这个功能,但用cycript的话,只要两句代码就可以了,而且是实时注入的。

cy# alertView = [[UIAlertView alloc] initWithTitle:@"test" message:@"liuchendi" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]
#"<UIAlertView: 0x18b6c8d0; frame = (0 0; 0 0); opaque = NO; layer = <CALayer: 0x18b85720>>"
cy# [alertView show]

不需要声明类型,不需要输入分号。使用过程中还能打印一些生成的信息。

运行结果:

iOS逆向 - Cycript基本用法

知道内存地址,获取对象

通过 # 获取对象,比如刚刚生成的UIAlertView对象的内存地址是 0x18b6c8d0

cy# [#0x18b6c8d0 show]

一样可以弹出提示框

知道一个类,获取内存地址

通过 choose 命令可以查看,这个命令不一定百发百中,如果没找到需要自己手动找。

cy# choose(SBScreenShotter)
[#"<SBScreenShotter: 0x18bc25c0>"]

例子:获取私有函数,登录iMessage

获取iMessage的控制器

cy# controller = [CNFRegController controllerForServiceType:1]
#"<CNFRegController: 0x18e9f990>"

登录iMessage,这里屏蔽了敏感的信息.用自己的帐号密码登录

cy# [controller beginAccountSetupWithLogin:@"appID" password:@"appPassword" foundExisting:NO]
#"IMAccount: 0x18fcbab0 [ID: 89E8048D-183C-460D-9438-719738CBBC13 Service: IMService[iMessage] Login: E:appID Active: YES LoginStatus: Connected]"

这里返回了一个 IMAccount 对象

选择收发的邮件地址

cy# [controller setAliases:@[@"xxx@qq.com"] onAccount:#0x18fcbab0]
1

返回值为1表示成功登录了iMessage

正文到此结束
Loading...