- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
发表于 2011-4-2 09:43:35
|
显示全部楼层
这个没必要返回吧,当一个过程调用,这里有个例子,我是菜鸟
- procedure InjectFunc(N_Pid: THandle; FunName: Pointer; Param: Pointer; ParamSize:DWORD);stdcall;
- var
- FunNameaddr: pointer; //申请函数内存地址
- Paramaddr: pointer; //申请参数内存地址
- NumberOfByte: Dword; //辅助返回值
- TempHandle, phandle: Thandle; //远程句
- begin
- phandle := OpenProcess(PROCESS_ALL_ACCESS, False, N_Pid);
- //通过进程ID取得进程句柄
- FunNameaddr := VirtualAllocEx(phandle, nil, 2048, MEM_COMMIT,
- PAGE_EXECUTE_READWRITE); //申请内
- Paramaddr := VirtualAllocEx(phandle, nil, ParamSize, MEM_COMMIT,
- PAGE_EXECUTE_READWRITE); //写内存
- WriteProcessMemory(phandle, FunNameaddr, FunName, 2048, NumberOfByte);
- WriteProcessMemory(phandle, Paramaddr, Param, ParamSize, NumberOfByte);
- TempHandle := CreateRemoteThread(phandle, nil, 0, FunNameaddr, Paramaddr, 0,
- NumberOfByte); //远程运行
- WaitForSingleObject(TempHandle, INFINITE); //等待执行完成
- VirtualFreeEx(phandle, FunNameaddr, 2048, MEM_RELEASE); //释放申请有内存
- VirtualFreeEx(phandle, Paramaddr, ParamSize, MEM_RELEASE);
- CloseHandle(TempHandle); //释放远程句柄
- CloseHandle(phandle); //关闭进程句柄
- end;
复制代码 |
|