原文鏈接
一步一步實(shí)現(xiàn)iOS微信自動(dòng)搶紅包(非越獄)
需要的工具/文件
- yololib 編譯好的, 百度傳送門鏈接: https://pan.baidu.com/s/1qYdQ2ba 密碼: pif9
- class-dump 編譯好的, 百度傳送門鏈接:鏈接: https://pan.baidu.com/s/1kVQJEUb 密碼: j3i4
- dumpdecrypted 砸殼用
- iOSOpenDev
- iTools
- OpenSSH(Cydia)
- iFile(Cydia)
- Cycript(Cydia)
- Command Line Tools
- Xcode
- 蘋果開發(fā)者證書或企業(yè)證書
- 一臺(tái)越獄的iPhone
解密微信可執(zhí)行文件(沒越獄的往下翻, 可忽略這一步)
1.確保已越獄的iPhone和Mac處于同一局域網(wǎng)洲守,打開Mac OS的終端命令行工具
2.輸入ssh root@192.168.1.121遠(yuǎn)程登錄已越獄的iPhone召边,root密碼默認(rèn)為alpine(其中192.168.1.121是iPhone的局域網(wǎng)IP地址)
3.在iPhone上運(yùn)行一下微信象泵,之后執(zhí)行ps -e | grep WeChat(ps -e
)查找WeChat可執(zhí)行文件的路徑,并記錄為:可執(zhí)行文件路徑
4.通過(guò)Cycript查找到WeChat的Documents路徑思灰,輸入cycript -p WeChat,進(jìn)入cycript命令行狀態(tài)
5.輸入NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0],就可以獲取到WeChat的Documents路徑了,并記錄為:Documents路徑
記錄下剛才的兩個(gè)路徑,接下來(lái)需要將砸殼工具dumpdecrypted拷貝到WeChat的Documents目錄下用于砸殼
確保我們從Github上下載了最新的dumpdecrypted源碼疫衩,進(jìn)入dumpdecrypted源碼的目錄壮莹,編譯dumpdecrypted.dylib翅帜,命令make
6.將命令行切換回Mac OS X
輸入scp dumpdecrypted.dylib root@192.168.1.121:Documents路徑
7.重新遠(yuǎn)程登錄到iPhone,使用dumpdecrypted.dylib砸殼命满,具體用法:
DYLD_INSERT_LIBRARIES=/Documents路徑/dumpdecrypted.dylib 可執(zhí)行文件路徑
出現(xiàn)了如截圖頁(yè)面則表示砸殼成功涝滴,會(huì)在命令行執(zhí)行的當(dāng)前路徑下生成WeChat.decrypted文件
7.1 dumpdecrypted
對(duì)系統(tǒng)ios9.3.2以上的版本砸殼失敗, 先遠(yuǎn)程自己的設(shè)備:ssh root@設(shè)備IP ; 執(zhí)行命令:su mobile->cd; 接著砸殼;砸殼文件所在目錄:/var/mobile/
8.將生成的WeChat.decrypted使用scp命令拷貝到Mac電腦上,和之前從Mac電腦拷貝dumpdecrypted.dylib到手機(jī)上類似的語(yǔ)法胶台。(下圖中的黑色覆蓋部分替換為你的Mac登陸用戶名)
9.為保險(xiǎn)起見歼疮,可以對(duì)WeChat.decrypted文件檢查一下,查看砸殼是否成功
如截圖第一個(gè)cryptid 0表示armv7架構(gòu)已成功诈唬,第二個(gè)cryptid 1表示arm64未成功
理論上只要把最老的架構(gòu)解密就可以了韩脏,因?yàn)樾碌腸pu會(huì)兼容老的架構(gòu);所以這里arm64未成功不影響
10.再次遠(yuǎn)程連接iPhone铸磅,拷貝出WeChat.app待用(注意使用scp -r)
解密微信可執(zhí)行文件->利用PP助手(推薦)
在已越獄的iPhone上安裝PP助手后赡矢,從PP助手中下載微信客戶端
PP助手上面的App的可執(zhí)行文件都是經(jīng)過(guò)了砸殼的,所以可以省去自己砸殼的步驟
我們可以按照自己砸殼的步驟杭朱,導(dǎo)出PP助手的微信可執(zhí)行文件,利用otool查看砸殼情況
這表示armv7和arm64均已解密
同樣再次遠(yuǎn)程連接iPhone吹散,拷貝出WeChat.app待用
生成并注入dylib
1.下載并安裝iOSOpenDev
Xcode 8弧械,直接安裝iOSOpenDev會(huì)失敗。
如果你們也遇到類似的問(wèn)題送浊,可以嘗試下載iOSOpenDev_Patches梦谜,然后按照如下步驟:
1、把Specifications1文件夾重命名為Specifications放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/
2袭景、把Specifications2文件夾重命名為Specifications放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/
3唁桩、把usr3重命名為usr放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/
4、安裝iOSOpenDev
2.創(chuàng)建dylib工程并生成dylib
安裝完iOSOpenDev后耸棒,在Xcode中選擇Cocoa Touch Library荒澡。
點(diǎn)擊Next開始新建工程,將product name命名為autoGetRedEnv与殃;
刪除autoGetRedEnv.h文件单山,修改autoGetRedEnv.m為autoGetRedEnv.mm,然后在項(xiàng)目中加入CaptainHook.h幅疼;
從github中下載autoGetRedEnv工程源碼中的CaptainHook.h和autoGetRedEnv.mm拷貝源碼米奸,復(fù)制到工程中對(duì)應(yīng)文件中,完成后進(jìn)行(真機(jī))編譯爽篷,即可得到libautoGetRedEnv.dylib文件
hook微信的AsyncOnAddMsg: MsgWrap:方法悴晰,實(shí)現(xiàn)方法如下:
//聲明CMessageMgr類
CHDeclareClass(CMessageMgr);
CHMethod(2, void, CMessageMgr, AsyncOnAddMsg, id, arg1, MsgWrap, id, arg2)
{
//調(diào)用原來(lái)的AsyncOnAddMsg:MsgWrap:方法
CHSuper(2, CMessageMgr, AsyncOnAddMsg, arg1, MsgWrap, arg2);
//具體搶紅包邏輯
//...
//調(diào)用原生的打開紅包的方法
//注意這里必須為給objc_msgSend的第三個(gè)參數(shù)聲明為NSMutableDictionary,不然調(diào)用objc_msgSend時(shí),不會(huì)觸發(fā)打開紅包的方法
((void (*)(id, SEL, NSMutableDictionary*))objc_msgSend)(logicMgr, @selector(OpenRedEnvelopesRequest:), params);
}
__attribute__((constructor)) static void entry()
{
//加載CMessageMgr類
CHLoadLateClass(CMessageMgr);
//hook AsyncOnAddMsg:MsgWrap:方法
CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
}
2.1 添加微信步數(shù)修改
CHOptimizedMethod(0, self, unsigned long, WCDeviceStepObject, m7StepCount) {
return 66666;
}
CHOptimizedMethod(0, self, unsigned long, WCDeviceStepObject, hkStepCount) {
return 66666;
}
__attribute__((constructor)) static void entry()
{
//加載CMessageMgr類
CHLoadLateClass(CMessageMgr);
//hook AsyncOnAddMsg:MsgWrap:方法
CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
// 微信步數(shù) CHLoadLateClass(WCDeviceStepObject);
CHHook(0, WCDeviceStepObject, m7StepCount);
CHHook(0, WCDeviceStepObject, hkStepCount);
}
2.2 添加微信防撤回
CHDeclareClass(CMessageMgr);
CHOptimizedMethod(1, self, void, CMessageMgr, onRevokeMsg, id, value1) {
}
__attribute__((constructor)) static void entry()
{
//加載CMessageMgr類
CHLoadLateClass(CMessageMgr);
//hook AsyncOnAddMsg:MsgWrap:方法
CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
// 微信步數(shù) CHLoadLateClass(WCDeviceStepObject);
CHHook(0, WCDeviceStepObject, m7StepCount);
CHHook(0, WCDeviceStepObject, hkStepCount);
// 消息防撤回
CHHook(1, CMessageMgr, onRevokeMsg);
}
3.注入dylib
通過(guò)yoyolib向WeChat注入dylib (相當(dāng)于告知WeChat有這么個(gè)東西了逐工,到時(shí)候程序可以加載這個(gè)dylib)
./yololib 目標(biāo)可執(zhí)行文件 需注入的dylib
目標(biāo)可執(zhí)行文件:即铡溪,WeChat.app/WeChat解密后得到的文件;如果是自己砸殼時(shí)泪喊,對(duì)應(yīng)的則是之前導(dǎo)出的WeChat.decrypted文件(建議將WeChat.decrypted文件做好備份以便之后使用棕硫,同時(shí)把WeChat.decrypted重命名為WeChat);如果是利
上圖效果則代表注入成功了
3.重新簽名并安裝ipa
- 新建Entitlements.plist
<?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">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>123456.com.autogetredenv.demo</string>
<key>com.apple.developer.team-identifier</key>
<string>123456</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>123456.com.autogetredenv.demo</string>
</array>
</dict>
</plist>
獲取證書Teamid及其他信息使用以下命令
/opt/iOSOpenDev/bin/ldid -e ./Demo.app/Demo
將四個(gè)文件袒啼,放入到之前備份好的WeChat.app文件夾中:
- 1.embedded.mobileprovision
- 2.libautoGetRedEnv.dylib
- 3.注入libautoGetRedEnv.dylib后的WeChat文件
- 4.Entitlements.plist
embedded.mobileprovision文件就是蘋果開發(fā)者網(wǎng)站中的Provisioning Profiles文件,如果之前創(chuàng)建好了直接下載重命名為embedded.mobileprovision即可哈扮。
給微信重新簽名
重新簽名命令格式:codesign -f -s 證書名字 目標(biāo)文件
證書名字可以在鑰匙串中找到
分別用codesign命令來(lái)為微信中的相關(guān)文件簽名,具體實(shí)現(xiàn)如下:
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" WeChat.app/libautoGetRedEnv.dylib
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" WeChat.app/Watch/WeChatWatchNative.app/PlugIns/WeChatWatchNativeExtension.appex
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" WeChat.app/Watch/WeChatWatchNative.app
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" WeChat.app/PlugIns/WeChatShareExtensionNew.appex
codesign -f -s "iPhone Developer: Hao liu (475KU64APH)" --entitlements Entitlements.plist WeChat.app
打包成ipa
給微信重新簽名后,我們就可以用xcrun來(lái)生成ipa了瘤泪,具體實(shí)現(xiàn)如下:
xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/WeChat.ipa
安裝擁多種功能的微信
只要手機(jī)id加入了開發(fā)者證書中都是可以安裝的
哈哈哈哈哈哈, 大家玩的開心!!!!