不管是Web安全還是逆向分析,在我看來,沒有任何一項工具是值得你投入大量精力去熟悉和學習的,我的本意就是你不應該在學習工具上浪費大量時間。因為是最重要的是你得懂得原理,熟悉手法,了解思路,而有些工具你又必須得去熟知,最好學習使用工具的辦法就是在實操中掌握手法,實戰中熟悉工具。
前提得是你了解匯編語言,win32程序你也大致得了解,我是把王爽的那本《匯編語言》給過一遍了,順便敲一敲。至于win32編程我是看不進去了,反正遇到不知道的再查嘛。
這一系列我準備主要使用IDA和Ollydbg這兩種工具(當然不止它們),一方面是記錄我探索《加密與解密》的足跡,另一方面也是與大家分享我的學習方法,從最簡單的開始,再到復雜,好了,不墨跡,開始。
將我們的程序CrackMe拖進IDA中,選擇默認步驟,點擊ok即可。點擊菜單欄OPTIONS-General,勾選Line prefixes(grApph),展示反匯編代碼地址。

打開我們的程序,輸入任意值,點擊Check,會提示“序列號不對,重新再試一次!”

可以看到IDA這里函數窗口就3個函數(簡單嘛!),查找一下哪個地方出現“序列號不對,重新再試一次!”這種字符串,這里可以看到第三個函數底部出現該字符串,圖形模式非常可觀,我最喜歡IDA這點了!(點擊空格鍵可以進行代碼模式和圖形模式的切換),在4010c9這個位置進行跳轉,而跳轉的位置4010e8這個位置就是提示你注冊失敗的位置,換一種說法就是如果你的程序正常走下去說明你的程序注冊成功,但是現在因為跳轉了,所以不能注冊成功。

所以這里要想成功破解程序就兩種方法,一個是將jnz這個跳轉指令用nop空指令填充,讓程序正常走下去,成功注冊;另一個就是,jnz這個指令是因為我們輸入的序列號與其要求的序列號不相等跳轉,我們將jnz改為jz,即相等才會跳轉,所以我們任意輸入錯誤的序列號到這里都不會跳轉而是直接走下去成功注冊。
將我們的程序拖進Ollydbg,快捷鍵Ctrl+g搜索定位到跳轉地址4010c9,點擊該匯編指令點擊右鍵選擇匯編,將je改為jne(另一種方法就是不用改匯編指令,勾選用nop指令填充也可以)

然后點擊復制到可執行文件,選擇所有修改-選擇全部復制

在新跳轉的窗口選擇右鍵(不是原來的匯編代碼C窗口),點擊保存文件即可

這個時候我們點擊新破解的程序,輸入任意數值,提示:恭喜你