一:APP證書瓦堵、APP 的簽名與解密(低級(jí)簽名)
3.1 公鑰和私鑰(公鑰也是私鑰加密過的)
3.2 公鑰加密,私鑰解密
3.3 私鑰加密,公鑰解密
* 密鑰 應(yīng)用場(chǎng)景:數(shù)字簽名
* 數(shù)據(jù)報(bào)文發(fā)送:數(shù)據(jù)報(bào)文1、數(shù)據(jù)報(bào)文2歌亲、數(shù)據(jù)報(bào)文3...
* 客服端:
1.數(shù)據(jù)報(bào)文--> HASH算法(使用md5)--> 32位字符(md5值) --> RSA加密
(對(duì)md5值進(jìn)行RSA公鑰加密:即 數(shù)字簽名)
2.數(shù)據(jù)報(bào)文 + 數(shù)字簽名 --> 服務(wù)器
* 服務(wù)器:
1.數(shù)據(jù)報(bào)文--> HASH算法 --> 32位字符 str1
2.數(shù)字簽名 --> RSA解密 --> 32位字符 str2 (利用私鑰解密)
3. str1 = str2 (判斷數(shù)據(jù)有沒有被修改過)
1009-證書簽名.png
-
數(shù)字簽名理解
簽名的詳細(xì)過程
1.Mac 的公鑰M --> 蘋果服務(wù)器 --> 驗(yàn)證后菇用,給Mac證書(對(duì)應(yīng)下面的過程3,公鑰M陷揪、HASH)
2.Mac 的私鑰M (放在鑰匙串里)--> 簽名加密app --> 數(shù)字簽名M(app更改內(nèi)容惋鸥,每次打包就是重新簽名M)
3.蘋果的私鑰A --> 簽名Mac 的公鑰M --> 生成證書,放在app里--> 數(shù)字簽名A
4.手機(jī)通過app --> 取出證書 --> 用公鑰A 解密證書-->
4.1:得到公鑰M悍缠,對(duì)比HASH值卦绣,即 公鑰M =?HASH值飞蚓,判斷證書 是否被修改過滤港!
4.2:公鑰M 解密app的簽名,判斷app是否被修改過趴拧,即上傳到蘋果服務(wù)器的過程是否被黑客修改溅漾!
? 以上過程用了兩次簽名,兩次解密
? 過程1是通過CSR文件申請(qǐng)證書著榴,app有了證書才能安裝
? 以上的 公鑰 相當(dāng)于 數(shù)據(jù)報(bào)文
? 以上的 app 相當(dāng)于 數(shù)據(jù)報(bào)文
簽名的詳細(xì)過程如下:
公鑰(數(shù)據(jù)報(bào)文)--> 蘋果服務(wù)器 --> HASH算法 --> 32位字符 --> RSA加密 驗(yàn)證后添履,私鑰A 簽名Mac 的公鑰M,給Mac簽名證書
這個(gè)簽名證書 --> 放到 app里
app(數(shù)據(jù)報(bào)文)--> HASH算法 --> 32位字符 --> RSA加密(私鑰M 對(duì)app進(jìn)行數(shù)字簽名) --> 數(shù)字簽名M
app + 數(shù)字簽名M --> 也放到 app里
二:代碼簽名(棕色部分)
低級(jí)簽名脑又,保證了開發(fā)者的認(rèn)證和程序的安全性缝龄,但是只要申請(qǐng)一個(gè)證書,就可以安裝在所有的iOS設(shè)備上了挂谍,蘋果為了防止這種安裝濫用的問題叔壤,又加了兩個(gè)限制:
- 1.限制蘋果后臺(tái),對(duì)注冊(cè)過的設(shè)備才能安裝
- 2.簽名只能針對(duì)某一個(gè)app
所以-蘋果又生成了一個(gè)文件(也是通過蘋果服務(wù)器生成):Provision profile(描述文件:包含設(shè)備IDs(即:UDID)口叙、AppID炼绘、Entitlements(權(quán)利文件,即授權(quán)文件))
描述文件 --> 也放到 app里
//--------------------手動(dòng)簽名 筆記--------------------------
// 會(huì)用到的終端命令
// 目錄到 此文件夾:存放一些描述文件
$ cd /Users/zhangmeng/Library/MobileDevice/Provisioning\ Profiles
$ ls // 查看此文件夾
$ open . // 打開此文件夾
//查看 描述文件信息: 內(nèi)容是簽名加密的一個(gè)xml妄田,蘋果設(shè)備要信任此app
$ security cms -D -i + 描述文件路徑(齒輪配置文件, mobileprovision)
$ security cms -D -i embedded.mobileprovision //這個(gè)已經(jīng)cd到當(dāng)前目錄
//查看 APP的簽名信息
$ codesign -vv -d +APP路徑
$ codesign -vv -d WeChat.app
//查看 本機(jī)所有證書
$ security find-identity -v -p codesigning
//查看 可執(zhí)行文件的加密信息!
$ otool -l WeChat | grep crypt
//簽名(這里是重簽名)
$ codesign -fs + "證書" + 需要簽名的文件
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" MMCommon.framework
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" MultiMedia.framework
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" WCDB.framework
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" mars.framework
//給可執(zhí)行文件 執(zhí)行權(quán)限!
$ chmod +x WeChat
-
重簽名:
// 準(zhǔn)備工作新建一個(gè)項(xiàng)目俺亮,編譯一下
// 對(duì)于越獄版的微信ipa包 內(nèi)容
- 干掉插件Plugins文件夾里面的內(nèi)容! (即刪除Plugins文件夾)
- Watch文件夾直接干掉!
- 對(duì) Frameworks 進(jìn)行簽名!
// $ codesign -fs + "證書" + 需要簽名的文件
- 給可執(zhí)行文件執(zhí)行權(quán)限!
// $ chmod +x WeChat //x 是可執(zhí)行權(quán)力
- 拷貝項(xiàng)目中的描述文件 到ipa包內(nèi)容里
- 修改info.plist 的Bundle ID!
// 項(xiàng)目中的plist 的ID,放到ipa包里的plist 里
- 生成plist的權(quán)限文件, 拷貝到Payload文件夾內(nèi)
- 簽名整個(gè)APP:cd 到 Payload的文件目錄
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" --no-strict --entitlements=en.plist WeChat.app
- 打包其實(shí)就是一個(gè)zip:cd 到包含 Payload的文件目錄
$ zip -ry WeChat.ipa Payload
越獄版的微信ipa包
-
步驟3:
對(duì) Frameworks 進(jìn)行簽名!
// cd 到Frameworks 文件夾下
// $ ls //查看此文件內(nèi)容
zhangmeng@zmMacPro ~/Desktop/iOS第二期 安全攻防/ipa包/001重簽名測(cè)試/微信-6.6.5(越獄應(yīng)用)/Payload/WeChat.app/Frameworks $ ls
MMCommon.framework WCDB.framework
MultiMedia.framework mars.framework
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" MMCommon.framework
MMCommon.framework: replacing existing signature
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" MultiMedia.framework
MultiMedia.framework: replacing existing signature
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" WCDB.framework
WCDB.framework: replacing existing signature
$ codesign -fs "iPhone Developer: dechang li (T2X4P24XF2)" mars.framework
mars.framework: replacing existing signature
-
步驟4:
給可執(zhí)行文件執(zhí)行權(quán)限!
//此文件在ipa包內(nèi)容里
image.png
// $ chmod +x WeChat //x 是可執(zhí)行權(quán)力
-
步驟5:
拷貝項(xiàng)目中的描述文件 到ipa包內(nèi)容里
image.png
-
步驟7:
生成plist的權(quán)限文件, 拷貝到Payload文件夾內(nèi)
7.1 新建一個(gè)plist文件疟呐,命名為en(命名隨意)脚曾,鼠標(biāo)右鍵Open As --> Source Code 編輯plist文件
image.png
7.2 使用命令: $ security cms -D -i + 描述文件路徑(齒輪配置文件, mobileprovision) //查看描述文件信息,拷貝Entitlements里面的
<dict>
<key>keychain-access-groups</key>
<array>
<string></string>
</array>
<key>get-task-allow</key>
<true/>
<key>application-identifier</key>
<string></string>
<key>com.apple.developer.team-identifier</key>
<string></string>
<key>aps-environment</key>
<string>development</string>
</dict>
7.3 拷貝到 en.plist 內(nèi)启具,鼠標(biāo)右鍵Open As --> Property List 重新打開文件本讥,即生成了 plist文件
7.4 把 en.plist 拷貝到 Payload文件夾內(nèi)
//-------------------- 利用Xcode重簽名 --------------------
1、新建一個(gè)工程,然后執(zhí)行build拷沸,讓Products文件夾下面的app變黑色查;
2、拷貝微信的app文件包到新建工程撞芍,替換新工程里面的app文件包秧了,包名稱保持一致;
3序无、干掉插件Plugins文件夾里面的內(nèi)容验毡;
4、Watch 直接干掉帝嗡;
5晶通、對(duì) Frameworks 進(jìn)行簽名;
$codesign -fs "證書" 需要簽名的文件
6丈探、給可執(zhí)行文件執(zhí)行權(quán)限录择;
$chmod +x WeChat
7、修改ipa包內(nèi)info.plist 的 Bundle identifier碗降,要和項(xiàng)目一直隘竭;
8、Xcode運(yùn)行讼渊。