想hook CreateProcess(),200分请教

superban 2005-02-13 05:51:23
想hook CreateProcess(),在win2000中限制应用程序的执行。
做法参照Jeffrey Richter的CAPIHook类,加入了KERNEL32.dll的CreateProcessA和CreateProcessW,但HOOK不住,这个类应该是全局钩子,为何不行?
我试过HOOK WH_CBT和WH_GETMESSAGE消息都不行。

请有经验的战友指教。
给分100,再送100。
...全文
701 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
superban 2005-03-06
  • 打赏
  • 举报
回复
已用jump搞定
www_1652 2005-03-02
  • 打赏
  • 举报
回复
to linuxpgy(永远):首先对你的帮助表示感谢!另外,此问题还有一种方法,那就是只要把ReplaceIATEntryInOneMod()函数中的WriteProcessMemory(GetCurrentProcess(),ppfn,&pfnHook,sizeof(pfnHook),NULL);
这一句改为如下代码即可拦截所有的程序了:
DWORD dwIdOld;
// The addresses match, change the import section address
VirtualProtectEx(GetCurrentProcess(),ppfn,sizeof(pfnNew),PAGE_READWRITE,&dwIdOld);//修改所属进程中属性为可写
WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew,
sizeof(pfnNew), NULL);
VirtualProtectEx(GetCurrentProcess(),ppfn,sizeof(pfnNew),dwIdOld,&dwIdOld);
另外,在这里想请问大家另外一个问题,可以用此方法hook住createfilea与createfilew两个函数,但是在2000文件浏览器下拷贝文件时,显示的文件名不对,它都为一个“C:\WINNT\WEB\FOLDER.HTT",请问大家是怎么回事?谢谢!
patricklee01 2005-02-28
  • 打赏
  • 举报
回复
要HOOK住全局函數必須把API放到DLL中,再由DLL調用
linuxpgy 2005-02-28
  • 打赏
  • 举报
回复
Re:闲庭信步:
我也遇到了同样的情况(windows 2000),只要把ReplaceIATEntryInOneMod()函数中的WriteProcessMemory(GetCurrentProcess(),ppfn,&pfnHook,sizeof(pfnHook),NULL);
这一句改为如下代码即可拦截所有的程序了:
MEMORY_BASIC_INFORMATION mbi;
::VirtualQuery(ppfn, &mbi, sizeof(MEMORY_BASIC_INFORMATION));
// In order to provide writable access to this part of the
// memory we need to change the memory protection
if (FALSE == ::VirtualProtect(
mbi.BaseAddress,
mbi.RegionSize,
PAGE_READWRITE,
&mbi.Protect)
)
return; //error
// Hook the function.
*ppfn = *pfnHook;
// Restore the protection back
DWORD dwOldProtect;
::VirtualProtect(
mbi.BaseAddress,
mbi.RegionSize,
mbi.Protect,
&dwOldProtect
);
blastzgd 2005-02-22
  • 打赏
  • 举报
回复
同意 wangk(倒之) 。
xlt123 2005-02-22
  • 打赏
  • 举报
回复
再提出一个想法:
从磁盘文件如 C:\Winnt\Explorer.exe 中直接取得 CreateProcessA/W的导入地址,
然后换算成内存中地址,替换之。磁盘文件中的导入地址总是不会被修改的。
不过,这需要你熟悉PE文件格式。
wangk 2005-02-21
  • 打赏
  • 举报
回复
是什么系统呢?98用Vxd实现。
2k以上建议用Driver实现,不用Hook那个CreateProcess可以绕过的地方比较多。
建议Hook文件系统。
www_1652 2005-02-19
  • 打赏
  • 举报
回复
有人看过windows核心编程吗?怎么第22章挂接API的例子,只对nodepad等文本编辑器弹出的对话框消息起作用,而对word以及自己编写的应用程序调用MessageBox函数不起作用,请大家指点,如何才能对所有的对话框都起作用呢?
xlt123 2005-02-18
  • 打赏
  • 举报
