5

我有一个 Windows exe 应用程序,用于将数据包明文发送到服务器。这个应用程序(让我们称之为客户端应用程序)绝对是封闭源的,但是一些聪明的黑客对二进制文件进行了十六进制编辑,并让它发送被加扰的数据包。

现在,显然,这些数据包以一种可破译的方式进行了加扰(否则服务器将无法理解它),但我想做的是编写一个仿真器来模拟这个二进制应用程序,将相同的数据包发送到服务器,并且能够解读响应(如果它被加扰)。

十六进制客户端需要额外的 dll 才能运行,而旧客户端则不需要。我假设十六进制客户端设法以某种方式加载该dll(让我们称之为client.dll)并且该dll的功能是通过连接到一些重新路由从发送的所有数据包的windows api来实现加扰/解扰client.exe 进程。

如果有人可以指导我如何开始研究这一切是如何工作的,以及我如何对加扰进行逆向工程,那将非常感激。

我不知道要提供什么样的信息,但如果有任何不足,请回复,我会发布更多详细信息,如果有人想要二进制文件,我很乐意提供。


任何感兴趣的各方的二进制下载:

http://dl.getdropbox.com/u/46623/client.dll

http://dl.getdropbox.com/u/46623/newClient.exe

http://dl.getdropbox.com/u/46623/originalClient.exe

这些不会运行,因为需要资源文件 - 它们大约 3 gig,所以太大而无法上传到任何地方。名称已更改以保护有罪 =) ,但这可能不保护 dll 的名称...

4

2 回答 2

3

我假设编写这个钩子的人为上述程序添加了对数据包 I/O 的加密,要么钩住了相关的 Windows 的套接字 API(WSASendsend等),要么钩住了用于发送/接收数据的内部程序函数.

话虽如此,我建议您使用钩子检测程序(例如RkUnhooker)来找出实际被钩子的内容。一旦您知道挂钩了哪些 API,您还应该知道这些挂钩的去向,并且从那里开始您将不得不手动对挂钩函数进行逆向工程。

至于学习如何做到这一点,我不能只指导你一个教程来教你所有东西,但我强烈建议你看看Tuts4You网站,它有大量的教程可以满足你的所有需求。

如果可能,请上传已编辑的客户端和挂钩 DLL 的副本,如果我有时间,我会为您编写副本加密和解密功能。

于 2009-02-13T08:39:53.417 回答
2

您需要挂钩附加 DLL 导出的函数,并查看被调用的函数和传递给它们的参数。这并不容易,因为您没有类型信息(例如 DLL 导出的函数签名。)

在此处查看有关 API 挂钩的一些信息。你还需要一个好的调试器试试微软的Windbg

据我所知,您在这里唯一的选择是黑盒测试,即向两个系统提供已知输入,并相互比较响应以找出差异和相似之处。

               +---------------+
输入--------->| 原始应用程序|--------->响应1
               +---------------+

               +------------+
输入--------->| 修改后的应用程序 |--------->Response2
               +------------+

现在,一旦您弄清楚如何使用附加 dll 中的功能,您就可以像原始应用程序一样自己使用它。

于 2009-02-13T08:39:31.500 回答