CN103413071B - 一种保护软件中数据的方法 - Google Patents

一种保护软件中数据的方法 Download PDF

Info

Publication number
CN103413071B
CN103413071B CN201310284324.8A CN201310284324A CN103413071B CN 103413071 B CN103413071 B CN 103413071B CN 201310284324 A CN201310284324 A CN 201310284324A CN 103413071 B CN103413071 B CN 103413071B
Authority
CN
China
Prior art keywords
data
software
protection
page
driver
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310284324.8A
Other languages
English (en)
Other versions
CN103413071A (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Senseshield Technology Co Ltd
Original Assignee
Beijing Senseshield Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Senseshield Technology Co Ltd filed Critical Beijing Senseshield Technology Co Ltd
Priority to CN201310284324.8A priority Critical patent/CN103413071B/zh
Publication of CN103413071A publication Critical patent/CN103413071A/zh
Application granted granted Critical
Publication of CN103413071B publication Critical patent/CN103413071B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明公开了一种保护软件中数据的方法。本发明在Windows、Linux等操作***中,把软件中的需要保护数据移动到软件保护装置的驱动程序中保存,在使用该数据前加载驱动程序,挂钩内存管理中的页面异常(page?fault),加载或处理数据,从而有效保证的数据的安全性。

Description

一种保护软件中数据的方法
技术领域
本发明涉及一种软件保护领域,特别涉及一种保护软件中数据的方法。
背景技术
软件作为一种特殊的产品,由于其纯数字化的特征,从问世起就一直遭受盗版的困扰。盗版的存在不仅给软件开发者造成了巨大的损失,也极大阻碍了整个软件行业的发展。因此,几乎所有的软件都采取了相应的技术措施来避免软件遭受破解和盗版,其中保护软件中重要的数据或代码是软件开发者最为重视的问题。
目前的保护方法中,大多是在用户层进行加密处理,对于破解者的要求门槛比较底,也最容易受到非法的跟踪,在软件运行后,不管是否使用到了关键数据或代码,它们都会在用户层内存中,可以轻易取得,不管在加密手段和加密强度上都比较低,而现在最为流行的虚拟机保护技术也只是对代码有着不错的保护效果,对于供读写的数据则完全没有办法加以保护。
现有技术中,软件保护装置是实现软件保护和版权保护的主要手段。软件保护装置特指一种附加在计算机接口(如USB接口、串口、并口等)上采用高强度智能卡芯片和先进密码学技术,具有一定运算和存储能力的硬件***。
软件保护装置内的驱动程序为一种特殊的独立的驱动程序、和软件进行交互,用于对软件进行保护,使用时,由软件根据某个特定的条件触发(比如选择菜单),激活驱动程序去恢复关键数据,保护重要代码,或进行代码挂钩,从而保护特定软件的数据或代码不被恶意改写。
发明内容
有鉴于此,本发明提供了一种保护软件中数据的方法。能够很有效的保护关键数据或代码,使软件在运行中不加载软件保护装置的驱动程序,或加载软件保护装置的驱动程序,但没有挂钩页面异常的情况下,根本无法正常取得关键数据或代码。恢复关键数据的操作也在驱动中完成,对盗版或破解者来说提高了跟踪调试的门槛,从而更为有效的保护了软件,提高了安全性。本发明不仅适用于windows操作***,还适用于Linux等其他操作***。
根据本发明的一个方面,提供一种通过软件保护装置保护软件中数据的方法,包括如下步骤:
步骤1,把受保护软件中需要保护的数据移入所述软件保护装置的驱动程序中;
步骤2,在所述受保护软件使用所述需要保护的数据前,加载所述软件保护装置的所述驱动程序,使之挂钩页面异常;
步骤3,当所述受保护软件需要读、写或执行所述需要保护的数据时,将所述需要保护的数据写回到所述受保护软件中。
根据本发明的一个方面,在步骤1中,在抽取受保护软件中的需要保护的数据之后,记录其地址和长度,将其清0或填入随机数。
根据本发明的一个方面,将所述需要保护的数据进行加密后移入所述软件保护装置的驱动程序中。
根据本发明的一个方面,在所述受保护软件需要读、写或执行所述需要保护的数据前,由所述受保护软件加载所述软件保护装置的驱动程序。
根据本发明的一个方面,由所述驱动程序挂钩操作***的页面异常函数。
根据本发明的一个方面,当所述受保护软件读写、执行所述需要保护的数据时,CPU会触发页面异常函数,并进行判断,
如果判断结果是缺页异常,且缺少页面属于所述受保护软件进程的需要保护的数据地址的范围时,则将保存在所述驱动程序中的所述需要保护的数据解密后恢复,然后返回供所述受保护软件使用;
如果判断结果是页面保护异常,或缺少页面不属于需要保护的数据地址范围,则不做任何处理,执行所述操作***原页面异常函数。
根据本发明的一个方面,所述将取出的需要保护的数据写入所述驱动程序时,将取出的需要保护的数据以数组形式或存入文件的方式写入。
根据本发明的一个方面,所采用的加解密方式采用对称或者非对称算法。
本发明将关键数据或代码写入软件保护装置的驱动程序,载入时,软件保护装置的驱动程序与***的页面异常函数挂钩,当软件读写、执行关键数据时,根据判断,将保存在软件保护装置的驱动程序中的关键数据解密后恢复,返回供受保护软件执行。通过本发明提供的方法,将恢复数据等操作放在软件保护装置的驱动程序中执行,提高了软件跟踪调试的门槛,可以更有效的保护软件。
附图说明
图1为按照本发明的一种保护软件数据的方法的流程示意图。
图2为按照本发明的一种保护软件数据的方法的一优选实施例的整体流程示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明提供一种保护软件数据的方法,具体步骤包括:
步骤1.抽取软件中的关键数据或代码(代码是一种比较特殊的数据),并记录其地址和长度后,将其清0或填入随机数;根据本发明的一个实施例,关键数据或者代码是一个加密数据的代码,或加密数据代码所用到的数据,也可以是一个重要功能的实现代码;
步骤2.将取出的数据写入软件保护装置的驱动程序中,可加密后存放,根据本发明的一个实施例,既可以存放在存储设备中,也可以直接存放在软件保护装置的驱动程序中;
步骤3.在软件需要读写、执行关键数据或代码前,需要由该软件加载软件保护装置的驱动程序,驱动程序挂钩***的页面异常函数(清掉所在页面PTE(PageTableEntry)和TLB(TranslationLookasideBuffers)入口,以保证CPU能够触发页面异常)。
步骤4:当软件读写、执行关键数据时,CPU会触发页面异常函数,并进行判断,如果判断结果是缺页异常(也可以叫做出错的页面,当缺页异常出现后,要判断这个出错页面中是否包含了保护的数据或代码,如果包含的话,就要特殊处理,因为页面是有序号的,每个序号对应4K连续储存的数据,64位CPU是8K),且缺少页面属于该软件进程的关键数据地址的范围时,则将保存在软件保护装置驱动程序中的关键数据解密后恢复,然后返回供软件使用;如果判断结果是页面保护异常,或缺少页面不属于关键数据地址范围就不做任何处理,执行***原页面异常函数。
根据本发明的一个方面,所述将取出的数据写入驱动程序时,将取出的数据以数组形式或其他形式(如将数据存入文件等方式)写入。
根据本发明的一个方面,驱动程序中的关键数据所采用的加解密方式可采用包括对称(如AES、DES等)或者非对称算法(如RSA、ECC等)。
所述挂钩***页面异常是指可使用CPU特权指令sidt。另外,根据本发明的另一个实施方式,当适用linux操作***时,其对应的CPU特权指令如下:
//获取中断描述符表寄存器的地址idtr
unsignedcharidtr[6];
asm("sidt%0":"=m"(idtr));
base=*((unsignedlong*)&idtr[2]);
很明显,IDT属于CPU架构,不同***下区别不大。
IDT=InterruptDescriptorTable中断描述表
以WINDOWSX86(根据本发明的一个实施方式,此处仅以32位的操作***为例,其它操作***可以进行类似处理)为例:
IDT是一个有256个入口的线形表,每个IDT的入口是个8字节的描述符,所以整个IDT表的大小为256*8=2048bytes,每个中断向量关联了一个中断处理过程。所谓的中断向量就是把每个中断或者异常用一个0-255的数字识别。Intel称这个数字为向量(vector)。
对于中断描述表,操作***使用IDTR寄存器来记录idt位置和大小。
IDTR寄存器是48位寄存器,用于保存idt信息。其中低16位代表IDT的大小,大小为7FFH,高32位代表IDT的基地址。可以利用指令sidt读出IDTR寄存器中的信息,从而找到IDT在内存中的位置。下文是IDTR的示例性描述。本领域的技术人员对于这种描述都能够很容易的理解,也可以进行相似的变换、修改、替换、增减,其都属于本发明的范围。
//IDTR
#pragmapacket(1)
typedefstruct_IDTR
{
USHORTlimit;
USHORTLowBase;
USHORTHighBase;
}IDTR,*PIDTR;
#pragmapacket()
//IDT入口表
#pragmapacket(1)
typedefstruct_IDT_ENTRY
{
USHORToffset_low;
USHORTselector;
UCHARreserved;
UCHARtype:4;
UCHARalways0:1;
UCHARdpl:2;
UCHARpresent:1;
USHORToffset_high;
}IDT_ENTRY,*PIDT_ENTRY;
#pragmapacket()
得到IDT的地址,IDT整体是一个结构数组,其中第0xE个结构就是页面异常信息结构,里面两个成员OffsetLow和OffsetHigh组成一个地址,就是***的异常处理函数,它处理***中所有的页面异常,将自定义的页面异常过滤函数地址替换进去,也要将***原有页面异常函数的地址保存在驱动中,以便还原操作时使用。多核CPU需要将每个CPU的IDT全部处理。作为一个实例,如下给出给出多核cpu的进行idt处理实例的示例性代码。对于本领域的技术人员而言,以下代码仅作为示例,其不构成对本发明的限制。本领域的技术人员根据如下代码,设计、编写、生成的其他各种形式或者方式,都属于本发明所要求保护的范围之内。
//对多核CPU的每一个进行挂钩缺页异常处理
CpuCount=*KeNumberProcessors;
while(CpuCount>0)
{
KeSetAffinityThread(KeGetCurrentThread(),CpuCount);//绑定CPU
//挂钩缺页异常处理
CpuCount--;
}
参见图1,其为软件运行流程整体示意图。
在步骤101中,把受保护软件中需要保护的数据移入软件保护装置的驱动程序中;
在步骤102中,在受保护软件使用数据前,加载软件保护装置的驱动程序,使之挂钩页面异常;
在步骤103中,当受保护软件需要读、写或执行被保护的数据时,再将原数据写回去。
参见图2,图2为按照本发明的一种保护软件数据的方法的一优选实施例的整体流程示意图。
本实施例假设在Windowsx86平台下,有一个软件A,其中有一段关键数据D(只需要读取),软件在响应菜单栏操作时才需要读取关键数据D。
1.先将软件A中的关键数据D取出,加密放入软件保护保护装置的驱动程序B中(其中,加密后的数据,可以当做一组连续的数据存放在驱动程序B中,当做数据来使用),然后将软件A中的关键数据D清0。
2.在软件A调用响应菜单栏操作的开始处载入驱动程序B,然后驱动程序B挂钩_KiTrap0E(注:这个函数是WINDOWS***下缺页异常处理函数(根据本发明的一个实施例,这个函数名_KiTrap0E,仅针对WINDOWS***。在LINUX是其他的名字,但本发明关注点不在于操作***之间的差异,在此从略。)(可通过特权指令sidt取行IDT,第0x0E个项就是_KiTrap0E首地址)。
3.当软件A运行后,点击菜单项,驱动程序B加载,在驱动程序B中计算出关键数据D所在的页面PTE被置为无效;本领域的技术人员对于这种描述都能够很容易的理解,也可以进行相似的变换、修改、替换、增减,其都属于本发明的范围。
//获取地址所在页面的PTE(此函数的功能概要)
PPTEGetPteAddress(PVOIDVirtualAddress)
{
PPTEpPTE=0;
__asm
{
cli//disableinterrupts禁止中断
pushad
movesi,PROCESS_PAGE_DIR_BASE
movedx,VirtualAddress
moveax,edx
shreax,22
leaeax,[esi+eax*4]//pointertopagedirectoryentry指向页面目录条目的指针
test[eax],0x80//isitalargepage?是否为大页面?
jnzIs_Large_Page//it'salargepage是大页面?
movesi,PROCESS_PAGE_TABLE_BASE
shredx,12
leaeax,[esi+edx*4]//pointertopagetableentry(PTE)指向页面表条目的指针
movpPTE,eax
jmpDone
//NOTE:Thereisnotapagetableforlargepagesbecause
//thephysframesarecontainedinthepagedirectory.因为在页面目录中存在phys帧,在大页面中不存在页面表
Is_Large_Page:
movpPTE,eax
Done:
popad
sti//reenableinterrupts重新使能中断
}//endasm
returnpPTE;
}//endGetPteAddress
//将关键数据D的PTE设置为无效
pusheax//关键数据D的地址
callGetPteAddress
movebx,eax//ebx=pPte
anddwordptr[ebx],0xFFFFFFFE//markpagenotpresent,标记不存在页面
4.使用汇编命令invlpg清掉TLB入口,以保证读取时能够触发页面异常(即图2中的“触发页面异常”),然后软件A读取关键数据D(此时软件A中原关键数据D的内容已全部为0),当读取时,触发页面异常,首先会进入挂钩_KiTrap0E的过滤函数进行过滤(触发页面异常后***会进入_KiTrap0E函数,但本发明在之前挂钩了此函数,所以会先进到_KiTrap0E_Filter,处理后如果不是下面这些条件,就再调用***_KiTrap0E函数,否则就解密还原数据后直接返回),用错误码判断条件
a.缺页错误
b.是否为软件A进程
c.读取时出错
d.用户模式下的异常
e.并且读取的地址cr2(寄存器)是在软件A中的关键数据D的地址范围内。
当符合以上条件时,将保存在驱动程序B中的关键数据解密,直接复制到软件A中的原地址上。此时,关键数据D已完全恢复,软件A可顺利读取到关键数据D。
为安全考虑,可以在不使用关键数据D的时候,将该区域清0,通知驱动程序B,使页面异常挂钩无效,这样就能最大限度保护关键数据D的安全性。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种通过软件保护装置保护软件中数据的方法,该方法使软件在运行中不加载软件保护装置的驱动程序,或加载软件保护装置的驱动程序但没有挂钩页面异常的情况下,根本无法正常取得保护的数据;其特征在于,包括如下步骤:
步骤1,把受保护软件中需要保护的数据移入所述软件保护装置的驱动程序中;
步骤2,在所述受保护软件使用所述需要保护的数据前,加载所述软件保护装置的所述驱动程序,使之挂钩页面异常;
步骤3,当所述受保护软件需要读、写或执行所述需要保护的数据时,将所述需要保护的数据写回到所述受保护软件中。
2.根据权利要求1所述的方法,其特征在于,在步骤1中,在抽取受保护软件中的需要保护的数据之后,记录其地址和长度,将其清0或填入随机数。
3.根据权利要求1所述的方法,其特征在于,将所述需要保护的数据进行加密后移入所述软件保护装置的驱动程序中。
4.根据权利要求3所述的方法,其特征在于,所采用的加密方式采用对称或者非对称算法。
5.根据权利要求1所述的方法,其特征在于,在所述受保护软件需要读、写或执行所述需要保护的数据前,由所述受保护软件加载所述软件保护装置的驱动程序。
6.根据权利要求5所述的方法,其特征在于,由所述驱动程序挂钩操作***的页面异常函数。
7.根据权利要求6所述的方法,其特征在于,当所述受保护软件读写、执行所述需要保护的数据时,CPU会触发页面异常函数,并进行判断,
如果判断结果是缺页异常,且缺少页面属于所述受保护软件进程的需要保护的数据地址的范围时,则将保存在所述驱动程序中的所述需要保护的数据解密后恢复,然后返回供所述受保护软件使用;
如果判断结果是页面保护异常,或缺少页面不属于需要保护的数据地址范围,则不做任何处理,执行所述操作***原页面异常函数。
8.根据权利要求1-7任一项所述的方法,其特征在于,将取出的需要保护的数据写入所述驱动程序时,将取出的需要保护的数据以数组形式或存入文件的方式写入。
9.根据权利要求7所述的方法,其特征在于,所采用的解密方式采用对称或者非对称算法。
CN201310284324.8A 2013-07-09 2013-07-09 一种保护软件中数据的方法 Active CN103413071B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310284324.8A CN103413071B (zh) 2013-07-09 2013-07-09 一种保护软件中数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310284324.8A CN103413071B (zh) 2013-07-09 2013-07-09 一种保护软件中数据的方法

Publications (2)

Publication Number Publication Date
CN103413071A CN103413071A (zh) 2013-11-27
CN103413071B true CN103413071B (zh) 2016-03-23

Family

ID=49606082

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310284324.8A Active CN103413071B (zh) 2013-07-09 2013-07-09 一种保护软件中数据的方法

Country Status (1)

Country Link
CN (1) CN103413071B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106203093A (zh) * 2016-06-30 2016-12-07 北京金山安全软件有限公司 进程保护方法、装置以及终端
CN107341373B (zh) * 2017-06-30 2018-12-18 北京深思数盾科技股份有限公司 一种可执行程序的保护方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102004884A (zh) * 2009-08-28 2011-04-06 华为技术有限公司 一种获取可执行文件输入表的方法及装置
CN102609284A (zh) * 2012-02-01 2012-07-25 上海游安网络科技有限公司 可执行文件安全加载的方法
CN102890758A (zh) * 2012-10-11 2013-01-23 北京深思洛克软件技术股份有限公司 一种保护可执行文件的方法及***
CN102938035A (zh) * 2012-11-08 2013-02-20 西安交通大学 一种在虚拟机内部的驱动隔离***与方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5596159B2 (ja) * 2009-10-12 2014-09-24 セーフネット インコーポレイテッド シェル・コードに埋め込まれたソフトウェア・ライセンス

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102004884A (zh) * 2009-08-28 2011-04-06 华为技术有限公司 一种获取可执行文件输入表的方法及装置
CN102609284A (zh) * 2012-02-01 2012-07-25 上海游安网络科技有限公司 可执行文件安全加载的方法
CN102890758A (zh) * 2012-10-11 2013-01-23 北京深思洛克软件技术股份有限公司 一种保护可执行文件的方法及***
CN102938035A (zh) * 2012-11-08 2013-02-20 西安交通大学 一种在虚拟机内部的驱动隔离***与方法

Also Published As

Publication number Publication date
CN103413071A (zh) 2013-11-27

Similar Documents

Publication Publication Date Title
KR101863143B1 (ko) 메모리 무결성
US8225105B2 (en) Method and apparatus for verifying integrity of computer system vital data components
CN102844762B (zh) 在多核***的不同模式之间的切换期间的安全环境管理方法及装置
AU2002326226B2 (en) Method and device for encryption/decryption of data on mass storage device
CN103065102A (zh) 基于虚拟磁盘的数据加密移动存储管理方法
CN102609667A (zh) 基于过滤驱动程序的文件自动加解密***和方法
CN103413101B (zh) 电子数据防篡改***和方法
CN110069935A (zh) 基于标记内存的内部敏感数据保护方法及***
CN103745166A (zh) 文件属性值的检验方法和装置
CN103413071B (zh) 一种保护软件中数据的方法
CN102609644A (zh) 一种文件保护方法
CN101101622A (zh) 一种构造透明编码环境的方法
CN201917912U (zh) Usb存储设备的监控管理***
CN106951790B (zh) Usb存储介质透明加密方法
CN103186746A (zh) 一种可执行文件的保护方法及***
CN101261665A (zh) 一种通过加密数据文件实现软件保护的方法
CN202110552U (zh) 一种基于多体交叉存储技术的软件保护装置
CN102768646A (zh) 串口硬盘加解密装置
CN207099110U (zh) 一种智能终端数据加密备份***
CN101403985B (zh) 一种对软件保护装置中的软件许可进行备份的方法
CN103745170A (zh) 磁盘数据的处理方法及装置
CN109240804A (zh) 虚拟机的磁盘资源的管理方法和装置
CN102034040A (zh) 一种加密卡内日志实现方法
CN104951407B (zh) 一种可加密u盘及其加密方法
CN102880818A (zh) 一种软件保护方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP03 Change of name, title or address

Address after: 100193 Beijing, Haidian District, East West Road, No. 10, East Hospital, building No. 5, floor 5, layer 510

Patentee after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Patentee before: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

CP01 Change in the name or title of a patent holder

Address after: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee after: Beijing Shendun Technology Co.,Ltd.

Address before: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

CP01 Change in the name or title of a patent holder