iOS應(yīng)用重簽名

首先理解一件事:簽名是可以被替換的。
簽名:原始數(shù)據(jù)->hash->加密
重簽名:原始數(shù)據(jù)->hash->加密
這也就是簽名可以被替換的原因。

一阅签、codesign重簽名

codesign安裝Xcode就有霉撵,Xcode也是用的這個(gè)工具芹助。
簽名包含:
資源文件
macho文件
framework
...

1.1終端命令

1.1.1查看簽名信息

codesign -vv -d xxx.app
image.png

1.1.2列出鑰匙串里可簽名的證書

security find-identity -v -p codesigning
image.png

1.1.3otool分析macho文件信息并導(dǎo)出到指定文件

otool -l xxx > ~/Desktop/machoMessage.txt

其中cryptid0表示沒有用到加密算法(也就是脫殼的), 其它則表示加密挟纱。

image.png

也可以直接過濾查看是否砸殼:

otool -l xxx | grep cryptid

1.1.4強(qiáng)制替換簽名

codesign –fs “證書串” 文件名

codesign -fs "Apple Development: xxx@qq.com (9AN9M5S786)" andromeda.framework

1.1.5給文件添加權(quán)限

chmod +x 可執(zhí)行文件

1.1.6查看描述文件

security cms -D -i ../embedded.mobileprovision

1.1.7macho簽名

codesign -fs “證書串” --no-strict --entitlements=權(quán)限文件.plist APP包

1.1.8將輸入文件壓縮為輸出文件

zip –ry 輸出文件 輸入文件 

1.1.9越獄的手機(jī)dump app

// 建立連接
sh usbConnect.sh
//連接手機(jī)
sh usbX.sh
//查看進(jìn)程
ps -A
//找到微信進(jìn)程羞酗,拿到路徑
ps -A | grep WeChat
//進(jìn)入目標(biāo)文件夾拷貝微信(這里是沒有砸殼的)
scp -r -p 12345  root@localhost:微信路徑 ./

1.2codesign命令重簽名

這里以砸過殼的微信(7.0.8)為例,使用免費(fèi)開發(fā)者賬號(hào)重簽名微信紊服,然后安裝到非越獄手機(jī)上檀轨。

  1. 解壓縮.ipa包,Payload中找到.app顯示包內(nèi)容欺嗤。
    ??由于免費(fèi)證書沒有辦法簽名PlugInsWatch参萄,直接將這兩個(gè)文件夾刪除。

  2. 簽名Frameworks
    逐個(gè)簽名Frameworks目錄下的framework(使用自己本機(jī)的免費(fèi)證書)

codesign -fs "Apple Development: xxx@qq.com (9AN9M5S786)" andromeda.framework
image.png
  1. 確保要簽名的appmacho文件的可執(zhí)行權(quán)限
?  WeChat.app ls -l WeChat
-rwxr-xr-x@ 1 zaizai  staff  126048560 10 16  2019 WeChat
  1. 獲取免費(fèi)賬號(hào)對(duì)應(yīng)的描述文件
    創(chuàng)建空工程使用免費(fèi)賬號(hào)&真機(jī)編譯獲運(yùn)行取描述文件煎饼。


    image.png

這個(gè)時(shí)候描述文件已經(jīng)拷貝到手機(jī)中去了讹挎,并且已經(jīng)信任設(shè)備。
將獲取到的描述文件拷貝到 WeChatapp包中吆玖。

5.修改bundleId
找到WeChat info.plist修改BundleId為我們生成描述文件的BundleId

image.png

  1. 獲取描述文件的權(quán)限
security cms -D -i embedded.mobileprovision

找到對(duì)應(yīng)的權(quán)限Entitlements:

    <dict>

                <key>application-identifier</key>
        <string>S48J667P47.com.guazai.TestWeChat</string>

                <key>keychain-access-groups</key>
        <array>
                <string>S48J667P47.*</string>
        </array>

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

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

    </dict>

創(chuàng)建一個(gè).plist文件筒溃,將權(quán)限內(nèi)容粘貼進(jìn)去:

