Cycript工具介绍
- Cycript是一款脚本语言,可以看作是Objective-JavaScript,它可以帮助我们轻松测试和验证函数效果。
- 在越狱手机中可以通过注入方式在第三方应用中运行
- 也可以用静态库的方式把cycript集成到自己的应用中(MonkeyDev,可以给非越狱iOS第三方App写插件,但是权限受沙盒限制)
- 在越狱手机中安装Cycript
- 方式一:在Cydia上搜索Cycript进行安装
- 方式二:使用 APT 0.6 Transitional包管理工具,SSH登录iPhone设备,输入安装Cycript命令:
$apt-get install cycript
- Cycript使用(注入到第三方进程空间)
- 注入Cycript模块到第三方进程
/** 确认进程名或者PID */
iPhone6Test0:~ root# ps -e | grep WeChat
654 ?? 0:06.94 /var/containers/Bundle/Application/D28A1C43-2F50-435D-AD0E-DDB14992D63B/WeChat.app/WeChat
1527 ttys001 0:00.01 grep WeChat
/** 打开方式 1*/
cycript -p WeChat
/** 打开方式2 勾住进程id */
cycript -p 654
/** 退出cycript */
Control + D
- Cycript实战演练
对微信app界面进行修改 输入代码后回车 即可注入
/** 显示通知个数 */
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:100]
/** 隐藏状态栏 */
[[UIApplication sharedApplication] setStatusBarHidden:YES]
对手机界面进行修改
查看SpringBoard 进行信息
$ ps -e | grep SpringBoard
298 ?? 1:54.86 /System/Library/CoreServices/SpringBoard.app/SpringBoard
1601 ttys001 0:00.01 grep SpringBoard
勾住SpringBoard
iPhone6Test0:~ root# cycript -p SpringBoard
/** 屏幕闪紫色光 */
[[SBScreenFlash mainScreenFlasher] flashColor:[UIColor magentaColor] withCompletion:nil]
iOS应用(Store App)沙盒目录
- Application Bundle包含应用可执行文件和资源文件
如何获取iOS上微信程序的Bundle路径 :$ps -e | grep appname
如上面的微信,前提是你需要先下载app解压获取app包名
iPhone6Test0:~ root# ps -e | grep WeChat
654 ?? 0:06.94 /var/containers/Bundle/Application/D28A1C43-2F50-435D-AD0E-DDB14992D63B/WeChat.app/WeChat
1527 ttys001 0:00.01 grep WeChat
- Application Data 包含App运行生产的数据和配置信息等
如何获取iOS上微信程序的Data路径,同样可以通过cycript工具
iPhone6Test0:~ root# cycript -p WeChat
cy# directory = NSHomeDirectory()
@"/var/mobile/Containers/Data/Application/E9232D81-80E3-4684-BB0E-FC3643703947"
查看Data目录结构
iPhone6Test0:~ root# cd /var/mobile/Containers/Data/Application/E9232D81-80E3-4684-BB0E-FC3643703947
iPhone6Test0:/var/mobile/Containers/Data/Application/E9232D81-80E3-4684-BB0E-FC3643703947 root# ls
Documents Library StoreKit tmp
==:)Document 存放应用运行时生成的并且需要保存的数据。注:iTunes或iCloud同步设备时会备份该目录
==:)Library/Caches 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud不同步。
==:)Library/Preferences 存放偏好设置。iOS的偏好设置(settings)应用也会在该目录查找应用的设置信息。NSUserDefaults保存在该目录下。iTunes或iCloud同步设备时备份该目录。
==:)tmp 存放应用运行时所需的临时数据。当某个应用没运行时,iOS系统可能会清除该目录下的文件。但不可依赖这种自动清除机制,应该及时手动清除。
逆向的基本思路
-
正向工程(Forward Engineering)
抽象的逻辑设计 ==》具体的物理实现
设计概念和算法 ==》编写源代码 ==》编译成二进制机器码
将想法和设计理念变成具体实现的过程 -
逆向工程(Reverse Engineering)
具体的物理实现 ==》抽象的逻辑设计
反编译机器码 ==》汇编代码(类似的高级语言代码)==》理解其算法和设计概念
从二进制码中提取设计概念和算法 -
程序的编译和反编译
高级语言(C/C++/OC/Java/Python/C#)==》中间语言(如:汇编等)==》目标代码(exe/lib/dll/sys/dylib等二进制文件)
高级语言 ===》(编译链接)===》机器码
高级语言 《===( 反汇编/反编译)《===机器码 -
逆向的思路
- 逆向必须是有目的的、有针对性的(明确你要做的事情)
- 先熟悉你要逆向的目标程序,从正向的思路去猜测他的可能的实现方法(使用的框架、调用的系统API等)
- 定位关键代码
- 通过监控UI事件的响应定位关键代码
- 通过监控底层API的调用定位关键代码(如网络访问接口、文件读写接口等)
- 通过观察数据的变化来定位关键代码和地址
逆向是一个试错的过程,需要不停的猜测、查找和进行验证,既考验耐心也考验动手能力
网友评论