逆向实战(插件完) (29)

简介: 对未实现的参数进行猜测

对未实现的参数进行猜测


  1. 有可能是在打开红包时创建的参数
  2. 我们要分析红包Manager所有的方法, 所以接下来我们hook管理类的所有方法
  3. 通过方法logify.pl 这个方法(前几篇文章有)


  1. WCRedEnvelopesLogicMgr -> 只是注释了C++的方法
  2. 然后编译安装插件



微信图片_20220510042555.png
image.png


插件分析过程编译安装插件的Tips


  1. 调试插件编译运行到微信的过程中
  2. 每次记得自己杀掉微信的进程, 不要编译杀掉, 因为微信有检测


继续分析


  1. 最终达到的效果是, 是收到一条红包消息, 去执行拆开红包的逻辑


找到关键参数


  1. 上面的第三个方法
  2. 制作插件的过程中, 头文件比较多(因为要声明很多属性方法), 建议创建.h文件来管理, 所以只要import该头文件就可以了

微信图片_20220510042607.png

image.png


  1. hook响应方法并打印

微信图片_20220510042612.png
image.png


  1. 打印的关键参数

微信图片_20220510042616.png
image.png


容易忽略的细节


  1. cgicmdid的类型为3时, 这个红包才是可以抢的
  2. 此处省略了分析, 关键还是多看打印的参数
  3. 还有c字段判断是否是自己发送的
  4. 以及receiveStatus字段判断自己是否已经抢过这个红包


完善的事情


  1. 抢红包多种情况的判断, 什么时候可以抢


  1. cgicmdid
  2. isSender
  3. receiveStatus
  4. 群聊红包等 (hbstatus字段)

微信图片_20220510042622.png

image.png


  1. 最后基本上所有的逻辑都已经梳理完毕, 请自行完成插件


下方是接下来,有可能有问题的代码, 有两点是在调试过程发现的


