资讯专栏INFORMATION COLUMN

抢红包Tweak2

dongfangyiyu / 537人阅读

摘要:从入手,先找到微信本身的抢红包函数,我们自己来给它构造参数并调就是开红包弹框的类名知道类名后,用追踪它,点击开红包,在日志中找到了下图中的内容,从名字来看,这是一个事件处理函数,我们现在要做的,就是把他还原成代码,真正实现抢红包功能

从ui入手,先找到微信本身的抢红包函数,我们自己来给它构造参数并调?
cy# [#0x18d6dd10 nextResponder]
#""

WCRedEnvelopesReceiveHomeView就是开红包弹框的类名

OnOpenRedEnvelopes

知道类名后,用cycript追踪它,点击开红包,在日志中找到了下图中的内容,从名字来看,这是一个事件处理函数,我们现在要做的,就是把他还原成oc代码,真正实现抢红包功能

void -[WCRedEnvelopesReceiveHomeView OnOpenRedEnvelopes](void * self, void * _cmd) {
    r7 = (sp - 0x14) + 0xc;
    sp = sp - 0x34;
    r10 = self;
    loc_e0b79c(r10->m_dicBaseInfo, @selector(objectForKey:), @"isSender");
    r5 = sub_e0b7a8();
    r8 = loc_e0b79c(r5, @selector(intValue));
    loc_e0b7ac(r5);
    loc_e0b79c(r10->m_dicBaseInfo, @selector(objectForKey:), @"hbType");
    r7 = r7;
    r0 = sub_e0b7a8();
    r4 = loc_e0b79c();
    loc_e0b7ac(r0);
    if (r8 > 0x0) {
            asm { movsgt     r3, #0x1 };
    }
    asm { strd       r3, r6, [sp, #0x2c + var_28] };
    loc_e0b79c();
    r4 = sub_e0b7a8();
    loc_e0b7f8(0x2db5, r4);
    r5 = loc_e0b7d0(*ivar_offset(m_delegate) + r10);
    loc_e0b79c(r5, @selector(WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes));

继续寻找WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes

//抢红包的方法
                WCRedEnvelopesLogicMgr *logicMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("WCRedEnvelopesLogicMgr") class]];
                [logicMgr ReceiverQueryRedEnvelopesRequest:params];
                
void -[WCRedEnvelopesReceiveControlLogic WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes](void * self, void * _cmd) {
    r7 = (sp - 0x14) + 0xc;
    sp = sp - 0x94;
    stack[2024] = self;
    loc_1c0d080(self->m_data, @selector(m_oSelectedMessageWrap), objc_ivar_offset_WCRedEnvelopesControlLogic_m_data);
    r10 = loc_1c0d08c();
    loc_1c0d080(r10, @selector(m_oWCPayInfoItem));
    r6 = loc_1c0d08c();
    loc_1c0d080(r6, @selector(m_c2cNativeUrl));
    r5 = loc_1c0d08c();
    loc_1c0d080(r5, @selector(substringFromIndex:), loc_1c0d080(@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?", @selector(length)));
    r4 = loc_1c0d08c();
    loc_1c0d090(r5);
    loc_1c0d090(r6);
    loc_1c0d090(r10);
    stack[2018] = r4;
    loc_1c0d080(@class(WCBizUtil), @selector(dictionaryWithDecodedComponets:separator:), r4, @"&", stack[2011]);
    r10 = loc_1c0d08c();
    loc_1c0d080(@class(NSMutableDictionary), @selector(dictionary));
    r6 = loc_1c0d08c();
    loc_1c0d080(r6, @selector(safeSetObject:forKey:), @"1", @"msgType");
    loc_1c0d080(r10, @selector(objectForKey:), @"sendid");
    r5 = loc_1c0d08c();
    loc_1c0d080(r6, @selector(safeSetObject:forKey:), r5, @"sendId");
    loc_1c0d090(r5);
    r0 = r10;
    stack[2017] = r10;
    r10 = *ivar_offset(m_data);
    r8 = r6;
    loc_1c0d080(r0, @selector(objectForKey:), @"channelid");
    r4 = loc_1c0d08c();
    loc_1c0d080(r8, @selector(safeSetObject:forKey:), r4, @"channelId");
    loc_1c0d090(r4);
    loc_1c0d080(@class(MMServiceCenter), @selector(defaultCenter));
    r4 = loc_1c0d08c();
    loc_1c0d080(r4, @selector(getService:), loc_1c0d080(@class(CContactMgr), @selector(class)));
    r5 = loc_1c0d08c();
    loc_1c0d080(r5, @selector(getSelfContact));
    r6 = loc_1c0d08c();
    r0 = r5;
    r5 = @selector(m_oSelectedMessageWrap);
    loc_1c0d090(r0);
    loc_1c0d090(r4);
    loc_1c0d080(r6, @selector(getContactDisplayName));
    r4 = loc_1c0d08c();
    loc_1c0d080(r8, @selector(safeSetObject:forKey:), r4, @"nickName");
    loc_1c0d090(r4);
    stack[2016] = r6;
    loc_1c0d080(r6, @selector(m_nsHeadImgUrl));
    r4 = loc_1c0d08c();
    loc_1c0d080(r8, @selector(safeSetObject:forKey:), r4, @"headImg");
    loc_1c0d090(r4);
    loc_1c0d080(*(stack[2024] + r10), r5);
ldr        r2, [r1]     ; 0x2f2cec0,objc_ivar_offset_WCRedEnvelopesControlLogic_m_data
movw       r1, #0x611c  ; :lower16:(0x3423ce0 - 0x10edbc4), &@selector(m_oSelectedMessageWrap)
movt       r1, #0x233   ; :upper16:(0x3423ce0 - 0x10edbc4), &@selector(m_oSelectedMessageWrap)
add        r1, pc       ; &@selector(m_oSelectedMessageWrap)
ldr.w      r8, [r2]     ; objc_ivar_offset_WCRedEnvelopesControlLogic_m_data
ldr        r1, [r1]     ; "m_oSelectedMessageWrap",@selector(m_oSelectedMessageWrap)
str        r1, [sp, #0x8c + var_80]
ldr.w      r0, [r0, r8]
blx        -[MMMultipleMusicViewController getUpLoadTask:]+1788
mov        r7, r7
blx        -[MMMultipleMusicViewController getUpLoadTask:]+1800
mov        sl, r0
movw       r0, #0xde3a  ; :lower16:(0x340ba20 - 0x10edbe6), &@selector(m_oWCPayInfoItem)
movt       r0, #0x231   ; :upper16:(0x340ba20 - 0x10edbe6), &@selector(m_oWCPayInfoItem)
add        r0, pc       ; &@selector(m_oWCPayInfoItem)
ldr        r1, [r0]     ; "m_oWCPayInfoItem",@selector(m_oWCPayInfoItem)
mov        r0, sl
str        r1, [sp, #0x8c + var_84]
blx        -[MMMultipleMusicViewController getUpLoadTask:]+1788
mov        r7, r7
blx        -[MMMultipleMusicViewController getUpLoadTask:]+1800
mov        r6, r0
movw       r0, #0xcdb6  ; :lower16:(0x340a9b8 - 0x10edc02), &@selector(m_c2cNativeUrl)
movt       r0, #0x231   ; :upper16:(0x340a9b8 - 0x10edc02), &@selector(m_c2cNativeUrl)
add        r0, pc       ; &@selector(m_c2cNativeUrl)
ldr        r1, [r0]     ; "m_c2cNativeUrl",@selector(m_c2cNativeUrl)
mov        r0, r6
str        r1, [sp, #0x8c + var_88]
blx        -[MMMultipleMusicViewController getUpLoadTask:]+1788
mov        r7, r7
blx        -[MMMultipleMusicViewController getUpLoadTask:]+1800
mov        r5, r0
movw       r0, #0xc082  ; :lower16:(0x3409ca0 - 0x10edc1e), &@selector(length)
movt       r0, #0x231   ; :upper16:(0x3409ca0 - 0x10edc1e), &@selector(length)
add        r0, pc       ; &@selector(length)
ldr        r1, [r0]     ; "length",@selector(length)
movw       r0, #0x5134  ; :lower16:(0x2fe2d60 - 0x10edc2c), @"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?"
movt       r0, #0x1ef   ; :upper16:(0x2fe2d60 - 0x10edc2c), @"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?"
str        r1, [sp, #0x8c + var_7C]
add        r0, pc       ; @"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?"
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"];

共分为四步

loc_1c0d080(r4, @selector(getService:), loc_1c0d080(@class(MMMsgLogicManager), @selector(class)));
    r5 = loc_1c0d08c();
    loc_1c0d080(r5, @selector(GetCurrentLogicController));

1、调用了mmservicecenter的defaultcenter方法来获取mmservicecenter实例

2、调用了CContactMgr的class方法

 loc_1c0d080(r6, @selector(m_contact));

3、调用了第一步获取的mmservicecenter实例的getservice方法,而这个方法是把第二步得到的class作为参数
4、很明白了吧,第三步得到了CContactMgr实例,这里就是调用CContactMgr实例的getselfcontact方法获取自己的账户资料

 }
    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_1c0d080(@class(MMServiceCenter), @selector(defaultCenter));
    r4 = loc_1c0d08c();
    loc_1c0d080(r4, @selector(getService:), loc_1c0d080(@class(CContactMgr), @selector(class)));
    r5 = loc_1c0d08c();
    loc_1c0d080(r5, @selector(getSelfContact));
    r6 = loc_1c0d08c();

shi

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"];

yi

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16808.html

相关文章

  • Python自动红包,超详细教程,再也不会错过微信红包了!

    摘要:首先要打开微信,进入到指定的群聊,识别微信红包执行抢红包的动作。是一款基于控件识别的自动化测试框架,目前支持原生原生微信小程序,也可以在其他引擎中自行接入来使用。 showImg(https://segmentfault.com/img/remote/1460000019438856); 目录:0 引言1 环境2 需求分析3 前置准备4 抢红包流程回顾5 代码梳理6 后记 0 引言 提...

    CoderBear 评论0 收藏0
  • java并发编程学习18--最迷你的红包

    摘要:业务分析要完成抢红包的功能重点有两个多线程并发修改数据红包现金分配算法类设计用户对象包含用户名称,所抢到的金额,最后的提示文言字段抢红包的用户用户昵称用户抢到的金额用户获得系统提示文言并发访问的共享红包对象这个对象包含了预分配的所有小红包并 【业务分析 要完成抢红包的功能重点有两个: 多线程并发修改数据 红包现金分配算法 【类设计 用户对象:包含用户名称,所抢到的金额,最后的提示文...

    caohaoyu 评论0 收藏0
  • 微信红包外挂

    摘要:如何发红包会安全点现在抢红包就看谁的外挂工具反应够快如何去干扰这些外挂,其实也有点小技巧,就是在发红包前,发送文本微信红包可以导致部分外挂工具失效。 版本归作者 Leon 所有,所以在此注明出处:http://www.happycodeboy.com/index.php/archives/10/ 源码下载地址:https://github.com/lendylongli/qiangho...

    QiShare 评论0 收藏0
  • 自如2018新年活动系统 — 红包

    摘要:活动规模既然公司对自如客这么阔,那对我们员工也得够意思,所以年底我们共准备了个活动。拆分后,红包占有只需操作,响应性能已不是问题。 首发于 樊浩柏科学院 2017 年是自如快速增长的一年,自如客突破 100 万,管理资产达到 50 万间,在年底成功获得了 40 亿 A 轮融资,而这些都要感谢广大的自如客,公司为了回馈自如客,在六周年活动时就发放了 6000 万租住基金,当然年底散币活...

    fanux 评论0 收藏0
  • 自如2018新年活动系统 — 红包

    摘要:活动规模既然公司对自如客这么阔,那对我们员工也得够意思,所以年底我们共准备了个活动。拆分后,红包占有只需操作,响应性能已不是问题。 首发于 樊浩柏科学院 2017 年是自如快速增长的一年,自如客突破 100 万,管理资产达到 50 万间,在年底成功获得了 40 亿 A 轮融资,而这些都要感谢广大的自如客,公司为了回馈自如客,在六周年活动时就发放了 6000 万租住基金,当然年底散币活...

    learning 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<