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

Posted

技术标签:

【中文标题】如何在 Windows 应用程序中对加扰数据包进行反向工程?【英文标题】:How can I reverse engineer scrambled packets in a windows app? 【发布时间】:2010-10-07 09:46:25 【问题描述】:

我有一个 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 的名称...

【问题讨论】:

【参考方案1】:

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

查看here 了解有关 API 挂钩的一些信息。你还需要一个好的调试器试试来自微软的Windbg。

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

+---------------+ 输入--------->|原始应用程序|--------->响应1 +---------------+ +------------+ 输入--------->|修改后的应用程序 |--------->Response2 +------------+

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

【讨论】:

【参考方案2】:

我假设编写此 hook 的人已挂钩相关的 Windows 套接字 API (WSASendsend 等)或挂钩用于发送/接收数据的内部程序函数。

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

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

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

【讨论】:

感谢您的帮助 - 如果您愿意,我当然可以上传二进制文件和 dll,但如果没有支持资源文件,您将无法运行它,它需要大量 3gigs(它是毕竟是游戏客户端)。不,我不是想作弊,只是想模仿客户。 只要上传一个hook模块的副本,我应该可以从中提取加密和解密算法。 现在看,好像装了三个钩子。第一个钩子是 kernel32.LoadLibraryExW 钩子,它阻止“wpespy.dll”、“ragmedic.dll”、“netredirect.dll”和“rpe.dll”被加载。另外两个是普通的 ws2_32.send 和 ws2_32.recv 钩子。 你是如何解决这个问题的?我(以及想让这个模拟器运行)想了解这些东西,但我在 win32 API 编程方面的经验太少(我是一名 Java 开发人员)。 这些 dll 名称 - 是的,这些都是监视数据包的程序(十六进制客户端希望阻止其工作),并且 netredirect.dll 是通过重定向工作的旧模拟器的一部分从旧客户端到自身的所有流量(当然,它不再有效)。

以上是关于如何在 Windows 应用程序中对加扰数据包进行反向工程?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WinForms 中对 URL 进行编码?

在散列之前加扰加盐密码。好主意?

LTE-5G学习笔记31--5G NR的加扰与解扰

LTE-5G学习笔记31--5G NR的加扰与解扰

如何在 Swift 中的位置上设置加扰字母的动画?

在 C# Windows 窗体中对字典进行排序[重复]