美文网首页
【Toki从零学iOS逆向】六、App重签名

【Toki从零学iOS逆向】六、App重签名

作者: TokiHunter | 来源:发表于2022-09-12 18:43 被阅读0次

    目录

    运行环境

    2022年9月
    MBP M1 macOS Monterey 12.4
    iPhone 8 iOS 14.2
    Human Proficient in iOS & Cycript development

    控台环境

    环境 提示符
    #mac $ command
    #iPhone Toki-iPhone: root# command
    #cycript cy# command

    一、初始项目目录

    本文涉及的文件操作过多,所以单独创建一个项目目录,让所有操作结果更清晰。

    Project
    

    二、添加原始app包

    可以通过任意方式获取目标App的x.app包,然后存放在Project/standard目录下。这里我选择用ssh的方式。

    $ scp -r root@192.168.x.x:/var/containers/Bundle/Application/ED52B70B-2342-4D03-BC87-10CEE955F580/TKVictim.app/ standard
    

    当前项目结构

    Project
    └── standard
       └── TKVictim.app
           ├── TKVictim
           └── ...
    

    三、添加已脱壳的可执行文件

    当前项目结构

    Project
    ├── standard
    │   └── TKVictim.app
    │       ├── TKVictim
    │       └── ...
    └── decrypted
       └── TKVictim.decrypted
    

    四、添加证书描述文件

    二进制文件在iPhone内被执行需要经过签名验证,所以如果我们在App包内修改或新增二进制文件,就需要对其进行签名。

    1. 查询本地可用证书
    security find-identity -v -p codesigning
      1) 1234567890QWERTYUIOPASDFGHJKLZXCVBNM "Apple Development: Toki (ABC1234567)"
      2) 0987654321QWERTYUIOPASDFGHJKLZXCVBNM "Apple Development: Toki@tk.com (ABC1234567)"
    
    1. 选定证书,获取证书描述文件

    现在我决定要用第一个证书,用这个证书构建任意一个App,此处构建一个Demo。
    构建成功后,查看Build Demo - Log,寻找到Demo.app的路径,我们需要的证书描述文件就在这个目录下。


    1. embedded.mobileprovision文件拷贝到我们工作的目录,将其解析转换为entitlements.plist
    $ mkdir embedded
    $ cd embedded
    $ cp /Users/.../Demo.app/embedded.mobileprovision ./embedded.mobileprovision
    $ security cms -D -i embedded.mobileprovision > embedded.plist
    $ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' embedded.plist > entitlements.plist
    

    当前项目结构

    Project
    ├── standard
    │   └── TKVictim.app
    │       ├── TKVictim
    │       └── ...
    ├── decrypted
    │   └── TKVictim.decrypted
    └── embedded
       ├── embedded.mobileprovision
       ├── embedded.plist
       └── entitlements.plist
    

    五、重新构建App包

    1. 复制原始app包到Payload目录下
    2. 替换Payload/TKVictim.app/目录下的可执行文件TKVictimTKVictim.decrypted,并为其添加可执行权限
    $ cp decrypted/TKVictim.decrypted Payload/TKVictim.app/TKVictim
    $ chmod a+x Payload/TKVictim.app/TKVictim
    
    1. 复制证书描述文件embedded.mobileprovisionPayload/TKVictim.app/目录下
    $ cp embedded/embedded.mobileprovision Payload/TKVictim.app/embedded.mobileprovision
    

    当前项目结构

    Project
    ├── standard
    │   └── TKVictim.app
    │       ├── TKVictim
    │       └── ...
    ├── decrypted
    │   └── TKVictim.decrypted
    ├── embedded
    │   ├── embedded.mobileprovision
    │   ├── embedded.plist
    │   └── entitlements.plist
    └── Payload
       └── TKVictim.app
           ├── TKVictim
           ├── embedded.mobileprovision
           └── ...
    

    六、修改Bundle Identifier

    若选择的证书是开发证书,需要修改app包内的Info.plist文件,将其中的Bundle Identifier值改为和Demo项目相同。

    七、修改UISupportedDevices

    若app包内的Info.plist文件中有UISupportedDevices键值对,会限制了该App可安装的设备型号,可以将该键值对移除。

    若选择的证书是开发证书,需要修改app包内的Info.plist文件,将其中的Bundle Identifier值改为和Demo项目相同。

    八、重签名

    不考虑app包具体结构,执行饱和式签名,包含app包本体(即可执行文件TKVictim),以及app包内部的*.framework*.dylib
    通常是够用的,但也有小概率出现不在覆盖范围内的内容,可以自行尝试了解一下重签名相关知识

    $ codesign --continue -fs 1234567890QWERTYUIOPASDFGHJKLZXCVBNM --entitlements embedded/entitlements.plist Payload/TKVictim.app/Frameworks/*.framework
    $ codesign --continue -fs 1234567890QWERTYUIOPASDFGHJKLZXCVBNM --entitlements embedded/entitlements.plist Payload/TKVictim.app/Frameworks/*.dylib
    $ codesign --continue -fs 1234567890QWERTYUIOPASDFGHJKLZXCVBNM --entitlements embedded/entitlements.plist Payload/TKVictim.app
    

    九、打包

    Payload文件夹压缩成 TKVictimResign.ipa

    $ zip -r TKVictimResign.ipa Payload
    

    相关文章

      网友评论

          本文标题:【Toki从零学iOS逆向】六、App重签名

          本文链接:https://www.haomeiwen.com/subject/wczanrtx.html