日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在蘋果的日常開發中,真機測試與打包等很多流程都會牽扯到各種證書,CertificateSigningRequest,p12等。但是很多相應的開發者并不理解IOS App應用簽名的原理和流程。今天著重講解一下此內容。

思考

在蘋果的iOS系統出來之前,以前的主流程mac OS/Window軟件存在著安全隱患,盜版軟件,病毒入侵等,蘋果希望能解決類似的問題,保證每一個安裝在蘋果手機上的app都是經過蘋果官方允許的,怎么保證呢?

一、iOS 應用簽名原理

1 代碼簽名

要想回答上面“思考”的答案,首先我們講解一個概念。代碼簽名:是對可執行腳本或者文件進行數字簽名,用來保證軟件在簽名后未被損害或者修改的措施。

2 簡單的代碼簽名

最簡單的驗證方式是通過蘋果官方生成非對稱加密的一對公私鑰。私鑰保存在Appstore的服務器,而公鑰保存在iOS系統中,蘋果后臺用私鑰來對App數據進行簽名,iOS系統下載此APP后,用公鑰來驗證簽名。若驗證成功,說明該App未被更改,可以安裝到手機中,反之,則不行。

上面的驗證可以解決大部分App入駐手機中的場景,但是對于我們開發蘋果應用的開發者而言,我們也可以直接通過真機測試進入到用戶的手機,而且蘋果也有企業用戶渠道,所以如果想要全方面的安全的安裝蘋果App,就無法通過簡單的代碼簽名做到,那么蘋果又是通過怎樣的方案呢?

3 雙層簽名

下面流程圖

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

解釋如下:

  1. 首先Mac電腦通過CSR文件申請證書(通過公鑰M)
  2. 蘋果服務器返回公鑰M以及公鑰M算出的哈希值(也就是簽名)
  3. App包里包括可執行文件MachO,然后對MachO通過私鑰M簽名(App簽名)并將證書放到App中
  4. 然后將App放入到iphone中。首先將App中的證書拿出來解析,誰能解析App的證書,因為App的證書是由蘋果服務器拿著私鑰A中進行加密的,也只有公鑰A能解密出來,也就是iphone中保存的公鑰A,通過驗證查看App是否被修改;然后再去驗證App的簽名,怎么驗證App的簽名呢,(App簽名是通過Mac 電腦的私鑰M進行加密的,也只有證書中的公鑰M進行解密)就這樣經過了兩層驗證!

通過上面的講解,是不是發現特別的安全了?其實不然,因為大部分的應用都是通過AppStore進行安裝,如果通過上面的過程可以安裝所有的蘋果設備,那么還需要要Appstore干嘛,這時候蘋果防止濫用App,就做了兩條限制:

  1. 經過蘋果服務器中注冊過的設備
  2. 簽名只能具體到某一個App進行簽名(推送,授權等)

經過上面的講解,也引出了另一個概念-描述文件。

4 描述文件

描述文件又稱為Provisioning profile,一般包括了三樣東西:

  1. 證書
  2. AppId
  3. 設備

當我們打包或者是真機運行的時候,通過證書來驗證程序的安全性和合法性。

并且在App的使用中,蘋果還想控制App里面的推送/iCloud及后臺運行等這些的權限,蘋果將這些權限開關統稱為授權文件-Entitlements,并將文件放在了描述文件中。

在開發中,編譯一個App后,會用本地的私鑰M對App進行簽名,同時從蘋果服務器得到的描述文件打包進App里為embeded.mobileprovision,把App安裝在手機中,最后系統進行來驗證。

上面的圖也會變為如下:流程就是將描述文件加入,解決上面的問題?

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

5 拓展

首先我們做一個demo講解App包內容。

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

  • 首先看工程文件1-products文件,點擊打開Demo.app,顯示包內容,緊接著出現2-內容
  • 查看有_Codesignature,是資源文件簽名;embedded.mobileprovision是上面說的描述文件;另外我們看下可執行代碼,也就是MachO文件,放在了001--Demo中,也就是黑色的一個,通過MachOView中可以查看MachO文件。打開之后,代碼簽名放在MachO中如下:
iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

也就是Code Signature--代碼簽名。

但是我們是做逆向開發,所以我們要學會應用重命名!!!

二、iOS 應用重簽名

在講解重簽名中,首先學下終端命令:

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

當我們從AppStore上下載App后,如果做了相應的更改,又怎么會在手機上運行起來呢?這就需要應用重簽名,并且Xcode給我們提供了重簽名技術-codesign技術。

