1. 程式人生 > 實用技巧 >Python實現計算MD5

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含義
RestartCtrl+F2重新開始除錯
Step IntoF7執行一句OP code (操作碼),若遇到呼叫命令(CALL),將進入函式程式碼內部
Step OverF8執行一句OP code (操作碼),若遇到呼叫命令(CALL),僅執行函式自身,不跟隨進入
Execute till ReturnCtrl+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”。

2.在其他記憶體區域新建字串並傳遞給訊息函式

更新中。。。。