免越獄版 iOS搶紅包插件安裝記錄

突然心血來(lái)潮,想找一個(gè)微信搶紅包助手幫助搶紅包,但網(wǎng)上的好多教程都是需要手機(jī)越獄的,偶然間發(fā)現(xiàn)了這篇文章--免越獄版 iOS 搶紅包插件(作者:Swiftyper)--不需要越獄,決定來(lái)試試。

一. 獲取砸殼版的微信安裝包

文中提到有兩種方法:
1、直接在 PP 助手下載
2、使用 Clutch 對(duì)越獄手機(jī)上應(yīng)用進(jìn)行砸殼
第一種較為簡(jiǎn)單,直接在電腦端PP助手中下載越獄版的微信app即可,為了節(jié)省時(shí)間,本人采用的就是這種方式,下載到桌面,解壓出來(lái)一個(gè)文件夾,為了簡(jiǎn)單些,把解壓后的文件夾改名為WeChat。

2.準(zhǔn)備 dylib 動(dòng)態(tài)鏈接庫(kù)

這個(gè)動(dòng)態(tài)的鏈接庫(kù)是由免越獄版 iOS 搶紅包插件的作者提供的,可以直接到他的github上把源碼clone下來(lái)。文章里有命令源碼,這里拷貝過(guò)來(lái):

$ git clone https://github.com/buginux/WeChatRedEnvelop.git
$ cd WeChatRedEnvelop
$ make 
# > Making all for tweak WeChatRedEnvelop…
# ==> Preprocessing Tweak.xm…
# ==> Compiling Tweak.xm (armv7)…
# ==> Compiling XGPayingViewController.m (armv7)…
# ...
# ==> Signing WeChatRedEnvelop…
$ cp .theos/obj/debug/WeChatRedEnvelop.dylib ~/Desktop # 注意是 .theos 目錄,這是個(gè)隱藏目錄

這里要注意的地方是,執(zhí)行make命令之前還有一些準(zhǔn)備工作,否則會(huì)報(bào)各種找不到的bug,可以參考Swiftyper的這篇文章iOS微信搶紅包Tweak安裝教程。
1、安裝theos
Theos 是一個(gè)越獄開(kāi)發(fā)工具包,它可以生成 iOS 越獄APP以及tweak等程序的框架,并提供makefile來(lái)編譯、打包和安裝。
安裝命令:

export THEOS=/opt/theos
# 如果之前已經(jīng)安裝過(guò) theos,請(qǐng)先刪除,然后下載最新版
rm -rf $THEOS
sudo git clone --recursive https://github.com/theos/theos.git $THEOS

這樣,theos就被安裝到了/opt/theos目錄了。
2、配置ldid
ldid是用于對(duì) iOS 可執(zhí)行文具進(jìn)行簽名的工具,可以在越獄 iOS 中替換 Xcode 自帶的簽名工具。從 http://joedj.net/ldid 下載,將其移動(dòng)到 /opt/theos/bin 目錄下,然后設(shè)置可執(zhí)行權(quán)限。

cd <下載ldid的目錄>
sudo mv ldid /opt/theos/bin
sudo chmod 777 /opt/theos/bin/ldid

到此,make之前的準(zhǔn)備工作就完成了,執(zhí)行make命令,執(zhí)行完后動(dòng)態(tài)庫(kù)文件WeChatRedEnvelop.dylib已經(jīng)在桌面了,和砸過(guò)殼的微信app放在同一個(gè)目錄。

檢查依賴項(xiàng)

因?yàn)閃eChatRedEnvelop.dylib用到了系統(tǒng)中沒(méi)有的庫(kù),因此要做依賴檢查,把系統(tǒng)中沒(méi)有的庫(kù)手動(dòng)加進(jìn)來(lái)。使用 macOS 自帶的 otool 工具就可以進(jìn)行依賴項(xiàng)檢查:

WeChatRedEnvelop.dylib (architecture armv7):
    /Library/MobileSubstrate/DynamicLibraries/WeChatRedEnvelop.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.13.0)
    /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.22.0)
    /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.6.21)
    /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
WeChatRedEnvelop.dylib (architecture arm64):
    /Library/MobileSubstrate/DynamicLibraries/WeChatRedEnvelop.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.13.0)
    /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.22.0)
    /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.6.21)
    /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

