逆向(二)Cycript

一、Cycript

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

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

其中文档可参考如下:

官网: http://www.cycript.org/

文档: http://www.cycript.org/manual/

二、软件

2.1 ps命令

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

adv-cmds

1
2
3
4
5
6
//列出所有的进程
$ ps –A
$ ps aux

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

2.2 Cycript

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

cycript

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

1
2
3
$ cycript
$ cycript -p 进程ID
$ cycript -p 进程名称

其他控制命令:

取消输入:Ctrl + C

退出:Ctrl + D

清屏:Command + R

三、调试

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

1
2
3
4
$ 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 脚本,李明杰老师之作:https://github.com/CoderMJLee/mjcript

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

1
2
3
4
5
6
7
8
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 其他指令

  • 导入
1
cy# @import mjcript
  • 常用属性
1
2
3
4
5
6
7
8
9
10
11
// appid
MJAppId

//mainBundlePath
MJAppPath

//document path
MJDocPath

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

3.4 python 打印字符

1
2
3
4
5
6
7
8
$ 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文档