一.Cycript的简单介绍
Cycript可以攻击iOS软件.它是一种介于Oc和JavaScript之间的编程语言. Cycript由JayFreeman(杰弗里曼)编写,他是iOS第三方工具的作者,包括Cydia软件安装器, Cydgets以及iOS的一个Java移植版.Cycript完全兼容JavaScript,你可以使用完整的JS语法来编写程序, 但同时可以直接操作OC语言的组件.简单来说Cycript高超地实现了目前所有的运行时操作技巧.
在已越狱的手机上,去Cydia商店里面下载安装Cycript.
cycript是混合了oc与js语法的一个工具, 让开发者在命令行下和应用交互,在运行时查看和修改应用
二. 使用Cycript做三个案例
1.在手机上弹出提示框,截屏,改变桌面背景颜色
2.通过终端来改变手机上的应用界面
3.修改支付宝上面的文字
最后的效果如下:
1.通过ssh在MAC终端来登录你的手机
在登录越狱手机之前, 必须在你的iOS上面安装OpenSSH,OpenSSH同样可以在Cydia商店里面去进行下载进行安装. 它给外界就提供了一个通过SSH接入的远程登录.登录的具体操作,我们可以看下图的操作
iOS默认的端口是22, 本地端是2222
在电脑上安装usbmuxd,它里面自带iproxy这样一个小工具, 可以把手机上的端口号映射到我们的电脑上.打开两个终端.
第一个终端输入如下指令
第二个终端输入如下指令
连接的时候,会默认提示要你输入密码ios的Root密码,它的一个默认密码是alpine.
完了之后,可以使用
ps -e
来查看进程ID
通过Cycript指令来注入进程,SpringBoard简单理解,是我们所能看到的iOS上面的东西,都属于SpringBoard里面.
然后弹框就这样简单的通过我们的终端实现了:
iPhone:~ root# cycript -p SpringBoard
cy# var alert = [[UIAlertView alloc] initWithTitle:'\u9006\u5411\u738b\u5c3c\u39b' message:'\u4ece\u5929\u800c\u964d\u7684\u738b\u5c3c\u739b' delegate:nil cncelButtonTitle:'\u662f\u738b\u5c3c\u739b' otherButtonTitles:nil]
#">"
cy# [alert show]
还有其它显示弹框的方式,通过地址调用来显示
cy# [#0x15fe91110 show]
接着就来通过终端对手机端进行截屏和改变桌面的背景颜色.可以一口气敲完
iPhone:~ root# cycript -p SpringBoard
cy# var shot = [SBScreenShotter sharedInstance] // 赋值给shot
#"" //创建成功就会打印出地址
cy# [shot saveScreenshot:YES] // 像oc那样直接调用就可以对显示屏进行截屏了
// 改变透明度和隐藏显示的操作
iPhone:~ root# cycript -p SpringBoard // 如果上面已经注入了,这地方就没必要再写了,直接在终端操作下面的指令就行
cy# UIApp.keyWindow
#"; layer = >"
cy# screen = #0x15fa40f40
#"; layer = >"
cy# screen.hidden = YES // 这条指令一回车桌面图标就隐藏了
true
cy# screen.hidden = NO
false
cy# screen.alpha = 0.5 // 改变桌面图标透明度
0.5
cy# screen.alpha = 0.2
0.20000000000000001
cy# screen.alpha = 1
// 以下是改变手机的背景色,效果可以看前面的gif效果图
cy# screen.backgroundColor = [UIColor redColor]
#"UIDeviceRGBColorSpace 1 0 0 1"
cy# screen.backgroundColor = [UIColor greenColor]
#"UIDeviceRGBColorSpace 0 1 0 1"
cy# screen.backgroundColor = [UIColor yellowColor]
#"UIDeviceRGBColorSpace 1 1 0 1"
cy# screen.backgroundColor = [UIColor blackColor]
#"UIDeviceWhiteColorSpace 0 1"
2.通过app的名字来注入进程,改变app的view,文字,和其它控件
iPhone:~ root# cycript -p xiaoguo // 注入进程
cy#
// 打印当前的控制器
UIApp.keyWindow.rootViewController.visibleViewController
#""
cy# viewC = #0x124645240
#""
cy# viewC.view
#">"
cy# view = #0x124538560
#">"
cy# view.recursiveDescription().toString() // 使用递归的方式,打印出当前控制器的view里面的层级结构
在上图里面我们可以看到递归的方式打印出来了应用上面的所用控件.一个view两个label和一个button.
最后的效果是这样的.
3.修改支付宝上面的文字
iPhone:~ root# cycript -p AlipayWallet
cy# UIApp.keyWindow.rootViewController.visibleViewController
#""
cy# #0x1388d4290.view
#">"
cy# view = #0x1376f22d0
#">"
cy# view.recursiveDescription().toString()
...
cy# #0x138b1ab40.text
@"\xe8\x9a\x82\xe8\x9a\x81\xe9\x87\x91\xe6\x9c\x8d\xe6\x97\x97\xe4\xb8\x8b\xe5\x93\x81\xe7\x89\x8c"
// 改了支付宝上面的问题,这些编码是unicode转化的,可以打印出问题
cy# #0x138b1ab40.text = '\u7a77\u5f97\u53ea\u5269\u4e0b\u94b1\u4e86\u002cu0020\u771f\u4e0d\u597d\u610f\u601d'
// 最后是修改UITextField, 可以打印出应用里面使用textField做的控件信息
cy# choose(UITextField)
// 这里打印的信息省略了
[#"
支付宝里面的原理跟第二个案例是一样的,打印出当前控制器上面的view中控件.