相信每一名开发人员对于一款优秀产品的内部实现都会很好奇,而且现在app越来越多,竞品也是越来越多,我们对于其他app的内部实现方式的研究也越来越重要,会想知道某个核心功能使用了哪些第三方服务、数据库是如何设计的、沙盒目录结构是什么样的,某一个UI效果是如何实现的等。最近这两天我对这方面做了一些探索,之后还会慢慢深入研究。
目标
- 查看app的资源文件以及使用的SDK
- 查看app的.h文件
- 查看app使用的第三方库
- 查看app的界面结构
~/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps/
该路径就可以看到ipa文件了。This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files. It generates declarations for the classes, categories and protocols. This is the same information provided by using ‘otool -ov’, but presented as normal Objective-C declarations, so it is much more compact and readable.
sudo chmod 777 /usr/local/bin/class-dump
。class-dump -H /Users/canoe/Desktop/WeChat.app -o /Users/canoe/Desktop/AppHeader
。如果AppHeader文件夹内没有出现头文件那么就是执行失败,需要检查是否是app没有砸壳的原因。main.py
文件的IPA_HEADER_PATH
为 class-dump 导出的头文件目录。python main.py
。cydia
中下载安装cydia substrate
,Reveal2Loader
,注意安装的先后顺序。reveal
,然后打开app,看是否可以直接查看。不出意外的话会出现下面的错误提示,因为reveal2loader
中的revealframework
版本太低了无法匹配我目前使用的最新版本14,所以我们需要对它进行替换。reveal
的framework传送到手机中,有两种方式传输方式,首先mac连接手机。scp /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer root@192.168.1.x:/System/Library/Frameworks/RevealServer.framework
revealframework
导入覆盖/System/Library/Frameworks
目录下的文件。reveal
以及测试的app,这个时候就可以直接打开看UI结构了。