學(xué)習(xí)啦>學(xué)習(xí)電腦>電腦安全>病毒知識(shí)>

win32位下如何制作病毒

時(shí)間: 林輝766 分享

  怎么在win32位下設(shè)置病毒呢?也就是制作病毒,下面由學(xué)習(xí)啦小編給你做出詳細(xì)的win32位下制作病毒方法介紹!希望對(duì)你有幫助!

  win32位下制作病毒方法:

  win32位下制作病毒1、感染任何一個(gè)病毒都需要有寄主,把病毒代碼加入寄主程序中

  (伴侶病毒除外)。

  以下說(shuō)明如何將病毒代碼嵌入PE文件中,有關(guān)PE文件的結(jié)構(gòu)請(qǐng)看以前的文章。 PE文件的典型結(jié)構(gòu): MZ Header DOS STUB CODE PE HEADER OPTIONAL HEADER SECTION TABLE SECTION 1 SECTION 2 … IMPORT TABLE EXPORT TABLE 和DOS的可執(zhí)行文件類似,PE的代碼映象分為幾個(gè)SECTION,在文件中會(huì)對(duì)齊

  頁(yè)邊界(4K)。一般來(lái)說(shuō),文件會(huì)加載在400000h開始的空間,而第一個(gè)SECTION在401000h處,同時(shí)入口地址也是401000h。由高級(jí)語(yǔ)言編寫的程序,每個(gè)SECTIO-N的長(zhǎng)度不可能剛好是4K的倍數(shù),因此在SECTION的末尾將會(huì)存在一段未用的空間 , 大小可由Section的PHYSICAL SIZE-VIRTUALSIZE得到,在文件中起始位置可由 PHYSICAL OFFSET得到,這段空間可以用來(lái)存放病毒代碼。此外一般來(lái)說(shuō), MZ Header+DOS STUD+PE

  HEADER+OPTIONAL HEADER+SECTION TABLE不過(guò)1K左右, 而SECTION 1由4K開始,空出來(lái)的地方足夠存放一個(gè)設(shè)計(jì)精良的病毒。CIH就是將 代碼存放在這些空閑空間里。

  win32位下制作病毒2、分配駐留所需內(nèi)存

  對(duì)于駐留形的病毒,分配駐留所需內(nèi)存是必需的。在DOS下使用由于所有的 應(yīng)用程序都映射在相同的線性地址空間里,使用一般的內(nèi)存分配調(diào)用就足夠了。而在WIN32下,每個(gè)應(yīng)用程序都有自己的線性地址空間,必須使用特殊的函數(shù)分配2GB以上的系統(tǒng)地址。典型的如:VXD服務(wù)_PageAllocate,和kernel32的 VxDCALL

  _PageReserve。_PageAllocate請(qǐng)參看win98ddk中的說(shuō)明,VxDCall _PageReserve 請(qǐng)參看HPS源碼中的注釋。

  win32位下制作病毒3、截留FILE I/O操作 駐留型的病毒通過(guò)截留FILE I/O來(lái)激活,可以通過(guò)使用VXD服務(wù)

  IFSMgr_Install-FileSystemAPIHook(如CIH)或截留VxDCall中的DOS Services callback(如HPS)。

  在Win32下編寫病毒不是一件困難的事。

值得注意的有幾件事:

  一、Win32下的系統(tǒng)功能調(diào)用不是通過(guò)中斷實(shí)現(xiàn),而是由DLL中導(dǎo)出。

  (直接使用VxD服務(wù)除外)。直接在病毒中得到API入口不是一件容易的事,可以通過(guò)以下這個(gè)變通的方法。

  在同一個(gè)版本的Windows下,同一個(gè)核心函數(shù)的入口總是固定的

  (指由Kernel32,gdi32,user32導(dǎo)出的函數(shù))。因此可以用以下的方法得到函數(shù)入口:

  .386p

  .model flat,stdcall

  extrn GetModuleHandleA:proc

  extrn GetProcAddress:proc

  extrn ExitProcess:proc

  .data

  szKernel db 'KERNEL32.DLL',0

  szFindFirst db 'FindFirstFileA',0

  szFindNext db 'FindNextFileA',0

  szFindClose db 'FindClose',0

  szGetCurrentDir db 'GetCurrentDirectoryA',0

  szGetWinDir db 'GetWindowsDirectoryA',0

  szGetSysDir db 'GetSystemDirectoryA',0

  szGetFileAttrib db 'GetFileAttributesA',0

  szSetFileAttrib db 'SetFileAttributesA',0

  szlopen db '_lopen',0

  szlread db '_lread',0

  szlwrite db '_lwrite',0

  szlclose db '_lclose',0

  szllseek db '_llseek',0

  hKernel dd 0

  .code

  ;Initialize code

  start:

  push szKernel

  call GetModuleHandleA

  mov hKernel,eax

  push szFindFirst

  push hKernel

  call GetProcAddress

  mov FindFirstFile,eax

  ….

  jmp VirusStart

  InitExit:

  push 0

  call ExitProcess

  VirusStart:

  jmp Entry

  HostEntry dd InitExit

  FindFirstFile dd 0

  FindNextFile dd 0

  …

  Entry:

  …

  end start

  在Intialize Code得到要用的函數(shù)入口并將它填入病毒中,在病毒運(yùn)行時(shí)可以直接使用了。
看了“win32位下如何制作病毒”文章的還看了:

1.win7的電腦病毒有哪些

2.WIN7系統(tǒng)中了EXE病毒文件怎么辦

3.win8中了電腦病毒怎么辦

4.win8怎么防止U盤傳播病毒

5.如何讓32位Win7完美使用4G內(nèi)存

640263