image.png

內(nèi)容如下:

<?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">
<!--
   Entitlements.plist
   TestWeChat

   Created by ZP on 2021/4/19.
   Copyright (c) 2021 ___ORGANIZATIONNAME___. All rights reserved.
-->
<plist version="1.0">
<dict>

            <key>application-identifier</key>
    <string>S48J667P47.com.guazai.TestWeChat</string>

            <key>keychain-access-groups</key>
    <array>
            <string>S48J667P47.*</string>
    </array>

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

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

</dict>
</plist>

將權(quán)限文件(Entitlements.plist)拷貝到和PayloadWeChat.app同一目錄

  1. 簽名Wechat
codesign -fs "Apple Development: xxx@qq.com (9AN9M5S786)" --no-strict --entitlements=entitlements.plist WeChat.app

這里entitlments參數(shù)需要和上一步生成的權(quán)限文件名稱對(duì)應(yīng)上。

image.png

這個(gè)時(shí)候簽名信息就已經(jīng)替換了:


image.png

這個(gè)時(shí)候通過XcodeWeChat.app包安裝到手機(jī)就已經(jīng)能正常安裝了沾乘。

通過debug->attach to process->WeChat就可以調(diào)試微信了:

image.png

??這個(gè)時(shí)候不要用自己的常用賬號(hào)登錄重簽名的微信(有可能被封號(hào))怜奖。

重簽名步驟:

  1. 刪除插件以及帶有插件的.app包(如:watch
    PlugInsWatch文件夾
  2. 對(duì)Frameworks中的庫重簽名
    codesign -fs "Apple Development: xxx@qq.com (9AN9M5S786)" andromeda.framework
  3. 對(duì)可執(zhí)行文件+X(可執(zhí)行)權(quán)限
    chmod +x WeChat
  4. 添加描述文件(創(chuàng)建工程,真機(jī)編譯得到意鲸,并且需要運(yùn)行將描述文件安裝到手機(jī))
  5. 替換info.plist BundleIdBundleId要和描述文件中的一致)
  6. 通過授權(quán)文件(entitlments)重簽名.app
    a.獲取描述文件權(quán)限內(nèi)容security cms -D -i embedded.mobileprovision
    b.將描述文件權(quán)限內(nèi)容拷貝生成plist文件Entitlements.plist
    c.用全線文件簽名App包:codesign -fs "Apple Development: xxx@qq.com (9AN9M5S786)" --no-strict --entitlements=entitlements.plist WeChat.app

二烦周、利用Xcode重簽名調(diào)試三方應(yīng)用

1.新建和微信同名工程WeChat

image.png

2.將空工程運(yùn)行到真機(jī)上。

3.解壓.ipa包怎顾,并且刪除WatchPlugIns文件夾

4.重簽名Frameworks

5.修改BundleId

6.將修改后的WeChat.app替換空工程的Products.app

image.png

