OD教程(去除NAG窗口--PE文件結構)

nag本意是煩人的意思,nag窗口是軟件設計者用來時不時提醒用戶購買正版的警告窗口。

軟件設計者可能認爲當用戶忍受不了試用版中的這些煩人的窗口時,就會考慮購買正式版本。

PE文件結構

爲什麼需要了解PE文件結構?

大家想象一下,某天在班上,小甲魚突然想知道黑夜童鞋今天穿什麼顏色的褲子,要怎麼辦呢?點名讓黑夜童鞋站起來?不行,因爲蒼老師在上課呢。那小甲魚就只好掏出班級裏的座位名單,然後找到黑夜的名字,看是在第幾行第幾列就找到了,然後在看他的褲子是什麼顏色,對啵?

 

其實如果把PE結構比作我們剛纔提到的班級,那麼座位名單就是PE文件頭啦~

PE(PortableExecutable)可執行文件結構是一樣規範,發明這個主要用來指導系統如何執行你所設計的程序。

 

可能有魚油會說我TM不用十分鐘可以寫個小馬,怎麼不見得需要用到這個PE文件結構?

其實不然,因爲編譯器已經爲你將代碼按照PE結構的形式編譯鏈接爲可執行文件,這過程只是它默默的完成,所以我們沒有察覺。

 

但是我們現在學習的是逆向,所以連一條毛我們都不能放過。

PE文件結構有一個非常優勢的地方就是它在硬盤上的存儲結構跟載入內存時候的存儲結構是一樣的。

 

所以,只要你瞭解如何在PE文件結構裏邊找出某樣你想要的東西,那麼當這個文件映射到內存後,你也可以很容易的找到它(因爲OD是動態調試,程序需要先載入內存嘛)。

內存中的一個模塊代表一個可執行文件進程所需要的所有代碼、數據、資源的集合。

 

PE文件結構:

DOSheader

DOSstub

PEFile Header

ImageOptional Header

SectionTable

DataDirectories

Sections


PE文件結構

這個社會太複雜了,許多東西都矇蔽了我們的雙眼,而真相有時候確是如此簡單╭(╯3╰)╮。

本質上,最下邊的節區(有些人也叫區塊)是運行一個程序真正需要的內容。

 

上邊所有的“頭”都僅僅是幫助Windows加載器定位和尋找下邊的節區的內容。

在PE文件頭中,這節課我們需要知道的是如何找到AddressOfEntryPoint即可,更多詳細內容可以看下小甲魚的《解密系列》系統篇|PE結構。

 

小結

 

GetModuleHandleA這個API函數用於獲取程序的ImageBase(基址)

這個程序的MessageBox的OwnerHandle(父窗口句柄)爲0(NULL),我們可以將這個值改爲一個不存在的值,例如1,這樣它就找不到老豆,就不會被顯示出來。

 

名詞註釋:

VA(VirtualAddress,虛擬地址)

RVA(RelativeVirtualAddress,相對虛擬地址)

EP(EntryPoint,程序入口點)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章