close
当前位置: 物联网在线 > 技术文库 > ios >

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

之前在 GitHub 上开源了关闭 Facebook for iOS 的 HTTPS 证书校验的方法 ( Naituw/HackingFacebook ),收到了很多反馈,大部分都集中在操作的过程太复杂的问题上。其实我自己在后来修改其他 App 的过程中也察觉,调试、验证问题的过程中,操作太过繁琐。

因此我又对这个方向做了进一步的尝试,最后 IPAPatch 诞生了~

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

IPAPatch 可以做什么呢?

和 "HackingFacebook" 类似,"IPAPatch" 主要可以在第三方的 IPA 文件上 "添加" 自己的代码,但过程有很大不同:

过程简单

提供 IPA 文件和你的代码,配置好签名信息,点击“运行”即可

整个过程在 Xcode 中进行,就像在编写自己的 App

IPA 文件依然需要是解密过的

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

在 Youtube 中弹出自定义窗口

支持调试

在 Xcode 中可以直接断点进行调试

可以用 lldb 命令(如 po),输出运行时信息

可以使用 Xcode 的调试功能查看 View Hierarchy、Memory Graph 等信息

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

使用 lldb 调试 Youtube

支持链接第三方 Framework

在集成一些第三方服务时很有用

例如之前发微博的 Reveal 调试 Youtube 就是这种方式

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

使用 Reveal 调试 Youtube

修改过的 App 可以与原始 App 共存,并自动修改名字以作区分

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

修改过的 Youtube 和 Facebook

怎么实现的?

主要的自动化过程在 patch.sh 这个脚本里,Xcode 会在把你的代码编译成 Framework 后执行这个脚本:

解压 IPA 文件

用 IPA 文件的内容,替换掉 Xcode 生成的 .app 的内容

通过 OPTOOL,将你代码生成的 Framework 及其他外部 Framework,注入到二进制文件中

对这些文件进行重新签名 

完成后,Xcode 会自动将修改过的 .app 安装到 iPhone

具体的例子?

之前发过一个 “iOS 10.3 使用 Reveal 调试 Youtube” 的微博,我就用这个来举例吧。

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

使用 Reveal 调试 Youtube

1. 首先我们需要准备一个解密过的 Youtube IPA 文件,这个文件可以从越狱手机上导出,也可以直接去网站下载,比如我自己常用的是 iphonecake.com

2. 将 IPA 文件命名为 app.ipa,替换模版工程中的 Assets/app.ipa 文件

3. 打开 Reveal,拿到需要集成的 Framework 文件 

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

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

4. 将 RevealServer.framework 放置在 Assets/Frameworks/RevealServer.framework

5. 打开 IPAPatch,在 IPAPatch-DummyApp 这个 Target 里,配置好 BundleID 和代码签名。Display Name 会作为前缀添加到原来的 App 上,如图配置的话最后就是 "RevealYoutube" 

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

6. 点击 Xcode 左上角的编译运行按钮,修改好的 Youtube 就会安装到手机上,Reveal 中也能找到 

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

后记

其实做这个项目的起因,并不是想要对其他 App 进行修改,而是在竞品分析时,想尽可能了解其他 App 是如何实现类似需求的。 然后发现其实我们还能做到比抓包更进一步,对我自己很有用,所以也分享给大家~


(责任编辑:ioter)

用户喜欢...

关于驱动设备的调试和移植的一些经验总结

对设备驱动最通俗的解释就是驱使硬件设备行动。设备驱动与底层硬件直接打交道,按照硬件设备的具体工作方式读写设备寄存器,完成设备的轮询、中断处理、DMA 通信,进行物理内存向虚拟...


Xilinx Vivado Zynq Pldma APB控制线调试

在xilinx vivado zynq pldma PL部分ILA调试中,观测APB总线上的数据是正常的,但PLDMA没有成功,分析代码发现在HP_DMA模块中使用m_apb_pclk与m_apb_presetn为悬空状态。由于Avnet的例程建立在2014年,所以使...


xilinx vivado zynq pldma PL部分ILA调试

通过前面的PL DMA设计,在SDK中运行,很正常的没有运行起来(block design与source desing都是自己手敲,明显的错误已经改正,能够生成bit文件启动SDK调试)。 首先在PL部分调试,作为PL DMA的控制...


petalinux(二)开启petalinux内核调试模式

描述 要调试基于Xilinx SDK的Linux内核模块,必须使能 KERNEL_DEBUG_INFO和KERNEL_DEBUGGING。这篇博文全面记录了在Petalinux中是如何处理的。 解决方案 获得基于调试模式的petalinux,需要一些特定的配置...


如何调试STM32 LCD屏幕显示+各个模块功能

从PWM输出实验的工程开始,加入其他各种功能。 LCD屏幕显示: 一、hardware 其中timer是产生脉冲的。 二、hallib FMC是一个接口,控制SDRAM和LCD 三、#include #include lcd.h #include sdram.h 1 2 四、init() SDRA...


调试Cortex-M3/4的Hard Fault的方法

1 Cortex-M3/4的Fault简介 Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址、写只读存储位置等)和非法的程序行为(比如除以0等)等造成的。常见的4种异常及产生异常的情况如下:...


Vivado与SDK的联合调试方法-使用ILA

首先介绍一下我的硬件平台:使用的开发板为米联客出的MIZ702,这个开发板与ZedBoard是兼容的。 Vivado硬件调试有几种手段:ILA(集成逻辑分析器Integrated Logic Analyzer)、VIO(虚拟I/O Virtual Inpu...


Andorid Studio NDK 开发 - LLDB 调试

LLDB 是一个高效的 c/c++ 的调试器,是与 LLVM编译器 一起使用,提供了丰富的流程控制和数据检测,有效的帮忙我们调试程序。 LLDB 也已经取代GDB成为XCode的默认调试器, Android Studio 中也可以使...


单片机开发过程中硬件调试技巧

在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试占去了总开发时间的2/3,可见调...


调试硬件BUG的神器——逻辑分析仪

背景: 电子产品开发过程中最常用的是示波器,但是随着微处理器如ARM、X86、MIPS等架构、GPU、深度学习处理器等芯片的发展,以及智能硬件如雨后春笋般的成长,硬件出现的各种逻辑类bug是...