逆向課程第二講,尋找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確認一下.
我們剛才寫的代碼已經出來了