阅读:2653回复:9
关于nt system-call hooking的问题。小弟我仿照undoc nt一书的方法hook了几个nt文件系统的函数。 比如NtOpenFile,我想改变访问文件路径到我得一个特殊目录下面。 例如改变访问c:\abc\123.txt到 d:\cdeddddd\123.txt,可是传递过来的参数 的缓冲区很小,我于是只得自己分配缓冲区,但是调用完成后返回错误 STATUS_ACCESS_VIOLATION 似乎是内存访问非法,我怀疑是访问环境不对,比如没有读写权力,可是不知道如何改 变。 请指教! NTSTATUS NewNtOpenFile( OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode ) { NTSTATUS status = STATUS_SUCCESS; OBJECT_ATTRIBUTES oa; oa = *ObjectAttributes; status = OldNtOpenFile(phFile, DesiredAccess, //ObjectAttributes, //原来的对象 &oa, //使用我自己分配的对象 pIoStatusBlock, ShareMode, OpenMode); return status; // STATUS_ACCESS_VIOLATION } -- |
|
沙发#
发布于:2001-06-19 14:01
能将你的undocument NT上传吗?
|
|
|
板凳#
发布于:2001-06-19 17:04
你原来的代码是怎样的?
你现在贴的代码不会出现错误吧 |
|
地板#
发布于:2001-06-19 17:27
用ExAllocatePool(PagedPool,sizeof(OBJECT_ATTRIBUTES))分配内存
|
|
地下室#
发布于:2001-06-20 09:13
1.你自己的OA是怎么初始化的?
2.对象的SD是否包括用户的SID? |
|
|
5楼#
发布于:2001-06-20 18:21
我看了oa的初始化,很简单的,就是填写了几个成员,没有内存分配的问题,我觉得还是sd的问题,可是上面传下来的sd是空的。
请问怎么解决? 谢谢 |
|
6楼#
发布于:2001-06-20 22:47
OA里的UNICODE_STRING一定会涉及内存问题.
SD为0,则是缺省SD. 当OBJECT是DRIVER创建的时候,用缺省的SD将 无法访问.请给当前用户SE_TCB_NAME特权.或者不要让SYSTEM PROCESS创建OBJ |
|
|
7楼#
发布于:2001-06-23 01:15
我引用了你的Sec.exe这个小程序。用户具备了
SE_TCP_NAME 特权了没有? 我估计是要在driver里面解决的。不知道有没有什么好办法? security descripter是一个什么样得结构?没有资料 |
|
8楼#
发布于:2001-06-26 14:57
SD在MSDN里有讲述。
PSDK/SECURITY |
|
|
9楼#
发布于:2001-07-09 21:17
只要看看Sysinternal的regmon程序的kernel mode源代码!
祥见www.sysinternals.com |
|