Assembly 在已编译的可执行文件中更改tcp数据包头的简单方法?

Assembly 在已编译的可执行文件中更改tcp数据包头的简单方法?,assembly,tcp,winsock,cracking,Assembly,Tcp,Winsock,Cracking,我有一个可执行文件(可能是用c++编写的),它使用tcp和windows套接字(win-sock api)连接到服务器端软件 然后它发送带有头(例如头是两个字节0x0064)、登录名和密码的数据包。 然后开始与服务器的交互 例如,我想将登录数据包头从0x0064更改为0x0065 当然,我总是可以在我的PC上使用类似于WPE(winsock数据包编辑器)的嗅探器来更改它,或者我可以使用带有套接字发送函数包装的Microsoft Detours编写dll,并在程序启动之前注入它,但我必须检查将要发

我有一个可执行文件(可能是用c++编写的),它使用tcp和windows套接字(win-sock api)连接到服务器端软件

然后它发送带有头(例如头是两个字节0x0064)、登录名和密码的数据包。 然后开始与服务器的交互

例如,我想将登录数据包头从0x0064更改为0x0065

当然,我总是可以在我的PC上使用类似于WPE(winsock数据包编辑器)的嗅探器来更改它,或者我可以使用带有套接字发送函数包装的Microsoft Detours编写dll,并在程序启动之前注入它,但我必须检查将要发送的每个数据包,要知道它有0x0064报头,而它正是我想要更改的数据包

所以,我的问题是——有没有简单的方法可以找到这个数据包头的变量(我相信他们只是在构建数据包时硬编码的,就像在sprintf中一样),并且只在十六进制编辑器中更改一个字节而不必学习汇编程序?也许有一个很好的教程/crackme示例和解决方案可以解释如何做到这一点


任何建议都会有帮助。谢谢

问题不在于更改字节。问题在于找到要更改的正确字节。如果可执行文件很小,那么幸运的是,您可以通过十六进制字节搜索
0x64 0x00
(x86/x86-64体系结构是little-endian)找到正确的编辑位置。然后您只需将特定的
0x64
替换为
0x65
。有时修改可执行文件很容易,但通常不是,然后你真的需要使用调试器和/或反汇编程序,使用它们中的任何一个都需要至少对所讨论的汇编语言有一些基本的了解(在本例中是x86或x86-64)。我完全理解问题在于找到正确的字节。不幸的是,我不太熟悉反汇编,所以可能有一些简单的指南/破解我的例子/教程,任务与我的类似,我可以从哪里开始?可能有用。最近的一个SO问题中提到了这一点。