一碗酸梅湯 作品
第284章 江寒的操作
“crackme”是很多逆向論壇裡十分流行的玩法。
一些人為了測試自己的軟件保護技術,就會製作一些crackme程序,讓別人來嘗試破解。
網上也經常會有一些cm(crackme)競賽,一些安全軟件公司,偶爾會在這種比賽中,選拔可用的員工。
根據設計者的意圖和加密技術水平,不同的crackme,破解難度天差地遠。
江寒點擊了一下鏈接,很快就把題目給出的crackme,下載了下來。
然後運行起來,先觀察一下程序的外在表現。
這是個windowspe文件,界面十分樸素,只提供了兩個輸入框。
一個用來輸入username(用戶名),另一個用來輸入sn(serialnumber,序列號),下面還有個【login】按鈕,用來檢測username和sn是否匹配。
看完了這些內容,對程序的結構心裡有數之後,江寒就將窗口關掉了。
隨後,他就打開了著名的調試工具ollyice,加載了crackme.exe。
開始調試之前,先設置個斷點。
斷點是調試器的一種功能,可以讓程序中斷在需要的地方,以方便分析。
常用的斷點有int3斷點、硬件斷點、內存斷點、消息斷點、條件斷點等。
例如lbutton_up,就是很常用的消息斷點,功能是當鼠標左鍵抬起時,中斷程序運行。
又如getdlgitemtext斷點,當程序試圖調用windows的對應api,獲取輸入框裡的文本內容時,就會被攔下。
江寒先試著設置了getdlgitemtext和getdlgitemtexta斷點,然後按了下f9,讓程序跑了起來。
crackme的窗口出現後,先隨便輸入一組username和sn,然後用鼠標點擊了一下【login】按鈕。
結果……
程序直接彈出了一個msgbox(消息框),提示【用戶名和序列號不匹配】。
很遺憾,在這次嘗試中,斷點並沒有發揮作用。
這說明在這個crackme裡,並沒有使用getdlgitemtext或者getdlgitemtexta來讀取字符串。
否則的話,就會被調試器攔截下來,而不會執行關鍵call了。
所謂關鍵call,是指程序中用來計算用戶名和序列號的函數,通常執行完關鍵call,很快就能找到一個條件跳轉語句。
如果序列號與用戶名匹配,就會繼續往下執行,否則就彈出出錯提示……
接下來,江寒又試了一下lbutton_up斷點。
這次終於成功斷了下來。
接下來就很簡單了,交替使用f7(步入)、f8(步過)兩個快捷鍵,單步跟蹤即可。
這個程序是那種很老實的程序。
意思就是沒有什麼亂七八糟的,迷惑人的東西,也沒有刻意為難挑戰者。
一些人為了測試自己的軟件保護技術,就會製作一些crackme程序,讓別人來嘗試破解。
網上也經常會有一些cm(crackme)競賽,一些安全軟件公司,偶爾會在這種比賽中,選拔可用的員工。
根據設計者的意圖和加密技術水平,不同的crackme,破解難度天差地遠。
江寒點擊了一下鏈接,很快就把題目給出的crackme,下載了下來。
然後運行起來,先觀察一下程序的外在表現。
這是個windowspe文件,界面十分樸素,只提供了兩個輸入框。
一個用來輸入username(用戶名),另一個用來輸入sn(serialnumber,序列號),下面還有個【login】按鈕,用來檢測username和sn是否匹配。
看完了這些內容,對程序的結構心裡有數之後,江寒就將窗口關掉了。
隨後,他就打開了著名的調試工具ollyice,加載了crackme.exe。
開始調試之前,先設置個斷點。
斷點是調試器的一種功能,可以讓程序中斷在需要的地方,以方便分析。
常用的斷點有int3斷點、硬件斷點、內存斷點、消息斷點、條件斷點等。
例如lbutton_up,就是很常用的消息斷點,功能是當鼠標左鍵抬起時,中斷程序運行。
又如getdlgitemtext斷點,當程序試圖調用windows的對應api,獲取輸入框裡的文本內容時,就會被攔下。
江寒先試著設置了getdlgitemtext和getdlgitemtexta斷點,然後按了下f9,讓程序跑了起來。
crackme的窗口出現後,先隨便輸入一組username和sn,然後用鼠標點擊了一下【login】按鈕。
結果……
程序直接彈出了一個msgbox(消息框),提示【用戶名和序列號不匹配】。
很遺憾,在這次嘗試中,斷點並沒有發揮作用。
這說明在這個crackme裡,並沒有使用getdlgitemtext或者getdlgitemtexta來讀取字符串。
否則的話,就會被調試器攔截下來,而不會執行關鍵call了。
所謂關鍵call,是指程序中用來計算用戶名和序列號的函數,通常執行完關鍵call,很快就能找到一個條件跳轉語句。
如果序列號與用戶名匹配,就會繼續往下執行,否則就彈出出錯提示……
接下來,江寒又試了一下lbutton_up斷點。
這次終於成功斷了下來。
接下來就很簡單了,交替使用f7(步入)、f8(步過)兩個快捷鍵,單步跟蹤即可。
這個程序是那種很老實的程序。
意思就是沒有什麼亂七八糟的,迷惑人的東西,也沒有刻意為難挑戰者。