160個CRACK_ME系列 第一彈

這是160crackme系列的第一個,下載鏈接我會放在文章末尾,有興趣的朋友可以玩玩看。
我們先打開文件
160個CRACK_ME系列 第一彈
上來就是一個明晃晃的挑釁,等會一定也要把他幹掉
160個CRACK_ME系列 第一彈
有三個按鈕,看起來右邊這個簡單點,就點他好了
160個CRACK_ME系列 第一彈
160個CRACK_ME系列 第一彈
這時候對軟件的大體結構一定要有思路,雖然不能直接得出flag但是會對程序的分析有很大的幫助。那麼來分析一下這個程序,左邊那個按鈕的部分大概就是根據輸入的Name字段來生成Serial,而這個部分應該就是一個固定的註冊碼。
按照慣例,先拉到PEID裏查查殼
160個CRACK_ME系列 第一彈
不認識,沒關係,百度一下看看是啥玩意
160個CRACK_ME系列 第一彈
幸好,不是殼而是一種語言,那就不用脫殼了,拉倒ODB裏看看
160個CRACK_ME系列 第一彈
這種界面比較複雜的crackme一般難點就在如何找到主要函數,我們來右鍵->中文搜索引擎->智能搜索,ctrl+f來找一下serial字符串
160個CRACK_ME系列 第一彈
就這樣我們找到了我們需要的部分字符串,從結果來看有兩個當輸入錯誤時的提示信息,分別是42FA5E和42FB21,那我們在這兩處下斷點,然後把程序跑起來
160個CRACK_ME系列 第一彈
這個對話框先彈了出來,我們先忍他一會
160個CRACK_ME系列 第一彈
還是點右邊的選項,隨便輸點什麼
160個CRACK_ME系列 第一彈
emmm 並沒有斷到,這次我們以Failed爲準再下一次斷點在42F4F3處
160個CRACK_ME系列 第一彈
這次我們斷到了,那麼我們一開始斷的兩個Try again應該就是左邊按鈕的了,先不管他,我們來分析一下這段代碼:其實也沒什麼好分析的,只有一個關鍵跳轉我們需要注意,那麼我們想讓它”恭喜”我們的話,只要把位於42F4D5的關鍵跳轉Del掉就ok了,
160個CRACK_ME系列 第一彈
然後重新運行一下
160個CRACK_ME系列 第一彈
當然我們想做的遠不止這些,在軟件的更新中,註冊碼常常會改變,但是軟件註冊碼的加密算法一般是不會變的,所以通常的做法是繼續查找他的加密函數。對於右邊按鈕這部分而言,應該只是一個固定字符串,所以我們的任務就簡單多了,我們先把這部分還原,然後向上查看代碼,看看是什麼讓這個跳轉執行了
160個CRACK_ME系列 第一彈
可以看到,我們輸入的字符串就存在EAX處,那麼EDX應該就是我們要尋找的固定字符串了,
160個CRACK_ME系列 第一彈
我們把斷點取消,讓程序跑起來,看看這個字符串是否正確
160個CRACK_ME系列 第一彈
所以這部分我們就完成了!我們在返回主界面來看一下左邊的按鈕。
160個CRACK_ME系列 第一彈
160個CRACK_ME系列 第一彈
斷在了之前兩個斷點的位置,兩個斷點都有”Try again”字段,我們依次來分析這兩個位置的跳轉,首先是第一個斷點:
160個CRACK_ME系列 第一彈
我們看到這個只會返回錯誤的提示而沒有正確時的提示,且在42FA5A處跳轉的前面有一個cmp指令,將EAX與0x4進行對比,所以這應該就是對字符串的長度進行限制,若長度不足4就直接返回Try again,那麼我們再看看第二個斷點內容。
160個CRACK_ME系列 第一彈
這個部分就很熟悉了,和之前右邊的按鈕部分一模一樣,再來看看42FAFB處的內容
160個CRACK_ME系列 第一彈
這就很明顯是我們在找的註冊碼了,我們重新開一個進程來試驗一下
160個CRACK_ME系列 第一彈
正確,那麼我們就來找他的加密部分吧,在這之前我們先來猜一下這部分的流程:
輸入->檢測長度->加密->對比->輸出結果
所以假如和我們想的一樣的話,加密部分就應該在兩個斷點之間,我們來找一下
160個CRACK_ME系列 第一彈
就在第一個斷點下不遠,我們找到了一段很可疑的代碼,他對我們輸入的字符串進行了運算,而且與我們之前找到的註冊碼的部分字符串有聯繫,那這就很有可能是我們要找的加密部分了,我們在42FA87處下個斷點,重新運行程序以便來分析這段代碼,
160個CRACK_ME系列 第一彈
這樣我們就完成了對這段加密代碼的解析,再寫一段python腳本來重現這段代碼
160個CRACK_ME系列 第一彈
160個CRACK_ME系列 第一彈
這樣我們就完成了這個程序的解析,我們再來做點其他事情,比如最開始的對話框
右鍵->中文搜索引擎->智能搜索 來找對話框上的字符串
160個CRACK_ME系列 第一彈
很輕鬆的我們就找到了,我們來想辦法把這個提示框幹掉,這時候我們有兩種思路,一種是把調用這個函數的代碼del掉,另一種是把調用這個函數的代碼修改一下,調整到42f79c,讓它一進入函數就跳出去,不管哪一種操作,都一定要小心保持堆棧平衡,不然程序會崩掉。那我們在42F784處下個斷點,把程序跑起來,
160個CRACK_ME系列 第一彈
這時候棧裏就有了調用這個函數的代碼的地址,
160個CRACK_ME系列 第一彈
就是這裏了,因爲這一處沒有進行壓棧操作,所以我們直接del掉就可以了,然後右鍵->複製到可執行文件->選擇 會彈出這樣的東西
160個CRACK_ME系列 第一彈
再右鍵->保存文件 將他保存下來,我們再打開試一下效果
160個CRACK_ME系列 第一彈
直接就彈出來了,消滅對話框成功!

鏈接:https://pan.baidu.com/s/1PxBttyWn_6ZZNIe9bqJrnQ
提取碼:z14n

END

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