彩票查询_2021美洲杯决赛:阿根廷vs巴西回放_2025世俱杯参赛球队有哪些_英格兰乙级联赛 - 竞彩足球500

快壓

當前位置:首頁 > 電腦技巧 > 正文

Win32下病毒設計入門

瀏覽次數:|更新日期:2014年06月26日

本文假定你對dos下的病毒和386PM有一定的了解(計算機愛好者,學習計算機基礎,電腦入門,請到本站,我站同時提供計算機基礎知識教程,計算機基礎知識試題供大家學習和使用),。
  1、感染任何一個病毒都需要有寄主,把病毒代碼加入寄主程序中
  (伴侶病毒除外)。
  以下說明如何將病毒代碼嵌入PE文件中,有關PE文件的結構請看以前的文章。 PE文件的典型結構: MZ Header DOS STUB CODE PE HEADER OPTIONAL HEADER SECTION TABLE SECTION 1 SECTION 2 … IMPORT TABLE EXPORT TABLE 和DOS的可執行文件類似,PE的代碼映象分為幾個SECTION,在文件中會對齊
  頁邊界(4K)。一般來說,文件會加載在400000h開始的空間,而第一個SECTION在401000h處,同時入口地址也是401000h。由高級語言編寫的程序,每個SECTIO-N的長度不可能剛好是4K的倍數,因此在SECTION的末尾將會存在一段未用的空間 , 大小可由Section的PHYSICAL SIZE-VIRTUALSIZE得到,在文件中起始位置可由 PHYSICAL OFFSET得到,這段空間可以用來存放病毒代碼。此外一般來說, MZ Header+DOS STUD+PE
  HEADER+OPTIONAL HEADER+SECTION TABLE不過1K左右, 而SECTION 1由4K開始,空出來的地方足夠存放一個設計精良的病毒。CIH就是將 代碼存放在這些空閑空間里。
  2、分配駐留所需內存
  對于駐留形的病毒,分配駐留所需內存是必需的。在DOS下使用由于所有的 應用程序都映射在相同的線性地址空間里,使用一般的內存分配調用就足夠了。而在WIN32下,每個應用程序都有自己的線性地址空間,必須使用特殊的函數分配2GB以上的系統地址。典型的如:VXD服務_PageAllocate,和kernel32的 VxDCALL
  _PageReserve。_PageAllocate請參看win98ddk中的說明,VxDCall _PageReserve 請參看HPS源碼中的注釋。
  3、截留FILE I/O操作 駐留型的病毒通過截留FILE I/O來激活,可以通過使用VXD服務
  IFSMgr_Install-FileSystemAPIHook(如CIH)或截留VxDCall中的DOS Services callback(如HPS)。
  在Win32下編寫病毒不是一件困難的事。值得注意的有幾件事:
  一、Win32下的系統功能調用不是通過中斷實現,而是由DLL中導出。
  (直接使用VxD服務除外)。直接在病毒中得到API入口不是一件容易的事,可以通過以下這個變通的方法。
  在同一個版本的Windows下,同一個核心函數的入口總是固定的
  (指由Kernel32,gdi32,user32導出的函數)。因此可以用以下的方法得到函數入口:
  .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得到要用的函數入口并將它填入病毒中,在病毒運行時可以直接使用了。