原文地址:http://weibo.com/ttarticle/p/show?id=2309404086977153611942
之前在 GitHub 上开源了关闭 Facebook for iOS 的 HTTPS 证书校验的方法 (Naituw/HackingFacebook),收到了很多反馈,大部分都集中在操作的过程太复杂的问题上。其实我自己在后来修改其他 App 的过程中也察觉,调试、验证问题的过程中,操作太过繁琐。
因此我又对这个方向做了进一步的尝试,最后 IPAPatch 诞生了~
源代码
我已经把模版工程放在了 GitHub 上了,欢迎大家提 Issue~
https://github.com/Naituw/IPAPatch
另外还包含一个 Demo
https://github.com/Naituw/IPAPatch/releases
IPAPatch 可以做什么呢?
和 "HackingFacebook" 类似,"IPAPatch" 主要可以在第三方的 IPA 文件上 "添加" 自己的代码,但过程有很大不同:
- 过程简单
- 提供 IPA 文件和你的代码,配置好签名信息,点击“运行”即可
- 整个过程在 Xcode 中进行,就像在编写自己的 App
- IPA 文件依然需要是解密过的
在 Youtube 中弹出自定义窗口
- 支持调试
- 在 Xcode 中可以直接断点进行调试
- 可以用 lldb 命令(如 po),输出运行时信息
- 可以使用 Xcode 的调试功能查看 View Hierarchy、Memory Graph 等信息
使用 lldb 调试 Youtube
- 支持链接第三方 Framework
- 在集成一些第三方服务时很有用
- 例如之前发微博的 Reveal 调试 Youtube 就是这种方式
使用 Reveal 调试 Youtube
- 修改过的 App 可以与原始 App 共存,并自动修改名字以作区分
修改过的 Youtube 和 Facebook
怎么实现的?
主要的自动化过程在 patch.sh 这个脚本里,Xcode 会在把你的代码编译成 Framework 后执行这个脚本:
- 解压 IPA 文件
- 用 IPA 文件的内容,替换掉 Xcode 生成的 .app 的内容
- 通过 OPTOOL,将你代码生成的 Framework 及其他外部 Framework,注入到二进制文件中
- 对这些文件进行重新签名
完成后,Xcode 会自动将修改过的 .app 安装到 iPhone 上
具体的例子?
之前发过一个 “iOS 10.3 使用 Reveal 调试 Youtube” 的微博,我就用这个来举例吧。
使用 Reveal 调试 Youtube
1. 首先我们需要准备一个解密过的 Youtube IPA 文件,这个文件可以从越狱手机上导出,也可以直接去网站下载,比如我自己常用的是 iphonecake.com
2. 将 IPA 文件命名为 app.ipa,替换模版工程中的 Assets/app.ipa 文件
3. 打开 Reveal,拿到需要集成的 Framework 文件
4. 将 RevealServer.framework 放置在 Assets/Frameworks/RevealServer.framework
5. 打开 IPAPatch,在 IPAPatch-DummyApp 这个 Target 里,配置好 BundleID 和代码签名。Display Name 会作为前缀添加到原来的 App 上,如图配置的话最后就是 "RevealYoutube"
6. 点击 Xcode 左上角的编译运行按钮,修改好的 Youtube 就会安装到手机上,Reveal 中也能找到
我把这个 Demo 打了一个包,传到 GitHub 的 Release 中了,大家可以自行下载尝试~
https://github.com/Naituw/IPAPatch/releases
后记
其实做这个项目的起因,并不是想要对其他 App 进行修改,而是在竞品分析时,想尽可能了解其他 App 是如何实现类似需求的。
然后发现其实我们还能做到比抓包更进一步,对我自己很有用,所以也分享给大家~
最后还是想说一句,该项目仅用于学习目的,请勿滥用~