项目地址:https://github.com/Naituw/IPAPatch
来源:http://weibo.com/ttarticle/p/show?id=2309404086977153611942
作者:Naituw

之前在 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 后执行这个脚本:

  1. 解压 IPA 文件
  2. 用 IPA 文件的内容,替换掉 Xcode 生成的 .app 的内容
  3. 通过 OPTOOL,将你代码生成的 Framework 及其他外部 Framework,注入到二进制文件中
  4. 对这些文件进行重新签名 完成后,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 是如何实现类似需求的。 然后发现其实我们还能做到比抓包更进一步,对我自己很有用,所以也分享给大家~

最后还是想说一句,该项目仅用于学习目的,请勿滥用~


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/250/