DLL多线程注入后如何Hook主线程?

RT,DLL用创建远程线程的方法注入后如何对主窗口或主线程进行Hook?... RT,DLL用创建远程线程的方法注入后如何对主窗口或主线程进行Hook? 展开
 我来答
匿名用户
2015-06-26
展开全部
function show:integer;stdcall; //声明函数
external 'sos.dll';

procedure InjectFunc(InHWND: HWND; Func: Pointer; Param: Pointer; ParamSize: DWORD);
var
hProcess_N: THandle;
ThreadAdd, ParamAdd: Pointer;
hThread: THandle;
ThreadID: DWORD;
lpNumberOfBytes:DWORD;
begin
GetWindowThreadProcessId(InHWND, @ThreadID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);
WriteProcessMemory(hProcess_N, ThreadAdd, Func, 4096, lpNumberOfBytes);
ParamAdd := VirtualAllocEx(hProcess_N, nil, ParamSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess_N, ParamAdd, Param, ParamSize, lpNumberOfBytes);
hThread := CreateRemoteThread(hProcess_N, nil, 0, ThreadAdd, ParamAdd, 0, lpNumberOfBytes);
ResumeThread(hThread);
WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(hProcess_N, ThreadAdd, 4096, MEM_RELEASE);
VirtualFreeEx(hProcess_N, ParamAdd, ParamSize, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess_N);
end;
上面的注入函数
procedure TForm1.Button2Click(Sender: TObject);
var
inhwnd:Hwnd;
ThreadID: DWORD;
hProcess_N: THandle;
begin
inhwnd:= FindWindow(nil,'shadow');
GetWindowThreadProcessId(InHWND, @ThreadID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);
injectfunc(InHWND,@show,nil,0);

end;
这个是调用函数,请大大门看看. injectfunc(InHWND,@show,nil,0);这个句。我第3个和第4个参数不太明白是什么意思.因为我自己写个EXE推测市的时候,那个注入函数并不需要传参的,哪位有这方面的例子最好拿出来了.谢谢
在打包生成exe的时候,native executable builder,在第三步,选择数据库,在选择 include required classes and known resource这一项。在后面的选项中手动指向你的主类。试一下。原来我也遇到过这样的问题,按照上面的设置后可以正常使用了。
手机用户64964
2011-10-24 · 超过30用户采纳过TA的回答
知道答主
回答量:183
采纳率:0%
帮助的人:88.7万
展开全部
function show:integer;stdcall; //声明函数
external 'sos.dll';

procedure InjectFunc(InHWND: HWND; Func: Pointer; Param: Pointer; ParamSize: DWORD);
var
hProcess_N: THandle;
ThreadAdd, ParamAdd: Pointer;
hThread: THandle;
ThreadID: DWORD;
lpNumberOfBytes:DWORD;
begin
GetWindowThreadProcessId(InHWND, @ThreadID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);
WriteProcessMemory(hProcess_N, ThreadAdd, Func, 4096, lpNumberOfBytes);
ParamAdd := VirtualAllocEx(hProcess_N, nil, ParamSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess_N, ParamAdd, Param, ParamSize, lpNumberOfBytes);
hThread := CreateRemoteThread(hProcess_N, nil, 0, ThreadAdd, ParamAdd, 0, lpNumberOfBytes);
ResumeThread(hThread);
WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(hProcess_N, ThreadAdd, 4096, MEM_RELEASE);
VirtualFreeEx(hProcess_N, ParamAdd, ParamSize, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess_N);
end;
上面的注入函数
procedure TForm1.Button2Click(Sender: TObject);
var
inhwnd:Hwnd;
ThreadID: DWORD;
hProcess_N: THandle;
begin
inhwnd:= FindWindow(nil,'shadow');
GetWindowThreadProcessId(InHWND, @ThreadID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);
injectfunc(InHWND,@show,nil,0);

end;
这个是调用函数,请大大门看看. injectfunc(InHWND,@show,nil,0);这个句。我第3个和第4个参数不太明白是什么意思.因为我自己写个EXE推测市的时候,那个注入函数并不需要传参的,哪位有这方面的例子最好拿出来了.谢谢
在打包生成exe的时候,native executable builder,在第三步,选择数据库,在选择 include required classes and known resource这一项。在后面的选项中手动指向你的主类。试一下。原来我也遇到过这样的问题,按照上面的设置后可以正常使用了。

希望对你有点帮助!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式