婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Win32 下病毒設(shè)計入門詳細(xì)說明

Win32 下病毒設(shè)計入門詳細(xì)說明

熱門標(biāo)簽:溫嶺代理外呼系統(tǒng) 不同的地圖標(biāo)注 寧夏保險智能外呼系統(tǒng)哪家好 隨州銷售外呼系統(tǒng)平臺 交行外呼系統(tǒng)有哪些 怎么更改地圖標(biāo)注電話 臨滄移動外呼系統(tǒng)哪家有 防城港市ai電銷機(jī)器人 激戰(zhàn)黃昏地圖標(biāo)注說明
本文假定你對dos下的病毒和386PM有一定的了解。 

  1、感染任何一個病毒都需要有寄主,把病毒代碼加入寄主程序中(伴侶病毒除外) 

  以下說明如何將病毒代碼嵌入PE文件中,有關(guān)PE文件的結(jié)構(gòu)請看以前的文章。 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的代碼映象分為幾個SECTION,在文件中會對齊頁邊界(4K)。一般來說,文件會加載在400000h開始的空間,而第一個SECTION在401000h處,同時入口地址也是401000h。 

  由高級語言編寫的程序,每個SECTIO-N的長度不可能剛好是4K的倍數(shù),因此在SECTION的末尾將會存在一段未用的空間,大小可由Section的PHYSICAL SIZE-VIRTUALSIZE得到,在文件中起始位置可由 PHYSICAL OFFSET得到,這段空間可以用來存放病毒代碼。此外一般來說,MZ Header+DOS STUD+PEHEADER+OPTIONAL HEADER+SECTION TABLE不過1K左右,而SECTION 1由4K開始,空出來的地方足夠存放一個設(shè)計精良的病毒。CIH就是將代碼存放在這些空閑空間里。 

  2、分配駐留所需內(nèi)存 

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

  3、截留FILE I/O操作 駐留型的病毒通過截留FILE I/O來激活,可以通過使用VXD服務(wù) 

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

  在Win32下編寫病毒不是一件困難的事。值得注意的有幾件事: 

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

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

  在同一個版本的Windows下,同一個核心函數(shù)的入口總是固定的(指由Kernel32,gdi32,user32導(dǎo)出的函數(shù))。因此可以用以下的方法得到函數(shù)入口: 

  在Intialize Code得到要用的函數(shù)入口并將它填入病毒中,在病毒運行時可以直接使用了。 

  本人的一臺操作系統(tǒng)為Win2000 Server的筆記本電腦最近被感染了病毒,我首先用相關(guān)殺毒軟件來掃描計算機(jī),掃描報告如下: 

  病毒名稱:Hacktool 
  文件名:c:\winnt\system32\ntservice.exe 
  操作:刪除失敗,隔離失敗,訪問被拒絕 

  如何才能徹底 刪除呢? 

  因為c:\winnt\system32\ntservice.exe已經(jīng)在運行了,直接刪除顯然是不可能的。于是我運行Windows任務(wù)管理器,在進(jìn)程選 項卡中選擇結(jié)束ntservice.exe進(jìn)程,結(jié)果系統(tǒng)顯示“無法中止進(jìn)程,拒絕訪問”。 

  我突然想到在Win 2000(XP)的控制臺狀態(tài)下是可 以用DOS命令的。 

  什么是控制臺 

  控制臺是Windows的一種簡易運行模式,它可以不啟動圖形界面而在命令行狀態(tài)下有限制地訪問 FAT和NTFS分區(qū),并對系統(tǒng)進(jìn)行一些設(shè)置和操作。通過控制臺,我們可以更換系統(tǒng)文件、關(guān)閉或者禁用某個系統(tǒng)服務(wù)、禁用或卸載硬件 設(shè)備、修復(fù)引導(dǎo)扇區(qū)、新建分區(qū)以及格式化硬盤分區(qū)等。 

  啟動控制臺 

  對于Windows 2000,我們可以用光盤啟動電腦,然后在安 裝程序的選單中按R鍵選擇“修復(fù)Windows 2000安裝”,再從修復(fù)選單中按C鍵選擇“故障恢復(fù)控制臺修復(fù)Windows2000”。對于 WindowsXP,同樣是用光盤啟動電腦,然后按R選擇修復(fù),就能直接進(jìn)入控制臺。 

  直接把控制臺的相關(guān)選項安裝到啟動菜單中的方 法:把光盤放入光驅(qū),然后直接在運行中輸入“d:\i386\winnt32/cmdcons”之后回車(這里假設(shè)你的光驅(qū)是D),再點擊“是”,就可以把控 制臺選項安裝到高級啟動菜單中,這樣以后直接從硬盤就可以進(jìn)入控制臺中。這個方法適用于Windows 2000和Windows XP。 

  在控制臺的 命令提示符下,為安全起見,我首先對ntservice.exe進(jìn)行備份,然后直接運行:del c:\winnt\system32\ntservice.exe就OK了。 

  二、主要是要截留文件I/O操作 

  Windows下截留文件I/O操作有幾種方法,在病毒中使用的主要有兩種。 

  1、使用VxDCallIFSMgr_InstallFileSystemHook 

  2、截留Kernel32.dll中導(dǎo)出的第一個函數(shù)VxDCall對DOS 

  INT 21的呼叫(EAX=2A0010)。 

  VxDCall的代碼如下: 

  mov eax,dword ptr [esp+04] 
  pop dword ptr [esp] 
  call fword ptr cs:[xxxxxxxx] 
  ^^^^^^^^只要將這個地址指向的地址改為自己的過程入口,就捕獲了所有的VxDCall。 

  進(jìn)入這個過程時: 

  eax=service number,如果是DOS INT 21將是2A0010 
  esp[2c]調(diào)用Int 21時eax的值 

  ~~~~ 算漏了個pushad,應(yīng)該是10h 

  esp[30] 調(diào)用int 21時ecx的值 

  ~~~~14h 

  其他寄存器為調(diào)用時所需的值。(段寄存器無用) 

  以后的就和在DOS下寫病毒沒什么差別了。 

  在WINDOWS下寫病毒,如何得到API的入口是一件麻煩的事. 可以直接使用的API都在DLL中,而VXDCALL要在RING0時才能使 用,DOS的INT 21服務(wù)也不能直接調(diào)用. 得到DLL中的API入口有兩種方法: 

  1.加載時得到,建立一個 IMPORT TABLE,在加載時WINDOWS會根據(jù)IMPORT TABLE定位API的 入口地址.這是一般應(yīng)用程序的使用的方法,但不大適合病毒。 

  2.運行時得到,使用GetModuleHandle和GetProcAddress得到API的入口,但前提時要知道GetModuleHandle和GetProcAddress的 入口地址.: 這是明顯也是不可能的.除了將GetModuleHandle和GetProcAddress的代碼復(fù)制到我們的病毒中,只有使用暴力在 2GB的空間內(nèi)找出API的入口了。 

  首先說明一下WINDOWS的內(nèi)存映射,由00000000開始有一段是無效地址(我忘了到底到多少了),用來捕獲應(yīng)用程序錯誤的指針。 
