Immunity Debugger學習


 

1、Immunity Debugger簡介

  Immunity Debugger軟件專門用於加速漏洞利用程序的開發,輔助漏洞挖掘以及惡意軟件分析。它具備一個完整的圖形用戶界面,同時還配備了迄今為止最為強的Python安全工具庫。它巧妙的將動態調試功能與一個強大的靜態分析引擎融合於一體,它還附帶了一套高度可定制的純pythont圖形算法,可用於幫助我們繪制出直觀的函數體控制流以及函數中的各個基本塊。

2、軟件介紹

2.1、主界面:

調試器界面被分成5個主要的塊。

左上角的CPU窗口------顯示了正在處理的代碼的反匯編指令。

右上角是寄存器窗口------顯示所有通用寄存器。

左下角是內存窗口---------以十六進制的形式顯示任何被選中的內存塊。

右下角是堆棧窗口---------顯示調用的堆棧和解碼后的函數參數(任何原生的API調用)。

最底下白色的窗口是命令欄-----能夠像windbg一樣使用命令控制調試器,或者執行PyCommands。

2.2、PyCommands命令

  pycomands是我們在Immunity Debugger中執行Python代碼擴展的主要途徑。存放在Immunity安裝目錄的pyCommand文件夾里。

  是為了幫助用戶在調試器內執行各種任務(如設立鈎子函數、靜態分析等)而特意編寫的python腳本。

  任何一個PyCommand命令都必須遵循一定結構規范:1、必須定義一個main函數,並接受一個Python列表作為參數;2、必須返回一個字符串:將被顯示在調試器界面的狀態欄。

  按要求編寫一個py腳本:

  [demo.py]

1 #!/usr/bin/python
2 #coding:utf-8
3 from immlib import *
4 def main(args):
5     #實例化一個immlib.Debugger對象
6     return "[*] PyCommand Executed!"

 

  

 

PyCommand有兩個必要條件:

  一個main函數,只接受一個參數(由所有參數組成的python列表)。

  另一個是在函數執行完成的時候必須返回一個字符串,最后更新在調試器主界面的狀態欄。

  執行命令之前在命令前加一個感嘆號。---------- !<demo>

 

2.3、PyHooks

  Immunity調試器包含了13種不同類型的hook。,每一種hook都能單獨實現,或者嵌入PyCommand。

BpHook/LogBpHook
  當一個斷點被觸發的時候,這種hook就會被調用。兩個hook很相似,
  除了BpHook被觸發的時候,會停止被調試的進程,而LogBpHook不會停止被調試的進程。

 

AllExceptHook
    所有的異常的都會觸發這個Hook.
PostAnalysisHook
    在一個模塊被分析完成的時候,這種hook就會被觸發。這非常有用,當你在
    模塊分析完成后需要進一步進行靜態分析的時候。
    記住:在用immlib對一個模塊進行函數和基礎塊的解碼之前必須先分析這個模塊。
AccessViolationHook
    這個hook由訪問違例觸發。常用於在fuzz的時候自動化捕捉信息。
LoadDLLHook/UnloadDLLHook
    當一個DLL被加載或者卸載的時候觸發。
CreateThreadHook/ExitThreadHook
    當一個新線程創建或者銷毀的時候觸發。
CreateProcessHook/ExitProcessHook
    當目標進程開始或者結束的時候觸發。
FastLogHook/STDCALLFastLogHook
    這兩種hook利用一個匯編跳轉,將執行權限轉移到一段hook代碼用以記錄特定的
    寄存器和內存數據。
    當函數被頻繁的調用的時候,這種hook非常有用。

 

例子:以下的logBpHook例子代碼塊能夠作為PyHook的模板:

from immlib import *
class MyHook(LogBpHook):
    def __init__(self):
        LogBpHook.__init__(self)
    def run(regs):
        #Executed when hook gets triggered

 

   重載了LogBpHook類,並且必須建立了run()函數。當hook被觸發的時候,所有的CPU寄存器,以及指令都將被

存入regs,此時我們就可以修改它們了。regs是一個字典。如下訪問相應寄存器的值:regs["ESP"]。

  hook可以定義在PyCommand里,隨時調用。也可以寫成腳本放入PyHooks目錄下。每次啟動immunity都會自動加載這些目錄。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM