首页
社区
课程
招聘
[求助]请教个问题
发表于: 2010-12-13 17:30 2662

[求助]请教个问题

2010-12-13 17:30
2662
请教个问题 ,郁闷好几天了
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 有错误呢。 我是用的申请的非分页内存保存的。
请问一下,这是什么原因,请指点一下。。。 谢谢。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//