美文网首页
ios应用签名原理以及重签名

ios应用签名原理以及重签名

作者: 正_文 | 来源:发表于2020-08-19 10:09 被阅读0次

    一、iOS应用签名原理及过程

    iOS应用签名原理.png

    签名的过程如上图,接下来我们来简单看下描述文件,打开目录:

    /Users/xxx/Library/MobileDevice/Provisioning Profiles
    

    随便选择一个证书,用命令查看:

    security cms -Di fe1db9ae-746b-49f1-8ff5-0fa8b3ab8483.mobileprovision
    

    找到 entitlements

    <key>Entitlements</key>
        <dict>
            <key>keychain-access-groups</key>
            <array>
                <string>55TKKGAAJQ.*</string>
            </array>
            <key>get-task-allow</key>
            <true/>
            <key>application-identifier</key>
            <string>55TKKGAAJQ.*</string>
            <key>com.apple.developer.team-identifier</key>
            <string>55TKKGAAJQ</string>
    
        </dict>
    

    这个 entitlements 就是权限配置,App重签名会用到。

    二、应用重签名

    2.1 准备工作

    先下载砸壳的应用(业内普遍用WeChat),用 codesign 看下我们准备的应用包:

    codesign -vv -d WeChat.app
    

    其中有一项:Authority 就是应用签名,

    查看machO文件

    machO即Unix可执行文件,我们用otool工具先看一下:

    //以下命令可以都可以,我们用第三个
    otool -l WeChat                                //终端直接输出
    otool -l WeChat | grep cry                //管道输出,grep筛选
    otool -l WeChat | grep cry > 文件地址       //输入到文件
    

    cryptid字段: 0 , 代表你下载的是砸过壳的 ;1,也就是加密过的,其实就是 AppStore 使用的非对称性加密 (代码签名)。
    注意:App的解密,即签名验证发生在启动App时,并非安装时就解密(可参考企业包的安装验证过程)。

    cryptid.png
    查看电脑上的证书

    命令:security find-identity -v -p codesigning

    2.2 删除插件

    插件普通账号无法重签,先删除:
    1、WeChat 显示包内容,找到 PlugIns 文件夹,直接删除。
    2、找到Watch文件夹,这里也有插件,我们暂时不用,删除。

    2.3 重签FrameWork

    进入FrameWork文件夹
    利用codesign,使用自己的证书进行重签名。
    命令:codesign -fs "刚刚复制的你自己的证书名字" 要重签的FrameWork名称
    例如:codesign -fs "Apple Development: chen_xxxx@xxxx.com (632F4MG322)" OpenSSL.framework
    重复操作,把FrameWork文件夹下的所有库全部重签。

    codesign.png

    2.4 确保machO的执行权限。

    简单判断可执行权限:预览框中,黑色,表示可执行;灰色,表示不可执行(10.15的系统可能看不了)。
    也可以通过命令:ls -l Wechat,查看文件权限。结果可能为:-rw-rw-r--@ 或者其他权限。
    如果没有可执行权限,也就是 x 权限,可以通过 chmod +x WeChat 添加权限。

    2.4.1 Linux 文件权限

    UnixLinux 都是多用户、多任务的系统,所以这样的系统里面就拥有了用户的概念。那么同样文件的权限也就有相应的所属用户和所属组了。

    Mac文件属性.png 文件类型及权限.png

    文件类型以及权限:

    1. 1段表示文件类型:d目录-文件
    2. 后面三段表示文件权限,对应 [user] [group] [other]
      2.1 第2段:文件所有者权限
      2.2 第3段:这一组其他用户权限
      2.3 第4段:非本组用户权限

    文件三个权限为:[read] [write] [execute]
    简写及对应数字:r : 4 w : 2 x : 1
    二进制表示: 0100 0010 0001

    1. 如果一个文件权限为:[–rwxr-xr-x]
      User:rwx 4+2+1 = 7
      Group:r-x 4+0+1 = 5
      Other:r-x 4+0+1 = 5
    2. chmod 755 文件名:该命令设置权限同上。
    3. 符号类型:chmod [u、g、o、a] [+(加入)、-(除去)、=(设置)] [r、w、x] 文件名称。(chmod 7 文件名,默认为所有)

    2.5 添加描述文件

    这个可以借助xcode自动生成一个,当然有的话可以直接用。
    1、新建一个空工程跑到手机上,Bundle identifier为com.study.WeChatTest,然后进入app包内找到描述文件,复制到WeChat包内。

    embedded.png

    2、WeChat包内找到 Info.plist 文件,修改Bundle identifiercom.study.WeChatTest

    2.6 准备授权文件(Entilements)

    利用文章开始我们说的查看描述文件方法,看我们刚刚拷贝到微信包里的描述文件。也就是我们自己空工程生成的描述文件,找到权力文件部分。

    Entilements.jpg
    打开我们刚刚新建的工程,新建一个reInfo.plist文件。Open As -> Source Code,将权利文件内容粘贴进去。
    截屏2020-08-18 22.29.14.png
    然后将 Info.plist 文件放到 WeChat.app同路径下。
    WeChat.png

    2.6 重签app包

    codesign -fs"Apple Development: chen_xxxx@xxxx.com (632F4MG322)" --no-strict --entitlements=reInfo.plist WeChat.app
    

    2.7 安装到手机

    1597761592347.jpg
    点击 +,添加重签过得app包,安装到手机。
    注意在这一步时,一定要将app包中Info.plist 文件的Bundle identifier 修改。

    三、通过Xcode直接安装

    3.1 新建同名工程

    重复上面的前三步,新建同名工程,即WeChat工程。选择真机,安装到手机上。

    不使用同名工程时,每次 build 会重新创建一个 Mach-O,也就是说此时你就算更换了包,但是这个包里有两个 Mach-O,而运行的还会是你自己的空工程,所以在我们已经下载到 ipa 看得到包里的 Mach-O 的情况下,我们就起和它一样的名字就好。

    3.2 替换App包

    找到上一步重签名的App包,替换我们新建项目的App包。

    这个时候,App包里面的Bundle ID还是微信的,不管,直接运行。

    直接运行,App正常安装到手机上,大功告成。

    总结

    前面之所以要自己手动重签名,主要是让我们了解重签名的过程及原理。当然通过Xcode重签,我们可以看到部分打印,方便我们添加代码运行。

    相关文章

      网友评论

          本文标题:ios应用签名原理以及重签名

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