7.運(yùn)行
這個(gè)時(shí)候Products工程中有WeChat.app读慎,Xcode認(rèn)為有就直接使用這個(gè)了。這個(gè)時(shí)候就可以調(diào)試了(不需要attach

image.png

??在某些系統(tǒng)下會(huì)出現(xiàn)啟動(dòng)重簽名微信黑屏槐雾,建議通過腳本重簽名夭委。

三、SHELL腳本

shell是一種特殊的交互式工具募强,它為用戶提供了啟動(dòng)程序株灸、管理文件系統(tǒng)中文件以及運(yùn)行在系統(tǒng)上的進(jìn)程的途徑。Shell一般是指命令行工具擎值。它允許你輸入文本命令慌烧,然后解釋命令,并在內(nèi)核中執(zhí)行鸠儿。
Shell腳本屹蚊,也就是用各類命令預(yù)先放入到一個(gè)文本文件中厕氨,方便一次性執(zhí)行的一個(gè)腳本文件。

腳本切換

chsh -s /bin/zsh

執(zhí)行腳本的幾種方式:
有如下腳本:

mkdir shell1
cd shell1
touch test.txt
image.png
  1. source FileName
    作用:在當(dāng)前shell環(huán)境中讀取并執(zhí)行FileName中的命令
    特點(diǎn):命令可以強(qiáng)行讓一個(gè)腳本去立即影響當(dāng)前的環(huán)境(一般用于加載配置文件)汹粤。
    命令會(huì)強(qiáng)制執(zhí)行腳本中的全部命令命斧,而忽略文件的權(quán)限。

  2. bash FileName嘱兼、zsh FileName
    作用:重新建立一個(gè)子shell(進(jìn)程)国葬,在子shell中執(zhí)行腳本里面的句子。當(dāng)前環(huán)境沒有變化芹壕。

  3. ./FileName
    作用:讀取并執(zhí)行文件中的命令汇四。但有一個(gè)前提,腳本文件需要有可執(zhí)行權(quán)限哪雕。

MAC中shell種類

cd /private/etc
cat shells
image.png
  • bashmacOS默認(rèn)shell(老系統(tǒng))船殉,新系統(tǒng)切換為zsh了。
  • csh:被tcsh替換了
  • dash:比bash小很多斯嚎,效率高利虫。
  • ksh:兼容bash
  • sh:已經(jīng)被bash替換了
  • tcsh:整合了csh提供了更多功能
  • zsh:替換了bash

四、用戶組&文本權(quán)限

UnixLinux都是多用戶堡僻、多任務(wù)的系統(tǒng)糠惫,所以這樣的系統(tǒng)里面就擁有了用戶、組的概念钉疫。那么同樣文件的權(quán)限也就有相應(yīng)的所屬用戶和所屬組硼讽。
windows不同的是unixlinux牲阁、macOS都是多用戶的系統(tǒng):

Windows與macOS目錄結(jié)構(gòu)對(duì)比

4.1mac文件屬性

image.png

4.2權(quán)限

權(quán)限有10位:

drwx-r-xr-x
  • 1位文件類型d/-
    d目錄(directory)
    -文件
  • 后面9位,文件權(quán)限:
    [r]:read固阁,讀
    [w]:write,寫
    [x]:execute城菊,執(zhí)行
    ??這三個(gè)權(quán)限的位置不會(huì)變备燃,依次是rwx。出現(xiàn)-對(duì)應(yīng)的位置代表沒有此權(quán)限凌唬。
    • 一個(gè)文件的完整權(quán)限分為三組:
      第一組:文件所有者權(quán)限
      第二組:這一組其它用戶權(quán)限
      第三組:非本組用戶的權(quán)限

4.3權(quán)限改變chmod

文件權(quán)限的改變使用chmod命令并齐。
設(shè)置方法有兩種:數(shù)字類型改變 和 符號(hào)類型改變。
文件權(quán)限分為三種身份:[user][group][other]
三個(gè)權(quán)限:[read] [write] [execute]

4.3.1數(shù)字類型

各個(gè)權(quán)限數(shù)字對(duì)照:r:4(0100) w:2(0010) x:1(0001)客税,這么設(shè)計(jì)的好處是可以按位或况褪。與我們開發(fā)中位移枚舉同理。
如果一個(gè)文件權(quán)限為[!–rwxr-xr-x]更耻,則對(duì)應(yīng):
User : 4+2+1 = 7
Group: 4+0+1 = 5
Other: 4+0+1 = 5
命令為:chmod 755 文件名

數(shù)字與權(quán)限對(duì)應(yīng)表:

image.png

0代表沒有任何權(quán)限测垛。

4.3.2符號(hào)類型

chmod [u(User)、g(Group)秧均、o(Other)赐纱、a(All)] [+(加入)脊奋、-(除去)、=(設(shè)置)] [r疙描、w、x] 文件名稱
例:

chmod a+x test.txt

默認(rèn)是all讶隐。

五起胰、通過shell腳本自動(dòng)重簽名

腳本實(shí)現(xiàn)邏輯和codesign邏輯相同。
完整腳本如下:

#臨時(shí)解壓目錄
TEMP_PATH="${SRCROOT}/Temp"
#資源文件夾巫延,我們提前在工程目錄下新建一個(gè)APP文件夾效五,里面放ipa包(砸殼后的)
ASSETS_PATH="${SRCROOT}/APP"
#目標(biāo)ipa包路徑
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"


#清空&創(chuàng)建Temp文件夾
rm -rf TEMP_PATH
mkdir -p TEMP_PATH


# 1. 解壓IPA到Temp目錄下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解壓后的臨時(shí)的APP的路徑
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")

#2. 將解壓出來的.app拷貝進(jìn)入工程下
#2.1拿到當(dāng)前工程目標(biāo)Target路徑
# BUILT_PRODUCTS_DIR 工程生成的APP包的路徑
# TARGET_NAME target名稱
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "app path:$TARGET_APP_PATH"

#2.2刪除工程本身的Target,將解壓的Target拷貝到工程本身的路徑
rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"


# 3. 刪除extension和WatchAPP炉峰,個(gè)人證書沒法簽名Extention
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"



# 4. 更新info.plist文件 CFBundleIdentifier
#  設(shè)置:"Set : KEY Value" "目標(biāo)文件路徑"畏妖,PlistBuddy是蘋果自帶的。
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"

#刪除UISupportedDevices設(shè)備相關(guān)配置(越獄手機(jī)dump ipa包需要?jiǎng)h除相關(guān)配置)
/usr/libexec/PlistBuddy -c "Delete :UISupportedDevices" "$TARGET_APP_PATH/Info.plist"

# 5. 給MachO文件上執(zhí)行權(quán)限
# 拿到MachO文件的名稱
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
#上可執(zhí)行權(quán)限
chmod +x "$TARGET_APP_PATH/$APP_BINARY"



# 6. 重簽名第三方 FrameWorks
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
then
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
#簽名 --force --sign 就是-fs
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi

使用方式
1.創(chuàng)建空工程疼阔,編譯運(yùn)行空工程至真機(jī)上(信任證書)戒劫。
2.將appResign.sh腳本拷貝到工程根目錄(要有可執(zhí)行權(quán)限)。
3.在工程根目錄創(chuàng)建APP文件夾婆廊,并將微信.ipa拷貝到APP文件夾迅细。
4.配置腳本

image.png

5.運(yùn)行工程
image.png

這個(gè)時(shí)候就可以調(diào)試微信了

六、如何調(diào)試一個(gè)任意app?

6.1獲取對(duì)應(yīng)ipa

使用越獄手機(jī)dump ipa

下載舊版本ipa包可以通過抓取iTunes的下載鏈接改版本號(hào)(后綴是app的版本淘邻,直接改版本)
iTunes

6.2砸殼

砸殼后由于是dump越獄手機(jī)上的正版包茵典,所以需要將info.plist中支持的設(shè)備信息(UISupportedDevices)刪除。(當(dāng)然可以寫在腳本中)

#刪除UISupportedDevices設(shè)備相關(guān)配置(越獄手機(jī)dump ipa包需要?jiǎng)h除相關(guān)配置)
/usr/libexec/PlistBuddy -c "Delete :UISupportedDevices" "$TARGET_APP_PATH/Info.plist"

刪除完畢保存重新打包ipa

zip -ry WeChat1.ipa Payload/

總結(jié)

  • 重簽名
    • codesign重簽名
      • 刪除不能簽名的文件:Extensionwatch(包含了Extension
      • 重簽名Frameworks(里面的庫)
      • MachO添加可執(zhí)行權(quán)限
      • 修改Info.plist文件(BundleID
      • 拷貝描述文件(該描述文件要在iOS真機(jī)中信任過)
      • 利用描述文件中的權(quán)限文件簽名整個(gè)App
    • Xcode重簽名
      • 刪除不能簽名的文件:Extensionwatch(包含了Extension
      • 重簽名Frameworks(里面的庫)
      • MachO添加可執(zhí)行權(quán)限
      • 修改Info.plist文件(BundleID
      • App包拷貝進(jìn)入Xcode工程目錄中(剩下的交給Xcode
  • shell
    • 切換shell
      • $chsh -s shell路徑
      • 現(xiàn)在macOSshell默認(rèn)zsh(早期bash
      • 配置文件 zsh:.zshrc bash:.bash_profile
    • 文件權(quán)限&用戶組
      • 每個(gè)文件都有所屬的用戶宾舅、組统阿、其它
      • 文件權(quán)限
        • 歸屬:用戶、組筹我、其它
        • 權(quán)限 :寫扶平、讀、執(zhí)行
      • 修改權(quán)限chmod
        • 數(shù)字:r:4 w:2 x:1
          • chmod 751 文件名
            • user4+2+1 = 7
            • group4+0+1 = 5
            • other0+0+1 = 1
        • 字符
          • 歸屬:u(用戶) g(組) o(其它) a(所有)
          • +(添加) -(去掉) =(設(shè)置)
          • 默認(rèn)achmod + x

PlistBuddy介紹和使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末崎溃,一起剝皮案震驚了整個(gè)濱河市蜻直,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袁串,老刑警劉巖概而,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異囱修,居然都是意外死亡赎瑰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門破镰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來餐曼,“玉大人压储,你說我怎么就攤上這事≡雌” “怎么了集惋?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長踩娘。 經(jīng)常有香客問我刮刑,道長,這世上最難降的妖魔是什么养渴? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任雷绢,我火速辦了婚禮,結(jié)果婚禮上理卑,老公的妹妹穿的比我還像新娘翘紊。我一直安慰自己,他們只是感情好藐唠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布帆疟。 她就那樣靜靜地躺著,像睡著了一般中捆。 火紅的嫁衣襯著肌膚如雪鸯匹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天泄伪,我揣著相機(jī)與錄音殴蓬,去河邊找鬼。 笑死蟋滴,一個(gè)胖子當(dāng)著我的面吹牛染厅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播津函,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肖粮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尔苦?” 一聲冷哼從身側(cè)響起涩馆,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎允坚,沒想到半個(gè)月后魂那,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稠项,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年涯雅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片展运。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡活逆,死狀恐怖精刷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蔗候,我是刑警寧澤怒允,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站琴庵,受9級(jí)特大地震影響误算,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迷殿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咖杂。 院中可真熱鬧庆寺,春花似錦、人聲如沸诉字。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壤圃。三九已至陵霉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伍绳,已是汗流浹背踊挠。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冲杀,地道東北人效床。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像权谁,于是被迫代替她去往敵國和親剩檀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本文我們將重簽名一個(gè)App旺芽,實(shí)現(xiàn)將他人的App安裝到自己手機(jī)上沪猴,然后進(jìn)行部分的調(diào)試工作。 需要準(zhǔn)備的資料: 1采章、安...
    裸奔的蝸牛z閱讀 1,154評(píng)論 1 0
  • 了解了iOS應(yīng)用簽名之后运嗜,發(fā)現(xiàn)蘋果就是通過簽名來驗(yàn)證我們的證書能否能簽名我們的App,那我們能不能用我們的證書對(duì)別...
    有夢想的程序員閱讀 817評(píng)論 1 1
  • 簽名與重簽名 簽名:原始數(shù)據(jù) --> HASH --> 原來的證書加密重簽名:原始數(shù)據(jù) -->HASH --> 現(xiàn)...
    木揚(yáng)音閱讀 1,748評(píng)論 2 4
  • 七律·長征作者: 毛澤東紅軍不怕遠(yuǎn)征難共缕,萬水千山只等閑洗出。五嶺逶迤(wēi yí)騰細(xì)浪,烏蒙磅礴(páng bó)...
    冰雨9527閱讀 791評(píng)論 0 0
  • 終端命令(相關(guān)的一些指令) ?$security find-identity -v -p codesigning列...
    Devil_Chen閱讀 23,194評(píng)論 1 16