計算機病毒實踐總結一:簡單靜態分析

本文是基於計算機病毒課程實踐部分的總結,這些實踐是自主嘗試學習分析惡意代碼的過程,若有疏漏不妥之處,還請不吝賜教!html

個人相關博客

惡意代碼簡單靜態分析實踐總結

1. 目標

靜態分析技術是研究惡意代碼的第一步,經過各類工具儘量多的蒐集其信息並找到進一步分析的思路。
  • 確認程序惡意性
  • 判斷程序主要行爲
  • 簡單信息分析

2. 反病毒掃描

利用一些網站集合的病毒文件特徵庫進行惡意代碼特徵片斷的匹配,爲判斷程序惡意性提供參考。

3. 加殼與混淆後的惡意代碼

加殼後的惡意程序會被壓縮或加密處理,混淆技術則隱藏了執行的過程。
  • 加殼程序特色:至少會有兩個函數LoadLibraryGetProcAddress用來加載和使用其餘函數。api

  • 使用PEiD工具
  • 檢測加殼的類型和所用編譯器的類型,簡化加殼分析的過程。瀏覽器

  • 查看PE文件的分節網絡

  • 查看導入函數函數

  • 存在問題:許多PEID插件會運行惡意代碼可執行文件,注意在虛擬機的環境下運行。工具

4. 連接庫與導入導出函數

分析惡意代碼,能夠其連接庫和導入導出函數了解程序的行爲。
  • 靜態連接與動態連接學習

    庫與程序靜態連接時,庫中的全部代碼都會複製到程序中,程序增大不少,常見於UNIX和Linux系統中。
    Windows中多爲動態連接,只有在程序運行時才連接到庫。網站

  • DLL文件:動態連接庫文件。可執行文件常被分紅這樣的一個個具備相對獨立功能的dll文件。加密

  • 使用Dependency Walker工具插件

    • 模塊依賴關係、導入導出函數、模塊列表、日誌
    • PI(Parent Import Function List View):從哪些其餘文件中調用了函數。
    • E(Export Function List View):提供了哪些接口,讓其餘的程序調用。
  • 常見的DLL程序:

    Kernal.dll 包含系統的核心功能,訪問和操做內存,文件,硬件
      WININET.dll 聯網操做 包含了FTP HTTP NTP等協議
      User.dll 包含了用戶界面組件,控制響應用戶操做的組件
      Ntdll.dll 是Windows內核的接口 一般由Kernal間接導入,一些隱藏功能和操做進程會使用這個接口。
      Advapi32.dll 提供了對核心Windows組件的訪問 ,好比服務管理器和註冊表
      Gdi32.dll  提供圖形顯示和操做的函數

5. PE文件頭與分節

PE是指Windows系統下32位可執行文件,以一個文件頭開始,其中包括代碼信息,應用程序類型,所需的庫函數與空間要求。
  • PE文件中常見的分節:

    .text:包含了CPU的執行指令,正常是惟一包含代碼的節。
      .rdata:一般包含導入導出的函數信息,還能夠存儲程序中的其餘只讀數據。
      .data:包含了程序的全局數據 (本地數據並不存儲在這裏)。
      .rsrc:包含可執行文件使用的資源,內容並不執行,例如圖標、菜單項、字符串等
      .reloc:包含用於重定位文件庫的信息
      .pdata:只在64位可執行文件中存在,存儲異常處理信息
  • 使用PEview工具

  • 在這裏或許能夠找到有關惡意代碼行爲的線索。

    • 編譯信息:IMAGE_NT_HEADERS中的映像文件頭IMAGE_FILE_HEADER中「Time Date Stamp」能夠獲取可執行文件是何時編譯的。
    • 入口信息:在IMAGE_OPTIONAL_HEADER中第七個成員「AddressOfEntryPoint「,它持有OEP(程序的入口點)的RVA(相對虛擬地址)。

6. 綜合分析

(1)整合線索

- 有着相同編譯時間的動態連接庫
- 有特定行爲的關鍵導入導出函數
- 分節中的信息

(2)聯繫實際

- 能與系統實際文件相關的線索
- 與端口號相關的線索 -> 特定的服務
- 與某個網絡地址相關的線索

(3)作出推斷

- 是不是惡意代碼?
- 它作了什麼?
- 主機已經感染的特徵?
相關文章
相關標籤/搜索