IPAPatch: 免越狱调试、修改第三方App

jeipee 8年前
   <p>之前在 GitHub 上开源了关闭 非死book for iOS 的 HTTPS 证书校验的方法 ( <a href="/misc/goto?guid=4959742671139236938" rel="nofollow,noindex"> Naituw/Hacking非死book </a> ),收到了很多反馈,大部分都集中在操作的过程太复杂的问题上。其实我自己在后来修改其他 App 的过程中也察觉,调试、验证问题的过程中,操作太过繁琐。</p>    <p>因此我又对这个方向做了进一步的尝试,最后 IPAPatch 诞生了~</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/f6b577b386856d78d50f4a0cfbd636be.jpg"></p>    <h2><strong>IPAPatch 可以做什么呢?</strong></h2>    <p>和 "Hacking非死book" 类似,"IPAPatch" 主要可以在第三方的 IPA 文件上 "添加" 自己的代码,但过程有很大不同:</p>    <p>过程简单</p>    <p>提供 IPA 文件和你的代码,配置好签名信息,点击“运行”即可</p>    <p>整个过程在 Xcode 中进行,就像在编写自己的 App</p>    <p>IPA 文件依然需要是解密过的</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/2039fbf0764e7a1e9e4b8b655333fb48.jpg"></p>    <p>在 油Tube 中弹出自定义窗口</p>    <p>支持调试</p>    <p>在 Xcode 中可以直接断点进行调试</p>    <p>可以用 lldb 命令(如 po),输出运行时信息</p>    <p>可以使用 Xcode 的调试功能查看 View Hierarchy、Memory Graph 等信息</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/298f28f2b6edddc1d351cd1bafb71d0b.jpg"></p>    <p>使用 lldb 调试 油Tube</p>    <p>支持链接第三方 Framework</p>    <p>在集成一些第三方服务时很有用</p>    <p>例如之前发微博的 Reveal 调试 油Tube 就是这种方式</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/744a778e5819d664a5ea4f4d8b7b58ed.jpg"></p>    <p>使用 Reveal 调试 油Tube</p>    <p>修改过的 App 可以与原始 App 共存,并自动修改名字以作区分</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/7def2a533bc330bf2e26ef1e7c7d4eb6.jpg"></p>    <p>修改过的 油Tube 和 非死book</p>    <h2><strong>怎么实现的?</strong></h2>    <p>主要的自动化过程在 patch.sh 这个脚本里,Xcode 会在把你的代码编译成 Framework 后执行这个脚本:</p>    <ol>     <li>解压 IPA 文件</li>     <li>用 IPA 文件的内容,替换掉 Xcode 生成的 .app 的内容</li>     <li>通过 OPTOOL,将你代码生成的 Framework 及其他外部 Framework,注入到二进制文件中</li>     <li>对这些文件进行重新签名 </li>    </ol>    <p>完成后,Xcode 会自动将修改过的 .app 安装到 iPhone 上</p>    <h2><strong>具体的例子?</strong></h2>    <p>之前发过一个 “iOS 10.3 使用 Reveal 调试 油Tube” 的微博,我就用这个来举例吧。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/744a778e5819d664a5ea4f4d8b7b58ed.jpg"></p>    <p>使用 Reveal 调试 油Tube</p>    <p>1. 首先我们需要准备一个解密过的 油Tube IPA 文件,这个文件可以从越狱手机上导出,也可以直接去网站下载,比如我自己常用的是 iphonecake.com</p>    <p>2. 将 IPA 文件命名为 app.ipa,替换模版工程中的 Assets/app.ipa 文件</p>    <p>3. 打开 Reveal,拿到需要集成的 Framework 文件 </p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/92fcefa918255aad8ba76cd7e9814c8c.jpg"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/7cfe097c800d8dbb08ab2a37d832a81b.jpg"></p>    <p>4. 将 RevealServer.framework 放置在 Assets/Frameworks/RevealServer.framework</p>    <p>5. 打开 IPAPatch,在 IPAPatch-DummyApp 这个 Target 里,配置好 BundleID 和代码签名。Display Name 会作为前缀添加到原来的 App 上,如图配置的话最后就是 "Reveal油Tube" </p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/8db4f455b651da56de0b495300053081.jpg"></p>    <p>6. 点击 Xcode 左上角的编译运行按钮,修改好的 油Tube 就会安装到手机上,Reveal 中也能找到 </p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/c99983dcd6876415859b037683fd6e47.jpg"></p>    <h2><strong>后记</strong></h2>    <p>其实做这个项目的起因,并不是想要对其他 App 进行修改,而是在竞品分析时,想尽可能了解其他 App 是如何实现类似需求的。 然后发现其实我们还能做到比抓包更进一步,对我自己很有用,所以也分享给大家~</p>    <p> </p>    <p> </p>    <p>项目主页:<a href="http://www.open-open.com/lib/view/home/1490163581519">http://www.open-open.com/lib/view/home/1490163581519</a></p>    <p> </p>