首页
论坛
课程
招聘
雪    币: 310
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝

[原创]Ring3内存清0杀进程

2009-5-1 18:15 8911

[原创]Ring3内存清0杀进程

2009-5-1 18:15
8911
看到标题不要惊讶,这个东西很久很久以前就有人发过了,当时我完全没看懂。下面的代码是我根据题目按照自己的想法写的,只是因为最近很无聊,代码没有任何价值。
#include<stdio.h> 
#include<windows.h> 
#include<Tlhelp32.h> 
int kestrcmpi(char *str1,char *str2); 
BOOL EnableDebugPrivileges(); 
int main(void) 
{ 
    PROCESSENTRY32 pe32; 
    MODULEENTRY32 te32; 
    HANDLE hSnapshot,hSnapshot1,hTarget; 
    void *pNothing; 
    char *szTarget[31]; 
    DWORD dwStore,dwFillSize;
    printf("Input the name of process which you wanna kill(case sensitive):"); 
    scanf("%30s",szTarget); 
    EnableDebugPrivileges(); 
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
    if(hSnapshot == INVALID_HANDLE_VALUE) 
    { 
        printf("Create snapshot for processes failed!\n"); 
        system("pause"); 
        return 1; 
    } 
    pe32.dwSize = sizeof(PROCESSENTRY32); 
    if(Process32First(hSnapshot,&pe32)) 
        do 
        { 
            if(kestrcmpi(pe32.szExeFile,(char*)szTarget)) 
            { 
                hSnapshot1 = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe32.th32ProcessID); 
                if(hSnapshot1 == INVALID_HANDLE_VALUE) 
                { 
                    printf("Create snapshot for modules failed!\n"); 
                    system("pause"); 
                    return 1; 
                } 
                te32.dwSize = sizeof(MODULEENTRY32); 
                if(Module32First(hSnapshot1,&te32)) 
                { 
                    hTarget = OpenProcess(PROCESS_ALL_ACCESS,0,pe32.th32ProcessID); 
                    if(!hTarget) 
                    { 
                        printf("open target process failed!\n"); 
                        system("pause"); 
                        return 1; 
                    } 
                    if(!ReadProcessMemory(hTarget,(void*)(te32.modBaseAddr+0x3c),&dwStore,4,NULL))
                    {
                        printf("ReadProcessMemory1 failed!\n");
                        system("pause");
                        return 1;
                    }
                    if(!ReadProcessMemory(hTarget,(void*)(te32.modBaseAddr+dwStore+0x28),&dwStore,4,NULL))
                    {
                        printf("ReadProcessMemory2 failed!\n");
                        system("pause");
                        return 1;
                    }
                    dwFillSize = (int)te32.modBaseSize-dwStore;
                    pNothing = calloc(dwFillSize,1); 
                    if(!WriteProcessMemory(hTarget,(void*)(te32.modBaseAddr+dwStore),pNothing,dwFillSize,NULL)) 
                    { 
                        printf("WriteProcessMemory failed!\n"); 
                        system("pause"); 
                        return 1; 
                    } 
                } 
            } 
        } 
        while(Process32Next(hSnapshot,&pe32)); 
    free(pNothing); 
    CloseHandle(hTarget);
    CloseHandle(hSnapshot); 
    CloseHandle(hSnapshot1); 
    return 0; 
} 
int kestrcmpi(char *str1,char *str2) 
{ 
    if(strlen(str1) != strlen(str2)) 
        return 0; 
    while(*str1 != 0) 
    { 
        if((*str1|0x20) != (*str2|0x20)) 
            return 0; 
        str1++; 
        str2++; 
    } 
    return 1; 
} 
BOOL EnableDebugPrivileges() 
{ 
  BOOL bRet; 
  HANDLE hToken; 
  bRet = OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken); 
  if(!bRet) 
    return 0; 
  TOKEN_PRIVILEGES tp; 
  tp.PrivilegeCount = 1; 
  LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid); 
  tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
  AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL); 
  if(GetLastError() != ERROR_SUCCESS) 
    return 0; 
  return 1; 
} 


附bin一个

[公告]看雪论坛2020激励机制上线了!多多参与讨论可以获得积分快速升级?

上传的附件:
最新回复 (14)
雪    币: 102
活跃值: 活跃值 (15)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
猪头三 活跃值 3 2009-5-1 19:01
2
0
很好。旧货才是硬道理。
发挥作用,就是好代码!
雪    币: 310
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
stalker 活跃值 8 2009-5-1 19:24
3
0
哇,居然把猪头三引来拉。
我在你的群里,不过你肯定不知道哪一个是我
雪    币: 42
活跃值: 活跃值 (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
nevergone 活跃值 3 2009-5-1 20:21
4
0
你在猪头群上的ID报上来。
大家X一下
雪    币: 459
活跃值: 活跃值 (11)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 活跃值 9 2009-5-1 21:17
5
0
不如直接R0 改CR3清0威力大
雪    币: 258
活跃值: 活跃值 (80)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 活跃值 41 2009-5-1 21:22
6
0
黑防上的文章????
雪    币: 310
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
stalker 活跃值 8 2009-5-2 06:08
7
0
请仔细区分,我只在最近有期上看到有篇ring0的。


完全看不懂
雪    币: 461
活跃值: 活跃值 (64)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 活跃值 25 2009-5-2 09:47
8
0
就是在驱动中不用attach过去,直接更改CR3寄存器,然后填0就行了,基本不需要什么API.
所以威力大一些...
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
壹无所有 活跃值 2009-5-2 13:30
9
0
楼上的厉害啊
雪    币: 392
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
ImHolly 活跃值 1 2009-5-2 14:55
10
0
attach 函数里面应该也会该CR3的吧.

就是不知道怎么查对应进程的页目录.

有资料的兄弟分享一下哈
雪    币: 91
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
垃圾一个 活跃值 2009-5-2 16:42
11
0
看看NetRoc,那个文章,改点就是R0的KILL了。
http://bbs.pediy.com/showthread.php?t=64938&viewgoodnees=1&prefixid=phpforce_38
雪    币: 392
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
ImHolly 活跃值 1 2009-5-2 17:21
12
0
多谢楼上的
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
才把 活跃值 2009-5-2 19:15
13
0
360的进程貌似penProcess(PROCESS_ALL_ACCESS,0,pe32.th32ProcessID)“不了
雪    币: 310
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
stalker 活跃值 8 2009-5-2 19:25
14
0
如果你对360特别感兴趣,请咨询5楼。这个代码不是专门拿来xx进程的,只是对一种实现方法的练习。
雪    币: 65
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
马骝 活跃值 2009-5-6 10:58
15
0
cr3好像是某某寄存器
游客
登录 | 注册 方可回帖
返回