x64 asm Hooking winsocket2 Connect()

时间:2018-08-27 18:14:10

标签: assembly proxy 64-bit hook

我已经制作了一个基本的C#工具,该工具打开了到我的服务器的绑定外壳。 假设IP为192.168.0.101,端口为9500。

我的目标是将流量从C#工具路由到第二台服务器,可以说它位于192.168.0.102并使用相同的端口。

为了得到我想要的东西,我尝试钩住ws2_32.dll函数“ WSAConnect”。 在C#中添加了调试器,在函数上设置了断点,毕竟我发现RDX拥有指向我要修改的内容的“ sockaddr”。

前2个字节是0x02 0x00,代表ipv4的用法。 第二个2是我的端口(以十六进制表示),第二个4是我的IP(以十六进制表示)。 从那里,我修改了这些字节以获得所需的内容,并使程序继续运行。

要检查它是否有效,我使用了“任务管理器”中的“源代码控制”,并查看了我的C#应用​​程序。从那里,我看到一个TCP连接没有到达我的第一台服务器,而是到第二台服务器,这正是我想要的。

但是在查看两台服务器后,我没有看到传入的连接。 过了一会儿,“源代码控制”中的连接消失了,那里也没有数据包同时发送。

我的连接没有启动怎么回事?我忽略了什么吗?

1 个答案:

答案 0 :(得分:0)

经过很长一段时间,我终于找到了答案。 因此,事实证明一切都正确,但是我不得不等待发送第一个数据包。 连接尚未创建,所以我的send()失败。 所以我最终做了一个Send(),检查WSAGetLastError()并重复执行,直到成功 (当然,我为该循环添加了超时,以避免发生inf循环)