跟著一直到0x7FFFFFFF為應(yīng)用程序的空間.0X80000000以后為系統(tǒng) 的空間,DLL和VXD都映射在這里.我們要作的就是從這2GB的空間內(nèi)找到Krnl32.dll. 一般來說,Windows下的程序都是對齊在64k的邊界.首先是MZ 文件頭,跟著是由MZ HEADER中的信息可以得到PE HEADER的入口. 由這個標(biāo)記就可以找出所有的DLL.由PE HEADER可以得到DLL的 EXPORT TABLE的入口,其中而NAME PTR TABLE的第一項為DLL的名 稱,由此可以找出Krnl32.dll,并從ADDRESS TABLE中得到任何一個 API的入口.。 

  值得注意的是,在這2GB中并不是所有而地址都是有效的,在 一般的程序中可以通過IsXXXXXPtr來判斷地址是否有效,但在病毒 中不行.只能Hook Exception,忽略訪問無效的地址導(dǎo)致的Exception. Windows中的Exception Chain的結(jié)構(gòu)如下: fs:[0] dword exception發(fā)生時esp的新值,該值指向一個如下 的結(jié)構(gòu) [esp] dword fs:[0]的新值 [esp+4] dword exception handler的入口 [esp+8] dword exception handler使用的數(shù)據(jù)首地址 [esp+12] dword -1詳細(xì)的匯編代碼可以用C寫一段__try...__except的代碼,然后 轉(zhuǎn)譯成匯編. 只要我們的exception handler直接跳轉(zhuǎn)到病毒中尋找Krnl32.dll 的代碼,就可以不引起GP Error而訪問任何的地址了。 范例可以參看HPS的源碼,PE HEADER,EXPORT TABLE請參看PE FORMAT.。 

  1、在Windows下載入的DLL在不同的process中映射到同一個地址。 

  2、在DLL中導(dǎo)出的函數(shù)在export table中記錄相對DLL Image Base 的偏移,改變這個偏移使用GetProcAddress得到的地址就會改變。 (想象一下,把CreateProcess地址指向自己的DLL中的函數(shù),或者截獲GetDlgItemText來記錄Password) 

  3、在Kernel32.DLL中Section Table在0x300以前就結(jié)束了,而真正的代碼由0x1000處開始,其間有3K的未用空間,可以用來存放我們的代碼。 Kernel32.DLL的Image Base可以由GetModuleHandleA得到。 

  4、在任何版本的Windows中,3個基本的DLL總是被加載(Kernel32.DLL,User32.DLL,GDI32.DLL),而且對于同一個版本的Windows,它們的Image Base,和導(dǎo)出函數(shù)的地址總是固定的。可以將得到的地址直接用于病毒使用。 

  .386p .model flat,stdcall extrn GetModuleHandleAroc extrn GetProcAddressroc extrn ExitProcessroc .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 
