最近由於工做須要在看0day的軟件漏洞分析,發現這本《0day安全軟件漏洞分析技術(第2版)》真是本好書,惟一缺點就是書上的環境是Windows XP 32Bit的,基於現狀難以進行實踐,因而筆者打算使用緊跟潮流但又儘可能知足書上的環境——Windows 10 Profession 32Bit,但願對你們學習有所幫助。編程
1、環境以及要用的軟件安全
系統:Windows 10 Profession學習
軟件:UltraEdit、LordPE、OllyDBG、VC++ 6.0、IDA Pro測試
下圖做者的系統信息,就是一個虛擬機而已:3d
2、實驗目的調試
本次實驗的目的是經過更改軟件的十六進制值達到輸入任何密碼都能突破驗證。code
3、實現過程blog
首先咱們用VC++ 6.0編寫一個可供這次實驗的C語言程序,代碼以下:圖片
#include<stdio.h> #include<string.h> #define PASSWORD "1234567" int verify_password(char *password) { int authenticated; authenticated = strcmp(password, PASSWORD); return authenticated; } void main() { int valid_flag = 0; char password[1024]; while(1) { printf("please input password: "); scanf("%s", password); valid_flag = verify_password(password); if(valid_flag) { printf("No, your password is False!\n\n"); } else { printf("Yes, your password is True!\n"); break; } } }
上述代碼的具體意思不做解釋,若想看懂請自行翻閱C語言的相關書籍,好比C語言編程兵書等等。input
上述代碼通過編譯運行會造成以下的運行結果:
從運行結果與咱們程序的代碼不難發現,這個軟件的密碼只會是1234567,那麼如今關閉它,開始咱們的破解之路吧。先用IDA Pro打開這個名爲Crack的exe文件,做者的exe文件在C:\MyProjects\Debug\Crack.exe此目錄下,你們請找到本身的文件所在位置,打開以後會出現以下圖的樣子:
某些時候打開會是一個一個的圖片,請仔細看上圖中的紅框對應你軟件的位置,那裏有個黃色的小箭頭,鼠標點住它往左拖就能夠看到上面這種樣式。
在上圖黑框中有咱們程序中出現的一句話,這裏是輸入錯誤密碼時纔會出現的,那麼前面的「JE short_loc xxxxxx」這句話其實就表明了程序中的if語句,請將這句話前面的號碼記住複製下來,我這裏是004010D5,以下圖:
爲啥要記住這個呢?由於咱們就要從if語句下手,分析程序能夠知道if...else...語句其實就是用來判斷咱們輸入密碼正確錯誤的關鍵,因此要對症下藥。
當咱們找到004010D5時就能夠關閉上一步的軟件了,接下來打開OllyDBG,動態調試這個程序能夠更好的爲下面的步驟作準備,打開以後應該會出現下圖所示:
按Ctrl+G,在彈出的窗口中輸入剛剛複製的十六進制地址。以下圖:
點擊OK以後會跳轉到前面第二步中咱們看到的代碼上。如上圖紅框,注意紅框中的數字「74」哦!點擊以後按F2,打個斷點,接下來按F8進行單步調試,在Crack程序的運行框中出現「please input password」字樣後輸入一個錯誤的密碼,再返回到上圖,點擊「JE short_loc xxxxxx」字樣的代碼句,下面一個小框中會出現「Jump is NOT taken」的字樣。以下圖:
這自己是一個錯誤的密碼,按照程序的邏輯,它會給咱們打印「No, your password is False!」,但別忘記咱們的初心是想讓它給咱們打印「Yes, your password is True!」,這時候咱們雙擊「JE short_loc xxxxxx」字樣的代碼句,在彈出的框中將「JE」改爲「JNE」,後面保持原狀,以後點擊Assemble按鈕,注意看這句話它前面的數字變成了「75」哦,最後點擊Olly DBG軟件最上面的倒三角按鈕。以下圖:
這時候再轉回去看輸出的結果,會驚奇的發現,打印的是「Yes, your password is True!」這樣咱們的目的就達到了,可這並非咱們的終極目標,咱們是想要修改本身編的軟件,從根源上修改它!因而進入下一步。
在這一步中咱們須要用到第四個軟件——LordPE,在打開以前請關閉OllyDBG軟件,LordPE打開以後界面以下圖所示:
點擊PE Editor按鈕打開Crack.exe以後會出現以下圖所示:
這裏主要是記住ImageBase後面的十六進制數字,用前面獲得的十六進制數字減這個十六進制數字獲得004010D5 - 00400000 = 0x10D5。
獲得0x10D5後就能夠關閉這個軟件了,若是你用的是Windows10 64Bit的系統,就會發現你的ImageBase與個人徹底不同,以下圖是64位Windows10的ImageBase:
這是最後一步,咱們打開UltraEdit,將Crack.exe拖入UltraEdit中,會出現一大片數字和字母,打開以後按Ctrl + G,在彈出的框中輸入0x10D5以後回車,會跳轉到一個地方,以下圖:
在上圖中箭頭指向的地方有一個醒目的74,還記得前面第3步說過的數字「74」麼?對,沒錯,這裏的74就是第3步中的74!還記得咱們將「JE」改爲「JNE」以後數字變成了「75」麼?最後一步就是將這個「74」改爲「75」,而後Ctrl + S保存便可哦,以下圖:
這時候咱們再用OllyDBG打開Crack.exe測試發現,若是輸入的密碼爲1234567,反而是錯的了,其他的則是正確。測試以下圖:
以上是今天要學習的內容,後面做者會持續更新這一系列的內容,但願你們多多關注哦!
參考書籍
《0day安全軟件漏洞分析技術(第2版)》 王清 主編