重新对iOS应用程序签名,生成IPA文件,部署到测试设备
摘要: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文件构建关联用户搜索
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了