首页
社区
课程
招聘
[求助]想hook NtOpenProces 但遇到了内存访问违规。。
发表于: 2012-3-30 01:03 5735

[求助]想hook NtOpenProces 但遇到了内存访问违规。。

2012-3-30 01:03
5735
用了SEH也要蓝。。。
求点拨。。

BOOLEAN __stdcall TryForRead(PVOID *Address)
{
	__try{
		LONG _TRY = *(ULONG*)Address;
	} __except(EXCEPTION_EXECUTE_HANDLER){
		return FALSE;
	}
	return TRUE;
}
//////////////////////////////////////////////////////////////////////////////
__declspec(naked) NTSTATUS __stdcall Ginn0vOpenProcess(
			OUT PHANDLE ProcessHandle,
			IN ACCESS_MASK DesiredAccess,
			IN POBJECT_ATTRIBUTES ObjectAttributes,
			IN PCLIENT_ID ClientId) //读取PID就发生访问违例。。。
{
	__asm{                          
		mov eax, esp;
		mov eax, dword ptr [eax + 14]; //取ClientId地址
		push eax;
		call TryForRead; //试验SEH 但还是要蓝

passby:
		push 0xC4; //hook前15字节
		push 0x804DB4C0;
		mov eax, 0x8053CBE0;
		call eax;
		mov eax, 0x805CC47F; //跳到第16字节开始处的指令
		jmp eax;
	}
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2284
活跃值: (2170)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
2
双机动态跟一下看看吧。
2012-3-30 09:54
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
你调试一下看ClientId是否传进来了,估计ClientId没有传进来..
2012-3-30 11:52
0
雪    币: 485
活跃值: (78)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
BSOD信息是什么?

改成这样看下
BOOLEAN __stdcall TryForRead(PVOID *Address)
{
  __try{
   
        if(ARGUMENT_PRESENT(Address))
        {
                LONG _TRY = *(ULONG*)Address;
                return TRUE;
        } else{
                return FALSE;
        }
       
  } __except(EXCEPTION_EXECUTE_HANDLER){
  
    return FALSE;
  }
  
  return TRUE;
}
2012-3-30 11:56
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
5
好方法,判断一下比较安全..........
2012-3-30 12:24
0
雪    币: 2284
活跃值: (2170)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
6
如果要判断参数的话,只要ProbeForRead就好了。
如果正常调用的话,这里应该不是参数的问题吧。。
2012-3-30 12:52
0
雪    币: 56
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
谢谢各位帮助
我试了goddkiller朋友的方法 还是蓝了
下面是WinDbg的信息

FAULTING_SOURCE_CODE:  
   117: BOOLEAN __stdcall TryForRead(PVOID *Address)
   118: {
   119: 	__try{
   120: 		if(ARGUMENT_PRESENT(Address)){
> 121: 			LONG _TRY = *(ULONG*)Address;   //在这里被windbg检测到了
   122: 			return TRUE;
   123: 		} else{
   124: 		return FALSE;
   125: 	 }
   126: 	} __except(EXCEPTION_EXECUTE_HANDLER){

BUGCHECK_STR:  0x50

PROCESS_NAME:  explorer.exe

TRAP_FRAME:  ba3c5ca4 -- (.trap 0xffffffffba3c5ca4)
ErrCode = 00000000
eax=f8fc0007 ebx=baca11e0 ecx=00000000 edx=0007f8d0 esi=0007f8e0 edi=ba3c5d64
eip=baca1176 esp=ba3c5d18 ebp=ba3c5d44 iopl=0         nv up ei ng nz na po nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010282
peaths!TryForRead+0x36:
baca1176 8b08            mov     ecx,dword ptr [eax]  ds:0023:f8fc0007=????????
2012-3-30 14:10
0
雪    币: 5
活跃值: (1131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
mov eax, dword ptr [eax + 14]; //取ClientId地址
14  这个14是10进制!!
2012-3-30 14:38
0
雪    币: 485
活跃值: (78)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=JWPL;1058813]mov eax, dword ptr [eax + 14]; //取ClientId地址
14  这个14是10进制!![/QUOTE]

估计是这个的问题14 -> 0x14

再出错你直接push 那个 PCLIENT_ID不就行了
2012-3-30 15:18
0
雪    币: 56
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
。。。。。。。。。
犯了个这么低级的错误。。。。
估计是OD的反汇编代码看多了,OD里没有0x或h
麻烦大家了。。。
谢谢各位
2012-3-30 17:29
0
游客
登录 | 注册 方可回帖
返回
//