为什么我的远程线程注入没有执行啊??? 50

我的程序有三个部分:1、主程序。2、钩子dll。3、注入dll程序执行思路:窗口上有一个按钮,单击了之后窗口会隐藏,然后设置了一个全局钩子,当按下home键的时候,就把当... 我的程序有三个部分:1、主程序。2、钩子dll。3、注入dll
程序执行思路:窗口上有一个按钮,单击了之后窗口会隐藏,然后设置了一个全局钩子,当按下home键的时候,就把当前进程句柄保存下来,然后向主程序发送WM_USER+100消息,进程句柄通过wParam传递,然后显示主程序,接着主程序收到这个消息,在远程进程中分配一块内存空间,写入注入dll的路径,然后创建远程线程,线程地址是LoadLibraryA的地址。注入dll的DLL_PROCESS_ATTACH中我只写了一个MessageBox,按理说远程线程创建了之后应该弹出一个消息框,但是没有,不知道原因
代码如下:
主程序----------------------------------------------------------------------
if(uMsg==WM_USER+100)
{
UnhookWindowsHookEx(hhook);
char chdir[MAX_PATH];
GetCurrentDirectory(MAX_PATH,chdir);
char chdll[]="\\search.dll";
memcpy(&chdir[strlen(chdir)],chdll,strlen(chdll)+1);
void* startaddress=VirtualAllocEx((HANDLE)wParam,0,strlen(chdir)+1,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(!startaddress)
MessageBox(hwnd,"virtualalloc error","",0);
if(!WriteProcessMemory((HANDLE)wParam,startaddress,chdir,strlen(chdir)+1,0))
MessageBox(hwnd,"writeprocessmemory error","",0);
PTHREAD_START_ROUTINE pstart=(PTHREAD_START_ROUTINE)GetProcAddress(
GetModuleHandle("kernel32"),"LoadLibraryA");
HANDLE hthread=CreateRemoteThread(
(HANDLE)wParam,
0,
0,
pstart,
startaddress,
0,
0);
if(!hthread)
{
MessageBox(hwnd,"createremotethread error","",0);
VirtualFreeEx((HANDLE)wParam,startaddress,strlen(chdir)+1,MEM_RELEASE);
return 1;
}
WaitForSingleObject(hthread,INFINITE);
VirtualFreeEx((HANDLE)wParam,startaddress,strlen(chdir)+1,MEM_RELEASE);
return 1;
}
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
展开
 我来答
百度网友32cdd9945
2013-07-13 · TA获得超过1374个赞
知道大有可为答主
回答量:2429
采纳率:100%
帮助的人:1932万
展开全部
可以用
GetCurrentProcessId
得到id,然后传到主线程里,再用
OpenProcess
打开这个id,就可以得到进程handle了。
不过话说 hook的dll就已经在远程进程里面的了,你还需要什么远程注入啊。
追问
请问你后面说的远程注入是什么思路啊?远程注入不是把自己的dll让别的进程加载吗?
空雪梦见
2013-07-13 · TA获得超过5597个赞
知道大有可为答主
回答量:2522
采纳率:75%
帮助的人:1199万
展开全部
进程句柄在不同进程间不通用。我猜测问题出在这里
你的wParam是通过DuplicateHandle复制过来的句柄吗?如果不是,那么你用不了这个句柄
如果是GetCurrentProcess获取的,那么通过消息送过来,这个句柄也还是Current Process。就有点像“今天”,到了“明天”以后“明天”也变成“今天”这种感觉。
更多追问追答
追问
我就是用GetCurrentProcess获取的啊,然后通过wParam传过来的,进程的句柄应该不会变吧?
追答
所以才不行啊。GetCurrentProcess你查查msdn里面怎么写的……

它返回的句柄表示的是“当前进程”,这个“当前”是带着走的。比如你在a.exe里调用的,它就代表a.exe这个进程,你把它发送到b.exe,它代表的含义就变成b.exe这个进程了。
不同进程间,句柄是不能通用的。
你需要DuplicateHandle函数,去看一下这个函数的用法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式