这个系列,是很早听 MJ 课程时的整理,现在分享出来。 其中一些参考资料有些有引用,有些可能忘记添加了,如果有引用部分资料,可以联系我。
iOS 逆向(一)环境搭建
iOS 逆向(二)Cycript
iOS 逆向(三)逆向工具
iOS 逆向(四)脱壳
审核中 iOS 逆向(五)Theos工具
iOS 逆向(六)动态调试
iOS 逆向(七)重签名
一、Cycript
Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物
可以用来探索、修改、调试正在运行的Mac、iOS App。
其中文档可参考如下:
官网: www.cycript.org/
二、软件
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'