通过TCP发送进程句柄
我在一个系统上用C创建了一个简单的服务器,在另一个系统上创建了一个客户端。我的目标是获取服务器上运行的进程,将其进程句柄发送到连接系统,并使用ReadProcessMemory读取和解释特定的数据值 我很清楚在不同的体系结构上进行数据传输所带来的问题,这就是我希望在尝试这样一项困难的任务之前,看看我提出的建议是否可行。我的问题如下:通过TCP发送进程句柄,c,sockets,tcp,handle,winsock2,C,Sockets,Tcp,Handle,Winsock2,我在一个系统上用C创建了一个简单的服务器,在另一个系统上创建了一个客户端。我的目标是获取服务器上运行的进程,将其进程句柄发送到连接系统,并使用ReadProcessMemory读取和解释特定的数据值 我很清楚在不同的体系结构上进行数据传输所带来的问题,这就是我希望在尝试这样一项困难的任务之前,看看我提出的建议是否可行。我的问题如下: 在我的例子中,句柄仅仅是对进程的引用吗?这意味着,如果我成功地将进程句柄发送给客户端,我将无法对其执行任何操作 如果上述情况属实,是否有某种方式可以拍摄快照或转储进
句柄
作为参数传递给Windows API,以与相应的进程/window/etc交互,因此除了标识之外,它对远程系统没有任何用处对于任何网络通信,必须特别注意字节顺序。只能从与句柄所属的进程在同一台机器上运行的进程调用
ReadProcessMemory()
调用
服务器可以将句柄传递给它认为是远程客户端的对象,但是实际的接收方可以是与服务器运行在同一台机器上的代理进程。然后,客户机指示代理需要读取哪些值,代理读取并返回这些值
Client Machine Server Machine
-------------- --------------
+--------+ +-------+ +--------+
| Client | | Proxy | | Server |
+--------+ +-------+ +--------+
|- Get HANDLE ------------->| |
| |- Get HANDLE -->|
| |<------ HANDLE -|
|<------------- Got HANDLE -| |
|- Read data value x ------>|
| |ReadProcessMemory()
|<------------- value of x -|
|- Read data value y ------>|
| |ReadProcessMemory()
|<------------- value of y -|
客户端计算机服务器计算机
-------------- --------------
+--------+ +-------+ +--------+
|客户端| |代理| |服务器|
+--------+ +-------+ +--------+
|-获取句柄----------------->|
||-获取句柄-->|
||对于进程句柄,句柄是机器本地属性。发送到另一台机器是没有意义的,它不能用它做任何事情<代码>ReadProcessMemory()
不能跨计算机边界使用。如果客户机和服务器在同一台机器上,那么它将工作。至于如何发送句柄
,它只是一个指针,所以键入cast将其转换为int
(32位系统)或\u int64
(64位系统)并发送,然后键入cast将其转换回另一侧的句柄
。当然,这意味着客户端和服务器都必须是32位或64位进程,因此句柄
具有正确的含义,否则就有截断值的风险。