(void)CheckMessageStatus:(NSString *)uid Msg:(CMessageWrap *)msg{//会调用多次!!!
  1. 通过排查问题得出参数缺失!!!


[mutable_dic setObject:msg.m_nsFromUsr forKey:@"sessionUserName"];


%hook CMessageMgr
//- (void)CheckMessageStatus:(NSString *)uid Msg:(CMessageWrap *)msg{//会调用多次!!!
    - (void)AsyncOnAddMsg:(id)arg1 MsgWrap:(CMessageWrap *)msg{
    NSString *m_c2cNativeUrl  = msg.m_oWCPayInfoItem.m_c2cNativeUrl;
    if((msg.m_uiMessageType == 49) && [m_c2cNativeUrl containsString:@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?"]){//判断是一个红包消息!
        NSUInteger len = [@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?" length];
        NSString * NativeUrl2 = [m_c2cNativeUrl substringFromIndex:len];
        NSMutableDictionary * url_dic = [%c(WCBizUtil) dictionaryWithDecodedComponets:NativeUrl2 separator:@"&"];
        NSMutableDictionary * mutable_dic = [%c(NSMutableDictionary) dictionary];
        [mutable_dic setObject:@"1" forKey:@"msgType"];
        [mutable_dic setObject:url_dic[@"sendid"] forKey:@"sendId"];
        [mutable_dic setObject:url_dic[@"channelid"] forKey:@"channelId"];
        MMContext * context = [%c(MMContext) currentContext];
        Class ccMgr = [%c(CContactMgr) class];
        CContactMgr * contactMgr = [context getService:ccMgr];
        CContact * selfContact = [contactMgr getSelfContact];
        id displayName = [selfContact getContactDisplayName];
        [mutable_dic setObject:displayName forKey:@"nickName"];
        [mutable_dic setObject:[selfContact m_nsHeadImgUrl] forKey:@"headImg"];
        if(msg){
            WCPayInfoItem * payInfoItem = [msg m_oWCPayInfoItem];
            [mutable_dic setObject:[payInfoItem m_c2cNativeUrl] forKey:@"nativeUrl"];
        }
//        MMMsgLogicManager * redEnvelopesLogicMgr = [[%c(MMContext) currentContext] getService:[%c(MMMsgLogicManager) class]];
//        WeixinContentLogicController * currentLogicController = [redEnvelopesLogicMgr GetCurrentLogicController];
//
//        if (currentLogicController)
//        {
//
//            CBaseContact * m_contact = [currentLogicController m_contact];
//            if (m_contact)
//            {
//
//                NSString * nsUsrName = [m_contact m_nsUsrName];
//
//                if ( nsUsrName )
//                {
//                    [mutable_dic setObject:nsUsrName forKey:@"sessionUserName"];
//                }
//            }
//        }
        //通过排查问题得出参数缺失!!!
        [mutable_dic setObject:msg.m_nsFromUsr forKey:@"sessionUserName"];
        //保存一下开红包需要的参数!
        [[WeChatRedEnvelopParamQueue sharedQueue] enqueue:mutable_dic];
        //拼接参数
        NSMutableDictionary * params = [%c(NSMutableDictionary) dictionary];
        [params setObject:@"0" forKey:@"agreeDuty"];
        [params setObject:mutable_dic[@"channelId"] forKey:@"channelId"];
        [params setObject:@"1" forKey:@"inWay"];
        [params setObject:mutable_dic[@"msgType"] forKey:@"msgType"];
        [params setObject:mutable_dic[@"nativeUrl"] forKey:@"nativeUrl"];
        [params setObject:mutable_dic[@"sendId"] forKey:@"sendId"];
        //手动拆开红包!
        WCRedEnvelopesLogicMgr * redMgr = [[%c(MMContext) currentContext] getService:[%c(WCRedEnvelopesLogicMgr) class]];
        //真正拆开红包的方法!!
        [redMgr ReceiverQueryRedEnvelopesRequest:params];
    }else{
        %orig;
    }
    %orig;
}
%end




目录
相关文章
|
前端开发 安全 iOS开发
手把手教你做iOS逆向分析,突破微信的群发多选数量限制
很久没碰iOS开发了,最近都在web前端持续输出,加了很多推文群,每次群发文章的时候都要受到这个最多只能选择9个聊天的限制。 很不爽,好歹我也曾是一名iOS开发者呀,弄它~
779 0
手把手教你做iOS逆向分析,突破微信的群发多选数量限制
|
Java Android开发 开发者
1024程序节|Android框架之一 BRVAH【BaseRecyclerViewAdapterHelper】使用demo
BRVAH是一个强大的RecyclerAdapter框架(什么是RecyclerView?),它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。为什么会有它?请查看「Android开源框架BRVAH由来篇」该框架于2016年4月10号发布的第1个版本到现在已经一年多了,经历了800多次代码提交,140多次版本打包,修复了1000多个问题,获得了9000多star,非常感谢大家的使用以及反馈。
439 0
|
Android开发
Android RIL 动态切换 4G 模块适配
Android RIL 动态切换 4G 模块适配
437 0
|
Ubuntu Unix Linux
Docker 镜像(image)& 容器(container)
什么是 Docker 镜像(image)? 镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象; 镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包; 镜像可以运行一个或多个容器,同时镜像也可以停止某个容器的运行,并从中创建新的镜像;【镜像(iamge)的分类】...
1065 1
Docker 镜像(image)& 容器(container)
|
传感器 定位技术 vr&ar
iOS 神秘而又强大的传感器系统 (附demo)
iOS中的各种传感器:          随着科技的发展,机器感知人的行为!Goole的无人驾驶汽车到李彦宏的无人驾汽车,都带入了各种计算及传感。         为了研究自然现象和制造劳动工具,人类必须了解外界的各类信息。
2725 0
|
开发工具 git
git push origin master提交报错解决办法
git push origin master提交报错解决办法
536 0
|
安全 JavaScript Java
[※]记一次网站全站http升级为https的过程,websocket : ws升级为wss遇到的问题等
[※]记一次网站全站http升级为https的过程,websocket : ws升级为wss遇到的问题等
1780 0
[※]记一次网站全站http升级为https的过程,websocket : ws升级为wss遇到的问题等
|
缓存 前端开发 JavaScript
蚂蚁、字节、滴滴面试经历总结(都已过)
在文章里我不仅会列出面试题,还会给到一些答题建议,个人能力有限,也不能保证我回答都正确,如果有错误,希望能纠正我。
433 0
蚂蚁、字节、滴滴面试经历总结(都已过)
|
5G 开发工具 iOS开发
iOS SDK封装Framework带资源文件封装(一)
iOS SDK封装Framework带资源文件封装
iOS SDK封装Framework带资源文件封装(一)