天天看點

IDA 實戰--(2)熟悉工具

布局介紹

  1. 軟體啟動後會 有幾個選項,一般直接選擇

    Go

    即可
    IDA 實戰--(2)熟悉工具
  2. 之後的工作台布局如下
    IDA 實戰--(2)熟悉工具

開始分析

分析的第一個,将PE 檔案拖入工作區

剛開始接觸,我們先保持預設選項,其它選項後面會詳細講解,點選OK 後,等待分析完成

IDA 實戰--(2)熟悉工具

分析後的界面布局如下

IDA 實戰--(2)熟悉工具

預設是流程化顯示彙編代碼,可以按空格轉換為正常模式,這裡自動定位到

main

函數了

IDA 實戰--(2)熟悉工具

我們先分析下 main 函數的整體流程,将main 函數的反彙編代碼複制過來

.text:00401010                               ; =============== S U B R O U T I N E =======================================
.text:00401010
.text:00401010                               ; Attributes: bp-based frame
.text:00401010
.text:00401010                               ; int __cdecl main_0(int argc, const char **argv, const char **envp)
.text:00401010                               _main_0 proc near                       ; CODE XREF: _main↑j
.text:00401010
.text:00401010                               var_40= byte ptr -40h
.text:00401010                               argc= dword ptr  8
.text:00401010                               argv= dword ptr  0Ch
.text:00401010                               envp= dword ptr  10h
.text:00401010
.text:00401010 55                            push    ebp
.text:00401011 8B EC                         mov     ebp, esp
.text:00401013 83 EC 40                      sub     esp, 40h
.text:00401016 53                            push    ebx
.text:00401017 56                            push    esi
.text:00401018 57                            push    edi
.text:00401019 8D 7D C0                      lea     edi, [ebp+var_40]
.text:0040101C B9 10 00 00 00                mov     ecx, 10h
.text:00401021 B8 CC CC CC CC                mov     eax, 0CCCCCCCCh
.text:00401026 F3 AB                         rep stosd
.text:00401028 68 1C 20 42 00                push    offset Format                   ; "Hello World!\n"
.text:0040102D E8 2E 00 00 00                call    _printf
.text:0040102D
.text:00401032 83 C4 04                      add     esp, 4
.text:00401035 33 C0                         xor     eax, eax
.text:00401037 5F                            pop     edi
.text:00401038 5E                            pop     esi
.text:00401039 5B                            pop     ebx
.text:0040103A 83 C4 40                      add     esp, 40h
.text:0040103D 3B EC                         cmp     ebp, esp
.text:0040103F E8 9C 00 00 00                call    __chkesp
.text:0040103F
.text:00401044 8B E5                         mov     esp, ebp
.text:00401046 5D                            pop     ebp
.text:00401047 C3                            retn
.text:00401047
.text:00401047                               _main_0 endp
.text:00401047
.text:00401047                               ; ---------------------------------------------------------------------------
           

.text:00401010 55 push ebp

将ebp 寄存器入棧,上面的都是一些描述資訊,暫時忽略,我們從這一行開始

.text:00401011 8B EC mov ebp, esp

将esp 寄存器指派給ebp

.text:00401013 83 EC 40 sub esp, 40h

開辟40h 的棧空間備用

.text:00401016 53 push ebx

将ebx 入棧

.text:00401017 56 push esi

将esi 入棧

.text:00401018 57 push edi

将edi 入棧

.text:00401019 8D 7D C0 lea edi, [ebp+var_40]

加載

ebp+var_40

位址到 edi

.text:0040101C B9 10 00 00 00 mov ecx, 10h

将ecs 指派為10h

.text:00401021 B8 CC CC CC CC mov eax, 0CCCCCCCCh

将eax 指派為0CCCCCCCCh

.text:00401026 F3 AB rep stosd

重複上面的操作10h ,其實這4條彙編代碼就是個循環指派過程

.text:00401028 68 1C 20 42 00 push offset Format

傳入參數,為什麼是傳入參數呢,這裡要結合下面call 指令聯合分析,根據x86 的調用約定,在調用函數前,需要先将參數入棧(輕按兩下Format 可以定位到資料區,不清楚PE 檔案結構的,可以參考文章 《PE 檔案結構解析》)

IDA 實戰--(2)熟悉工具
IDA 實戰--(2)熟悉工具

.text:0040102D E8 2E 00 00 00 call _printf

調用

printf

函數

後面的指令,暫時可以認為是函數調用完之後來清理現場的,不用過多糾結,這幾個一般出現在函數調用結束之後,用來平衡函數的堆棧。

至此,main 函數分析完成

繼續閱讀