美文网首页iOS 道路之行
没有源码的签名与打包(Python+command)

没有源码的签名与打包(Python+command)

作者: CoderHG | 来源:发表于2018-10-28 00:11 被阅读255次

    这篇简书本来是想接着写到 【重组 IPA (打包再签名) - 窥打包签名流程】或者【OC 字符匹配小技巧 (模板构造)】,但是仔细想想都有点不合适,所以就重新开了一篇简书来介绍。

    一、简单介绍

    一看这个标题就有点诡异,接下来介绍的确实是在没有源码的情况下给一个 ipa 文件重新签名与打包。接下来的这个实验确实有点荒谬,但是作为一种以技术学习的心态来看待这个实验,应该会学习到更多,尤其是如果你没有听说过 command 文件的话。

    这个实验的步骤是这样的:

    • 1、获取一个线上并已经砸壳的 ipa 文件。
    • 2、解压之后提取 .app 文件, 放于另外的空文件中。
    • 3、将我的两个脚本文件一同放入这个文件夹中,然后双击 command 文件。(文件链接在后面)
    • 4、会重新生成一个 ipa 文件,那么这个新的 ipa 文件就是使用我们自己的证书重新签名之后的 ipa 包。虽然是从AppStore下载的,当从签名之后,就与我们平时的Ad Hoc包一样了。

    结果图:


    点击 command 文件之前的文件夹 点击 command 文件之后的文件夹

    可以看到多出了一个 Target.ipa 文件,这个文件与之前的 ipa 文件的主要区别是数字签名的证书换成了我们自己的证书,这种事情往往发生在逆向开发中。当然,没什么事情不要恶意的乱搞别人的线上 APP,正向防逆向 ZTND 难搞,主要是现在防不住了。

    二、核心技术细节

    从上面的简单介绍中可以看出,我简单的实现了两个文件:python 与 command 文件。代码链接在文档后面。

    2.1 python 文件

    python 文件主要负责的是对 .app 文件进行重签名,这里里面的重签名包括两个部分 动态库的重签名与即 .app 文件本身签名。里面的代码很简单:

    image.png

    总的来说就是获取所有的动态库文件,然后进行重签名,最后对 .app 文件再次重签名。

    但是在文档的头部需要配置一些参数:


    image.png

    其中 APP 名称证书编号 很好理解,接下来简单的介绍一下 签名文件的路径
    当我们使用 Xcode 打包之后,会发现在打包文件夹中会有这么一个文件 ExportOptions.plist,这个文件与打包之前的数字签名息息相关。但是对于别人的 ipa 包使用我们自己的证书打包的时候,如何获取类似这样的文件呢?

    方法很简单,创建一个空的项目,将 bundle ID 改成即将打包的 bundleID 一样,然后选择成 Release 模式,选择真机设备,最后 build 一下,找到下图中的地方。

    image.png

    红框框就是就是我的证书编号,下滑线就是我需要的 签名文件的路径,直接拷贝过去就行了。会发现这张图,其实就是我的 python 文件中的第二个步骤。

    这样,简单的 签名文件就结束了。

    2.2 command 文件

    其实,我们已经看出来了,上面的 python 文件只能在终端执行,每次运行都需要先打开终端,再执行,非常麻烦。我们能否不打开终端,点击某个东西就直接执行呢。答案肯定是有的,在 Mac 电脑上就是 command 文件,在 Windows 电脑是是 bat 文件。
    在上面的 python 文件中,功能仅仅是签名。在接下来的 command 文件中主要处理的是生成一个 ipa 结构的文件夹,然后在压缩成一个 ipa 文件即可。在这里还需要强调的是,这个过程可以完全在 python 中完成,也可以像【神气的 iOS 打包】中一样,使用 shell 脚本,这次使用 command 文件的主要目的是,这个文件不用调取终端,双击文件就可以直接执行。实现的代码也很少:


    image.png

    哥们,不要笑,我都听到你坏笑的声音了,的确这个文件我是重 MonkeyDev 中经过简单修改后的,这是技术交流,感谢作者alonemonkey

    看完了这两个文件的简单介绍,应该已经差不多理解了。这两个脚本文件的地址在这里:
    UploadPackageUploadPackage
    主要代码请见目录【signAndPackage】。

    三、总结

    主要就是将一个直接从 App Store 下载的 ipa,经过砸壳之后,使用自己的证书重新数字签名再打包。我想写这篇简书的原意:是想介绍 command 文件的强大之所在的,后来发现没有必要再次强调,本来就很强大。这种文件的功能在我们的实际工作中,能减少很多的开发流程,提高开发效率。相信你听过小沈阳的《你懂得》。

    参考推荐

    1、我的简书 重组 IPA (打包再签名) - 窥打包签名流程
    2、我的简书 神气的 iOS 打包
    3、我的简书 OC 字符匹配小技巧 (模板构造)
    4、逆向学习 MonkeyDev

    相关文章

      网友评论

        本文标题:没有源码的签名与打包(Python+command)

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