问题简介:我有一个二进制可执行文件,其网络数据包协议未知。我想对这个数据包协议进行逆向工程。我目前的做法是发送一些数据并逐步执行反汇编中的说明,以尝试弄清楚应用程序正在使用这些数据做什么,并逐步构建正确的协议。这种解决方案效率极低。所以我想至少自动化这个过程的一部分。
假设我的网络接收功能是:
int recv(SOCKET s, char * buf, int len, int flags);
我想要做的是自动跟踪读取指向的内存块的所有指令 char * buf
mov eax, [globalRecvBufferPointer]
mov dl, [eax]
cmp dl, 20h
jz somewhere
在上面的示例中,我希望我的自动化工具能够检测mov dl, [eax]
和cmp dl, 20h
指示。
添加硬件 r/w 断点char * buf
让我检测mov dl, [eax]
而不是另一个。
在这个阶段我能想到的另一个问题是当指向的内存char * buf
被复制到堆栈或其他内存位置时。
这种操作有现成的工具吗?如果没有,是否有工具可以实现这个想法?