|
别的地方转载的~啥子地方忘记了~
在文件解锁中经常要用到远程关闭句柄,通常有两个做法,一个DuplicateHandle远程关闭,另外一个创建远程线程CloseHandle(ZwClose)关闭,这种方法能够成功的前提是对方句柄没有设置保护,如果对方用SetHandleInformation来设置保护防止关闭,以上两个方法均会失效,所以有必要远程关闭句柄保护,话说微软很不厚道,句柄只能保护起来,没有去除保护,操起IDA对Kernel32逆向SetHandleInformation,发现其使用NtSetInformationObject来设置保护,所以我们只需要远程线程NtSetInformationObject即可,思路就这样,但是操作起来有难度,因为SetHandleInformation需要4个参数,而我们只能通过CreateRemoteThread传递一个参数过去,所以写了下面这一段ShellCode,ShellCode完全使用标准帖构造……
UCHAR StrShellCode[]=
{
0x8B,0xFF,// mov edi,edi
0x55,// push ebp
0x8B,0xEC,// mov ebp,esp
0x8B,0x5D,0x08,// mov ebx,dword ptr [ebp+8]
0x6A,0x02,// push 8
0x53,// push ebx
0x6A,0x04,// push 4
0x68,0x00,0x00,0x01,0x00,// push 10000h //把句柄值写在这里
0xBB,0x00,0x10,0x40,0x00,// mov ebx,offset Func 将NtSetInformationObject函数地址写进来
0xFF,0xD3, //call ebx
0x5D, ////pop ebp
0xC2,0x04,0x00 // ret 4
};
到时候将ObjectInformation参数传递给CreateRemoteThread即可了,这样就可以去除句柄保护了……之后关闭即可,至于返回值GetExitCodeThread就是了……
|
|