带有Objection的iOS运行时移动浏览,或破解我们自己的应用程序



由DataArt高级iOS开发人员Andrey Batutin发布。

当我上班(或刚起床)时,不止一次或两次,我在邮件中发现了一封愤怒的信,其实质是在应用程序的appstor组件中没有任何作用,并且所有事情都需要紧急修复。

有时候原因是我的。 有时是我的同事。 有时甚至是苹果公司本身

但是最致命的情况是与仅在应用程序/发行版中复制的错误有关。 没什么让您迷惑不解的,让您在Macbook面前how不休,例如无法将调试器连接到您自己的应用程序并查看在那里发生了什么。

APNS及其在发行/临时程序集上的疑难解答也造成了类似的困难。
在具有生产APNS环境的那些程序集中,您无法连接调试器。
在具有调试器的那些程序集上,没有APNS生产推送。 但是它们通常会脱落。

苹果就像旧约神一样,一只手提供了一个平台,在此平台上越狱将很快成为历史 (并且App Store中的盗版仍然处于统计错误的水平),另一只手使开发人员感觉像是一个可怜的亲戚小奥利弗·特罗斯(Oliver Twist),他敢于要求更多的稀饭。


旁白:“苹果叔叔,请给我另一个发行证书...”

对于普通程序员来说,要完成iOS应用程序的发布/应用商店构建几乎是不可能的。 在发布之前退出更容易。

简而言之:

该发布版本由分发证书签名,并使用分发设置配置文件。 授权禁止将调试器附加到应用程序进程。 另外,从App Store下载ipa时,二进制文件也会被加密。 App Extensions是分开签名的。

也就是说,应用程序的作者似乎可以通过使用供应配置文件使用证书来使用App Store程序集并重新签名。 但是您仍然需要知道如何去做。 但是即使在那之后,如何将调试器连接到应用程序进程的问题仍然悬而未决。

因此,我们必须专注于在开发阶段不进行调整。 并在应用程序离开App Store之前捕获所有错误。 和日志,更多的日志供日志之神使用!



但是最近,新的希望已经浮出水面。



在上一部分中,我们遇到了Frida,这是一个用于动态代码注入的出色框架。 并在优秀的FoodSniffer项目中绕过SSL固定。

在本文中,我们将熟悉基于Frida创建的框架,该框架极大地促进了iOS应用程序发行版本的操纵。

异议


异议允许您将 FridaGadget注入iOS版本,并使用所需的证书和配置文件对其重新签名。

准备工作


首先,我们需要发布FoodSniffer。

重要说明-创建ipa时,请关闭“包括iOS内容的位码”。



然后,我们需要一个用于构建构建的配置文件。

要获得它:

  1. 通过Xcode在设备上安装应用程序。
  2. 在Finder中找到FoodSniffer.app。

  3. 转到FoodSniffer捆绑包。

  4. Embedded.mobileprovision从那里复制到带有发行版本ipa的文件夹中。


您应该获得如下内容:



然后,按照说明安装异议。 我强烈建议使用virtualenv选项。

除异议外,我们还需要ios-deploy在设备上运行修补的应用程序。

重新签署申请!


在终端中,找到我们需要的代码符号标识的哈希值:

安全查找身份-p代码签名-v



我们对386XXX身份感兴趣,因为它与通过Xcode在安装过程中使用应用程序签名的批处理证书相对应,从中我们获得了配置文件。

注入FridaGadget并重新签名我们的应用程序:

异议patchipa-源FoodSniffer / FoodSniffer.ipa --codesign-signature 386XXX --provision-文件Embedded.mobileprovision



结果,我们应该得到FoodSniffer-frida-codesigned.ipa

现在,我们需要ios-deploy来安装并连接到FridaGadget。 这是重要的一步-如果您只是通过iTunes或Xcode在设备上安装了ipa,则无法连接到FridaGadget。

压缩FoodSniffer-frida-codesigned.ipa后

解压缩FoodSniffer-frida-codesigned.ipa

我们在设备上启动修补的应用程序:

ios部署--bundle有效负载/ FoodSniffer.app -W -d

如果一切顺利,则应用程序应在设备上启动,并且在终端中,我们将看到:



现在,在另一个终端选项卡中,将异议连接到FridaGadget:

异议探索



赢利!

反对提供的面包


SSL固定绕过


这里的一切都很简单:

ios sslpinning禁用



现在,您可以轻松地使用Proxy Server来监视我们应用程序的流量,如第一部分所述

转储用户默认值


ios nsuserdefaults获取

在转储结束时,我们应该看到“ mood_state” =“我饿了”



转储应用程序钥匙串


iOS钥匙串转储



这是我们的超级秘密密码。

从SQLite数据库中获取数据。
在应用程序中,我从此处添加了sqlite数据库chinook.db

异议允许您直接向数据库查询,如下所示。

  1. 连接到数据库:

    sqlite连接chinook.db

  2. 要求她:

    sqlite执行查询选择*从专辑


结论


Objection和Frida最终允许使用Ad Hoc和Distribution版本的iOS应用程序进行相对正常和简单的工作。 他们将对自己应用程序的控制权归还给程序员,而这些功能隐藏在Apple精心封装iOS应用程序的保护层的后面。 此外,异议和弗里达(Frida)可在非越狱设备上工作。 此外,它们相对易于使用。

有了他们,我希望再次使iOS开发变得更好。 安全地避免从内部破坏苹果的新总部。



超级(有用)链接


一位阿姆斯特丹学生讨论了iOS代码签名

https://labs.mwrinfosecurity.com/blog/repacking-and-resigning-ios-applications/

https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2016/october/ios-instrumentation-without-jailbreak/

FoodSniffer iOS应用程序源代码

弗里达电报

特别感谢@manishrhll

注意事项 以上所有内容应仅应用于其应用程序,而不要尝试破坏“ Tinder”或其他东西。 仍然行不通!

Source: https://habr.com/ru/post/zh-CN429196/


All Articles