Linux软件加壳保护技术的改进
2)内部执行:按照顺序逐一执行其内部的指令,更改变量的状态表,将目标文件核心部分内容续写到加壳部分的后面,当执行到段中最后一步时形成输出状态表。同时检验程序变形状态的安全性,传递接口函数参数[6]。
3)循环回绕整合部分:在核心代码全部执行完毕时,检查其后继代码段中是否有包含变形的循环头。如果存在,则该代码块是满足条件的最外层的循环头,将程序头表中属性、大小的参数设置成新计算值,并检查其输入、输出状态表中是否有变量的类型状态发生变化,如果存在,则重新开始回绕执行,直到状态表停止更新。
3 相关算法性能对比
表1 给出了新的加壳算法SRELF 与ASProtect 算法、tElock 算法、armadillo 算法的比较,表2 给出相关符号定义。


1)安全性提升
由于SRELF 采用的是二进制代码进行加密或压缩,并且没有对加壳功能程序大小进行限制,所以在代码中可以插入足够的花指令[7]。再加上高复杂度的加密变形压缩算法,保证了加壳程序的高安全性。此外变形重构了elf 文件, elf 文件中的内容全部改变,对表头文件进行静态分析脱壳又增加了难度。而且在SRELF 中加入了充分的反动态跟踪指令,防止被保护文件被动态跟踪。通过上几方面安全性分析,可以证明加壳后的elf 文件安全性得到了大幅度提高。
2)运算量降低
3)伪装性增强
加壳后的elf 文件结构并未改变, 而且SRELF 加壳方法不需要改变程序入口地址,很好的隐藏了壳程序。
4)扩展性提升
由于SRELF 方法从理论上没有对壳程序大小进行限制,使其具备了很好的扩展性。因此后期可以同步更新SRELF 中的加密方法,反静态分析方法,反动态跟踪方法,对其进行完善和坚固。
综上所述SRELF 克服了现有加壳方法中所暴露出来的问题, 解决了改变elf 文件结构和改变程序入口地址的重大缺陷,让加壳后的程序呈现出多态变形性,在反脱壳中增加了难度。因此,SRELF 方法是一个既具有很高的安全性同时具备良好的可行性的加壳方法。
4 结束语
文中研究了现有加壳软件在反破解中存在的普遍难题———出现完全不符合所有已知模式的新型安全缺陷[8],总结出现有加壳方式的不足,针对不足问题提出了一种改进的加壳方法———重构变形SRELF 加壳算法。软件加壳对重点代码进行加密、变形、反静态分析和反动态跟踪相结合,同时具备较为精简的运算量,提高加密部分的反破解能力。文中只考虑了加壳过程中引入程序变形性,使其不易被脱壳软件脱掉,下一步工作将解决在加壳过程中程序压缩的问题。此外,还会将改进的方法进一步应用到Linux 系统软件中。
评论