談軟件加密(解密)及逆向技術與軟件開發技術的關係

 幾年以前我在看雪論壇(www.pediy.com)中看到了與軟件加密,解密及逆向分析相關的資料,剛開始出於好玩,有空閒的時間就去上面看看,慢慢的理解了一些基礎知識,當然動手實踐是必不可少的.慢慢的從靜態分析,到動態調試,算法分析都有了一定的積累,也越來越感覺到軟件開發,加密,解密和逆向分析之間的關係是密不可分的。

軟件加密與解密本身是相互矛盾的 ,而軟件開發和逆向分析技術也是相對立的,在後來的工作和生活中,這方面的知識對我在軟件開發相關的知識進行了很有力的拓展,也使我對他們的認識越來越深刻,回顧以往的經歷,可以找出相關的典型實例如下:
 

1.國產某文件夾加密軟件
剛開始下載試用以後,發現需要註冊,於是想利用自己知識破解他,後來破解的過程中,居然發現很多東西,比如:反調試技術,運行次數及運行時密碼設置,通過逆向分析技術,很容易搞明白了他的保護方式,而且發現,這種簡單的保護方式在逆向分析技術面前是透明的,下來分析了註冊算法,這方面我能力比較欠缺,沒能分析出來,但找到了破解它的方法(這也是好多軟件存在的問題,加密算法很複雜,但與軟件的結合點很容易找到),最後對它對文件夾的加密算法做了逆向分析,發現這種號稱“國防級加密”的功能,居然是利用Windows操作系統中的回收站,把要加密的文件移動到回收站中建立特殊文件夾中來加密的,結合Windows操作系統的特點,先不要說是不是“國防級的加密”,數據是安全性都是問題,後來上網查了一下,發現果然有人通過它加密以後,在發生某些意外的情況下數據沒辦法還原。

我只記得我當時很是想不明白(其實現在也不太明白),這樣的方式對用戶負責麼??沒辦法也許整個社會都在變遷,其實這個軟件是我在長沙出差期間分析的,當時保存了分析資料,後來回公司以後,在聖誕節前整理了所有的資料,把它公開於衆,詳細內容可以參見看雪中的文章"國產某文件夾加密軟件全面分析"(具體地址爲 http://bbs.pediy.com/showthread.php?t=19718

這個實例中,使用了大量的逆向分析工具,Windows操作系統的相關知識。


2.金蝶賬務系統不同版本之間數據導入導出
有個朋友是搞賬務的,單位比較小,剛開始使用了K3的MSSQL庫,由於某些原因,後來需要使用金蝶的單機版Access數據庫,新的單機版沒有什麼問題,但是去年的賬還在K3的MSSQL數據庫中呢,爲了給朋友幫忙,當時需要解決的幾個問題有:

數據庫如何直接進入(mssql和access):mssql可以使用NT認證方式進入,access金蝶是加密的,還使用了工作組文件加密(mdw文件),使用工具組文件加密的方式,密碼是不好解破的,只能從金蝶軟件入手,金蝶軟件要操作access數據庫,肯定要出現用戶名密碼的,通過這個方法,終於找到了用戶名密碼,直接進入access庫,對其操作沒有問題了。 
賬務基礎資料導出導入(主要是會計科目):兩個軟件系統的會計科目信息編碼方式不一樣,但可以通過一定的規則進行轉換,使用excel公式把數據轉換好以後,直接導入成功。
賬務憑證等資料導出導入(憑證數據):賬務系統每個會計期間(一個定義爲自然月)都需要進行結賬處理,兩個系統的結賬機制差別很大,結賬過程也比較複雜,沒有辦法把mssql中的結賬數據導入access,所以採用,導入當期的憑證等數據,然後結賬,轉到下一期。具體實現,在access中通過鏈接表方式把mssql的源數據鏈過來,通過帶參數插入查詢方式每次向access中添加指定參數的一期憑證數據,然後在賬務系統是進行結賬,轉到下期的(也就是把手工錄入憑證的工具通過數據導入來代替),這樣風險是比較低的,也比較合理。

就這樣,把一期一期的數據導入了,最後到了當前的期間,同時和原來的mssql中的賬務數據作了對比,發現期末餘額是一樣的,任務完成!

這個實例中,前期逆向分析爲數據庫密碼的尋找服務,後期使用了大量數據庫和賬務知識。


3.不重新啓動電腦,實現某些註冊表配置的刷新

有個搞網吧網管的朋友,說需要一個軟件,類似的windows中的策略編輯器的方式,通過修改註冊表限制和隱藏驅動盤,達到訪問限制。查相關資料瞭解到很容易實現,只要修改註冊表就可以了,但是修改完要重啓電腦才能生效,這在網吧是個大問題。後來與他溝通後之後,他告訴我有個軟件可以實現,讓我做爲參照,對軟件使用逆向分析以後現,是通過一個API來實現不重新刷新系統配置的(具體爲SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal "policy"),找到了解決問題的方法,只需要調用API就可以了。

這個實例很簡單,前期逆向分析很容易解決了問題。


4.丟失安裝程序的軟件系統,移植到另一臺機器或製作新安裝包
這方面的東西也做過一些,解決問題的方法是:通過分析軟件相關鍵的文件,先找到軟件運行所需要的所有文件。再通過打包工具或手工方法,進行移植安裝到另一臺機器(最好是在現場進行),通過對比,手工註冊組件,等方式,應該可以搞定。
另外,有一個.net作的安裝包,安裝包中的文件需要升級,但沒有原始的安裝工程文件,也就是不知道這個安裝包都包含哪裏文件,安裝過程中做了什麼樣的配置,要解決這一問題,一方面是通過跟蹤分析文件(文件監視器),另一方面是通過.msi文件反編譯器,找到這個安裝包的文件列表等信息,再進行還原。

這個實例環境比較複雜,不同的問題,可能有不同的解決方法,這裏只是提個思路罷了。


總結:軟件解密技術依賴於逆向分析技術,逆向分析技術又和不現的語言,編譯器有關。在瞭解和掌握這些知識以後,在軟件開發過程中,對於系統出現不容易找到的bug等,都可以通過逆向分析調試等方法,找找問題。對於採用了第三方的控件,組件等,如果第三方的控件存在某些缺陷,才能進行分析,驗證,從而使用軟件系統更加可靠穩定的爲用戶服務。逆向分析技術在病毒分析領域中的作用是不言而喻的,有了逆向分析技術,做爲軟件開發者,也可以自己分析研究病毒發作條件,從而爲預防做好準備。 建議有志於軟件開發的人多瞭解學習這方面的知識,相信在以後的工作生活中會有所幫助。

 

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