《逆向分析實戰》1.1

來源:互聯網
上載者:User

標籤:現在   一次迴圈   lods   來源   概念   傳輸   緩衝   cpu   記憶體資料   

1.OD介面的熟悉

左上為反組譯碼視窗,用於顯示 反組譯碼代碼,調試剖析器主要在這個視窗中進行。

左中為資訊提示視窗,用於顯示與反組譯碼視窗中上下文環境相關的記憶體,寄存器或者跳轉來源,調用來源等資訊。

左下為資料視窗,用於以多種格式顯示記憶體中的內容,可使用的格式有hex,文本,短型,長型,浮點,地址和反組譯碼等。

右上為寄存器視窗,用於顯示各個寄存器的內容,包括通用寄存器,段寄存器,標誌寄存器,浮點寄存器,右鍵可選擇MMX寄存器,3DNow!寄存器和調試寄存器

右下為棧視窗,用於顯示棧內容,棧幀,即ESP或EBP寄存器指向的地址部分。

最下為命令視窗,用於輸入命令以簡化調試分析。

2.對資料的理解

最基本的是一個位元組佔8位,一個字佔16位。hex資料不是按最基本的情況顯示,一個位元組佔兩列。db表示位元組類型,dw表示字類型,dd表示雙字類型,表示數值的時候,h結尾的表示16進位,b結尾的表示二進位,無修飾的表示十進位。

定義w1=5566h,w2=7788h,但是在記憶體中會顯示為6655與8877.主機採用的是小尾方式儲存資料,資料的低位存放在記憶體的低地址中,資料高位存放在記憶體高地址中,因此低位存放66,高位存放55,在記憶體看時是相反的。當在資料視窗中選擇資料時,右鍵的菜單提供編輯,賦值,尋找,斷點等功能。

命令視窗輸出db/dw/dd+address,可改變資料視窗的顯示方式。(按位元組或者字或者雙字)。

3.x86組合語言介紹

逆向入門的目標,掌握80x86的常用指令,寄存器的用法,堆棧的概念和資料在記憶體中的儲存。

寄存器用來存放程式運行中的各種資訊,包括運算元地址,運算元,運算的中間結果。

CPU的工作模式分為實模式與保護模式,前者較早期,可以直接存取硬體,現在的CPU仍然支援實模式,為了相容以及X86的架構處理器都是從實模式引導過來的。

寄存器register是CPU內部用於高速儲存資料的小型儲存單元,訪問速度比記憶體快很多,但兩者都是用來儲存資料的。(價格 寄存器>記憶體>硬碟)CPU訪問記憶體中的資料是時會有一個定址的過程,因此訪問記憶體時間更長。而寄存器時整合在CPU內部的,數量少而且具有獨立的名字,因此訪問速度非常快。

X86寄存器中,逆向相關的有基本寄存器,調試寄存器與控制寄存器。基本寄存器分為8個通用寄存器,6個段寄存器,1個指令指標寄存器和1個標誌寄存器。

通用寄存器用於資料的傳輸與各種運算。32位通用寄存器包括4個資料寄存器,EAX,EBX,ECX,EDX(每個寄存器都可以當作一個32位,16位AX或8位AH對應高八位與AL對應低八位的儲存單元來用)。32位標誌寄存器EFLAGS,32位指令指標寄存器EIP(可按照32位與16位進行使用,低16位表示為SI來儲存16位的指標),16位段寄存器CS,SS,DS,ES,FS,GS。

關於8個通用寄存器的解釋:

EAX為累加器,在乘法與除法指令中被自動使用。EBX為基底位址暫存器,DS段中的資料指標。ECX為計數器,在字串和迴圈操作中常用,在迴圈指令和串操作時,ECX用來迴圈計數。每執行一次迴圈,ECX被CPU自動減一。EDX為資料寄存器。這四個寄存器主要用在算術運算與邏輯運算指令中,用來儲存各種需要計算的值。

EBP為擴充基址指標寄存器,SS段中堆棧內資料指標。EBP由進階語言用來 引用參數與局部變數,亦稱為堆棧基址指標寄存器。ESP為堆棧指標寄存器,SS中堆棧指標。ESP用來 定址堆棧上的資料,一般不參與運算。ESI為源變址寄存器,字串操作源指標。EDI為目的變址寄存器,字串操作目標指標。後兩者常用於記憶體資料的傳遞。ESI與EDI與特定的指令LODS,STOS,REP,MOVS一起使用,主要用於記憶體中資料的複製。ESP指示堆棧地區的棧頂地址,PUSH,POH,CALL,RET直接操作該指標。EBP表示堆棧地區的基地址。

EIP寄存器儲存著下一條要執行的指令的地址,程式運行時,CPU會讀取EIP中的一條指令的地址,傳送指令到指令緩衝區後,EIP寄存器的值自動加上讀取指令的位元組大小。即下一條指令的地址是當前指令地址加上當前指令長度。CPU每運行完一條指令,就會通過EIP寄存器讀取下一條指令給CPU。轉移指令 會改變EIP的值,使CPU跳躍性執行,從而構成分支與迴圈的程式結構。EIP寄存器的值在程式中無法直接修改,只能通過影響EIP的指令或者中斷,異常來影響。EIP中的值始終引導CPU的執行。

段寄存器用於存放段的基地址,段是一塊預分配的記憶體地區。CS程式碼片段,DS資料區段,SS堆棧段,ES(FS和GS)附加資料區段。在逆向中常用到FS寄存器,用於儲存SEH,TEB,PEB等重要的作業系統資料結構。

標誌寄存器FLAGS,15~0

條件標誌寄存器:

  1. OF,11,OverFlow Flag。溢出標誌位,反映有符號數加減法運算所得結果是否溢出。超過當前運算位元表達範圍稱為溢出,標誌位被置1,否則為0。
  2. SF,7,Sign Flag,符號標誌位,反映運算結果的符號位。運算結果為負時為1,為正時為0.
  3. ZF,6,0標誌位,運算結果為0該位置為1,否則為0.
  4. AF,4,Auxiliary carry flag,輔助進位標誌位,在字操作時,發生低位元組向高位元組進位或借位時該位置為1,否則為0.位元組操作要求低4位向高4位。
  5. PF,2,Parity Flag,奇偶標誌位,反映結果中1個數的奇偶性。偶數置1
  6. CF,0,Carry Flag,進位標誌位,運算結果最高位產生了一個進位或者借位,該位置1。

控制標誌寄存器:

  1. DF,10,Direction Flag,
  2. IF,9,Interrupt Flag,
  3. TF,8,Trap flag,

以上都是常用的標誌位,要掌握標誌位每一位的作用和標誌位在第幾位。

OD中認識寄存器

在調試的過程中,寄存器的值在發生改變時會變為紅色,未發生改變時為黑色。雙擊,右鍵顯示菜單可修改,複製寄存器的值。

《逆向分析實戰》1.1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.