微信紅包助手實(shí)現(xiàn)(適合 iOS 非越獄用戶)

項(xiàng)目相關(guān)代碼已經(jīng)放在我的github上,github.com/vaputa/WechatRedEnvelopeAss,歡迎交流

準(zhǔn)備工作

首先需要一個(gè)沒(méi)有殼的微信ipa包,這個(gè)可以從PP助手上下載越獄版本的包,我當(dāng)前下載的版本是6.5.4.34,iOS系統(tǒng)最低需要7.0。下載微信ipa包后把后綴名改為zip進(jìn)行解壓,解壓得到的Payload文件夾里有真正的包Wechat.app,右鍵Show Package Contents進(jìn)入包內(nèi)可以看到包內(nèi)的資源,其中微信的可執(zhí)行文件叫做WeChat這個(gè)文件。命令行中用file命令查看WeChat文件,可以看到有2種架構(gòu)分別是armv7和arm64的。

微信包中文件夾Watch和PlugIns里還有一些其他的可執(zhí)行文件和擴(kuò)展包,暫時(shí)用不到可以刪除(自己簽名也可以,但是為了防止簽名失敗,刪除更保險(xiǎn)一點(diǎn))。這個(gè)時(shí)候可以對(duì)WeChat.app進(jìn)行簽名并裝入手機(jī)看是否會(huì)閃退,簽名可以通過(guò)命令codesign或使用GUI工具ios-app-signer。 我的7P上裝了從AppStore上下載的微信,直接裝自簽名的包會(huì)導(dǎo)致兩個(gè)微信都沒(méi)有網(wǎng)絡(luò)。于是嘗試用lipo命令刪除Wechat中的arm64包,僅保留一個(gè)和armv7包,再通過(guò)Xcode -> Devices,選擇設(shè)備并安裝重簽名微信的包,這個(gè)時(shí)候AppStore的微信和自簽名的微信能同時(shí)在手機(jī)上運(yùn)行了。

邏輯層的實(shí)現(xiàn)

在iPhone上成功運(yùn)行自簽名的微信后,就可以開(kāi)始嘗試注入了。注入的可以用框架CaptainHook,這里就不在細(xì)說(shuō)。最開(kāi)始我看到了east520的github項(xiàng)目AutoGetRedEnv,用CaptainHook給[CMessageMgr AsyncOnAddMsg:MsgWrap:]加了一個(gè)勾子,CMessageMgr是一個(gè)廣義的消息管理類,每當(dāng)收到新消息時(shí),都會(huì)要異步更新數(shù)據(jù),就會(huì)調(diào)用方法[CMessageMgr AsyncOnAddMsg:MsgWrap:],方法會(huì)傳入消息實(shí)例,包含了消息的類型、發(fā)送者、發(fā)送時(shí)間等信息,如果這個(gè)消息是紅包,那就調(diào)用打開(kāi)紅包的方法 [WCRedEnvelopesLogicMgr OpenRedEnvelopesRequest:]。裝上去,設(shè)置了搶紅包的延時(shí),試了一下,紅包能成功搶到,但是過(guò)了一會(huì)兒就被檢測(cè)到說(shuō)使用了紅包插件,然后就被強(qiáng)行登出,刪除重裝后還是無(wú)效,說(shuō)明肯定是服務(wù)器端有這個(gè)檢測(cè)的邏輯。微信紅包出來(lái)這么久了,反搶紅包插件的應(yīng)該還是比較成熟了,肯定會(huì)對(duì)事件進(jìn)行監(jiān)控,如果發(fā)現(xiàn)沒(méi)有點(diǎn)擊事件但是紅包被搶了,那肯定是有輔助工具。早期的微信版本可能還沒(méi)有那么多的反輔助工具的檢測(cè)邏輯,所以我猜想如果把微信的版本號(hào)改掉,服務(wù)器端就不會(huì)對(duì)事件進(jìn)行檢測(cè)了,不過(guò)后來(lái)看到微信對(duì)搶紅包的最低版本是有限制的,應(yīng)該是把這條路給封了。邏輯層的輔助工具比較底層,開(kāi)銷小,方便找到,但是也容易被ban,所以只能從UI模擬的方法來(lái)嘗試了。

UI層的實(shí)現(xiàn)

因?yàn)槭稚蠜](méi)有越獄的機(jī)器,所以動(dòng)態(tài)分析微信的運(yùn)行框架并不是很方便,不過(guò)可以先用class-dump導(dǎo)出類,找到對(duì)應(yīng)的ViewController再分析,不過(guò)由于類太多了,并不能直接找到??戳讼?lián)尲t包界面,我覺(jué)得ViewController應(yīng)該是push進(jìn)來(lái)的,所以我給UINavigationController的pushViewController加了一個(gè)勾子,每當(dāng)視圖有push的時(shí)候便打印出來(lái)。日志工具使用了NSLogger,可以將App中的運(yùn)行日志發(fā)送到局域網(wǎng)內(nèi)的 NSLogger Client端,自動(dòng)查找無(wú)需配置任何東西。

具體實(shí)現(xiàn)的說(shuō)明TODO。

免責(zé)聲明

本軟件僅供學(xué)習(xí)交流使用,為防止不當(dāng)使用,所上傳的代碼非完整版,僅供參考。

最后編輯于
?著作權(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)容