使用Cycript修改支付宝APP运行时

2014-08-02 Xiaosong Gao 更多博文 » 博客 » GitHub »

Security

原文链接 https://gaoxiaosong.github.io/2014/08/02/cycript-alipay-app.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


Cycript:Objective-JavaScript,它懂Objective-C,也懂JavaScript。

我们能够借助Cycript使用Objective-C或者JavaScript,给某个正在运行的进程的Runtime发送消息。

本文以修改支付宝APP界面为例,介绍Cycript的使用方法。

1、安装Cycript

到Cycript官方网站下载资源工具,然后推进已越狱的iPhone中,进行安装:

dpkg -i cycript_0.9.461_iphoneos-arm.deb
dpkg -i libffi_1-3.0.10-5_iphoneos-arm.deb

2、确定支付宝进程

运行支付宝APP,然后获取它的进程号:

Primer:/ root# ps aux | grep Portal
mobile     479   0.6  4.3   590776  44956   ??  Ss    5:14PM   0:09.58 /var/mobile/Applications/8723004E-9E54-4B37-856D-86292780E958/Portal.app/Portal
root       497   0.0  0.0   329252    176 s000  R+    5:21PM   0:00.00 grep Portal

3、Cycript钩住支付宝进程

Primer:/ root# cycript -p 479
cy#

4、获取当前界面的viewController并修改背景色

cy# var app = [UIApplication sharedApplication]
@"<DFApplication: 0x16530660>"

cy# app.delegate
@"<DFClientDelegate: 0x165384d0>"

cy# var keyWindow = app.keyWindow
@"<UIWindow: 0x1654abb0; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x1654b190>; layer = <UIWindowLayer: 0x1654ace0>>"

cy# var rootController = keyWindow.rootViewController
@"<DFNavigationController: 0x1654b6c0>"

cy# var visibleController = rootController.visibleViewController
@"<ALPLauncherController: 0x166acfb0>"

cy# visibleController.childViewControllers
@["<HPHomeWidgetGroup: 0x166afbc0>","<ADWRootViewController: 0x165745c0>","<ALPAssetsRootViewController: 0x16577250>","<SWSecurityWidgetGroup: 0x166bd940>"]

cy# var assetsController = new Instance(0x16577250)
@"<ALPAssetsRootViewController: 0x16577250>"

cy# assetsController.view.backgroundColor = [UIColor blueColor]
@"UIDeviceRGBColorSpace 0 0 1 1"

Result

当然,只是修改个背景色好没意思。

想修改更多信息,还需要用到另一个利器: class-dump。