x64dbg这一系列在看雪论坛的课程——>windows中陆续发布,如果在哪一步有问题可以在视频中查看是否是操作上的问题,或者私信我我会在看到的第一时间给出回复。
这应该是该系列的最后一节了,感谢大家的关注。 硬件断点下图的红框位置就是调试寄存器组Dr0~Dr7,Dr0,Dr1,Dr2,Dr3是用于设置硬件断点的,由于只有4个硬件断点寄存器,所以同时最多只能设置4个硬件断点。它产生的异常是单步异常。
这里不对原理做过多介绍,详细知识请参考《加密与解密》第二章2.1.4节
x64dbg入门系列(六)- 实战硬件断点
通讯协议分析版本信息
x64dbg入门系列(六)- 实战硬件断点
1.寻找给send函数下断点,根据我以前的帖子可以知道send函数是在ws2_32.dll这个模块。
x64dbg入门系列(六)- 实战硬件断点
所以我们在符号——>选中ws2_32.dll模块——>搜索send——>下断点。
x64dbg入门系列(六)- 实战硬件断点
打开微信随意给一个人发信息,这个时候程序断下,由于这个属于系统模块,我们不做分析,直接Ctrl+F9运行到程序模块。
x64dbg入门系列(六)- 实战硬件断点
接下来我们看下send函数,对我们有用的是第二个,所以这个参数我们需要着重关注。 1
2
3
4
5
6
| int send(
SOCKET s,
const char FAR* buf,
int len,
int flags
);
|
通过分析后发现buf中是一个数值,这个数值是随着消息的不同而改变的。这里给该地址处下一个硬件写入断点。
x64dbg入门系列(六)- 实战硬件断点
运行程序后会在下图的位置断下。这个时候分析了好久的汇编,感觉收获不大,所以这个时候试着在堆栈中寻找信息。
x64dbg入门系列(六)- 实战硬件断点
在堆栈中得到一个可疑信息,但是并没有发现发送的文本信息,所以我们试着分析该字符出现的函数处。
x64dbg入门系列(六)- 实战硬件断点
我们在wechatwin.dll中进行字符串搜索寻找”newsendmsg“字符串,运气不错,这里只发现了一处代码。
x64dbg入门系列(六)- 实战硬件断点
在断点标签栏处,取消其他断点,然后重新发送信息,程序在下图处断下,通过分析后发现收益不大,继续通过观察堆栈查找信息。
x64dbg入门系列(六)- 实战硬件断点
在堆栈中发现了下图的关键信息。”1234“这个就是我们发送的信息。在该地址处下一个硬件写入断点。
x64dbg入门系列(六)- 实战硬件断点
重新发送信息后,程序在下图位置断下。这里的函数看着很难受,直接运行到返回处查看上一层代码。
x64dbg入门系列(六)- 实战硬件断点
下图就是上一层代码的调用处,这个函数也就是发送消息的函数了。
x64dbg入门系列(六)- 实战硬件断点
进去查看函数代码,这里我们发现代码似乎是加了混淆。
x64dbg入门系列(六)- 实战硬件断点
查看区段果然有一个区段加了VMP。
x64dbg入门系列(六)- 实战硬件断点
#小节
找到此位置我们可以做很多操作,比如自己做个发送消息的程序等等,因为本节的知识是硬件断点,所以就不带着大家写代码了。 |