本发明涉及linux操作系统领域,特别是一种linux操作系统的文件读写透明加解密的方法。
背景技术:
x86平台上的linux操作系统可以通过访问特定寄存器来hook系统调用函数(open,read,write,mmap,msync),从而达成透明加解密的效果。
现有技术大多采用如下方法:x86平台的linux操作系统的系统调用hook技术,是基于x86平台(芯片)的独特的构造---中断描述符表(idt)---来寻找系统调用表的,找到系统调用表,便可hook系统调用函数,从而截取open,read,write,mmap,msync系统调用中的数据流,进行加解密。
但是这样的方法无法兼容arm平台(芯片),且代码复杂度较高;市场需要一种能够适用于arm平台的且代码简单的文件读写透明加解密的方法;本发明解决这样的问题。
技术实现要素:
为解决现有技术的不足,本发明的目的在于提供一种linux操作系统的文件读写透明加解密的方法,本方法步骤流程简单,平台兼容性广,不仅适用于mips处理器,同时还适用于arm处理器;查找方式简单;代码简单易懂。
为了实现上述目标,本发明采用如下的技术方案:
linux操作系统的文件读写透明加解密的方法,包括如下步骤:
步骤一,找到sys_close函数的地址;
步骤二,从内存起始地址开始,读取内存中的数据,进行匹配,如果内容为系统调用sys_close的地址,则匹配成功,进行下一步;若不是,则匹配失败,继续读取下一块内存中的数据,并进行匹配;
步骤三,匹配成功后,在hook上系统调用open,read,write,mmap,msync函数,从而对数据进行加解密;
步骤四,达成文件加密防护的功能。
前述的linux操作系统的文件读写透明加解密的方法,步骤三,匹配成功后,在hook上系统调用open,read,write,mmap,msync函数,从而对数据进行加解密;
加解密的具体过程包括如下步骤:
步骤a,通过截取的open中的数据流,检查进程白名单和文件后缀名白名单,获取文件信息,并将文件信息添加至私有表单中;
步骤b,通过截取的read/mmap数据流,结合open中设置的表单,判断文件是否为密文,将数据流进行解密;
步骤c,通过截取的write/msync数据流,结合open中设置的表单,判断文件是否需要加密,并在需要时进行加密;
步骤d,通过截取exit系统调用,在进程退出时清理掉私有的表单;
步骤e,通过截取stat系列系统调用,获取加密后文件的长度,所述加密后文件的长度包含文件加密头;
步骤f,通过截取lseek系统调用,使文件指针偏移到正确的位置。
前述的linux操作系统的文件读写透明加解密的方法,sys_close函数的地址包括:在ubuntu14.04系统上为0xffffffff811eb720,在ubuntu16.04系统上为0xffffffffb5840370,在中标麒麟系统上为0xffffffff803338c8。
前述的linux操作系统的文件读写透明加解密的方法,本方法基于的cpu包括:arm处理器或mips处理器。
本发明的有益之处在于:
本方法不再依赖x86平台特有的构造,而是改用linux操作系统的普遍特性,即,唯一导出系统调用---sys_close;步骤流程简单,平台兼容性广,不仅适用于mips处理器,同时还适用于arm处理器。
从内存起始地址开始,直接搜索系统调用表;查找方式变更为简单的内存数据直接匹配;
代码简单易懂。
附图说明
图1是本发明的一种实施例的流程图。
具体实施方式
以下结合附图和具体实施例对本发明作具体的介绍。
linux操作系统的文件读写透明加解密的方法,包括如下步骤:
步骤一,找到sys_close函数的地址;作为一种实施例,sys_close函数的地址包括:在ubuntu14.04系统上为0xffffffff811eb720,在ubuntu16.04系统上为0xffffffffb5840370,在中标麒麟系统上为0xffffffff803338c8。
步骤二,从内存起始地址开始,读取内存中的数据,进行匹配,如果内容为系统调用sys_close的地址,则匹配成功,进行下一步;若不是,则匹配失败,继续读取下一块内存中的数据,并进行匹配。
步骤三,匹配成功后,在hook上系统调用open,read,write,mmap,msync函数,从而对数据进行加解密;
加解密的具体过程包括如下步骤:
步骤a,通过截取的open中的数据流,检查进程白名单和文件后缀名白名单,获取文件信息,并将文件信息添加至私有表单中;
步骤b,通过截取的read/mmap数据流,结合open中设置的表单,判断文件是否为密文,将数据流进行解密;
步骤c,通过截取的write/msync数据流,结合open中设置的表单,判断文件是否需要加密,并在需要时进行加密;
步骤d,通过截取exit系统调用,在进程退出时清理掉私有的表单;
步骤e,通过截取stat系列系统调用,获取加密后文件的长度,所述加密后文件的长度包含文件加密头;
步骤f,通过截取lseek系统调用,使文件指针偏移到正确的位置。
步骤四,达成文件加密防护的功能。
本方法适用的硬件,作为一种实施例,可以使用cpu为arm64,ddr为8g的计算机;作为另一种实施例,可以使用cpu为mips64,ddr为8g的计算机。
本方法不再依赖x86平台特有的构造,而是改用linux操作系统的普遍特性,即,唯一导出系统调用---sys_close;步骤流程简单,平台兼容性广,不仅适用于mips处理器,同时还适用于arm处理器;从内存起始地址开始,直接搜索系统调用表;查找方式变更为简单的内存数据直接匹配;代码简单易懂。
以上显示和描述了本发明的基本原理、主要特征和优点。本行业的技术人员应该了解,上述实施例不以任何形式限制本发明,凡采用等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。