iOS應用重簽名技術

了解了iOS應用簽名之后尺锚,發(fā)現(xiàn)蘋果就是通過簽名來驗證我們的證書能否能簽名我們的App纱注,那我們能不能用我們的證書對別人的App進行簽名呢腮猖?理論上只要我們有了這個證書就能對這個App進行簽名,那么我們就可以用我們的證書對其他App進行簽名身害。

1味悄、App的簽名是由誰簽的?

平常我們使用Xcode開發(fā)塌鸯,我們基本上沒有關注過這些侍瑟,其實App的簽名是由我們Mac系統(tǒng)里面的CodeSign工具完成的,只不過Xcode幫我們干了這些事情而已丙猬。

2涨颜、準備工作

首先我們需要一個砸過殼的App,砸過殼的App就是越獄應用茧球,可以前往PP助手下載庭瑰。
使用otool -l WeChat | grep cry可以查看是否砸過殼

localhost : ~/Documents/SecurityProducts/003-CodeSign應用重簽名/ipa/微信-7.0.5(越獄應用)/Payload/WeChat.app : otool -l WeChat | grep cry
     cryptoff 16384
    cryptsize 100237312
      cryptid 0  
注意:cryptid
  • 0代表未加密(也就是說砸過殼的)
  • 1代表加密的

3、如何使用CodeSign進行重簽名抢埋?

注意此方式安裝的微信登錄后會被封號

下方有詳細流程截圖弹灭。

