引言
放假三天,呆家里把win7換成了win8.1,接着玩起了hyperv,試着裝了個windows xp虛擬機,體驗很不錯。不過對linux系統的支持不怎么樣,裝了個ubuntu,體驗相當差!閑着無聊,在虛擬機里用od調試Sublime Text,探索了一下它的注冊流程,於是有了這篇博文,與大家一起分享一些逆向思路,共同學習。
初探——運行環境和初步分析
windows xp(32位)系統 + ollydbg + sublime text(32位)。三個工具請自行去官網下載。首先嘗試在Sublime Text(下面以ST替代)注冊界面隨意輸入字符,結果如下:
將ST拖入OD調試運行,以“That license key”作為線索,搜索字符串:
點擊后,在出現的窗口里繼續右鍵,選擇查找文本:
雙擊該行,跳轉到指令處並按f2下斷點:
我們可以再嘗試注冊一下ST,觀察其是否在這斷下。嘗試過程我在這略去,可以證實,其驗證過程確實會經過這。我們用鼠標往上一行一行代碼點擊一下,可以看到代碼的流程:
可以看到,通過004c43E0處 TEST EAX,EAX,來判斷, 當EAX不為0時,跳轉至下面的代碼處。我們來驗證一下流程是否真的是這樣。將其跳轉指令改一下,由JNZ改為JZ,然后再去注冊,看看彈出什么:
哈哈,注冊成功。太簡單了吧,只是改了一下跳轉,隨意輸入字符就可以通過注冊了。但是,不知道大家注意到沒,ST主窗口上依然顯示的UNREGISTERED……看起來、、、似乎、、、好像、、、改個跳轉的作用僅僅是欺騙下我們自己。。。。。
進一步分析——關鍵是EAX寄存器的值
從上面的分析可以看到,它是根據EAX的值來決定跳轉的,我們可以嘗試從此處向上跟一下EAX的值在哪處改變了。一般來說,call都是用eax來返回值的,那么eax的值是否是上面004C43CF那個call的返回值呢?我們雙擊該行:
如上圖,我們猜測EAX是在這里被賦值的。那么將此處代碼改一下,讓EAX為0,再注冊試試:
點擊注冊,可以看到,彈窗直接消失了,然后主窗口處的“UNEEGISTERED”字樣也不見了。這次,看起來我們真的破解了ST。我們右鍵保存該修改,並覆蓋當前的Sublime Text.exe(如果怕恢復不了,可以先弄一份副本),如下所示:
直接全部覆蓋掉即可。然后我們再雙擊打開ST,蛋疼的一幕出現了:
不過,我們可以點擊注冊試試。可以看到,只要隨意輸入字符注冊,那個”UNREGISTERED”字符便會去掉,我們再看看”About Sublime Text“:
可以看到,只要我們每次打開ST,然后注冊,ST便認為我們已注冊。
但是,這樣我們能滿足嗎?作為一個追求完美的程序員,每次打開軟件,還要再點擊注冊!!!這你能忍嗎?如果不能忍,請以留言或者點擊右下角贊的形式告知我。
注:以上所有內容,僅是為了交流,請大家支持正版。
如果有對后續感興趣的同學,請點擊這里,我在這里分享了后面的分析內容。