close

Part1 前言

大家好,我是ABC_123,最近在整理之前用過的工具,發現了大學時期曾經用過的小榕寫的掃描器「流光Fluxay」,一晃15年過去了,這個工具當年在國外的名氣也是響噹噹的,想起來了那時候研究技術的單純和快樂。

我收集了好幾個流光掃描器的版本,發現有幾個1999年和2000年的流光版本有各種限制,導致軟件打不開了,可我還想再用一下。在年前把王爽老師的《匯編語言》重新看了一遍,又看了一些都快忘乾淨的逆向破解教程,於是就使用OllyDbg嘗試解除了該軟件的各種限制,正好練練手。

接下來就講一講具體的破解過程,我儘可能講得詳細些,適合新手入門。總共需要破解3處限制:1、軟件啟動時的「用戶調查表」;2、數字簽名校驗;3、多處軟件過期校驗。

Part2 破解過程去掉「用戶調查表」界面

軟件打開後會有一個「用戶調查表」界面,剛開始這個界面就把我給難住了,找關鍵字、找API函數、查找堆棧的窗口函數都不行,一通下斷點一直走下去就走進類似於「PeekMessageW」的消息隊列死循環。

最後想了個方法,出現「用戶調查表」界面後,在OllyDbg上點擊「暫停」按鈕,然後按「Alt+F9」,從系統領空返回到程序的領空,很快找到關鍵跳轉,然後在00407D19處下斷點調試。

接下來將00407D19處的窗口給NOP掉,OD重新載入發現,第一個「用戶調查表」窗口已經被去掉了。

軟件過期限制解除

將去掉「用戶調查表」的程序保存為另一個exe文件,雙擊運行,直接提示「軟件過期」,接下來就是去掉這個限制。

各種搜索關鍵字發現找不到,怎麼辦呢?經過思考,出現「流光2001已經到期」之後,程序會退出,那可以先將「程序退出」的功能給去掉,OllyDbg一直跟到004060B3處,發現了msvcrt.exit標記,發現了退出功能代碼,在此給nop掉。

此時發現,軟件仍然提示過期,但是不會退出了,說明修改成功。接下來猜想,退出代碼上面必然是各種關鍵跳或者關鍵call,所以退出指令之前的幾個jmp跳轉指令全部打上斷點,重新動態調試。

最終發現在0040606B處,將jle有條件跳轉改為jmp無條件跳轉,即可成功解除「軟件過期」提示。

數字驗證解除

接下來繼續運行流光2000,這時候,會提示「數字驗證失敗」,說明作者怕軟件被捆綁後門,進行了校驗。

為了解除這個「數字驗證」,首先點擊「確定」按鈕,然後一路單步F8跟到「msvcrt.ext」退出提示,然後使用OD查看之前的匯編指令,發現了關鍵跳轉所在的位置,同樣將附近的4、5個跳轉全部下斷點,重新用OllyDbg動態調試。

最終經過反覆測試,發現將00406875處的跳轉改成jmp無條件跳轉,即可繞過「數字驗證」。

至此,已經將流光2000的所有限制全部解除(這裡發現有時候還是會提示軟件過期,但是在win10操作系統下不會提示,我也就不再花費時間去解除這些限制了)。

重新看一下這個流光老版本的界面吧,懷舊一下。

流光1999年版本的限制解除

接下來破解一個網上能搜索到的最老的1999年版本的流光。有了前面的參考,破解起來會容易很多,畢竟一個軟件研發者的寫代碼的習慣都是一致的,因而我們的破解思路也應該是一致的。

同樣出現了一個「流光II用戶調查表」,但是這個界面和前面的不一樣,前面的破解方法失效。這裡我猜想一個軟件開發人員,研發習慣都是一樣的,所以我重新看了一下前面剛剛講過的流光2001的破解啟動界面的關鍵call附近有啥重要標記,發現有一處「Software\Banyet\FluXay」字符串,所以我們直接在流光1999軟件中搜索這個字符串吧,猜想流光1999的關鍵call也在這個字符串附近。

接下來搜索「Software\Banyet\FluXay」,果然不出所料,存在這個字符串,接下來打上斷點。

在當前斷點之後很容易就找到了關鍵call,在004047D5處,將此處的call給nop掉。

第一個啟動界面就被去掉了,接下來熟悉的界面出現了,好懷舊的界面啊。

點擊「我同意」按鈕之後,熟悉的「數字驗證失敗」又出現了。

這個界面使用前面的破解方法就不行了,猜想後面的功能實現不一樣,接下來使用OD按下Ctrl+F8自動單步走,發現最後會陷入PeekMessageA消息隊列的死循環。

接下來怎麼辦呢,我想了各種辦法,最終用了一個廢力但是效果不錯的方法,我找了幾個參考關鍵字,在關鍵字附近的關鍵跳都打上斷點,然後F8單步走,憑感覺和經驗在遇到的關鍵跳附近都打上斷點,總共打了10幾個斷點,反覆動態調試,終於有一個關鍵斷點被找到了,於是將0043784C處改成jmp無條件跳轉。

至此流光1999年的這個版本限制完全解除,看一下當年小榕大神的作品。

Part3 總結

1. 無意中發現找到msvcrt.exit退出指令,向上找關鍵跳和關鍵call,這種方法效果不錯。

2. 逆向破解方面如果有軟件編寫經驗會更好,上述我的破解過程,完全是按照研發人員寫代碼的流程來思考和破解的。

公眾號專注於網絡安全技術分享,包括APT實戰分析、紅隊攻防、藍隊分析、滲透測試、代碼審計等,每周一篇,99%原創,敬請關注。

Contact me: 0day123abc#gmail.com(replace # with @)



arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()