网站建设、公众号开发、微网站、微商城、小程序就找牛创网络 !

7*24小时服务专线: 152-150-65-006 023-68263070 扫描二维码加我微信 在线QQ

无线安全团结互助,让我们共同进步!

当前位置:主页 > 技术资讯 > 网络安全 > 无线安全 >

我们的优势: 10年相关行业经验,专业设计师量身定制 设计师一对一服务模式,上百家客户案例! 企业保证,正规流程,正规合作 7*24小时在线服务,售后无忧

重新对iOS应用程序签名,生成IPA文件,部署到测试设备

文章来源:重庆网络安全 发布时间:2020-03-05 13:52:35 围观次数:
分享到:

摘要:iOS应用程序黑盒安全测试,通常从AppStore访问和获取,客户提供IPA文件。无法访问源代码,因此不可能将其部署到设备上并通过Xcode对其进行测试。

  iOS应用程序黑盒安全测试,通常从AppStore访问和获取,客户提供IPA文件。无法访问源代码,因此不可能将其部署到设备上并通过Xcode对其进行测试。


代码签名


  代码签名是一种安全措施。Apple要求其设备上运行的所有代码都必须由其信任的开发人员进行数字签名。 数字(代码)签名的工作方式与SSL证书在网站上的工作方式相同。 


从IPA提取应用程序Bundle


  首先,我们需要准备一个.ipa文件。您可以选择使用frida-ios-dump或其他工具,这取决于您的个人喜好,但最终我们必须拥有可以使用的IPA文件。我们选择在这里使用OWASP iGoat-Swift。

  接下来,我们使用ios-deploy将应用程序加载到测试设备上。但是,如果您现在尝试加载IPA文件,则可能会失败,因为此时提供的配置文件不会将我们的设备用作运行该App的有效设备,因此我们需要重新签名目标App。


  我们可以将IPA文件解压缩为ZIP文件,而不用担心文件扩展名,因为我们可以直接修改扩展名。


    $ mv iGoat-Swift_v1.0.ipa iGoat-Swift_v1.0.zip


    $ unzip iGoat-Swift_v1.0.zip -d iGoat-Swift


    # this should create a directory iGoat-Swift with Payload inside


  在这里,我们需要弄清楚该IPA文件需要什么权限,因此我们需要首先提取这部分。


提取授权内容


  Apple设备上安装的每个应用程序都需要一个配置描述文件。这些配置文件需要在Apple的开发者门户网站上创建。我们假设有一个这样的文件,然后我们将使用我们的配置文件替换IPA中的当前配置文件,但是现在我们需要查看当前配置文件并了解该配置文件的要求以创建我们的配置文件。


  首先,我们需要从Embedded.mobileprovision中提取一个plist。我们的工作目录是iGoat-Swift目录:


  iGoat-Swift


  └── Payload


  └── iGoat-Swift.app

  然后从应用程序Bundle中获取Embedded.mobileprovision:


  $ cd iGoat-Swift


  $ security cms -D -i Payload/iGoat-Swift.app/embedded.mobileprovision > provision.plist


  我们可以使用通用的文本编辑器打开plist文件,或直接使用PlistBuddy提取plist中的所有授权域:


  $ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist | tee entitlements.plist


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


  $ cat entitlements.plist


  接下来,我们将看到以下信息:


  <?xml version="1.0" encoding="UTF-8"?>


    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">


    <plist version="1.0">


    <dict>


            <key>application-identifier</key>


            <string>6J6AZQ7T23.*</string>


            <key>com.apple.developer.team-identifier</key>


            <string>6J6AZQ7T23</string>


            <key>get-task-allow</key>


            <true/>


            <key>keychain-access-groups</key>


            <array>


                    <string>6J6AZQ7T23.*</string>


            </array>


    </dict>


    </plist>

至此,我们已经知道需要创建的授权内容,其中:


  get-task-allow:允许我们在调试模式下运行应用程序。当我们从Xcode运行应用程序时,将添加授权。


  keychain-access-groups:允许我们在App组之间共享钥匙串对象。

  当我们在Xcode中为keychain-access-groups选择授予的权限时,将自动生成application-identifier和com.apple.developer.team-identifier。


  创建一个“空白”应用程序


  现在,创建一个空的Xcode项目。此应用程序的授权应与我们需要重新签名的应用程序的授权内容相同。重新签名的结果是,我们将获得两个具有相同功能但签名不同的应用程序。


  经过刚刚的分析,我们已经知道iGoat-Swift需要“ keychain-access-groups”权限,然后我们需要在项目信息的授权部分中搜索并添加此权限。


  接下来,构建并运行我们的空项目。在测试设备上运行该应用程序后,您将获得一个包含测试设备ID的有效配置描述文件。


  现在,我们可以从测试设备中删除此空应用程序,我们只需要使用Xcode创建正确的配置描述文件,然后使用它重新签署iGoat-Swift应用程序。


  获取正确的配置文件


  在Xcode文件导航栏中,选择“Product”,然后单击目标App。然后检查Xcode Inspector区域(在Xocde界面的右面板上)以找到应用程序Bundle的路径。


  在应用程序Bundle中,我们将看到“ embedded.mobileprovision”,然后将配置描述文件复制到当前工作目录:


  $ cp PATH_YOU_GOT_FROM_XCODE / Embedded.mobileprovision new_embedded.mobileprovision

  我们可以根据此配置描述文件获取目标应用程序所需的权限:


 $ security cms -D -i new_embedded.mobileprovision > new_provision.plist


 $ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' new_provision.plist | tee new_entitlements.plist


  现在我们可以删除以前的代码签名:


  $ rm -r Payload/iGoat-Swift.app/_CodeSignature

  接下来,使用以下命令访问我们的配置描述文件(在钥匙链Keychain中):


  $ security find-identity -v -p codesigning

  获得所需的信息后,我们可以重新签署申请:

 $ codesign -f -s "Your Provisioning Profile (AAAAAA)" --entitlements new_entitlements.plist Payload/iGoat-Swift.app/


 $ codesign -f -s "Your Provisioning Profile (AAAAA)" --entitlements new_entitlements.plist Payload/iGoat-Swift.app/Frameworks/*


 $ codesign -f -s "Your Provisioning Profile (AAAA)" --entitlements new_entitlements.plist Payload/iGoat-Swift.app/iGoat-Swift


  现在,我们使用重签名的应用程序Bundle来生成新的IPA文件:


  $ zip -qr iGoat-Swift_v1.0.ipa  Payload/

  接下来,使用ios-deploy将新生成的iOS应用程序部署到我们的测试设备:


  $ ios-deploy -b iGoat-Swift_v1.0.ipa


本文由 重庆网络安全 整理发布,转载请保留出处,内容部分来自于互联网,如有侵权请联系我们删除。

相关热词搜索:iOS应用程序签名 IPA文件 测试设备 重庆网络安全

上一篇:根据APK文件来获取React Native JavaScript,分析API及敏感信息
下一篇:映射攻击者活动技术:LNK文件构建关联用户搜索

热门资讯

鼠标向下滚动