-
-
[原创]某聊天软件逆向学习笔记——消息组包位置定位
-
发表于:
2020-8-18 17:05
3857
-
[原创]某聊天软件逆向学习笔记——消息组包位置定位
一、前言
各种某聊天软件各种机器人被制裁,发现网上很少有分析的帖子,萌新研究下某聊天软件的发消息Call。
二、分析工具
IDA、XDBG、CE
三、分析思路
(1)(错误操作)大胆猜测一下软件流程。先找到聊天框中数据的位置,然后下硬件访问断点,没准就到了构造数据包的位置。
(2)可以从发送按钮下手,虽然找发送按钮比较麻烦。但是,回车也是可以发送消息的。那么我们可以在窗口按钮事件下个断点,然后对聊天框中数据的位置下个硬件访问断点,没准能够找到数据包构造的位置。
四、操作步骤
思路1操作步骤
(1)使用CE 搜索一下输入框的值,多改变几次。最后剩下了两个地址
(2)修改一下这两个地址的值,看看最后会发送出去的值是根据哪个地址的值决定的。测试发现,修改0x74C9EE38 这个地址的值时,会自动还原。修改0x407B510这个地址的值,聊天框中的内容和0x74C9EE38 这个地址的值都会跟着变化。
(3)按照思路对0x407B510这个地址下个硬件访问断点说不定能到达构造数据包的位置了,美滋滋。XDBG中下了硬件访问断点后,riched20.dll、gdi32full.dll疯狂访问,完全不给我点发送的机会。我吐了,换个思路。
思路2操作步骤
(1)下个按键消息断点,打开XDBG,Ctrl + G。TranslateMessage,右键条件断点[arg.get(0)+4] == 0x100。然后顺利的异常了。。。。。
(2)百度一搜,发现在十一年前就有大佬遇到过这种问题。https://bbs.pediy.com/thread-93689.htm。经过一番查找,好像没有比较简单的解决方法,同时经过几次测试发现,好像这里的检测并不是特别严格,XDBG 还是有几率抢到处理权。苦于太菜没有好的解决方案,先放弃解决。
(3)经过两三次尝试后,顺利在TranslateMessage处断了下来,且没有异常,随后根据思路1中的步骤(1)(2)找到输入框数据的位置并下硬件访问断点,按F9运行中断后得到如下堆栈。
(4)取消前面对聊天框中值设置的硬件访问断点。riched20.dll、gf.dll 这两个模块就不看了,直接在XDBG中将模块设置为系统模块。
(5)Alt + F9运行到用户代码,然后来到了afctrl.dll模块中。
(6)继续F8往上回溯,回溯几步之后,发现了一个比较可疑的导出
(7)看到这里,这么可疑,当然是打开IDA。
(8)看到这里的情况,感觉比较像组包。继续F7大法,往下面分析。进入到步骤(7)中的sub_5026EB48函数中。
(9)在XDBG来到sub_5026EB48,修改v24的值后发送消息也跟着变化,可以确定这里就是消息组包的位置了。位置大概定位到了,可以先还原下这一块的逻辑。
五、未完待续
。。。。。。。。。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)