回复
按照你的说法,是想挂接Explorer.exe或者Cmd.exe两个进程中的CreateProcessA/W,
一般说来,按照Windows高级编程上的做法应该是没问题的,但有时候,Explorer.exe
的CreateProcessA/W函数可能已经被别的进程挂接了(或者是M$自己做的手脚),这样,你
在Explorer.exe的函数导入表中根本无法找到CreateProcessA/W的入口,从而导致你挂接
失败,由此可见,修改函数导入表挂接API的方法无法形成链式挂接(即函数被某个进程挂接
后,就不能再被别的进程挂接)。
解决办法:
在WinNT/2000下可以用修改API函数代码的方法挂接API,因为每个进程中内核DLL都是独立的,
而且可以用函数VirtualProtectEx修改DLL的页面保护属性让它可写,在Win9X下该方法行不通,
因为内核DLL都是共享的,而且页面不可写。
修改方法,修改CreateProcess的前7个字节为
MOV EAX,XXXX
JMP EAX
XXXX 为 你的函数的地址
X86下二进制码为0B8H,X,X,X,X,0FFH,0E0H

当然,还有更好的解决办法,在9X/NT下通用,不过很复杂,给出思想吧.
使用Debug APIs 调试你要挂接的进程(当然,如果你的进程结束了,被调试进程也会结束)
在调试函数中让被调试进程单步执行。然后调用函数GetThreadContext取得线程的
EIP(当前指令指针),利用EIP看是否能找出CreateProcessA/W被挂接的THUNK,
从而取得函数的调用入口。这只是一个想法,尚未实现。

SatanLi1982 2005-02-17
  • 打赏
  • 举报
回复
还有你dll是否正确注入?
SatanLi1982 2005-02-17
  • 打赏
  • 举报
回复
建议楼主先自己写一个调用CreateProcess的程序看是否能hook
另外jeffery的书的配套代码好像有问题,网上有修正,你可以soso
  • 打赏
  • 举报
回复
类似的方法我也试验了,以失败而告终(确实已经可以Hook这组函数),我开始怀疑系统多数情况不是调用CreateProcessA或CreateProcessW的方法启动进程的!但太忙,没有精力去证实……
superban 2005-02-17
  • 打赏
  • 举报
回复
我正是windows2000 SP4,为何不行
xzqchat 2005-02-16
  • 打赏
  • 举报
回复
如果你是为了实用,不一定要HOOK那个CP的,反正做个HOOK就行了,每个进程启动就会加载那个DLL,自己处理一下加载事件就行了。

高! 呵呵,支持这种思路
EagleTwenty 2005-02-16
  • 打赏
  • 举报
回复
如果你是练习HOOK,就当我没说,
如果你是为了实用,不一定要HOOK那个CP的,反正做个HOOK就行了,每个进程启动就会加载那个DLL,自己处理一下加载事件就行了。
liotion 2005-02-16
  • 打赏
  • 举报
回复
windows2000 SP4不行
BigFanOfCpp 2005-02-16
  • 打赏
  • 举报
回复
用SoftIce跟踪一下看看反汇编代码就知道了.
classfree 2005-02-15
  • 打赏
  • 举报
回复
你是什么系统? WIN98吗?
我在WIN98下面也遇到这种情况。我用的是JMP方法
superban 2005-02-14
  • 打赏
  • 举报
回复
HOOK特定的线程,已成功修改MessageBox()(按照windows核心编程的第22章例子)
win2000+ vs.net 2003
请做过类似功能的同志赐教。
zhjie374 2005-02-14
  • 打赏
  • 举报
回复
然后你尝试HOOK所有进程的MwssageBox
看看会不会异常退出?

msn:zhjie374@hotmail.com

我以前也是不能HOOK全局
加载更多回复(5)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