編譯與代碼安全之認識(一)

         好久沒有更新博客了,今天週末索性喝杯茶,靜下心來把最近一段時間自己所理解和思考的關於軟件代碼保護的東西寫下來。幫助所需之人,多有不對,望批評指正。正確的運用編譯知識可以在我們代碼保護中達到事半功倍的效果。


        一提到編譯,大家很多人覺得不就是詞法分析、語法分析然後產生一個針對特定機器的文件。感覺這是一個很成熟,有規則,本身就是很有章法的東西,好像不需要我們本身去理會它的一種東西,如果是做應用層的開發是沒有問題,如果去做安全,比如軟件代碼保護,我們去做代碼保護,經常的思維是要針對基於解釋性語言和編譯性語言所編譯產生的結果去做保護,這就產生了基於運行過程中的加殼,加密,或者是解析結構做混淆,和基於二進制的虛擬機保護,另一個層面是針對一些反彙編器或者反編譯器本身去做對坑,比如破壞dex2jar或者針對IDA遞歸反彙編算法的特徵去做一些破壞。但是隨着一個LOT、LOV時代的到來,很多的系統是做了本身的DIY,因爲針對性更強,目標性更加明確,所以這個時候如果還是以編譯完的可執行文件作爲保護對象,可能要隨時進行更新,強度上和兼容性上所付出的代價會更高。


       因此這個時候,另一種思路就是本文想說的,如果我們去借助一些比較成熟的編譯器框架去做一些處理,可能能達到事半功倍的效果。編譯不應該僅僅的理解爲針對的對象一定是源文件,而應該去把一種源頭格式轉爲編譯器本身能夠理解的中間語言,一旦轉爲中間語言,這個時候我們就可以做很多事情,如果想做保護的,那就是反優化,加一些自定義的混淆保護規則,如果想做逆向分析的,那就利用優化規則去優化這些中間語言,或者是針對虛擬機保護過後的文件。可能這個時候大家會想到可執行文件怎麼去得到中間語言,如果說通過一些反編譯得到一些邏輯正確的僞碼,(當然這個假設有待考證研究)可以藉助於一些編譯器框架自己去寫一個對於僞碼的特徵去做編譯優化,優化的過程就是去混淆的一個過程。我想隨着對編譯的更爲深層次的認識,能做的事情還很多,暫時YY這麼多。

 

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