如何更改程序的socket绑定端口?没有源代码

时间:2011-01-01 05:46:15

标签: windows sockets windbg

问题:

我在Windows上有一个程序 dummy.exe 。 启动后,该程序将绑定到 UDP端口5060 。 但另一个程序也想绑定端口5060。

我做了什么:

  1. 使用windbg启动dummy.exe,并在ws2_32!bind
  2. 上设置断点
  3. 当断点命中时,我用命令 ew
  4. 更改了参数(端口值)
  5. 这个dummy.exe将绑定到新端口,并且运行良好。
  6. 问题:

    • 我怎么能轻易做到这一点?写一个 简单的Windows调试器?
    • 也许我可以黑客攻击或修改 dummy.exe文件,但该怎么做?
    • 你的方法是什么?

    谢谢

    EDIT1:

    非常感谢@Cody Gray和@cdhowie

    1. 此软件不提供更改端口的功能。
    2. 我需要使用此软件与也使用此软件的其他人进行交流。
    3. 对于'简单'调试器,我的意思是用标志调用CreateProcess DEBUG_PROCESS启动dummy.exe和WaitForDebugEvent,然后挂钩ws2_32!bind 函数修改端口参数,但我不确定它是否正常工作
    4. 我使用UltraEdit查找值0x13C4(5060),但在我更改了值之后, 它不起作用:(,有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我在这里看到两个选项。首先,按照您已经提到的内容,您可以使用挂钩在运行时将参数修补到bind()调用。这样做的热门图书馆是DetoursmadCodeHook,例如。这肯定有用,我以前自己这样做。

您已经提到的第二个选项,虽然我建议不使用十六进制编辑器来简单地搜索这些值,但文件中可能会出现多次并仅使用十六进制编辑器,可能很难找到正确对象,真爱。但是,您可以使用能够将修改后的映像写回磁盘的调试器。 OllyDbg提供了一种非常舒适的方法。

我建议使用挂钩方法,这样,您可以在绑定周围注入代码以从配置文件中读取端口,或者类似,以避免需要修补可执行文件或重新编译代码时间再一次。