微信PC端技术研究-保存聊天语音
by anhkgg(公众号:汉客儿)
2019年1月31日
最近又学习了某位大佬用CE的方法,大佬的一句话有点醍醐灌顶,然后有了新的感觉,然后开始尝试实践这篇文章。
自己总结一下CE用法的核心思路:通过各种技巧搜索找到内存中关键数据,然后结合动态调试找到操作数据的函数。
官网:https://www.cheatengine.org/
看看来自百科的介绍:
Cheat Engine 是一款内存修改编辑工具 ,它允许你修改你的游戏或软件内存数据,以得到一些其他功能。它包括16进制编辑,反汇编程序,内存查找工具。与同类修改工具相比,它具有强大的反汇编功能,且自身附带了外挂制作工具,可以用它直接生成外挂。
在我看来,CE做的最好的就是各种策略的内存搜索能力。
支持准确数据(整数、字符串、十六进制、浮点数、字节数组等等)搜索,针对目标数据明确效果显著,比如金币数。
支持数据范围的搜索,比如大于某个值,小于某个值等等。比如想找到没有显示数值的血量数据。
支持多组数据同时搜索,针对数据结构复杂的情况
支持搜索结果的多次过滤(图中框选的Next Scan),最终找到目标数据。比如血量未知时,通过加血、减血多次搜索最终找到血量地址。
说到底CE内存搜索的能力就是通过各种策略帮助你找到游戏中需要修改的数据(比如血量、分数、金币等等),然后通过内存修改能力(直接改血量)打破游戏平衡,外挂制作工具生成外挂,助你超神!
进入正题,本文是要拿到微信聊天的语音消息,然后dump保存下来。
要按以前我的思路,会通过网络通信找到接受消息的函数,然后找到语音数据,看起来很简单,但是有点难。
因为函数真的很多,网络消息也会受到很多干扰。
现在用CE了,应该怎么办呢?
关键数据肯定是语音消息了,但是怎么搜索呢,肯定搜语音内容不现实,所以转了弯,先看看文字消息,找到接受文字消息处理函数之后,猜测语音处理函数会相同或者在不同分支。
接着,如何搜索文字消息呢?已经收到的显示在聊天窗口的内容当然可以通过CE找到,但是没用啊,它和接受文字消息处理函数已经没关系了,流程已经处理完成了。
那么在测试中肯定知道发送的消息内容,通过CE来搜索可以吗?
额,我觉得不行,还没收到消息呢,内存中也没有这个文字消息,搜索不到(如果可以,请大佬指点一下)。
能想到的是,在接受到消息某一点通过调试器断下来,然后CE搜索,这样可以,但是这个断点找不到阿,放弃。
那怎么办呢?
看到左侧聊天列表中显示的最新一条消息,有了新的思路。
每次收到新消息后,都会在列表中显示最新消息内容(图中绿框指示位置、注意是unicode字符)。
那么,先用CE(First Scan)搜索当前搜到的消息内容,找到可能的内存地址。多次接受不同消息后,Next Scan按钮搜索每次新的消息内容,最终确定聊天列表中显示的最新消息内容的内存地址。
多次刷选之后,留下两个地址,通过CE修改内容,在界面中查看是否改变,最终确认第二个地址就是我们的目标,暂把该地址记录为MsgAddr。
关键数据地址已经找到,下面的工作复杂也不复杂,就看微信是如何实现的了。
猜测微信实现消息显示的流程是这样的:
recv收到消息,组装完整包后,分发给消息处理函数
根据wxid找到要显示消息的列表项,如果不在已聊天消息列表,就新建一个项
在列表中显示消息,如果是表情显示[文字],语音显示为[语音],消息插入wxid对应消息队列,或者存入数据库
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2019-2-2 12:53
被anhkgg编辑
,原因: