首页
社区
课程
招聘
关于CreateRemoteThread执行远程进程函数的问题
发表于: 2012-2-8 10:48 6885

关于CreateRemoteThread执行远程进程函数的问题

2012-2-8 10:48
6885
看了一个教程,它是这么操作的,有一个小的测试程序,通过OD找到它里面一个功能函数的地址,然后用CreateRemoteThread,其中lpStartAddress参数用的就是找到的这个地址。看教程里是可以执行成功的,可是我写的程序就是执行不成功,总是使目标程序崩溃。。求教大牛,谢谢..
操作系统 是winxp sp3,目标程序和测试程序都是用VS2008编写的

不好意思,没有贴代码,代码如下:其中mygame是自己写的简单的目标程序

game_win = ::FindWindow(NULL, _T("mygame"));
	::GetWindowThreadProcessId(game_win, &game_id);
	printf("mygame's ID is %d\n", game_id);
	game_h = ::OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ  , false, game_id);
	if (game_h == NULL)
	{
		printf("get process handle failed ,the error code is %d\n", ::GetLastError());
	}
	if ([COLOR="Red"]::CreateRemoteThread(game_h, NULL,0, (LPTHREAD_START_ROUTINE)0x00404739 , NULL, 0, NULL)[/COLOR] == NULL)
	{
		printf("Remote Call Fail\n err_code is %d", ::GetLastError());
	}
	
	::CloseHandle(game_h);


不想看代码的在侠我大大概说一下,就是常规的几步:
找到进程窗口
得到进程序ID
打开进程
然后就是
::CreateRemoteThread(game_h, NULL,0, (LPTHREAD_START_ROUTINE)0x00404739 , NULL, 0, NULL)
这里的0x00404739就是从mygame里找到的一个功能函数,想实现远程调用它。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 227
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
贴一下代码先
2012-2-8 11:06
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不好意思,没有贴代码,代码如下:其中mygame是自己写的简单的目标程序

game_win = ::FindWindow(NULL, _T("mygame"));
	::GetWindowThreadProcessId(game_win, &game_id);
	printf("mygame's ID is %d\n", game_id);
	game_h = ::OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ  , false, game_id);
	if (game_h == NULL)
	{
		printf("get process handle failed ,the error code is %d\n", ::GetLastError());
	}
	if ([COLOR="Red"]::CreateRemoteThread(game_h, NULL,0, (LPTHREAD_START_ROUTINE)0x00404739 , NULL, 0, NULL)[/COLOR] == NULL)
	{
		printf("Remote Call Fail\n err_code is %d", ::GetLastError());
	}
	
	::CloseHandle(game_h);


不想看代码的在侠我大大概说一下,就是常规的几步:
找到进程窗口
得到进程序ID
打开进程
然后就是
::CreateRemoteThread(game_h, NULL,0, (LPTHREAD_START_ROUTINE)0x00404739 , NULL, 0, NULL)
这里的0x00404739就是从mygame里找到的一个功能函数,想实现远程调用它。
2012-2-8 11:20
0
雪    币: 34
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
调用线程函数参数传的正确吗?0x00404739  这个函数的参数传的对吗? 可以把源程序发上来吗? 一起研究一下。
2012-2-8 16:03
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵,很简单的一个小程序 ,点“ADD“Button数字变大,SUB数字减小,现在想实现远程调用这两个函数

mygame111.rar
上传的附件:
2012-2-8 16:52
0
雪    币: 34
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
1.其实不用要你的程序,我给忘了。add 和sub按钮是主窗口的两个控件,控件的窗口处理函数是系统写好的,由系统调用,所以创建线程调用的地址肯定是错的。
2.我觉得你的思路不太正确,应该模仿系统调主程序的WinProc,线程地址是WinProc的地址。传的参数是消息。消息类型是WM_COMMAND,控件ID用spy++来查。
3.或者调用SendMessage函数。
2012-2-8 18:27
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
郁金香课上不是讲了嘛。。
2012-2-8 19:20
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
yxgbo 说的应该是对的,我也又试了一下,用普通函数确实可以搞定。。。想想On..函数还是类成员函数呢。还有一个参数this得传呢。。是不?
2012-2-9 08:20
0
雪    币: 34
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我不会mfc编程,对api看过一些,感觉应该调WncProc吧? 因为是WncProc实现数值的加减?同时谢谢你的10Kx,我成会员了,哈哈~
2012-2-9 10:04
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
远程调用的是类函数的话 需要this指针 或者其他寄存器的值
2012-2-9 12:00
0
雪    币: 269
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
调什么wndproc....根本不用远程线程,直接SendMessage,win32k.sys会帮你调用wndproc的 :)
2012-2-13 18:05
0
游客
登录 | 注册 方可回帖
返回
//