如何在release build的iOS app上debug webview

0x00 背景

大家知道,在mac上用safari的web inspector可以远程dedug iphone 的safari或者app的内置webview。iphone的safari是任何时候都可以被debug(前提当然是iphone的设置允许了web inspector),但是app内置的webview并不是总能被debug的,如果app是release build的,那么它内置的webview就不能被debug。

为了解决这个问题,如果你有一台越狱了的iphone,则可以通过重新打包ipa文件使得app内置的webview可以被debug。

0x01 先决条件

  1. 越狱的iphone
  2. 安装appsync unified这个tweak,为了绕过iphone的签名认证
  3. ifunbox

0x02 方法

  1. 首先使用ifunbox从iphone中获得app的安装包ipa文件,如果ifunbox不工作,则自己从iphone的/var/mobile/Containers/Bundle/Application/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX/TargetApp.app中scp。或者如果能找到的话,从网上下载该app的ipa文件也行。
  2. 解压缩ipa文件,一般来说你会看到一个叫Payload的文件夹。
  3. 创建一个名为entitlements.plist的文件,文件内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.springboard.debugapplications</key> <true/>
        <key>run-unsigned-code</key> <true/>
        <key>get-task-allow</key> <true/>
        <key>task_for_pid-allow</key> <true/>
    </dict> 
    </plist>
    
  4. 给你的app的dwarf (binary)文件签名:
    codesign -s - --entitlements entitlements.plist -f Payload/TargetApp.app/TargetAppBin
    
  5. 重新把Payload文件加压缩,并把扩展名从zip改为ipa
  6. 使用ifunbox安装ipa文件即可。

0x03 注意点

TargetApp.app一定要放在名为Payload的文件夹中,然后把Payload文件夹整个压缩。如果不命名为Payload,则无法安装压缩包。