-
-
[求助]请教个问题
-
发表于: 2010-12-13 17:30 2752
-
请教个问题 ,郁闷好几天了
typedef NTSTATUS (* NTOPENPROCESS)(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId
); //NtOpenProcess
NTSTATUS MyNtOpenProcess( OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId)
{
ACCESS_MASK oDA;
OBJECT_ATTRIBUTES oOA;
CLIENT_ID oCID;
NTSTATUS statusF, statusT;
oDA = DesiredAccess;
oOA = *ObjectAttributes;
oCID = *ClientId;
KdPrint(("执行系统函数\n"));
statusF = OldProcess(ProcessHandle, oDA, &oOA, &oCID);//调用系统的 丢弃返回值
NewOProcess=((NTOPENPROCESS)((PULONG)MyProcess));
statusT=NewOProcess(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId);
KdPrint(("返回值%x",statusF));
return statusF;
}
当执行到 我自己的 NewOProcess 的时候就 蓝屏
kd> g
Access violation - code c0000005 (!!! second chance !!!)
821e0ed2 368200c4 add byte ptr ss:[eax],0C4h
kd> u
821e0ed2 368200c4 add byte ptr ss:[eax],0C4h
821e0ed6 36825b0700 sbb byte ptr ss:[ebx+7],0
821e0edb 0000 add byte ptr [eax],al
821e0edd 0000 add byte ptr [eax],al
821e0edf 0003 add byte ptr [ebx],al
821e0ee1 0006 add byte ptr [esi],al
821e0ee3 0a5661 or dl,byte ptr [esi+61h]
821e0ee6 642000 and byte ptr fs:[eax],al
然后看来一下 这两个函数
kd> u poi[NewOProcess]
821e1398 8bff mov edi,edi
821e139a 55 push ebp
821e139b 8bec mov ebp,esp
821e139d 83ec2c sub esp,2Ch
821e13a0 8b450c mov eax,dword ptr [ebp+0Ch]
821e13a3 8945dc mov dword ptr [ebp-24h],eax
821e13a6 8b4d10 mov ecx,dword ptr [ebp+10h]
821e13a9 8b11 mov edx,dword ptr [ecx]
kd> u poi[OldProcess]
DDK_dnf!MyNtOpenProcess:
f8a49950 8bff mov edi,edi
f8a49952 55 push ebp
f8a49953 8bec mov ebp,esp
f8a49955 83ec2c sub esp,2Ch
f8a49958 8b450c mov eax,dword ptr [ebp+0Ch]
f8a4995b 8945dc mov dword ptr [ebp-24h],eax
f8a4995e 8b4d10 mov ecx,dword ptr [ebp+10h]
f8a49961 8b11 mov edx,dword ptr [ecx]
他们是一样的 为什么 OldProcess 成功了(是调用的原来函数)
而我自己定义的 NewOProcess 有错误呢。 我是用的申请的非分页内存保存的。
请问一下,这是什么原因,请指点一下。。。 谢谢。
typedef NTSTATUS (* NTOPENPROCESS)(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId
); //NtOpenProcess
NTSTATUS MyNtOpenProcess( OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId)
{
ACCESS_MASK oDA;
OBJECT_ATTRIBUTES oOA;
CLIENT_ID oCID;
NTSTATUS statusF, statusT;
oDA = DesiredAccess;
oOA = *ObjectAttributes;
oCID = *ClientId;
KdPrint(("执行系统函数\n"));
statusF = OldProcess(ProcessHandle, oDA, &oOA, &oCID);//调用系统的 丢弃返回值
NewOProcess=((NTOPENPROCESS)((PULONG)MyProcess));
statusT=NewOProcess(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId);
KdPrint(("返回值%x",statusF));
return statusF;
}
当执行到 我自己的 NewOProcess 的时候就 蓝屏
kd> g
Access violation - code c0000005 (!!! second chance !!!)
821e0ed2 368200c4 add byte ptr ss:[eax],0C4h
kd> u
821e0ed2 368200c4 add byte ptr ss:[eax],0C4h
821e0ed6 36825b0700 sbb byte ptr ss:[ebx+7],0
821e0edb 0000 add byte ptr [eax],al
821e0edd 0000 add byte ptr [eax],al
821e0edf 0003 add byte ptr [ebx],al
821e0ee1 0006 add byte ptr [esi],al
821e0ee3 0a5661 or dl,byte ptr [esi+61h]
821e0ee6 642000 and byte ptr fs:[eax],al
然后看来一下 这两个函数
kd> u poi[NewOProcess]
821e1398 8bff mov edi,edi
821e139a 55 push ebp
821e139b 8bec mov ebp,esp
821e139d 83ec2c sub esp,2Ch
821e13a0 8b450c mov eax,dword ptr [ebp+0Ch]
821e13a3 8945dc mov dword ptr [ebp-24h],eax
821e13a6 8b4d10 mov ecx,dword ptr [ebp+10h]
821e13a9 8b11 mov edx,dword ptr [ecx]
kd> u poi[OldProcess]
DDK_dnf!MyNtOpenProcess:
f8a49950 8bff mov edi,edi
f8a49952 55 push ebp
f8a49953 8bec mov ebp,esp
f8a49955 83ec2c sub esp,2Ch
f8a49958 8b450c mov eax,dword ptr [ebp+0Ch]
f8a4995b 8945dc mov dword ptr [ebp-24h],eax
f8a4995e 8b4d10 mov ecx,dword ptr [ebp+10h]
f8a49961 8b11 mov edx,dword ptr [ecx]
他们是一样的 为什么 OldProcess 成功了(是调用的原来函数)
而我自己定义的 NewOProcess 有错误呢。 我是用的申请的非分页内存保存的。
请问一下,这是什么原因,请指点一下。。。 谢谢。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [求助]请教个问题 2753
- [求助]怎么保存NtOpenProcess 5847
- 用什么方法可以找到SSDT未导出的函数的起源地址?? 3858
- 请教一个问题 2270
- 请教一下PE 头.Tws2 是什么壳??? 2163
看原图
赞赏
雪币:
留言: