有時候密碼不是明文存在檔案裏面的,而是通過計算後的一些資料等得來。那這樣就沒辦法通過靜態檔案或是直接搜尋字串的方式來破解,但在動態分析中就可以透過暫存器
與 Stack
中所儲存的資料來抓取目標密碼
https://github.com/wlmnzf/reversecore/blob/master/abexchrackme/abexcm2.exe
abex’ crackme 是很好的破解教材,可以在裡面學到很多技巧,來嘗試破解這個軟體 \OwO/
首先可以看到我們要輸入 Name 還有對應的 Serial,而 Name 會有一組對應的密碼,目標就是透過記憶體看到它所對應的密碼。直接開始破吧。
打開 x32dbg
並執行。
隨便輸入一個 Name,而序號是經過加密計算所的來出來的結果
看來錯誤時會出現這段字串,可以嘗試透過這段字串來找尋位置。
利用 搜尋>所有模組>字串引用
來找到他的位置 :
發現了這個字串確實存在 ( 以後有要是不在該甚麼辦的文 )
點擊目標字串,到達後透過向上搜尋是否有比對或是跳耀的函式,找尋是否有線索。
這邊發現有一個區域會引入兩個字串後使用 vbavarTstEq()
,這是用來比對兩個字串是否相等的函數,透過前面被 push
進 stack
的位置來查看是否為輸入的值與密碼,在這邊設一個停止點
,執行到這邊來觀察。
可以看到引用的位置是 0019F1BC
跟 0019F1AC
,是這兩個位置被 push
了進來。
在資料視窗使用 ctrl+G
跳到目標地點,查看該區域二進位資料。
再將資料視窗改為顯示位置模式
,就可以看到引用位置的值為 "C5C8D1CD
",而另外一邊用來比對的是 "test123
" ,正是我們輸入的錯誤密碼。
可以看到在 stack
引用的位置的值是我們輸入的測試 Serial,另一個則是沒看過的字串。那看起來有很大的機率是比對兩個位置的值。嘗試輸入看看,成功了!
這次的破解到這邊完成,這次經驗讓我覺得先不看書 ( 解答 ) 時解謎的過程很好玩。雖然中間有多走幾次歪路,不過破解完這種玩具後總會有很大的成就感。要是看了以上過程還是不太懂的話推薦也可以下載這份檔案也來試著分析看看 !