美文网首页
iOS逆向与安全(五):Cycript集成和使用

iOS逆向与安全(五):Cycript集成和使用

作者: 繁华落尽丶lee | 来源:发表于2018-09-20 12:07 被阅读293次

前言

Cycript是允许开发者使用Objective-C++Javascript组合语法查看及修改运行时APP内存信息的工具。

在越狱设备上安装

Cycriptsaurik提供的工具,在Cydia中搜索Cycript并安装即可。

安装完成后,用SSH登录设备输入cycript命令,就可以进入交互界面。

在越狱设备上,可以使用一些命令注入目标进程,调试目标函数。下面例子:脚本注入到SpringBoard(桌面)中,使其弹出一个提示框。

iPad:~ root# cycript -p SpringBoard
cy# var alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"Hello, wold!" delegate:nil cancelButtonTitle: @"cancel" otherButtonTitles: nil]
#"<UIAlertView: 0x1348bd1f0; frame = (0 0; 0 0); layer = <CALayer: 0x1321c89b0>>"
cy# [alert show]

这是《iOS应用逆向与安全》中给出的一个简单的例子。

Cycript分析应用

上面例子中使用了一条命令cycript -p SpringBoard,通过该命令可以调试指定APP。该命令有两种使用方式,除了上面的cycript -p 程序名称,还可以通过cycript -p 程序进程ID。注意这里的程序的名称并不是APP的名称。

查看程序的名称和进程ID可以通过安装一个插件adv-cmds。通过它使用ps命令查看当前运行程序的进程ID及可执行文件的路径。

安装完成后,通过ps -A命令查看当前设备的进程ID和可执行文件的路径。同时,支持关键词搜索ps -A | grep 关键词

例如,查看简书的路径和进程ID

简书

由于程序的进程ID是会发生变换的推荐使用名称。

下面就以简书为例,学习如何使用cycript的使用。

查看应用信息

cy# NSHomeDirectory() // 沙盒路径
cy# NSBundle.mainBundle().bundleIdentifier //BundleID
cy# NSBundle.mainBundle().bundlePath //mainBundlePath
cy# NSSearchPathForDirectoriesInDomains (NSDocumentDirectory , NSUserDomainMask , YES)[0] // Document Path
cy# NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES)[0] // cache Path

查看APPApplication信息,例如:查看简书的Application对象,为自定义的HGApplication

cy# UIApp 
# "<HGApplication: 0x154d49910>" 

查看rootViewController

cy# UIApp.keyWindow .rootViewController
#"<HGTabBarController: 0x155006200>"

还可以使用地址查看信息。例如:查看HGTabBarControllerview

cy# #0x155006200.view
#"<UILayoutContainerView: 0x154fca480; frame = (0 0; 1024 768); autoresize = W+H; layer = <CALayer: 0x154f65a20>>"

另外Cycript提供了choose()函数选择某个类的实例数组。例如:学习简书中所有的Button类的所有实例数组。

cy# choose(UIButton)
[#"<UIButton: 0x157210600; frame = (0 8.5; 685 16); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15705f020>>",
#"<HGAvatarButton: 0x15724ead0; baseClass = UIButton; frame = (16 14.5; 45 45); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1572088b0>>".....]

以上是cycript的基本用法。

cycript高级用法

每次要输入那么多的代码是在有点麻烦,能不能将常用的代码封装起来呢?答案是肯定的。

Cycript本身是支持加载自己的脚本的,可以通过@import命令加载。例如:加载mjscript脚本。

cy# @import mjcript

关于如何将自己学的脚本添加到手机上查看【越狱-逆向】基于Cycript实现的一些实用函数文档,对如何添加,如何使用写的比较详细,这里就不再重复赘述。

小结

以上学习了cycript安装和基本使用,这些仅仅是入门后面还很很多功能需要去探索。

参考

  • 《iOS应用逆向与安全》作者:刘培庆
  • 小码哥逆向开发课程

相关文章

网友评论

      本文标题:iOS逆向与安全(五):Cycript集成和使用

      本文链接:https://www.haomeiwen.com/subject/qribnftx.html