Linux系統(tǒng)軟件加殼保護(hù)技術(shù)的改進(jìn)設(shè)計(jì)
第二步:對提取的核心代碼加密并結(jié)合多態(tài)變形技術(shù)
采用進(jìn)程注入加密技術(shù),逆向阻止脫殼軟件附加在受保護(hù)的進(jìn)程上。先讓CONTEXT.EBX 獲取子進(jìn)程的PEB 地址,讀出PEB 子進(jìn)程的映像地址后,將基礎(chǔ)地址參數(shù)指向檢索到的映像基址,最終完成對各種外部中斷的監(jiān)視工作。對加密后的核心代碼進(jìn)多態(tài)變形技術(shù)改進(jìn),讓其改變自身代碼,從而使搜索字符串的識別技術(shù)失去效果。文章采用的代碼變換加密壓縮來隱藏自身,為了防止搜索字符串的方法檢測到,解密代碼引動代碼模塊,程序?qū)⑵洳迦肫浔旧?,調(diào)用代碼模塊中包含的函數(shù),移動例程周圍的指令,隨機(jī)增加無用的指令,使用不同的寄存器和操作碼,使得解密例程對應(yīng)的二進(jìn)制代碼在不同的感染體內(nèi)完全不一樣[5]。多態(tài)變形引擎過程如圖4 所示。
第三步:將目標(biāo)文件的核心部分和加殼部分整合
整合目標(biāo)文件的核心部分和加殼部分需要進(jìn)行精確的計(jì)算,設(shè)置正確的elf 文件頭、程序頭表、節(jié)頭表等的數(shù)據(jù)。這樣新生成的elf 文件才能正常運(yùn)行。在整合elf 等數(shù)據(jù)時采用遍歷整合的方法,對前面提取的的核心代碼塊逐一進(jìn)行分析。采用循環(huán)回繞整合加殼后的核心代碼。
1)先設(shè)立一個狀態(tài)表,記錄每個變量的狀態(tài)類型。記錄物理文件的大小和載入內(nèi)存所占內(nèi)存的大小。首先執(zhí)行函數(shù)的初始狀態(tài),將除去入口函數(shù)的所有函數(shù)都設(shè)置為untainted。若一個變量在多個正向前序代碼段的狀態(tài)表中出現(xiàn),則重新計(jì)算其大小,并更新狀態(tài)表。
2)內(nèi)部執(zhí)行:按照順序逐一執(zhí)行其內(nèi)部的指令,更改變量的狀態(tài)表,將目標(biāo)文件核心部分內(nèi)容續(xù)寫到加殼部分的后面,當(dāng)執(zhí)行到段中最后一步時形成輸出狀態(tài)表。同時檢驗(yàn)程序變形狀態(tài)的安全性,傳遞接口函數(shù)參數(shù)[6]。
3)循環(huán)回繞整合部分:在核心代碼全部執(zhí)行完畢時,檢查其后繼代碼段中是否有包含變形的循環(huán)頭。如果存在,則該代碼塊是滿足條件的最外層的循環(huán)頭,將程序頭表中屬性、大小的參數(shù)設(shè)置成新計(jì)算值,并檢查其輸入、輸出狀態(tài)表中是否有變量的類型狀態(tài)發(fā)生變化,如果存在,則重新開始回繞執(zhí)行,直到狀態(tài)表停止更新。
3 相關(guān)算法性能對比
表1 給出了新的加殼算法SRELF 與ASProtect 算法、tElock 算法、Armadillo 算法的比較,表2 給出相關(guān)符號定義。
1)安全性提升
由于SRELF 采用的是二進(jìn)制代碼進(jìn)行加密或壓縮,并且沒有對加殼功能程序大小進(jìn)行限制,所以在代碼中可以插入足夠的花指令[7]。再加上高復(fù)雜度的加密變形壓縮算法,保證了加殼程序的高安全性。此外變形重構(gòu)了elf 文件, elf 文件中的內(nèi)容全部改變,對表頭文件進(jìn)行靜態(tài)分析脫殼又增加了難度。而且在SRELF 中加入了充分的反動態(tài)跟蹤指令,防止被保護(hù)文件被動態(tài)跟蹤。通過上幾方面安全性分析,可以證明加殼后的elf 文件安全性得到了大幅度提高。
2)運(yùn)算量降低
3)偽裝性增強(qiáng)
加殼后的elf 文件結(jié)構(gòu)并未改變, 而且SRELF 加殼方法不需要改變程序入口地址,很好的隱藏了殼程序。
4)擴(kuò)展性提升
由于SRELF 方法從理論上沒有對殼程序大小進(jìn)行限制,使其具備了很好的擴(kuò)展性。因此后期可以同步更新SRELF 中的加密方法,反靜態(tài)分析方法,反動態(tài)跟蹤方法,對其進(jìn)行完善和堅(jiān)固。
綜上所述SRELF 克服了現(xiàn)有加殼方法中所暴露出來的問題, 解決了改變elf 文件結(jié)構(gòu)和改變程序入口地址的重大缺陷,讓加殼后的程序呈現(xiàn)出多態(tài)變形性,在反脫殼中增加了難度。因此,SRELF 方法是一個既具有很高的安全性同時具備良好的可行性的加殼方法。
4 結(jié)束語
文中研究了現(xiàn)有加殼軟件在反破解中存在的普遍難題———出現(xiàn)完全不符合所有已知模式的新型安全缺陷[8],總結(jié)出現(xiàn)有加殼方式的不足,針對不足問題提出了一種改進(jìn)的加殼方法———重構(gòu)變形SRELF 加殼算法。軟件加殼對重點(diǎn)代碼進(jìn)行加密、變形、反靜態(tài)分析和反動態(tài)跟蹤相結(jié)合,同時具備較為精簡的運(yùn)算量,提高加密部分的反破解能力。文中只考慮了加殼過程中引入程序變形性,使其不易被脫殼軟件脫掉,下一步工作將解決在加殼過程中程序壓縮的問題。此外,還會將改進(jìn)的方法進(jìn)一步應(yīng)用到Linux 系統(tǒng)軟件中。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論