作者:逆向驛站
微信公衆號:逆向驛站
知乎:逆向驛站
CrackMe005,上篇說了具體方法,下篇來發逆向分析過程,看看老夫是如何得到上篇的具體方法的!
準備
【環境和工具】
- win7/xp虛擬機環境
- CrackMe005(ajj2.zip)
- ollydbg
- Dededark
- peid
- UPXEasyGUI.exe(upx專用脫殼器)
【學習層次】
- 爆破,但是這個CM作者聲明瞭,爆破他是不認可的
- 解密流程,寫註冊機
- 積累Delphi程序逆向特點經驗
詳解視頻
搞清Delphi控件ID在反彙編代碼中的特點,其實邏輯就清晰多了
https://v.qq.com/x/page/x0830...
實戰圖文
一.DedeDark梳理事件、控件信息
二.動態分析
1.根據字符串定位總判斷位置
字符串“註冊了”,“厲害厲害真佩服”入手,定位發現是timer2事件函數,五個判斷不停的判斷,如圖
可以看到判斷跟6個值有關,分別是[ebx+304]、[ebx+308]、[ebx+310]、[ebx+318]、[ebx+314]、[ebx+31C],我們下文所有就對其簡稱做304、308、310、318、314、31C
2.逐個判斷層層分析
我們從簡單往復雜,並結合他們之間內在的邏輯先後順序,去逐個分析,順序分別是31C、304、308、310、314和318,其中最難的是310,方法是常量跟蹤法,即在OD中點擊 查找→所有常量 ,看看都那些地方對這些值有操作
31C
- 總判斷目標:31C值,不能等於0x3E7
- 相關事件函數:Button1Click
- 最終逆向分析結論:Buton1Click事件不能被觸發,否則31C就會被賦值0x3E7,即不能點擊註冊按鈕,這裏需要注意click事件和mousedown事件,click必須是一個按下和擡起的全過程,而且鼠標位置都在按鈕控件範圍內,而mousedwon事件按下就是
- 具體逆向分析過程如下
所有常量查找結果,如下
反彙編代碼如下
呵呵就一行,確實簡單吧
304
- 總判斷目標:304值,不能等於0xC34
- 相關事件函數:FormCreat
- 最終逆向分析結論:FormCreat生成表單的事件函數中,會對一個固定路徑檢查是否有合規內容的合規文件,有則,顯示出隱藏的Edit2控件
- 具體逆向分析過程如下
所有常量查找結果,如下
反彙編代碼如下
注意:我這裏已經把,CrackMe開發者要求的X盤符改爲了C盤符,爲的是方便
308
- 總判斷目標:308值,不能等於0x230D
- 相關事件函數:Button1MouseDown、Panel1DblClick
- 最終逆向分析結論:308初始值是由FormCreat函數初始化爲0x28E,在Button1MouseDown事件中,右鍵一次則308值增加0x3,最終目標是0x29D,因爲等於0x29D後,Panel1DblClick事件就可以解禁Edit2控件,則0x29D減去0x28E再除以0x3最後結果等於5,即右鍵點擊註冊按鈕5次,再去雙擊panel1控件沒有圖的地方,就可以解禁Edit2控件
- 具體逆向分析過程如下
所有常量查找結果,如下
反彙編代碼如下
310 中嵌套 30C,最複雜的地方
- 總判斷目標:310值,必須等於0xF94
- 相關事件函數:FormMouseMove、Edit2DblClick
- 最終逆向分析結論:310的值要想最終被賦值0xF94,必須完成三重判斷,第一個是當控件ID是0xE20時,即是image3"性相近"的時候,FormMouseMove捕捉的XY座標都足夠大,即右下腳,滿足則310被賦值0x10,第二個是當控件ID是0x2DC時,即image2"性本善"的時候,FormMouseMove捕捉的X座標足夠小、Y座標足夠大,第三個是,30C不能等於初始值0x9, 30C被賦值的條件是Edit2中的字符串長度是8位,且第二位是"_",第6位是"," ,我們寫1_345,78是符合要求的,同時要求用戶名長度是3的整數倍,然後左鍵雙擊Edit2控件,即可給30C賦值,具體賦值結果又跟你的磁盤剩餘空間有關。當上面這一系列嵌套判斷都合規後,則完成310賦值0xF94,同時若是用戶名是"ajj",則顯示隱藏控件ID是0x2FC的Label3,顯示值是30C
- 具體逆向分析過程如下
310所有常量查找結果,如下
310反彙編代碼如下
發現嵌套30C,那麼繼續常量查找30C,如下
30C反彙編代碼如下
這裏其實是這個crackme最難的地方了,其實邏輯並不複雜,需要耐性和記錄給理清晰即可
314和318
- 總判斷目標:314的值等於318的值
- 相關事件函數:image1~4MouseDown
- 最終逆向分析結論:其實314的值在上一個流程中已經賦值完畢,314的值取決於30C的值,30C分別是0、1、2、3的時候,314分別是0x41、0x3D、0x34、0xDF,而318的值,則是點擊1~4幅圖片,區分左右鍵,分別自增不同的數值,具體如下方圖片,最終要求318的值等於314的值
- 具體逆向分析過程如下
所有常量314查找結果,如下
314反彙編代碼如下
318所有常量查找結果,如圖
至此,如下圖timer2所有的總判斷全部過關,所以timer2每次觸發,都將走註冊成功的流程,是不是感覺很刺激,躍躍欲試的,去網盤中下載,去折磨自己的吧
文章中涉及軟件、課件、源碼等均在網盤,爲避免網盤鏈接失效,公衆號中回覆:網盤
歡迎關注微信公衆號:逆向驛站
相關文章
本期標籤:dededark|delphi反彙編|crackme|crackme5|crackme05