Linux軟件加殼保護技術(shù)的改進(jìn)
2)內部執行:按照順序逐一執行其內部的指令,更改變量的狀態(tài)表,將目標文件核心部分內容續寫(xiě)到加殼部分的后面,當執行到段中最后一步時(shí)形成輸出狀態(tài)表。同時(shí)檢驗程序變形狀態(tài)的安全性,傳遞接口函數參數[6]。
3)循環(huán)回繞整合部分:在核心代碼全部執行完畢時(shí),檢查其后繼代碼段中是否有包含變形的循環(huán)頭。如果存在,則該代碼塊是滿(mǎn)足條件的最外層的循環(huán)頭,將程序頭表中屬性、大小的參數設置成新計算值,并檢查其輸入、輸出狀態(tài)表中是否有變量的類(lèi)型狀態(tài)發(fā)生變化,如果存在,則重新開(kāi)始回繞執行,直到狀態(tài)表停止更新。
3 相關(guān)算法性能對比
表1 給出了新的加殼算法SRELF 與ASProtect 算法、tElock 算法、armadillo 算法的比較,表2 給出相關(guān)符號定義。


1)安全性提升
由于SRELF 采用的是二進(jìn)制代碼進(jìn)行加密或壓縮,并且沒(méi)有對加殼功能程序大小進(jìn)行限制,所以在代碼中可以插入足夠的花指令[7]。再加上高復雜度的加密變形壓縮算法,保證了加殼程序的高安全性。此外變形重構了elf 文件, elf 文件中的內容全部改變,對表頭文件進(jìn)行靜態(tài)分析脫殼又增加了難度。而且在SRELF 中加入了充分的反動(dòng)態(tài)跟蹤指令,防止被保護文件被動(dòng)態(tài)跟蹤。通過(guò)上幾方面安全性分析,可以證明加殼后的elf 文件安全性得到了大幅度提高。
2)運算量降低
3)偽裝性增強
加殼后的elf 文件結構并未改變, 而且SRELF 加殼方法不需要改變程序入口地址,很好的隱藏了殼程序。
4)擴展性提升
由于SRELF 方法從理論上沒(méi)有對殼程序大小進(jìn)行限制,使其具備了很好的擴展性。因此后期可以同步更新SRELF 中的加密方法,反靜態(tài)分析方法,反動(dòng)態(tài)跟蹤方法,對其進(jìn)行完善和堅固。
綜上所述SRELF 克服了現有加殼方法中所暴露出來(lái)的問(wèn)題, 解決了改變elf 文件結構和改變程序入口地址的重大缺陷,讓加殼后的程序呈現出多態(tài)變形性,在反脫殼中增加了難度。因此,SRELF 方法是一個(gè)既具有很高的安全性同時(shí)具備良好的可行性的加殼方法。
4 結束語(yǔ)
文中研究了現有加殼軟件在反破解中存在的普遍難題———出現完全不符合所有已知模式的新型安全缺陷[8],總結出現有加殼方式的不足,針對不足問(wèn)題提出了一種改進(jìn)的加殼方法———重構變形SRELF 加殼算法。軟件加殼對重點(diǎn)代碼進(jìn)行加密、變形、反靜態(tài)分析和反動(dòng)態(tài)跟蹤相結合,同時(shí)具備較為精簡(jiǎn)的運算量,提高加密部分的反破解能力。文中只考慮了加殼過(guò)程中引入程序變形性,使其不易被脫殼軟件脫掉,下一步工作將解決在加殼過(guò)程中程序壓縮的問(wèn)題。此外,還會(huì )將改進(jìn)的方法進(jìn)一步應用到Linux 系統軟件中。
評論