Python實現計算MD5
此文轉載自:https://blog.csdn.net/bits_stdc/article/details/105978657
逆向工程,除錯Hello,World ! 程式(更新中)
逆向分析法
靜態分析法
是在不執行程式碼檔案的情形下,對程式碼進行靜態分析的一種方法。並不執行程式碼,而是觀察程式碼檔案的外部特徵,獲取檔案的型別,大小,PE頭資訊,內部字串,是否執行時解壓縮等。
動態分析法
是在程式檔案的執行過程中對程式碼進行動態分析的一種方法,它通過除錯來分析程式碼流,獲得記憶體的狀態等。
雖然程式碼除錯過程在程式碼逆向分析過程中佔據很大比重,但它只是程式碼逆向分析的一個從屬概念
除錯hello world 程式
程式碼
#include "windows.h"
#include "tchar.h"
int _tmain (int argc, TCHAR * argv[])
{
MessageBox(NULL,"Hello World!","張軒瑞",MB_OK);
return 0;
}
開始除錯
用OllyDbg除錯工具開啟程式
左上 程式碼視窗
- 預設用於顯示反彙編程式碼,還用於顯示各種註釋、標籤,分析程式碼時顯示迴圈、跳轉位置等資訊。
右上 暫存器視窗
- 實時顯示CPU暫存器的值,可用於修改特定的暫存器。
左下 資料視窗
- 以Hex/ASCII/Unicode值的形式顯示程序的記憶體地址,也可在修改記憶體地址。
右下 棧視窗
- 實時顯示ESP暫存器指向的程序棧記憶體,並修改。
OllyDbg 基本指令 (適用於程式碼視窗)
專案 | Value | 含義 |
---|---|---|
Restart | Ctrl+F2 | 重新開始除錯 |
Step Into | F7 | 執行一句OP code (操作碼),若遇到呼叫命令(CALL),將進入函式程式碼內部 |
Step Over | F8 | 執行一句OP code (操作碼),若遇到呼叫命令(CALL),僅執行函式自身,不跟隨進入 |
Execute till Return | Ctrl+F9 | 一直在函式程式碼內部執行,直到遇到RETN命令,跳出函式 |
設定斷點的四種方法
1.goto 命令
執行Go to(Ctrl + G) 命令,開啟一個“輸入跟蹤表示式”的對話方塊。
在文字框中輸入“地址”。
游標自動定位到該地址處,執行F4命令,讓除錯流運到此處,然後從該處除錯。
2.設定斷點
可以設定BP(Break Point,斷點) (快捷鍵F2)
設定斷點後,執行到斷點處就會暫停。
可以開啟Breakpoints框(ATL+B)檢視設定的斷點。
雙擊某個斷點會直接跳轉到相應位置。
3.註釋
按鍵盤上的“;”可以添加註釋
同時也可以查詢到他。
4.標籤
我們也可以通過標籤提供的功能在指定地址
比如在00401BF0中設定標籤,main func
因為00401385處呼叫00401BF0的函式,所以就會顯示,main func
標籤和註釋一樣也可以檢索
快速查詢指定程式碼的四種方法
除錯程式碼時,main()函式並不直接位於可執行檔案的EP位置上,出現在此的是開發工具生成的啟動函式。
(EP是windows可執行檔案(EXE,DLL,SYS等)的程式碼入口點,是執行應用程式時最先執行的程式碼的起始位置,它依賴於CPU。)
1. 程式碼執行法
逐條執行指令來查詢需要查詢的位置。程式碼執行法僅使用於被除錯的程式碼量不大、且程式功能明確的情況。
2.字串檢索法
直接查詢字串。
尋找所需要的字串,然後雙擊。
3.在除錯程式碼中設定斷點
查詢->所有模組間的呼叫
檢視呼叫了那些函式
4.在API程式碼中設定斷點
開啟“所有模組中的名稱”並敲下MessageBox,游標會直接定位。
使用“打補丁”方式修改“hello world!”字串
修改字元的兩種方法
1.直接修改緩衝區
我在搜尋的時候,發現註釋hello world的地方更改沒有用。
找到主函式後,設定斷點。
然後按F4,進行除錯。
在右下方站視窗找到ASCII碼“hello world”。
然後雙擊檢視,進入資料視窗,去更改快取區。
去更改,hello world 改成 hello rever
儘量不要用更長的字串,覆蓋原字串,這樣會使資料遭到破壞。
改完之後,去執行程式,之後就會彈出視窗。
我們發現以前的hello world 變成了 hello rever。
儲存更改到可執行檔案
上面的除錯中,我們通過修改字串緩衝區更改了程式顯示的訊息內容,但是這種更改只是暫時的,我們終止除錯的時候。程式中的原字串沒有改變。如果想儲存下來,就要把更改後的程式儲存一個可執行檔案。
- 在左下資料視窗中,選中更改後的字串,點選滑鼠右鍵,在彈出的選單中選擇“複製到可執行檔案”,然後點選“備份”——>“儲存到資料檔案”然後輸入檔名儲存為exe檔案。
當我們開啟這個已經儲存好的檔案的時候,彈出的字串變成了“hello rever”。