前言
本文將介紹探索微信骰子控制點(diǎn)數(shù)的過程,并開源代碼药薯。本插件可以做到控制骰子點(diǎn)數(shù)和石頭剪刀布的結(jié)果绑洛。
內(nèi)容
眾所周知,微信全局收發(fā)消息調(diào)用的是CMessageMgr類的- (void)AddMsg:(id)arg1 MsgWrap:(id)arg2函數(shù)童本,該函數(shù)arg1為收信人的微信id真屯,arg2為消息CMessageWrap類的對象。如此說來我們只要拼接正確的CMessageWrap對象即可穷娱。
探索CMessageWrap類
- class-dump 得到CMessageWrap.h
- 使用MonkeyDev斷點(diǎn)觀察arg2
1.參考
2.全世界都在用MonkeyDev,我們用MonkeyDev編寫代碼hook并斷點(diǎn)- (void)AddMsg:(id)arg1 MsgWrap:(id)arg2.
CHDeclareClass(CMessageMgr);
CHMethod(2, void, CMessageMgr, AsyncOnAddMsg, id, arg1, MsgWrap, id, arg2)
{
CHSuper(2, CMessageMgr, AsyncOnAddMsg, arg1, MsgWrap, arg2);
}
CHConstructor{
CHLoadLateClass(CMessageMgr);
CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
}
首先發(fā)送文字绑蔫,探索最簡單的CMessageWrap對象用到哪些字段,得:
wrap.m_uiMessageType = 1;//文字:1泵额,表情:47
wrap.m_nsFromUsr = @"發(fā)信人微信id";
wrap.m_nsToUsr = @"收信人微信id";
wrap.m_uiCreateTime = date;//時(shí)間戳
wrap.m_uiStatus = 1;//固定1
以上為微信發(fā)消息必備字段配深。接下來,我們發(fā)一個(gè)石頭剪刀布的表情,得到更多字段:
wrap.m_nsEmoticonMD5 = @"F790E342A02E0F99D34B316547F9AEAB";//猜拳md5
wrap.m_uiGameContent = 3;//猜拳內(nèi)容
wrap.m_uiGameType = 1;//猜拳:1嫁盲,骰子:2
wrap.m_uiEmoticonType = 1;//固定1
得到這些字段后篓叶,我么調(diào)用- (void)AddEmoticonMsg:(NSString *)arg1 MsgWrap:(CMessageWrap *)arg2;發(fā)送表情測試,發(fā)現(xiàn)每次的結(jié)果都是'布',由此可見羞秤,猜拳和骰子的結(jié)果不是由服務(wù)端控制缸托,而是由發(fā)送的時(shí)刻即確定,所以我們可以控制結(jié)果瘾蛋。修改入?yún)⒅挡浑y得出:
1:m_nsEmoticonMD5:@"F790E342A02E0F99D34B316547F9AEAB",m_uiGameType:1,m_uiGameContent:1剪刀 2石頭 3布
2:m_nsEmoticonMD5:@"9E3F303561566DC9342A3EA41E6552A6",m_uiGameType:2,m_uiGameContent:4-9為結(jié)果1-6
插件
WCGameEmoji,越獄非越獄都支持俐镐,越獄設(shè)備,修改源碼里ip直接build到手機(jī)上瘦黑。非越獄設(shè)備請自行build京革,注入,重簽名打包幸斥。