function NewNtResumeThread(hThread:Cardinal;PreviousSuspendCount:PULONG):Cardinal;stdcall;
type
TNewNtResumeThread=function (hThread:Cardinal;PreviousSuspendCount:PULONG):Cardinal;stdcall;
begin
if vspas then
begin
vspas:=False;
htd:=InjectTo(String(curfile), Shared^.localdll+'main.dll');
curfile:='';
//WaitForSingleObject(htd,INFINITE );
end;
Hook[6].UnHook;
Result:=TNewNtResumeThread(Hook[6].BaseAddr)(hThread,PreviousSuspendCount);
Hook[6].Hook;
end;为了hook住控制台程序,在上面加入了WaitForSingleObject(htd,INFINITE );但加入这句后,不是控制台程序则运行时不能正常运行,运行时,在插入的线程结束后就自己退出了!也没有错误提示!
不加WaitForSingleObject则可以,但hook不住控制台程序或不含GUI的程序!
我想要的是能hook住所有的程序创建,现在就剩下这个问题搞不定!
请大家帮我写下,指下,问题出在哪?
type
TNewNtResumeThread=function (hThread:Cardinal;PreviousSuspendCount:PULONG):Cardinal;stdcall;
begin
if vspas then
begin
vspas:=False;
htd:=InjectTo(String(curfile), Shared^.localdll+'main.dll');
curfile:='';
//WaitForSingleObject(htd,INFINITE );
end;
Hook[6].UnHook;
Result:=TNewNtResumeThread(Hook[6].BaseAddr)(hThread,PreviousSuspendCount);
Hook[6].Hook;
end;为了hook住控制台程序,在上面加入了WaitForSingleObject(htd,INFINITE );但加入这句后,不是控制台程序则运行时不能正常运行,运行时,在插入的线程结束后就自己退出了!也没有错误提示!
不加WaitForSingleObject则可以,但hook不住控制台程序或不含GUI的程序!
我想要的是能hook住所有的程序创建,现在就剩下这个问题搞不定!
请大家帮我写下,指下,问题出在哪?
但如果一直在cmd里输入cmd cmd cmd 后面的就hook不到了,期待解答?
vspas是在像createprocessw winexec等创建的时候让vspas:=True;
这样就可以判断进程创建的时候!
type
TNewNtResumeThread=function (hThread:Cardinal;PreviousSuspendCount:PULONG):Cardinal;stdcall;
begin
if vspas then
begin
//A
vspas:=False;
htd:=InjectTo(String(curfile), Shared^.localdll+'main.dll'); //B
curfile:='';
WaitForSingleObject(htd,INFINITE );
end;
//C
Hook[6].UnHook;
Result:=TNewNtResumeThread(Hook[6].BaseAddr)(hThread,PreviousSuspendCount);
Hook[6].Hook;
end;
我调试过!用来注入的进程会从上面function里的 A 开始 执行到B后面就会开始WaitForSingleObject
这时被注入的程序会load 这个dll 执行时就直接从C开始了,并没有执行InjectTo,就结束!
然后用来注入的进程再WaitForSingleObject htd改变时,就执行下面的B C 完了后,被打开的记事本闪了一下就结束了! 不知道什么问题!
你把自己都注入了, 要注入的反倒没注入?
Result:=TNewNtResumeThread(Hook[1].BaseAddr)(hThread,PreviousSuspendCount);
Hook[1].Hook;
然后openprocess得到句柄,用pid枚举目标进程模块(EnumProcessModules),
getmodulefilenameex获得模块路径,判断有没有自己的模块,
如果有,就不是创建调用,否则就injectto还可以hook ntcreateprocess, ntcreateprocessex,
调用原函数前vspas:=True;