前言
在閱讀《c++ 黑客編程解密與防範》的OllyDebug使用方法的那一節,作者舉例一個非常簡單的程序破解例子,但不知由於何種原因,博主去網上下載與書中示例相同的程序之後卻無法復現書上的方法,經過一番摸索之後,終於成功將其實現。此文僅僅是博主用於記錄這次程序破解過程的博文,無任何商業目的,另外,此博文內容非常簡單易學,還請各位前輩們莫恥笑哈。
實驗所需工具和材料
- 逆向分析工具:OllyICE
OllyDebug的加強版,內嵌了許多插件,功能更加強大。下載地址🔗(若提示惡意鏈接之類的不用管它,這是看雪學院的鏈接。) - 實驗材料:易憂軟件–超級字典生成器v3.2
- 實驗目的:使得軟件變爲“已註冊”版本
圖1 破解前
圖2 破解後
實驗過程
一、打開OllyICE並將實驗材料易憂軟件–超級字典生成器v3.2.exe直接拖入OllyICE
打開後如下圖所示。
圖3 用OllyICE打開實驗材料
二、尋找關鍵字符串
在反彙編窗口(很多彙編代碼的那個窗口)點擊鼠標右鍵,再左鍵點擊Find UNICODE
。
圖4 尋找關鍵字符串(1)
在彈出的字串串窗口中找到 易憂軟件–超級字典生成器 v3.2(已註冊) 字符串。爲什麼要找到這條字符串才能實現破解呢?我的理解是這樣的:我們要使這個軟件變成“已註冊”版本,而註冊之後它的程序界面會出現“已註冊”這個標識,所以就可以從這裏入手。
圖5 尋找關鍵字符串(2)
三、對關鍵代碼進行分析
在上一步中,雙擊字符串後會跳轉到圖6所示的彙編代碼處。
圖6 雙擊關鍵字符串後跳轉到關鍵代碼處
圖7中紅框處表示存在跳轉,並且這個跳轉是直接跳到地址004031AC
處,從而導致地址004031A2
的代碼未被執行,關鍵字符串易憂軟件–超級字典生成器 v3.2(已註冊) 將不會在程序界面中顯示出來,也就是說這種情況下運行的程序是“未註冊”版的。
在反彙編代碼處向上翻,在圖8可以看到有兩個位置的彙編代碼都是跳轉語句,且都跳轉到地址004031AC
,所以我們必須得使這兩個跳轉語句不跳轉。首先雙擊十六進制代碼顯示區添加斷點,或着點擊相應地址再按F2添加斷點。
四、使跳轉語句失效實現破解
有兩種方法可以使這兩處跳轉語句失效。(注意,必須使兩處跳轉都失效,若存在任意一處跳轉仍有效的話是無法實現破解的)
方法一:jnz指令的意思是當ZF標誌位爲0時實現跳轉,所以在我們設置斷點之後,按F9運行程序進行調試並且當執行到這第一處跳轉語句時,通過鼠標雙擊ZF位使其變爲1使其不發生跳轉,再按F9往下執行到第二處跳轉語句,此時也向上述一樣雙擊ZF位使其變爲1從而使其不發生跳轉,之後再按F9便會彈出“已註冊”的程序。這樣就破解完成了。
按F9使程序執行到第一處跳轉,雙擊ZF位使其置1:
圖9 使第一處跳轉失效
再按F9使程序執行到第二處跳轉,雙擊ZF位使其置1:
圖10 使第二處跳轉失效
再按F9將會彈出“已註冊”的程序:
圖11 破解完成
方法二:方法一中是通過修改ZF標誌位而實現不跳轉,我們也可以通過修改彙編代碼而不修改ZF標誌位而使其不跳轉。很簡單,只需將jnz指令修改爲je指令則可。
圖12 將兩處都修改爲je
按三下F9就會彈出“已註冊”程序界面了。破解完成。