暴力破解法——通過關鍵字符串尋找“關鍵跳”實現程序破解

前言

在閱讀《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(已註冊) 將不會在程序界面中顯示出來,也就是說這種情況下運行的程序是“未註冊”版的。

圖7 關鍵字符串被跳過了


   在反彙編代碼處向上翻,在圖8可以看到有兩個位置的彙編代碼都是跳轉語句,且都跳轉到地址004031AC,所以我們必須得使這兩個跳轉語句不跳轉。首先雙擊十六進制代碼顯示區添加斷點,或着點擊相應地址再按F2添加斷點。

圖8 有兩個位置都是跳轉語句


四、使跳轉語句失效實現破解
   有兩種方法可以使這兩處跳轉語句失效。(注意,必須使兩處跳轉失效,若存在任意一處跳轉仍有效的話是無法實現破解的)
   方法一: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就會彈出“已註冊”程序界面了。破解完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章