iOS 逆向(二)Cycript

1,229 阅读2分钟

这个系列,是很早听 MJ 课程时的整理,现在分享出来。 其中一些参考资料有些有引用,有些可能忘记添加了,如果有引用部分资料,可以联系我。

iOS 逆向(一)环境搭建
iOS 逆向(二)Cycript
iOS 逆向(三)逆向工具
iOS 逆向(四)脱壳
审核中 iOS 逆向(五)Theos工具 iOS 逆向(六)动态调试
iOS 逆向(七)重签名

一、Cycript

Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物

可以用来探索、修改、调试正在运行的Mac、iOS App。

其中文档可参考如下:

官网: www.cycript.org/

文档: www.cycript.org/manual/

二、软件

2.1 ps命令

ps命令是process status的缩写,使用ps命令可以列出系统当前的进程

//列出所有的进程
$ ps –A
$ ps aux

//搜索关键词
$ ps –A | grep 关键词

2.2 Cycript

通过Cydia安装Cycript,即可在iPhone上调试运行中的APP

调试命令,通过上面ps命令,可以获取进程ID:

$ cycript
$ cycript -p 进程ID
$ cycript -p 进程名称

其他控制命令:

取消输入:Ctrl + C 退出:Ctrl + D 清屏:Command + R

三、调试

进入iPhone命令行,在手机上打开微信,输入

$ ps -A | grep wechat
1916 ttys000    0:00.01 grep wechat
$ cycript -p 1916
cy# UIApp

3.1 常用语法

  • UIApp

  • [UIApplication sharedApplication]

  • 定义变量> var 变量名 = 变量值

  • 用内存地址获取对象> #内存地址

  • 已加载的所有OC类> ObjectiveC.classes

  • 查看对象的所有成员变量> *对象

  • 递归打印view的所有子控件(跟LLDB一样的函数)> view.recursiveDescription().toString()

  • 筛选出某种类型的对象> choose(UIViewController)

pchoose(UITableViewCell)

3.2 mjcript

cycript 脚本,李明杰老师之作:github.com/CoderMJLee/…

下载后,导入/usr/lib/cycript0.9

5s:~ root# cycript -p 1916
//导入脚本文件
cy# @import mjcript
{}
cy# MJAppId
@"com.tencent.xin"
cy# MJAppPath
@"/var/mobile/Containers/Bundle/Application/4E7CFE17-8B9E-4B55-84B1-14E70653EFC3/WeChat.app"
cy#

3.3 其他指令

  • 导入
cy# @import mjcript
  • 常用属性
// appid
MJAppId

//mainBundlePath
MJAppPath

//document path
MJDocPath

//caches path
MJCachesPath
  • 加载动态库
cy# MJLoadFramework("UIKit")

3.4 python 打印字符

$ python                                                                                        
Python 2.7.15 (default, Sep 18 2018, 20:16:18)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'\u6536\u4ed8\u6b3e'
收付款
>>>unicode('收付款','UTF-8')
u'\u6536\u4ed8\u6b3e'

参考

链接

  1. Cycript 官网
  2. Cycript文档