我有一个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的名称......
答案 0 :(得分:3)
我假设编码此 hook 的人为上述程序的数据包I / O添加了加密功能挂钩相关的Windows'套接字API (WSASend
,send
等)或挂钩用于发送/接收数据的内部程序函数。
话虽如此,我建议您使用钩子检测程序(例如 RkUnhooker )来找出实际被挂钩的内容。一旦你知道哪些API被挂钩,你也应该知道这些钩子的去向,从那里你必须手动逆向工程钩子函数。
至于学习如何做到这一点的主题,我不能指导你只有一个教程教你一切,但我强烈建议你看看Tuts4You网站,它有很多教程,将满足您的所有需求。
如果可能,请上传已编辑客户端的副本。钩子DLL,如果我有时间我会代码你复制加密&解密功能。
答案 1 :(得分:2)
您需要挂钩附加DLL导出的函数,并查看被调用的函数和传递给它们的参数。这并不容易,因为您没有类型信息(例如DLL导出的函数签名。)
查看here以获取有关API挂钩的一些信息。你还需要一个好的调试器试试来自microsoft的Windbg。
据我所知,这里唯一的选择是黑盒测试,即为两个系统提供已知输入,并将响应相互比较,以找出差异和相似之处。
+--------------+ Input--------->| Original App |--------->Response1 +--------------+ +------------+ Input--------->| Modded App |--------->Response2 +------------+
现在,一旦你弄清楚如何使用附加dll中的函数,你可以像原始应用程序一样自己使用它。