软件逆向—— ExifPro 2.1
Exifpro是一款小巧簡便的圖像瀏覽工具,比較適合像我這樣的新手用于逆向分析。
實驗目的
分析Exifpro主要注冊函數(shù)功能及其實現(xiàn)原理,通過修改,實現(xiàn)對Exifpro的破解。
實驗環(huán)境
實驗步驟
查殼
利用PEID程序查殼,發(fā)現(xiàn)該程序無殼,這方便了我們的分析判斷。
打開軟件調(diào)試
我們打開Exifpro,查看其版本信息。發(fā)現(xiàn)目前是尚未注冊登錄的版本。
我們打開輸入序列號的窗口,嘗試向其中輸入不同的數(shù)值,看看軟件會有什么反應。
1.不輸入
2.輸入格式錯誤的郵箱
3.隨機輸入一段序列號
這些提示窗口的字符串其實是一種非常有用的信息,我們可以通過這些字符串,嘗試定位到相對應的程序段。
定位到程序段
利用ollydbg打開Exifpro程序
右鍵點擊,選擇中文引擎搜索中的智能搜索
在中文搜索引擎頁面右鍵點擊,選擇find。將“Serial number is invalid”輸入其中,點擊確定。
雙擊跳轉(zhuǎn)到相應地址處。
尋找函數(shù)開頭并下設斷點
我們向上尋找該函數(shù)的開頭位置。在00482BC2處發(fā)現(xiàn)有個retn指令,我們可以推斷從下一條指令push 0x10開始,是該函數(shù)的開頭位置。
我們雙擊6A 10 處,在此下設斷點,逐步開始調(diào)試。
我們在利用ollydbg打開的ExifPro中輸入郵箱名稱和序列號。再次點擊確定,由于在此處已經(jīng)下設了斷點,所以程序此時沒有反應。注意此時的所輸入的序列號和郵箱地址,在以后的分析中會有所用到。
逐步跟蹤分析程序
點擊F8一步步的跟蹤程序的進行
lea是“l(fā)oad effective address”的縮寫,該指令負責將內(nèi)存的地址賦值給一個操作數(shù)。在這里,利用lea指令將存放郵箱字符串的地址賦值到ebx中。
在這里,是比較輸入郵箱的長度,如果郵箱的長度小于5,則視為不合法郵箱,進行跳轉(zhuǎn)。畢竟對于任意一個郵箱來說,"@.com"長度已經(jīng)達到了5。而在本次實驗中,我們的郵箱長度是13
如果郵箱長度小于5則會跳轉(zhuǎn)至此處,同時會彈出窗口“請輸入有效郵箱“
在這里的eax記錄的是郵箱賬號@前面字符序列的長度,如果在輸入郵箱時輸入的是非法字符,如@345312.com之類的,系統(tǒng)也會檢測出來。
在這里程序取了序列號的長度放到了eax中,若長度小于4,就會彈出“輸入有效序列號”的彈窗。
這一段主要是計算序列號的長度并遍歷的時候進行排查。與上面一段不同,這里考慮到了序列號中存在的空格和“-”的情況。用eax存放數(shù)值,值得注意的是,這里存放的是字符串類型。紅框中間有兩段比較函數(shù),分別是拿eax與0x20和0x2D比較,0x20就是空格,0x2D就是“-”。空格和“-”不計入序列號長度,這里計算的長度就是真實的數(shù)字長度,將計算結(jié)果存放在esi中。
這一段代碼是判斷序列號長度是否為24位,若未達到24位,則會報警說序列號無效。
取序列號前22位的和
這一段是檢測第23位*10+第24位的數(shù)是否與前22位取后兩位的值相等。在本次實驗中,我們?nèi)〉氖?8和93,兩者是不相等的。
因此他跳轉(zhuǎn)到彈出警告窗口處
我們修改起初輸入的序列號,改為“123456781234567812345693”試試,這一段是符合剛才的要求的。我們再試一次。
這一串代碼主要是實現(xiàn)將序列號前二十位由字符形式合成為一個整數(shù),其中ExifPro._allmul函數(shù),負責將每一位都×10。
通過這三條指令,先將郵箱號壓入棧中,通過ExifPro.NameToNumber函數(shù)將字符串轉(zhuǎn)為對應的數(shù)字,再從棧中取出放到ecx中。
再往后運行后,我們發(fā)現(xiàn)點擊確定后并沒有提示框的出現(xiàn)。起初,我以為這樣是破解成功了,但我打開“About”后發(fā)現(xiàn),其實并沒有注冊成功。我估計后臺還有其他的檢測函數(shù),比如檢測用戶名和序列號的匹配關(guān)系。所以我換了個思路。
在主程序段搜索“Unregistered Version”,跳轉(zhuǎn)到相應界面。
我們再網(wǎng)上找,找到了這個函數(shù)。ExifPro.IsAppRegistered,根據(jù)英文意思我們就可以推斷出這是個判斷是否注冊的函數(shù)。我們觀察發(fā)現(xiàn)這個call的返回值決定了程序是否跳轉(zhuǎn)到402087處,而402087處就是顯示“未注冊版本”的地方。
我們跟隨進該call中進行查看,發(fā)現(xiàn)該call在最后將bl的值復制到al中結(jié)束。于是我們把這句話改為MOV AL, 0x1
運行一次試試,大功告成
總結(jié)
以上是生活随笔為你收集整理的软件逆向—— ExifPro 2.1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle数据库短期培训,Oracle
- 下一篇: 网盘关停日后,百度云、天翼云等路在何方?