[发明专利]一种Linux系统下软件代码保护方法有效
申请号: | 201310023581.6 | 申请日: | 2013-01-22 |
公开(公告)号: | CN103077333A | 公开(公告)日: | 2013-05-01 |
发明(设计)人: | 朱瑞瑾;谭毓安;左伟欢;李元章;马忠梅;张全新 | 申请(专利权)人: | 北京理工大学 |
主分类号: | G06F21/14 | 分类号: | G06F21/14 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 100081 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 linux 系统 软件 代码 保护 方法 | ||
技术领域
本发明涉及一种在Linux操作系统下代码保护方法,属于软件保护技术领域。
背景技术
在通常情况下,Linux系统下编译器生成的代码以原始机器码的形态存在于可执行文件中,并在执行时由操作系统加载入内存执行。这就造成了安全隐患:一方面,攻击者可以通过调试器动态跟踪程序的执行,找到软件保护判断点,然后在可执行文件中寻找对应的机器码部分进行修改,以永久解除软件的保护;另一方面,攻击者可以通过反编译器对可执行文件中未修改的机器码进行反汇编得到软件的所有汇编代码,然后对其进行静态分析以找到软件的保护判断点,甚至将软件中重要的算法提取出来使用。
代码保护是针对破解软件技术而提出的软件保护方法。无论是动态跟踪还是静态分析,软件破解技术的最后步骤通常需要修改可执行文件中的机器码以永久解除软件保护。代码保护的基本思路是使程序代码不以原始机器码的形式保存在磁盘上,而是执行时在内存中恢复成机器码,使得破解者无法在保护后的可执行文件中找到并修改程序代码,更无法对其进行反编译,从而达到保护软件的目的。
在Linux系统中,每个内存页都是有其内存页属性,所述内存页属性为可读、可写、可执行或者无访问权限中的一种或几种;当具有多种属性时,各属性之间要保证无冲突。如果程序尝试在不允许这些权限的本地内存上操作,它将被SIGSEGV信号(Segmentation fault,段错误信号)终止。
在内存映射完成后,这些内存页属性仍可以被Linux系统中的mprotect系统函数所修改。mprotect系统函数的参数分别为内存空间的起始地址,内存空间的大小,新的内存页属性。所指定的内存空间必须包含整个内存页:区间地址必须和整个系统页大小对齐,而区间长度必须是内存页大小的整数倍。这些内存页的内存页属性被mprotect系统函数中的新的内存页属性替换。
目前在Linux系统,已有的代码保护方法有:软件加壳、自检测等。
目前Linux下代码保护的技术水平不高,无法有效地对抗攻击者的静态分析和动态跟踪。Linux平台下软件保护技术较之Win32平台下落后很多,不仅商用保护产品屈指可数,软件作者自己设计的保护也通常比较简单,这主要表现在缺乏反跟踪手段和代码保护手段。
发明内容
本发明的目的是为了解决目前已有Linux系统下的代码保护方法存在的不足,提出一种新的Linux系统下软件代码保护方法。
本发明的目的是通过以下技术方案实现的。
一种Linux系统下软件代码保护方法,用于对Linux系统下的软件代码进行保护。所述Linux系统下的软件代码包括主程序代码以及1个或多个被调用函数,采用本发明提出的代码保护方法对Linux系统下的软件代码进行保护,其操作过程为:
步骤一、加密和存储拟保护代码,具体为:
第1步:在被调用函数中指定拟保护代码,拟保护代码是以函数为单位的。
第2步:为拟保护代码定义一个数组(用符号pF表示),数组pF中的每个元素分别用来记录拟保护代码用到的一个系统库函数地址。将数组pF中元素的初始值设置为空。然后将拟保护代码用到的系统库函数的地址替换为数组pF中对应的元素值。
第3步:将拟保护代码编译为关键代码库文件。
第4步:将关键代码库文件分为m个部分,m大于等于1;再对m个部分加密后,分别存储于m个数据文件中。
步骤二、通过主程序申请一个内存空间(用符号m1表示),并记录该内存空间中第一个完整的内存页的起始地址(用符号p表示)。
步骤三、将步骤二申请的内存空间m1中的全部完整的内存页的属性设置为可读并可写并可执行。所述内存页的属性包括:可读、可写、可执行或者无访问权限中的一种或几种。
步骤四、当主程序需要调用拟保护代码时,其操作过程为:
第4.1步:通过主程序申请一个内存空间(用符号m2表示);从步骤一中所述m个数据文件中读取拟保护代码的密文到内存空间m2。
第4.2步:对第4.1步中所述拟保护代码的密文进行解密,并将解密后的内容拷贝到步骤二中所述的内存空间m1中以p开始的内存中。
第4.3步:把关键代码库文件中用到的系统库函数地址赋值给内存空间m1中的pF数组。
第4.4步:修正内存空间m1中被调用函数的地址,即将当前的被调用函数地址加上p的值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京理工大学,未经北京理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310023581.6/2.html,转载请声明来源钻瓜专利网。