步驟如下:

  • 需要一個砸過殼的WeChat.ipa
  • 解壓 WeChat.ipa
  • 找到 WeChat.app拷貝到一個新建文件夾WeChatCodeSign
  • 右鍵顯示包內容刪除無法簽名的插件(PlugInsWatch
  • 終端輸入 security find-identity -v -p codesigning 尋找證書,拷貝需要使用的證書名稱
  • 進入WeChat.app/FrameWork文件夾羹令,然后對文件夾下面的所有Framework簽名 鲤屡,終端進入當前目錄,輸入簽名代碼 codesign -fs "證書名稱" xxx.framework
  • 新建一個Xcode項目WeChatDemo福侈,并且運行到手機上一次
  • WeChatDemo中找到 WeChatDemo.app
  • 右鍵顯示包內容酒来,拷貝描述文件embedded.mobileprovisionWeChatCodeSign下,并且拷貝到WeChat.app中一份肪凛。
  • WeChatDemo中堰汉,新建一個plist文件ent.plist(命名隨意)
  • 終端輸入security cms -Di embedded.mobileprovision 打開 embedded.mobileprovision
  • 拷貝embedded.mobileprovisionkeyEntitlementsValue(簽名信息)到ent.plist
  • 拷貝ent.plistWeChatCodeSign
  • 進入WeChat.app 下找到info.plist 更改成WeChatDemobundle id
  • 最后進入WeChatCodeSign目錄下,對 App包進行簽名伟墙,終端輸入 codesign -fs "證書名稱" --no-strict --entitlements=ent.plist WeChat.app
  • Command + Shift + 2 安裝
詳細流程截圖

下載好的越獄的 WeChat.ipa

WeChat.ipa

我們下載好了這樣一個 WeChat.ipa 包后翘鸭,解壓 ipa 包然后找到 WeChat.app 拷貝到一個新建文件夾WeChatCodeSign

WeChat.app

WeChat.app右鍵顯示包內容刪除無法簽名的插件(PlugInsWatch

刪除無法簽名的插件

終端輸入 security find-identity -v -p codesigning 尋找證書,拷貝需要使用的證書名稱("Apple Development: ZZZZZZ (ABENW7IAHK)"),

注意:這里有一個坑戳葵,如果你有多個同名證書就乓,但是證書前面的編號不同,記得刪除無用的證書拱烁,不然簽名時候會報:簽名時使用了模棱兩可的證書生蚁。
尋找證書

終端輸入codesign -fs "證書名稱" xxx.framework,依次對WeChat.app/FrameWork下的xxx.frameWork簽名

對FrameWork簽名

新建工程WeChatDemo,真機編輯或運行一次戏自,找到WeChatDemo.app拷貝embedded.mobileprovisionWeChatCodeSign下邦投,并且拷貝到WeChat.app中一份。

WeChatDemo

WeChatCodeSign

WeChatDemo中擅笔,新建一個plist文件ent.plist(命名隨意)

新建ent.plist

終端輸入security cms -Di embedded.mobileprovision 打開 embedded.mobileprovision 并拷貝embedded.mobileprovisionkeyEntitlementsValue(簽名信息)到ent.plist

image.png

As Open Source

替換

拷貝ent.plistWeChatCodeSign下志衣,然后進入WeChat.app 下找到info.plist 更改成WeChatDemobundle id屯援,最后進入WeChatCodeSign目錄下,終端輸入 codesign -fs "證書名稱" --no-strict --entitlements=ent.plist WeChat.appApp包進行簽名

簽名

Command + Shift + 2 安裝WeChat

安裝WeChat

4念脯、使用Xcode進行重簽名

使用Xcode重簽名的方式其實和我們手動簽名基本差不多狞洋,只是Xcode幫我們完成了將描述文件拷貝到.app包里,然后生成ent.plist和最后對App包的簽名而已和二,下方的工作還是需要做的徘铝。

  • 上述同樣的準備工作
  • 刪除該刪除的文件
  • 簽名FrameWork包
  • 然后將WeChat.app覆蓋我們新建工程的.app
  • 運行就可以了
注意:
這有一個坑:使用Xcode重簽名的時候耳胎,新建的功能一定要和WeChat同名惯吕,不然Xcode讀取WeChatMacOView文件時會因為找不到而不執(zhí)行替換的包。

5怕午、使用Shell進行重簽名

使用Shell關于Shell)重簽名也就是把上面繁瑣的步驟寫成一個腳本讓Xcode去執(zhí)行一步到位废登。

重簽名腳本如下:

# ${SRCROOT} 它是工程文件所在的目錄
TEMP_PATH="${SRCROOT}/Temp"
#資源文件夾,我們提前在工程目錄下新建一個APP文件夾郁惜,里面放ipa包
ASSETS_PATH="${SRCROOT}/APP"
#目標ipa包路徑
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
#清空Temp文件夾
rm -rf "${SRCROOT}/Temp"
mkdir -p "${SRCROOT}/Temp"



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


#----------------------------------------
# 2. 將解壓出來的.app拷貝進入工程下
# BUILT_PRODUCTS_DIR 工程生成的APP包的路徑
# TARGET_NAME target名稱
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "app路徑:$TARGET_APP_PATH"

rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"



#----------------------------------------
# 3. 刪除extension和WatchAPP.個人證書沒法簽名Extention
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"



#----------------------------------------
# 4. 更新info.plist文件 CFBundleIdentifier
#  設置:"Set : KEY Value" "目標文件路徑"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"


#----------------------------------------
# 5. 給MachO文件上執(zhí)行權限
# 拿到MachO文件的路徑
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
#上可執(zhí)行權限
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

#簽名
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi

拷貝上述內容堡距,打開終端輸入touch appShell.sh新建一個Shell文件,再輸入vim appShell.sh打開文件,按i后再粘貼內容兆蕉,最后按Esc輸入:wq保存并退出羽戒。

然后將我們的appShell.sh拷貝到我們剛才的WeChatDemo下,在WeChatDemo下新建App文件夾將WeChat.ipa放入虎韵。

WeChatDemo

WeChatDemo下添加New Run Script Phase

New Run Script Phase

./appShell.sh

我們運行一下真機易稠,咦,報錯了包蓝,告訴我們運行appShell.sh權限不足

權限不足

那我們使用終端ls -l 看看權限

tancheng@localhost ~/Documents/SecurityProducts/003-CodeSign應用重簽名/代碼/WeChatDemo : ls -l
total 8
drwxr-xr-x     3      tancheng     staff        96          10 17 11:07        APP
drwxr-xr-x    13      tancheng     staff       416          10 19 10:21        WeChatDemo
drwxr-xr-x     5      tancheng     staff       160          10 19 10:50        WeChatDemo.xcodeproj
drwxr-xr-x     4      tancheng     staff       128          10 19 10:02        WeChatDemoTests
drwxr-xr-x     4      tancheng     staff       128          10 19 10:02        WeChatDemoUITests
-rw-r--r--     1      tancheng     staff      1979          10 19 10:40        appShell.sh

看明白了權限說明驶社,搞清楚了改變權限的方法,我們終端試一下测萎,


更改權限

這樣我們看到了權限已經更改了亡电,我們再試試運行一下剛才的代碼發(fā)現(xiàn)我們就成功的運行了WeChat

WeChat運行結果

以上就是iOS應用重簽名的所有內容了硅瞧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末份乒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腕唧,更是在濱河造成了極大的恐慌或辖,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件四苇,死亡現(xiàn)場離奇詭異孝凌,居然都是意外死亡,警方通過查閱死者的電腦和手機月腋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門蟀架,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓣赂,“玉大人,你說我怎么就攤上這事片拍』图” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵捌省,是天一觀的道長苫纤。 經常有香客問我,道長纲缓,這世上最難降的妖魔是什么卷拘? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮祝高,結果婚禮上栗弟,老公的妹妹穿的比我還像新娘。我一直安慰自己工闺,他們只是感情好乍赫,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陆蟆,像睡著了一般雷厂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叠殷,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天改鲫,我揣著相機與錄音,去河邊找鬼溪猿。 笑死钩杰,一個胖子當著我的面吹牛,可吹牛的內容都是我干的诊县。 我是一名探鬼主播讲弄,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼依痊!你這毒婦竟也來了避除?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胸嘁,失蹤者是張志新(化名)和其女友劉穎瓶摆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體性宏,經...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡群井,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毫胜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片书斜。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡诬辈,死狀恐怖,靈堂內的尸體忽然破棺而出荐吉,到底是詐尸還是另有隱情焙糟,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布样屠,位于F島的核電站穿撮,受9級特大地震影響,放射性物質發(fā)生泄漏痪欲。R本人自食惡果不足惜悦穿,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勤揩。 院中可真熱鬧咧党,春花似錦秘蛔、人聲如沸陨亡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽负蠕。三九已至,卻和暖如春倦畅,著一層夾襖步出監(jiān)牢的瞬間遮糖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工叠赐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留欲账,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓芭概,卻偏偏與公主長得像赛不,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子罢洲,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355