可以看到,WeChatRedEnvelop.dylib支持兩種架構(gòu),armv7、arm64,分別對(duì)應(yīng)iPhone 的32位機(jī)和64位機(jī)。
除了 substrate 庫(kù),其它依賴的都是系統(tǒng)自帶的庫(kù),文章里講可能會(huì)出現(xiàn)不同的substrate庫(kù),/usr/lib/libsubstrate.dylib或者/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate,不過(guò)處理方法都是一樣的,我的系統(tǒng)里出現(xiàn)的是后者。因?yàn)閟ubstrate 庫(kù)是從越獄手機(jī)中獲取到的,我又沒(méi)有越獄手機(jī),最終在作者的issue(https://github.com/buginux/WeChatRedEnvelop/issues/35)里找到了答案,作者在百度云盤(pán)里共享了一個(gè)libsubstrate.dylib,地址:https://pan.baidu.com/s/1qXBqHSo密碼:efvy,下載下來(lái)備用。
使用install_name_tool 命令修改動(dòng)態(tài)庫(kù)依賴庫(kù)的路徑,指向 app 二進(jìn)制文件的同級(jí)目錄。

$ install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib WeChatRedEnvelop.dylib
#@loader_path代表最終加載的路徑,就這么些,不用改

再次使用otool檢查依賴就會(huì)發(fā)現(xiàn)依賴庫(kù)路徑已經(jīng)變了。

$ otool -L WeChatRedEnvelop.dylib 
WeChatRedEnvelop.dylib (architecture armv7):
    /Library/MobileSubstrate/DynamicLibraries/WeChatRedEnvelop.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.13.0)
    /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.22.0)
    /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.6.21)
    @loader_path/libsubstrate.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
WeChatRedEnvelop.dylib (architecture arm64):
    /Library/MobileSubstrate/DynamicLibraries/WeChatRedEnvelop.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.13.0)
    /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.22.0)
    /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.6.21)
    @loader_path/libsubstrate.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

四.將動(dòng)態(tài)鏈接庫(kù)注入二進(jìn)制文件中

將動(dòng)態(tài)鏈接庫(kù)注入到微信的二進(jìn)制文件中,可以使用開(kāi)源的 optool 工具,可以手動(dòng)下載下來(lái)用Xcode編譯也可以使用命令。命令:

# 因?yàn)?optool 添加了 submodule,因?yàn)樾枰褂?--recuresive 選項(xiàng),將子模塊全部 clone 下來(lái)
$ git clone --recursive https://github.com/alexzielenski/optool.git
$ cd optool
$ xcodebuild -project optool.xcodeproj -configuration Release ARCHS="x86_64" build

編譯可能會(huì)報(bào)錯(cuò),類(lèi)似 “error: There is no SDK with the name or path ‘/path/to/optool/macosx10.9’” 的錯(cuò)誤,使用 Xcode 打開(kāi)工程,在 Build Setting 中選擇正確的 SDK 版本。

現(xiàn)在,捋一下我們準(zhǔn)備的文件:
1、動(dòng)態(tài)鏈接庫(kù) WeChatRedEnvelop.dylib
2、動(dòng)態(tài)庫(kù)依賴的系統(tǒng)中沒(méi)有的庫(kù):libsubstrate.dylib,前面已經(jīng)用install_name_tool把這個(gè)依賴庫(kù)的路徑改了
3、砸過(guò)殼的微信app(桌面上的WeChat文件夾)。
下面將 libsubstrate.dylib 與 WeChatRedEnvelop.dylib 拷貝到解壓后的 WeChat.app 目錄下,這一步很重要。
使用 optool 把 WeChatRedEnvelop.dylib 注入到二進(jìn)制文件中:

$ optool的路徑 install -c load -p "@executable_path/WeChatRedEnvelop.dylib" -t wechat/Payload/WeChat.app/WeChat

注:optool 的路徑在編譯后的/optool/build/Release/路徑下,找到后單獨(dú)拿出來(lái)使用或直接使用都可以。
注:在開(kāi)始打包之前,請(qǐng)先將 WeChat.app 里面的 Watch 目錄刪除,這個(gè)目錄是跟 Watch 有關(guān)的,如果不刪除的話,會(huì)導(dǎo)致后繼的安裝步驟出問(wèn)題。出現(xiàn) A WatchKit app within this app is not a valid bundle 的錯(cuò)誤。

五、打包并重簽名

打包按教程中的步驟來(lái),做過(guò)iOS開(kāi)發(fā)的人基本都會(huì),這里不再贅述。

六、安裝

在 iOS App Signer 完成打包與重簽名后,就可以進(jìn)行安裝了。使用iTunes和Xcode均可,教程里有詳細(xì)介紹。

安裝后,可以看到手機(jī)里有兩個(gè)微信,因?yàn)橹匦潞灻耍琤undleid不同,所以兩個(gè)微信可以共存。和正常一樣登錄安裝過(guò)插件后的微信,在設(shè)置里,可以看到有微信小助手,可以happy的享受自動(dòng)搶紅好的樂(lè)趣了~~~,有圖有真相:

在設(shè)置頁(yè)面關(guān)注作者微信號(hào)可以開(kāi)通高級(jí)功能:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容