微信防撤回是怎么实现的? | 您所在的位置:网站首页 › qq离线文件可以撤回吗怎么弄 › 微信防撤回是怎么实现的? |
WxPcHook
Hook技术 可能已经没啥稀奇的了,但我是最近才了解,兴趣浓厚嗷,很多人说做这个是为了赚钱 在文章开头用老师的话说 “只用于技术交流,法律边界不得触碰” 我在最近通过看视频等等也学到了很多。但从视频中学习有个缺点,就是别人已经告诉你怎么解决这个问题。比如去CE里搜索某些特征码之类的。比如下面我要讲的 “防撤回” 大佬们的教学一开始就让你搜索 revoke 这个关键字 (这是我找完CALL以后再看一些教程文章了),感觉多半还是有点运气成分在,所以我尝试通过之前学习的知识,自己解决一下这个问题。 最终效果
我们能在接收消息CALL中获取以下参数 1. 谁发给你的? 2. 发了什么? 3. 什么类型? 4. 还有一串加密的类似hash的字符串(可能是标识作用) 如果我们是程序员,我们在做撤回功能的时候肯定得给函数传入参数应该就是消息的ID吧? 那我们现在对程序内部是一无所知的,所以我想通过我们看的到的去追寻我们看不到的。 查看看得见的变化我们在wx中撤回一条消息,原信息消息,输出了一条 “某某某 撤回了一条消息” 所以在CheatEngine中搜索 “撤回” 返回了20多条结果 20多条数据,测试起来很方便了,直接将他们拉下来进行进一步测试 第二步选定变量地址我们重复撤回,寻找跟随变化的变量地址,乱码的变量就可以直接删掉了,因为是个临时变量。 这样就能更加精确的缩小范围。 第三步内存断点函数在撤回消息的时候,肯定需要访问内存获取数据。 可以通过内存断点,查询堆栈中函数调用的情况
这说明这是撤回操作需要的函数【很可能是我们要的】 mov eax,[arg.1] // 传入参数 test eax,eax ... push eax call 函数 add esp,0x4 // 平衡堆栈我修改 call 直接 jmp 到下一个命令,发现消息并没有撤回,但是点击继续运行,消息撤回了! 这说明:这个函数是必经之路,但是不是最重要的,撤回的函数应该在其后面。 然后我傻乎乎的跟进函数,发现进入的一个循环。姑且认为是个消息循环,总之没跟随到。 再换一个思路… 之前断下的函数传入了一个参数 [arg.1],保存再eax,eax呢又压入了堆栈让即将调用的函数使用,那么问题来了,[arg.1]就是我们看到的堆栈esp中的一些参数 wxid_0h3n1axxxxxxxx 佛系打码 1701xxxxx 佛系打码 79069xxxxxxxxx 佛系打码 场景模拟 VOID func1(msg,param){ // win 的消息循环 switch(msg){ case "撤回": revokeMsg(param); break; default: break; } } // 我们当前的函数 VOID revokeMsg(param){ func3(param); //我们要的call } VOID func3(arg_1){ // 做了一些函数 }所以说调用这个函数的函数,即外层函数,所以我们要继续外层找,看堆栈里。 LASS SycnMgr 我也不知道这是啥 一种猜测 Mgr:MySQLGroupReplication Sycn:同步 MySQL Group Replication 是MySQL官方推出的一个全新的高可用与高扩展的解决方案,提供高可用、高扩展、高可靠(强一致性)。 不管Wx的意思是不是这个,这个 可能 是一个消息循环【现在只是猜测,我没有告诉大家这就是一个消息循环的特征码】 我们跟进这个CALL下断点,发现这个CALL的调用是在我们之前断点之前的(这当然是理所当然的了,因为我们是通过堆栈的栈底找到的这里) 我直接使用F8尝试步过这个函数,发现界面上的消息还是没有撤回,说明这里还不是真正我们要的入口。那么在汇编代码窗口网上寻找,找到主函数入口,并且下断点。 暂时步去管会返回到哪里去,我们就先做个尝试,果然消息就不撤回了,并且程序也没有崩溃。 这样我们就轻松定位到了防止撤回的CALL的位置。 在回到那个 LASS SycnMgr,我是如何判断他是一个消息循环的特征字符呢? 在我们找到应该说是最外层调用的撤回函数,再外层就应该是消息循环了把??? 不如动动手,追踪一下 这里大概才可以看出是个消息循环吧?? 判断消息类型是啥???等等等等。。。 展望我使用的是最新版的 2.8的版本,有兴趣的小伙伴可以跟我一起研究。 “本文只用于技术交流,法律边界不可触碰” |
CopyRight 2018-2019 实验室设备网 版权所有 |