【逆向工具】IDA使用1-VS2015版本debug查找Main函數,加載符號文件


IDA 常見操作

  1. 空格,切換反匯編視圖
  2. 選擇CALL或是跳轉 進入函數內部或是跳轉處
  3. 返回鍵 ESC

daq.exe 分析32位程序 ,生成的IDA數據庫文件是 .idb
Idap64.exe 分析64位程序, 生成的IDA數據庫文件是 .i64

查找程序main函數入口點

在exports選項卡下找到入口點

雙擊start_0 就進到了函數入口處。在沒有導入簽名庫識別庫函數前,顯示的是sub_XXXX這樣的地址。

使用IDA簽名文件識別庫函數

簽名(view->open subviews->Signatures,右鍵->Apply new signature,可以用來指定加載IDA的庫函數簽名文件。這個是IDA的非常有用的一個功能。在逆向過程中,MFC、SDK、Delphi編寫的程序都會用到大量的庫函數,而IDA的庫函數簽名文件能夠識別出大部分的庫函數。我們分析用戶函數時,根據這些庫函數推測出用戶函數的作用。不同語言編寫的程序也需要選擇使用相對應的簽名文件。例如MFC則選擇使用vc32mfc,控制台則選擇使用vc32rtf等。

庫函數名顯示出來了

快捷鍵

除了使用圖形化外,還可以通過記憶快捷鍵加快逆向速度。

使用快捷鍵,shift+F5打開簽名窗口
使用快捷鍵Insert導入VC的簽名庫

動態調試驗證分析

F2在調試處下斷點,在平台選擇的下拉列表選擇【Local Win32 debugger】,點擊旁邊的 綠色三角啟動按鍵。單步步入與單步步過跟OD的按鍵一樣,都是F7、F8

修改main函數的名字

找到main函數后,使用快捷鍵 【n】 修改簽名文件識別出來的___tmainCRTStartup函數改名成main。可以將main函數的默認參數顯示出來,

【修改前與修改后對比】

修改之后出現的_cdecl為函數調用協議。

相關知識點:

  __stdcall、__cdecl和__fastcall是三種函數調用協議,函數調用協議會影響函數參數的入棧方式、棧內數據的清除方式、編譯器函數名的修飾規則等。

調用協議常用場合

__stdcall:Windows API默認的函數調用協議。
__cdecl:C/C++默認的函數調用協議。
__fastcall:適用於對性能要求較高的場合。

函數參數入棧方式

__stdcall:函數參數由右向左入棧。
__cdecl:函數參數由右向左入棧。
__fastcall:從左開始不大於4字節的參數放入CPU的ECX和EDX寄存器,其余參數從右向左入棧。

棧內數據清除方式

__stdcall:函數調用結束后由被調用函數清除棧內數據。
__cdecl:函數調用結束后由函數調用者清除棧內數據。
__fastcall:函數調用結束后由被調用函數清除棧內數據。

函數調用方式例子:

●printf 是什么方式?
答:C方式,_cdecl,CALL完之后在函數外面平衡參數的堆棧

●MessageBoxW是什么方式?
答:_stdcall方式,CALL內部平衡堆棧

參考:

逆向分析點滴
http://blog.csdn.net/iiprogram/article/details/1665392


免責聲明!

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



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