您可能感興趣的文章:
  • WIN32程序獲取父進(jìn)程ID的方法
  • Win32應(yīng)用程序(SDK)設(shè)計原理詳解
  • 終于明白了tc編譯的dos程序和vc編譯的win32控制臺程序的區(qū)別
  • tc編譯的dos程序和vc編譯的win32控制臺程序的異同
  • win32下進(jìn)程間通信(共享內(nèi)存)實例分析
  • win32 api實現(xiàn)2048游戲示例
  • 一個win32窗口創(chuàng)建示例
  • win32 api實現(xiàn)簡單的消息窗口示例
  • win32使用openfilename瀏覽文件窗口示例
  • 實例分析一個簡單的Win32程序

標(biāo)簽:阜陽 紅河 哈密 沈陽 無錫 忻州 河源 青海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Win32 下病毒設(shè)計入門詳細(xì)說明》,本文關(guān)鍵詞  Win32,下,病毒,設(shè)計,入門,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Win32 下病毒設(shè)計入門詳細(xì)說明》相關(guān)的同類信息!
  • 本頁收集關(guān)于Win32 下病毒設(shè)計入門詳細(xì)說明的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 香港 | 万州区| 姜堰市| 恭城| 津南区| 阜新市| 申扎县| 武威市| 保亭| 依安县| 西贡区| 台前县| 长春市| 华容县| 临江市| 祁门县| 德化县| 沂南县| 正安县| 新源县| 沂水县| 临沂市| 克拉玛依市| 张家川| 彭泽县| 利津县| 玉田县| 崇州市| 隆昌县| 依安县| 馆陶县| 永泰县| 祁连县| 嘉荫县| 枝江市| 阳山县| 龙里县| 榕江县| 广平县| 定西市| 新宾|