如何在Windows应用程序中对加扰的数据包进行逆向工程?

时间:2009-02-13 08:29:34

标签: windows dll encryption reverse-engineering code-injection

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

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

hex-ed客户端需要额外的dll才能运行,而旧客户端则没有。我假设以某种方式十六进制客户端设法加载该DLL(让我们称之为client.dll)和该DLL的功能是实现加扰/解扰,通过挂钩到一些窗口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演出,因此太大而无法上传到任何地方。名称已被更改以保护guilty =),但这可能不会保护dll的名称......

2 个答案:

答案 0 :(得分:3)

我假设编码此 hook 的人为上述程序的数据包I / O添加了加密功能挂钩相关的Windows'套接字API (WSASendsend等)或挂钩用于发送/接收数据的内部程序函数。

话虽如此,我建议您使用钩子检测程序(例如 RkUnhooker )来找出实际被挂钩的内容。一旦你知道哪些API被挂钩,你也应该知道这些钩子的去向,从那里你必须手动逆向工程钩子函数。

至于学习如何做到这一点的主题,我不能指导你只有一个教程教你一切,但我强烈建议你看看Tuts4You网站,它有很多教程,将满足您的所有需求。

如果可能,请上传已编辑客户端的副本。钩子DLL,如果我有时间我会代码你复制加密&解密功能。

答案 1 :(得分:2)

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

查看here以获取有关API挂钩的一些信息。你还需要一个好的调试器试试来自microsoft的Windbg

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

               +--------------+
Input--------->| Original App |--------->Response1
               +--------------+

               +------------+
Input--------->| Modded App |--------->Response2
               +------------+

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