逆向課程第二講,尋找main入口點


            逆向課程第二講,尋找main入口點

一丶識別各個程序的入口點

入門知識,識別各個應用程序的入口點

(舉例識別VC 編譯器生成,以及VS編譯生成的Debug版本以及Release版本)

1.識別VC6.0 Debug版本

1.1 首先,新建一個VC debug版本的程序,然后F5運行,可以看到棧回溯窗口

1.2 而后通過棧回溯窗口,點擊mainCRTStarup,查看main函數之前會調用什么API

確定之后,OD打開查看.

可以看到調用API的位置,但是怎么確定那個是入口點,我們知道,  VC中的main函數是3個參數,那么我們只需要找到

三個push 然后一個Call的位置,則可以確定,(確定也是要你F7跟進去,看看代碼是不是main函數的代碼,或者參數傳參是什么)

1.3確定main入口點

在上圖可以看到,三個push,然后一個Call,那么我們跟進去查看,因為是Debug版本,所以已經提示出來參數是什么了

所以直接可以確定了.

1.4 F7跟進去查看.

可以直接確定使我們的入口點

IDA查看一次

步驟和前邊一樣,先看入口點特征,Debug版本特征是調用API GetVersion

所以IDA中查看.

1.查看文本視圖

2.展開文本視圖

這里提示你要CTRL +  加號 展開

展開查看

 

 3.根據特征,讀取代碼,確定main位置

因為是Debug所以有符號顯示 下面直接看Release版本

2.查看VC6.0 Release版本

首先,特征是一樣的,都是調用GetVersion

那么現在直接OD打開去分析.(當然IDA也可以,都是工具)

1.一樣,先找特征

2.找到之后,因為我們寫的是main,所以判斷是main,只要找到三個push一個Call即可

 已經找到了 F7 跟進去查看.

3.確認是不是.

可以看出,因為是Release版本,所以都給優化沒了.確實使我們寫的代碼

 

3.查看VS系列 Debug版本(沒個版本不一樣,所以先看下特征這里是 VS 2015)

1.棧回溯,確定入口點特征

首先第一步,還是編寫一段代碼

然后通過棧回溯,查看入口的特征.

那么我覺着,這個是入口點的特征,而在tmainCRTStartup里面調用的wmain

那么此時OD打開的時候可以分析遇到的第二個call,然后在第二個call里面跟進去.

通過棧回溯,可以看到會調用這種API,而下方的截圖則會調用wmain,所以OD打開,不斷的跟,也是三個push 一個Call

 2.OD分析

因為是Debug版本,有跳轉表,也可以看到符號信息,所以直接跳轉過來

跳轉過來之后(看下圖)

可以看到確實是兩個Call,也就是我們上面分析的,然后進入第二個Call

3.確定入口點位置

F7跟進去,查找三個push  一個Call

找到了,我們跟進去查看,看看是否是入口點,

跟進去之后發現又有一層跳轉表,沒關系,F8 走過去

跟過來之后則會發現確實使我們入口點寫的代碼了

 

4. VS系列,查看Release版本

Release版本是一樣的,直接IDA打開查看(換着工具看)

1.進去IDA,打開入口點,CTRL + 加號展開

CTRL + 加號展開不做演示,同上面分析一樣.

查看反匯編

發現IDA直接跟過來的就是這個,那么此時好辦了,我們知道main在它的下面,那么直接尋找三個push 一個Call即可.

 

找到了,雙擊_main確認一下.

我們剛才寫的代碼已經出來了

 


免責聲明!

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



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