第一章 基础知识---1.4Crack小实验--复现
0x01 程序及其編譯環(huán)境
程序如下,功能:我們必須輸入正確的密碼1234567才能得到密碼驗證的確認,跳出循環(huán)。否則程序提示密碼錯誤再次輸入。
#include <stdio.h>#define PASSWORD "1234567"int verify_password(char* password) {int authenticated;authenticated = strcmp(password, PASSWORD);return authenticated; }int main(void) {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("incorrect password!\n\n");}else{printf("Congratulation! You have passed the verification!\n");break;}} }程序編譯環(huán)境:
操作系統(tǒng):win xp 編譯器:VC++6.0 build版本:release版本對于產(chǎn)生release版本,我們可以在編譯時,選擇下圖內(nèi)容
如果沒上面的界面,我們可以右鍵空白區(qū)域,然后選擇組建,就可以出現(xiàn)上面的界面。
程序的運行結(jié)果效果圖如下:
0x02 分析程序
找到工程的文件夾,我們使用release編譯時,會生成一個Release文件夾,在這個文件夾中,我們找到.exe文件
將exe文件直接拖到IDA中,IDA就會把二進制文件翻譯成質(zhì)量上乘的反匯編代碼。默認情況下,IDA會自動識別main函數(shù)。
按F12會自動繪制出更加專業(yè)和詳細的函數(shù)流程圖。
用鼠標選擇程序分支點,按空格鍵切換到匯編代碼
這條指令就是我們要找的if分支,內(nèi)存地址VA:40106E.
用OD打開文件,Ctrl+G,跳轉(zhuǎn)到這個地址。
OD默認情況下將程序中斷在PE裝載器開始處,而不是main函數(shù)的開始。
我們在這個地址打上斷點
密碼驗證函數(shù)的返回值存放在EAX中,if語句通過以下兩條指令實現(xiàn)。
現(xiàn)在我們將je改成jne,現(xiàn)在當我們輸入正確密碼就會提示錯誤,輸入錯誤密碼就會正確
改過之后,原本JE對應(yīng)的機器指令為74,改成jnz之后變?yōu)?5,運行程序,單步執(zhí)行就可以看到執(zhí)行了正確密碼才應(yīng)該得到的指令。
0x03 破解程序
方法1
右鍵----復制到可執(zhí)行文件-----所有修改
選擇全部復制
右鍵----保存文件,就可以了
運行程序,當我們輸入1234567,會讓我們繼續(xù)輸入,輸入其他會立即退出
方法2
這里我們要認識幾個名詞:
- 文本偏移地址(File Offset):數(shù)據(jù)在PE文件中的地址叫文件偏移地址,這是文件在磁盤上存放時相對于文件開頭的偏移。
- 裝入基址(Image Base):PE裝入內(nèi)存時的基地址。默認情況下,EXE文件在內(nèi)存中的基地址是0x00400000,DLL文件時0x10000000.
- 虛擬內(nèi)存地址(VA):PE文件中的指令被裝入內(nèi)存后的地址
- 相對虛擬地址:內(nèi)存地址相對于映射基址的偏移量
- 節(jié)偏移:存儲單位差異引起的節(jié)基址差
文件偏移地址=VA-裝入基址-節(jié)偏移
節(jié)偏移=.text段的虛擬內(nèi)存地址-文件偏移地址
文件數(shù)據(jù)在磁盤和內(nèi)存中的存放:
節(jié)偏移就是這些基本單位造成的,也就是0x00填充的地方
用LordPE打開exe文件
我們可以看到.text的虛擬內(nèi)存地址(Voffset)=0x1000,文件偏移地址(Roffset)也是這個。所以節(jié)偏移=0
40106E.這個地址的指令在PE文件中的文件偏移地址=40106E-400000-節(jié)偏移=0x106E
用編譯器打開exe文件,這里我使用010Editor,Ctrl+G,輸入0x106E直接跳轉(zhuǎn)到JE指令的機器代碼處,將74改成75
保存后執(zhí)行,結(jié)果和方法1一樣。
總結(jié)
以上是生活随笔為你收集整理的第一章 基础知识---1.4Crack小实验--复现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python安全攻防---信息收集---
- 下一篇: 端口复用和重映射--STM32F103