【问题标题】:x64 asm Hooking winsocket2 Connect()x64 asm 挂钩 winsocket2 Connect()
【发布时间】:2018-08-27 18:14:10
【问题描述】:

我制作了一个基本的 C# 工具,可以打开一个绑定到我的服务器的 shell。 假设 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 连接,它没有连接到我的第一台服务器,而是我的第二台服务器,这正是我想要的。

但在查看了两台服务器后,我没有看到任何传入连接。 一段时间后,“源代码管理”中的连接消失了,同时也没有数据包发送。

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

【问题讨论】:

  • 在您的情况下,您需要尝试使用导入地址表挂钩

标签: assembly proxy 64-bit hook


【解决方案1】:

找了半天,终于找到答案了。 事实证明一切都是正确的,但在发送我的第一个数据包之前我不得不等待。 内核尚未创建连接,导致send() 失败。 为了解决这个问题,我最终做了一个Send(),检查WSAGetLastError(),并重复直到它成功。为了防止卡在 inf 循环中,我添加了一个计数器,该计数器在几次尝试后会超时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2013-12-31
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    相关资源
    最近更新 更多