逆向破解之160個CrackMe —— 001(上)


CrackMe--001

前置知識介紹:

  • 160 CrackMe 是比較適合新手學習逆向破解的CrackMe的一個集合,一共160個待逆向破解的程序

  • CrackMe:一些公開給別人嘗試破解的小程序,制作crackme的人可能是程序員,想測試一下自己的軟件保護技術,也可能是一位cracker,想挑戰一下其它cracker的破解實力,也可能是一些正在學習破解的人,自己編一些小程序給自己破。

  • CrackMe簡稱CM,cracker是以破解各種加密或有限制的商業軟件為樂趣的人。

程序信息:

編號 作者 保護方式
001 Acid burn Name/Serial,Serial

工具:

  • ollyDbg(簡稱OD)

  • Exeinfo PE

開始破解:

1.先用Exeinfo PE工具查看下001程序(打開工具,將程序拖拽進去即可查看),得到信息如下圖,可知該程序沒有加殼,而且是用Delphi語言編寫的。

 

2.Delphi所編寫的代碼與VC++所編寫的代碼有所不同,最明顯的兩點區別如下:

  • 函數調用時傳參的方式主要用寄存器,一般將參數1放入eax寄存器,參數2放入edx寄存器,參數3放入ecx寄存器,多余的也是通過壓棧的方式傳入

  • 字符串的處理,Delphi字符串處理函數與VC++是不同的,其字符串的首地址減去4后,所取出的4個字節就是此字符串的長度。分析的時候要注意。

3.接下來我們運行程序,首先會彈出一個提示窗口,大概意思是歡迎你破解他,這個軟件由ACiD BuRN制作

 

4.現在我們知道這個軟件制作者是誰呢,不想每次運行都彈出這個對話框來提醒我制作者是誰,那么我們有了第一個目標,讓提示窗口不顯示。點擊《確定》按鈕,發現有兩種驗證機制,一種是用戶名與序列號驗證,另一種只需要序列號。所以我們又獲得兩個新任務,由易到難,我們第二個目標是只需要序列號驗證的,最后攻克用戶名與序列號驗證

 

 

 

5.目標一:去掉煩人的提示對話框(一般軟件設計者用來提醒用戶購買正式版本的窗口),要完全去除提示窗口,只需要找到創建該窗口的代碼並將其跳過。顯示窗口的常用函數有:

  • MessageBoxA(W)

  • MessageBoxExA(W)

  • DialogBoxParamA(W)

  • ShowWindow

  • CreateWindowExA(W)

6.我們用OD打開,然后用Ctrl+G跳轉到上面常用函數處,然后按F2鍵下斷點

 

7.或者用命令bp MessageBoxA在指定函數處下斷,bp表示下斷點,后面跟着要下斷點的函數名,(bp與函數名之間有個空格)

 

8.下完斷點后,按F9讓程序運行起來,發現程序會在函數MessageBoxA處斷下,觀察棧區,會發現就是我們要去除的窗口信息,即此時MessageBoxA函數執行完,就會彈出提示窗口,我們轉到調用這個函數的位置(方法見下圖2)

 

 

9.本來我們只要nop掉調用MessageBoxA的代碼就可以實現目標一,不過后面驗證后的結果提示窗口也會調用此處,所以我們還要繼續向上找

 

10.終於來到最終的關鍵處,此時我們采用第二種,直接將push 0x0改為retn(有興趣的兩種都可以試試)

 

11.直接選擇要修改的那行,按空格鍵,輸入改后的指令,然后保存修改好后的程序,選擇覆蓋原程序,會在原程序目錄下生成個.bak文件,其實就是修改前的文件改了后綴。

 

 

 

12.今天就到這里,明天完成第二個目標

 

鏈接:https://pan.baidu.com/s/1XGf_Hmy8jbdb0cEmcuXjAA

提取碼:v34f


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM