阅读:1921回复:0
请教:关于系统启动时对kernel32的调用与启动后的有何不同?
我用修改文件的方法,改了kernel32中的getprocaddr函数,打算学习HOOK的,在正常情况下已经测试通过,但重启系统会REBOOT,不知道是不是系统启动时有特殊的调用?
我改的内容: 1:修改了kernel32中的导出表,加了一个节表,放自己的代码,把getprocaddr的RVA指向自己的代码,并把原来的getprocaddr的RVA保存好。 2:当别的程序调用getprocaddr函数时,我接管,但不做任何操作,然后找到原来的getprocaddr的RVA,把RVA加上kernel32的加载基址(向低址遍历MZ/PE的方法得到),压入,再调用RET进到真正的getprocaddr中去,结束 在系统中已经测试OK了,但就是无法重启~~~ 已知道重启时我的代码会被执行,就是不知道错在哪里 故意压入一个错误的地址,RET,会出蓝屏,显示句柄为0什么的。但正确的地址,RET,就直接重启了。 XP/2K PRO的系统。 ***STOP:0X0000001E(0XC00000005,0XA006E1F1,0X00000000,0X00000040) KMODE_EXCEPTION_NOT_HANDLED ***Address A006E1F1 base at A0000000,DateStamp 4047dcd6 - win32k.sys |
|