拓展我們首先來講解一下怎么獲取應用的ipa包?

  1. 助手里面下載
  2. 越獄手機里面進行拷貝
  3. iTunes下載(12.6.3)

1 下面我們將以在iTunes 12.6.3 下載了兩個版本的微信,一個為正版,一個為盜版的分別進行簽名!

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

通過微信-6.7.3(越獄應用)顯示包內容,看出對應的子目錄,查看playload文件夾,發現WeChat.app

2然后通過終端命令,otool -l WeChat | grep crypt 查看篩選后的cryp,得到如下:

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

通過上面的發現cryptid = 0 代表是該App不是加密的,非0時代表是加密的。假如cryptid=1 代表是用1這種方式加密,不代表用1加密。

上面顯示為什么有兩個cryptid = 0 ,下面的輸入命令解釋了為何有兩個:通過命令file WeChat

查看有Mach-O中有兩種架構,Mach-O executable arm_v7和Mach-O 64bit executable arm64兩個,arm_v7代表5s之前的手機,arm64代表的是5s手機之后

3 對越獄微信開始重簽名,因為cryptid = 0

3.1 刪除多余的越獄微信包內容

3.2 對Framework進行重簽名:codesign -fs “自己的開發證書” framework

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

下面是通過終端命令的截圖,完成對截圖內的Framework進行重簽名。

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

3.3 下面要對App包整個重簽,也就需要對描述文件進行重簽。首先將描述性文件放入到越獄微信包下(描述性文件必須要與boundId一致,infoPlist文件查看)

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

開始要權限plist文件,將entitlements.plist放到了weChat.app同等級目錄中

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

我們看WeChat.app中,該刪的已經刪掉,framework重簽,以及描述性文件加進去,下面用entitlements.plist對整個App包簽名。

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

通過命令codesign -fs “自己證書” --no-strict --entitlements=entitlements.plist WeChat.app,對包簽名

緊接著通過查看codesign -d -vv WeChat.app命令查看重簽名成功沒,上面的截圖中,發現證書已經變為了自己的,說明重簽名成功。

結合著xcode與描述性文件,就可以在手機上運行。

上面重簽名的步驟,可能并不是很清晰,又準備了一個總結如下:

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

三、拓展

3.1 Shell腳本

Shell腳本為用戶提供了啟動程序,管理系統的文件以及運行在系統上進程的途徑。Shell在開發中一般指命令行工具,它允許輸入文本的命令,然后解釋命令,最后在內核中執行。Shell腳本,也是用各類命令預先放入到文件中,方便一次性執行的腳本文件。

下面我們用demo方式講解shell命令:

首先通過命令創建文件夾,并在文件夾下創建“國孩”文本

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

查看桌面內容如下:

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

如果想這些命令一次性的執行,可以嘗試寫一個腳本文件

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

然后進入到編輯頁面,將內容輸入進去

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

最后生成文件如下,也能完成目的

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

看到上面之后,使用到了bash,除了bash,還有zsh,Source等命令效果都是一樣的,怎么查看mac支持哪些呢?

通過cd /private/etc,以及cat shells,

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

通過上面的都可以滿足建立123.txt。

但是上面的各個指令也有一定的區別,如下:

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

3.2 用戶、組、權限

也是以Demo的形式進入,在桌面上新建一個Demo文件夾。通過命令ls -l命令查看demo的文件權限

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

前面有一排-rw-r--r--等,大家可能不知道什么意思,下面我們來講解:通過一幅圖

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

上面就是文件類型與權限。

上面的權限可不可以更改呢,對于逆向開發的人員,不是沒有東西是不可以更改的,下面我們來講述下更改文件類型和權限。

通過一幅圖來講解文件更改的基本內容和指令:

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

再以Demo的方式進行講解:

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

更改guohai.sh文件權限,取消所有權限(非讀非寫非執行)

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

再將user,group以及其他設置為可讀,執行如下:

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

還有其他很多命令,大家可以根據上圖自己嘗試。

四、腳本重簽名

學了上面的腳本,就是為了下面所講的內容-腳本重簽名服務的,利用腳本進行重簽名。

首先打開項目工程-->build phases -->選擇如下:創建一個script腳本

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

創建之后

iOS應用簽名原理和流程,怎么用腳本實現重簽名?

 

然后我們按照如下步驟進行腳本簽名

以上就是在項目中使用腳本進行重簽名,代碼程序也是上面的重簽步驟。

今天的iOS應用程序簽名以及應用重簽名的基本內容和操作,希望對大家有所幫助,謝謝閱讀!!!

分享到:
標簽:iOS
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定