欢迎来到天天文库
浏览记录
ID:27528815
大小:155.00 KB
页数:9页
时间:2018-12-04
《Linux系统软件加壳保护技术的改进设计.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Linux系统软件加壳保护技术的改进设计 加壳是对软件内核一种很有效的保护方式。目前Linux系统下的加壳方法,多是直接继承Windows程序的加壳理论和方法,在传统加壳工具上进行了有限的扩展,单纯在LINUX系统下实现的加壳工具还是很少的。如何在Linux系统下尽量减少内核信息的暴露,增加有难度的反逆向手段来提升破解难度,对加壳保护程序进行很好的隐藏,都是目前主要攻克的难题。 根据加载外壳程序方式的不同将现有软件加壳技术分为:嵌入式、附加式和包含式。嵌入式中最经典的是Upx,支持多种文件类型加壳,且压缩算法先进。但该方法缺少反动态
2、跟踪功能,破解者可用动态跟踪调试方法对Upx进行破解。下文描述了附加式加壳(SELF加壳):在原elf文件格式中添加处理安全操作的代码段,但不内置解压缩,容易暴漏壳的位置。包含式结合了压缩和保护两种类型的壳,但壳加载的过程中会改变入口地址。结合上述三种加壳方法的优缺点,文章提出了在Linux系统下一种改进的加壳保护方法—加壳并重构可执行文件———SRELF[3]。改进后的算法将壳程序和目标可执行文件中代码段,数据段等关键部分相结合,引入多态变形技术,使程序呈现出多态性,提高了壳程序的反破解能力,同时还很好的隐藏了加壳的信息。通过实验证明
3、,改进后的方法解决了加壳中入口地址易被改变的问题,使得加壳的程序以多态的形式出现,很大程度上提高了反破解的难度。 1加壳原理 加壳实质上就是把一段特殊程序附加到应用程序中,并把程序的执行入口指向附加的特殊壳程序。壳的加载过程如图1所示,首先壳程序需要获得应用程序编程接口———即API地址。在加壳程序的代码中用显示链接方式动态的加载所需的API地址。通过壳程序后,对各个区块的数据按照定义进行解密;若加壳时用到了压缩技术,那么在解密之前先要进行解压缩,然后将解压文件映像到指定内存地址中。修改原程序文件的输入表后填充HOOK—API表中的
4、代码地址,间接的获得程序的控制权,进行校验和测试完后跳转到原入口点(OEP)[3]。 现有的软件加壳技术方法大多都改变了原有文件结构,在重定位的过程中改变程序的入口地址,加载的过程中把部分程序映射到地址空间中,若破解者知道如何在一个加壳程序中寻址,那么当文件被加载进内存时就可以找到加壳程序的信息。文章针对上述问题,提出了一种改进的加壳方法SRELF。 2SRELF加壳方法 2.1SRELF方法原理 SRELF———加壳并重构可执行文件,最大特点是重构变形使得重构的程序呈现多态性。首先将目标elf文件中的核心部分提取出来,然后
5、与准备好的解密或解压缩程序,反静态分析和反动态跟踪程序结合在一起,让加壳程序呈现出多态变形性,最后遍历整合程序,按照elf文件标准格式重新构造一个全新的elf可执行文件。 2.2SRELF方法实现 如图2所示:SRELF加壳方法实现的基本程序框图。首先了解应用程序二进制接口文件(即扩展名为elf文件)结构。图3所示为标准elf文件的结构图。从图中可以看到:一个ELF头在文件的开始,保存了路线图描述了文件组织情况。随后是一些段(segments)或者一些区段(secTIons)。段中包含文件运行所需的信息,而保存着object文件的信
6、息,用于链接和重定位。 第一步:提取目标文件中的核心部分 提取核心部分的可执行指令、动态链接表、段或节等信息。由于汇编程序中存在间接跳转使得反汇编生成控制流图中断,影响了提取核心代码的准确性,这里引入了一种间接跳转程序方式。 1)从壳运行到原始程序的OEP进行单步向下跟踪,遇到抛出异常后,修改溢出标志; 2)分析操作数的类型。若是直接寻址类型,进入4);否则进入3); 3)找到定义的语句或函数入口,设置CREAT_SUSPENDED计数器,若计数器加一,则将宿主进程作为一个挂起的子进程打开,调用GetThreadConte
7、xt()获取子进程初始化线程的上下文; 4)判断后的程序进行输入锁定,在语句序列上模拟执定义位置与目标间接跳转运算,对获取寄存器内容进行复制。使用间接跳转语句获取elf头文件中的信息后,定位到GetElfCore的头表,然后定位到所需代码段的核心位置,将其中的数据复制出来。 第二步:对提取的核心代码加密并结合多态变形技术 采用进程注入加密技术,逆向阻止脱壳软件附加在受保护的进程上。先让CONTEXT.EBX获取子进程的PEB地址,读出PEB子进程的映像地址后,将基础地址参数指向检索到的映像基址,最终完成对各种外部中断的监视工作。对
8、加密后的核心代码进多态变形技术改进,让其改变自身代码,从而使搜索字符串的识别技术失去效果。文章采用的代码变换加密压缩来隐藏自身,为了防止搜索字符串的方法检测到,解密代码引动代码模块,程序将其插入其本身,调用
此文档下载收益归作者所有