使用如下代碼實現隱藏本身的頭像和暱稱session
重點研究WCRedEnvelopesReceiveHomeViewOpenRedEnvelopesui
CContactMgr *contactManager = [[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr) class]]; CContact *selfContact = [contactManager getSelfContact];
[args setObject:[selfContact getContactDisplayName] forKey:@"nickName"]; [args setObject:[selfContact m_nsHeadImgUrl] forKey:@"headImg"];
如下方法爲拆紅包的方法。code
void -[WCRedEnvelopesLogicMgr ReceiverQueryRedEnvelopesRequest:](void * self, void * _cmd, void * arg2) { loc_e0b79c(self, @selector(GetHongbaoBusinessRequest:CMDID:OutputType:), arg2, 0x3, 0x1, r7, lr); return; }
void -[WCRedEnvelopesLogicMgr OpenRedEnvelopesRequest:](void * self, void * _cmd, void * arg2) { loc_e0b79c(self, @selector(GetHongbaoBusinessRequest:CMDID:OutputType:), arg2, 0x4, 0x1, r7, lr); return; }
loc_1c0d080(stack[2023], stack[2012], r5, @"sessionUserName");
sessionUserName大概是會話名稱,也就是羣名稱對象
[args setObject:nativeUrl forKey:@"nativeUrl"]; [args setObject:xxx forKey:@"sessionUserName"];
下來這一段仍是用mmservicecenter來獲取WCRedLogicMgr對象,而後調用WCRedLogicMgr的open方法來拆紅包,能夠想象open方法的參數就是上面咱們辛苦組裝的字典get
loc_1c0d0f4(); loc_1c0d080(@class(MMServiceCenter), @selector(defaultCenter)); r4 = loc_1c0d08c(); loc_1c0d080(r4, @selector(getService:), loc_1c0d080(@class(WCPayLogicMgr), @selector(class))); r0 = loc_1c0d08c(); loc_1c0d080(r0, @selector(setRealnameReportScene:), 0x3eb); loc_1c0d090(r0); loc_1c0d090(r4); loc_1c0d080(@class(MMServiceCenter), @selector(defaultCenter)); r4 = loc_1c0d08c(); loc_1c0d080(r4, @selector(getService:), loc_1c0d080(@class(WCPayLogicMgr), @selector(class))); loc_1c0d08c(); loc_1c0d080(*(stack[2024] + stack[2022]), @selector(m_structDicRedEnvelopesBaseInfo)); loc_1c0d08c(); loc_1c0d080(); r4 = loc_1c0d08c(); r5 = stack[2024]; asm { strd fp, r0, [sp, #0x8c + var_30] }; loc_1c0d094(stack[2023]); r8 = loc_1c0d094(r5); r5 = sp + 0x38; asm { stm.w r0, {r6, sl, fp} }; loc_1c0d0f0(); loc_1c0d094(r8); loc_1c0d080(stack[2020], @selector(checkHongbaoOpenLicense:acceptCallback:denyCallback:), r4, sp + 0x54, r5); loc_1c0d090(r4); loc_1c0d090(stack[2022]);
[[[%c(MMServiceCenter) defaultCenter] getService:[%c(WCRedEnvelopesLogicMgr) class]] OpenRedEnvelopesRequest:args];
到這裏,咱們再總結一下咱們上面分析的過程…… 獲得m_oWCPayInfoItem屬性 解析m_oWCPayInfoItem的m_c2cNativeUrl屬性 獲得selfcontact 組裝相關參數 調用OpenRedEnvelopesRequest:領取紅包
#import "WxMsgPreview.h" %hook CMessageMgr -(void)AsyncOnAddMsg:(id)message MsgWrap:(CMessageWrap* )msgWrap { %log; %orig; if(msgWrap.m_uiMessageType == 49){ CContactMgr *contactManager = [[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr) class]]; CContact *selfContact = [contactManager getSelfContact]; if ([msgWrap.m_nsContent rangeOfString:@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao"].location != NSNotFound) { // 紅包 NSString *nativeUrl = [[msgWrap m_oWCPayInfoItem] m_c2cNativeUrl]; nativeUrl = [nativeUrl substringFromIndex:[@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?" length]]; NSDictionary *nativeUrlDict = [%c(WCBizUtil) dictionaryWithDecodedComponets:nativeUrl separator:@"&"]; NSMutableDictionary *args = [[%c(NSMutableDictionary) alloc] init]; [args setObject:nativeUrlDict[@"msgtype"] forKey:@"msgType"]; [args setObject:nativeUrlDict[@"sendid"] forKey:@"sendId"]; [args setObject:nativeUrlDict[@"channelid"] forKey:@"channelId"]; [args setObject:[selfContact getContactDisplayName] forKey:@"nickName"]; [args setObject:[selfContact m_nsHeadImgUrl] forKey:@"headImg"]; [args setObject:nativeUrl forKey:@"nativeUrl"]; [args setObject:msgWrap.m_nsFromUsr forKey:@"sessionUserName"]; [[[%c(MMServiceCenter) defaultCenter] getService:[%c(WCRedEnvelopesLogicMgr) class]] OpenRedEnvelopesRequest:args]; } } } %end