美文网首页iOS Developer逆向+反编译
iOS App的Patching和Resigning

iOS App的Patching和Resigning

作者: Mad_Mark | 来源:发表于2017-06-19 21:35 被阅读990次

    本实验主要针对修改后的app,进行重新打包和重签名,并最终能运行在自己的手机上。

    工具:

    Xcode 获取自己的embedded.mobileprovision

    optool 用来添加Mach-O二进制文件的load commands

    ios-deploy 脱离Xcode在手机上构建和调试iOS应用

    codesign 重签名工具

    FridaGadget.dylib 用来修改app,在Mach-O文件的load command中注入这个动态库的链接。注入后能够通过frida来调试和分析。

    基本概念

    重签名的过程中涉及到两个很重要的文件:

    provisioning profile:一个plist格式的配置文件,可以将你的代码签名证书,也就是code signing certificate加入白名单。其中还包括你app被授予的权限。

    code signing certificate:包含你实际用来签名的私钥。

    一、获取证书

    如果你跟我一样不是付费开发者,你也可以通过另一种方式来获取provisioning pofile:

    1. 打开Xcode,创建一个SimpleViewApp
    2. 运行环境选中你的设备,运行一次
    3. 选中左边导航栏Products中的app
    4. 点击最右面板中,Full Path右下角的箭头,定位到app所在的目录
    5. 右击app选择“显示包内容”,即可看到embedded.mobileprovision
    xcode-provisionpath.png

    接下来,在命令行中使用security查看并提取这个配置文件的内容到一个profile.plist文件:

    security cms -D -i embedded.mobileprovision
    

    执行这条命令,你就可以看到一个profile.plist文件,接下来生成entitlements.plist:

    $ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' profile.plist > entitlements.plist
    $ cat entitlements.plist
    

    结果如图:

    entitlements.png

    二、修改二进制文件

    下载FridaGadget并拷贝到你要重签名的app目录下

    $ curl -O https://build.frida.re/frida/ios/lib/FridaGadget.dylib**
    

    并将你的embedded.mobileprovision文件也拷贝到app目录下。
    然后使用PlistBuddy,将entitlements.plist文件中的BundleID来替换掉app中Info.plist文件中的BundleID。因为codesign签名时会验证这个BundleID。

    copyfiles.png

    好,接下来使用optool来添加load command到app的Mach-O二进制文件中。

    $ optool install -c load -p "@executable_path/FridaGadget.dylib" -t Payload/UnCrackable\ Level\ 1.app/UnCrackable\ Level\ 1
    Found FAT Header
    Found thin header...
    Found thin header...
    Inserting a LC_LOAD_DYLIB command for architecture: arm
    Successfully inserted a LC_LOAD_DYLIB command for arm
    Inserting a LC_LOAD_DYLIB command for architecture: arm64
    Successfully inserted a LC_LOAD_DYLIB command for arm64
    Writing executable to Payload/UnCrackable Level 1.app/UnCrackable Level 1..
    

    三、重签名并重新部署应用

    至此,准备工作全部完成了,接下来就是重签名了。但是,先要移除app中原来的代码签名文件。

    $ rm -rf Payload/UnCrackable\ Level\ 1.app/_CodeSignature
    

    然后,用security获取你的签名标示符,并对FridaGadget.dylib和执行文件进行重签:

    resigning.png

    这里有一点需要注意,这两个文件的重签命令是不一样的,执行文件重签时需要额外包含权限文件entitlements.plist。
    还有一点,记得先砸壳先砸壳先砸壳,否则会在最后deploy app时出错。

    最后,使用ios-deploy工具重新构建和安装app,完成后会自动lldb attach。

    deploy.png

    OK,修改过的app已经安装到你手机上,并且可以调试啦~~~

    相关文章

      网友评论

        本文标题:iOS App的Patching和Resigning

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