《加密與解密》筆記一

這次主要是記書裏面的基礎部分(我之前沒有細緻的記過的)和OD的使用:

1、字節序:

有兩種字節序,因CPU的不同而不同,分別是大端序和小端序:
這裏的大小端序和高低地址高低位字節解釋:
如:
一個內存段1000,偏移量0~FFFF地址高低由偏移量的增加而增高
一個數據0x12345678位是由高到低下降的,所以高位->低位是:12,34,56,78
所以小端序內存排布爲:78,56,34,12
大端序排布相反:12,34,56,78

2、Windows應用程序和操作系統的關係

在Windows平臺下開發的應用程序我們都只是調用WinAPI我們幾乎不可能接觸到系統的底層,所以我們可以認爲API是整個Windows框架的基石:
加密與解密圖1.3
還有一些我們在使用逆向分析時候可能會下斷點的幾個API:(標註參數是方便加條件記錄斷點的)
hmemcpy(void ,const void ,long)這三個參數是目標地址,母地址,數據大小。
GetWindowText(HWND,LPSTR,int)
GetDlgItem(HWND,int)空間標識符
GetJDlgItemText(HWND,int,LPSTR,int)(LPSTR爲對話框中文本內容)
MessageBox(HWND,LPCTSHR,LPCTSHR,UINT)

句柄:

句柄其實說實話就是在我們看來不需要關心實際數據及其含義的東西,這個就相當於另一種“指針”只不過這個指針只有Windows模塊內部纔可以引用其代表的對象的,所以這個值我們一般不關心,只要在相關API時使用相應有效句柄,並遵循一些句柄的特殊規定就好了。

3、保護模式

學過彙編,我們知道在80x86(386以後)處理器就有3中工作模式:
實模式,保護模式和虛擬8086模式
實模式工作方式就是一個8086
保護模式就是支持多任務的工作方式
虛擬8086模式就相當於在保護模式下進行實模式工作方式這種方式就可以方便在保護模式下的用戶運行一個或多個8086程序,說白了就是相當於在Windows下運行一個DOS下的程序。
現在來看虛擬內存

虛擬內存:

在保護模式下,CPU的尋址方式與實模式不同,實模式下是一個段地址加偏移地址(運用到地址計算器),此時就相當於每個段都有FFFF(偏移的大小是0~FFFF)這就很類似於一個二維的表格。
但是在保護模式下,內存則是線性的,這時段寄存器存放的是段選擇子,這個值是不參與尋址的,只是一個全局描述表或者是本地描述符表,所以在一般的反彙編調試下我們的地址一般就是ESP,EBP,EDI,ESI這幾個的值。
加密與解密圖1.4
所以,在虛擬模式下我們的地址是從0到FFFFFFFF,此時這個是一個虛擬的4G的地址空間,所以此時每個程序都有自己的4G的尋址空間互不干擾(這就是上一章分配內存用GlobalAlloc的原因)
而在物理內存中,操作系統和系統的DLL是一值被映射的,用戶EXE程序則只在所屬的時間片被映射,用戶的DLL則是被選擇性的映射。
大概就是:
這裏寫圖片描述
簡單來說就是:
啓動程序時開啓新進程並分配虛擬地址(並不佔內存)->
程序代碼以及被使用的DLL映射到虛擬地址並讀取到物理內存中(並沒有關係)->
程序的數據,堆棧分配佔用物理內存並被映射到虛擬內存中->
程序運行由自己的虛擬地址起訪問內存時由虛擬地址映射到物理地址。

權限級別:

在保護模式下有4等權限級別,其中Ring 0是系統核心,它可以執行所有的指令並訪問所有的數據,而絕大部分用戶的應用程序是Ring 3級別的,這個權限級別的只可以執行有限的指令訪問有限的數據(如Win32子系統等)
這裏寫圖片描述


以上部分內容(一個筆記系列)來自《加密與解密》如有侵權請聯繫我及時刪除

還有部分我的理解,如有不妥歡迎大家給予斧正。

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