CN101853357A - 软件保护方法 - Google Patents

软件保护方法 Download PDF

Info

Publication number
CN101853357A
CN101853357A CN201010163378A CN201010163378A CN101853357A CN 101853357 A CN101853357 A CN 101853357A CN 201010163378 A CN201010163378 A CN 201010163378A CN 201010163378 A CN201010163378 A CN 201010163378A CN 101853357 A CN101853357 A CN 101853357A
Authority
CN
China
Prior art keywords
instruction
software
function
information safety
protecting
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.)
Pending
Application number
CN201010163378A
Other languages
English (en)
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 Feitian Technologies Co Ltd
Original Assignee
Beijing Feitian Technologies 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 Feitian Technologies Co Ltd filed Critical Beijing Feitian Technologies Co Ltd
Priority to CN201010163378A priority Critical patent/CN101853357A/zh
Priority to PCT/CN2010/075448 priority patent/WO2011134207A1/zh
Priority to US12/921,403 priority patent/US20110271350A1/en
Publication of CN101853357A publication Critical patent/CN101853357A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/101Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM] by binding digital rights to specific entities
    • G06F21/1014Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM] by binding digital rights to specific entities to tokens
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/109Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM] by using specially-adapted hardware at the client
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2153Using hardware token as a secondary aspect

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种软件保护方法,包括:分析软件或获取软件代码;对所述分析得到的软件指令或获取的软件代码进行处理;重新编排所述处理后的软件指令或重新编译所述处理后的软件代码,生成新的软件;根据对所述软件指令或软件代码的处理结果继续或终止软件运行。通过实施上述软件保护方案,保护了软件的安全性。

Description

软件保护方法
技术领域
本发明涉及计算机领域,特别涉及一种软件保护方法。
技术背景
随着计算机技术的不断发展,面向各行业需求的软件不断涌现。但无论哪种优秀的软件,一旦被他人窃取或被非法复制,受到的经济损失是无法估计的,不但严重打击了软件开发人员的积极性,也助长了盗版者的气焰。
发明内容
为了克服上述缺陷,本发明提供了一种软件保护方法,具体技术方案包括:
分析软件,对分析得到的软件指令段进行处理,生成处理后的软件指令段;重新编排所述处理后的软件指令段,生成并运行新软件;所述新软件根据处理后的软件指令段的运行结果继续或终止运行;
或获取软件代码,对获取的软件代码进行处理,生成处理后的软件代码;重新编译所述处理后的软件代码,生成并运行新软件;所述新软件根据所述处理后的软件代码的运行结果继续或终止运行。
有益效果:
本发明通过在软件中插入安全代码、或者替换软件中的部分代码,或者对软件的部分代码进行加密,或者对软件的部分函数名称混淆处理,或者将软件中的部分代码转移到外部执行,或者对软件代码预先运行后将结果保存到外部,保护了软件的安全性。
附图说明
图1为本发明实施例1提供的软件保护方法的流程图;
图2为本发明实施例1提供的运行被保护软件的流程图;
图3为本发明实施例2提供的软件保护方法的流程图;
图4为本发明实施例2提供的运行被保护软件的流程图;
图5为本发明实施例3提供的软件保护方法的流程图;
图6为本发明实施例3提供的运行被保护软件的流程图;
图7为本发明实施例4提供的软件保护方法的流程图;
图8为本发明实施例5提供的软件保护方法的流程图;
图9为本发明实施例5提供的运行被保护软件的流程图;
图10为本发明实施例6提供的软件保护方法的流程图;
图11为本发明实施例6提供的运行被保护软件的流程图。
图12为本发明实施例1提供的软件插入指令的指示图。
具体实施方式
下面结合附图对本发明具体实施方式做一个清楚、完整的说明,该说明只是为了方便本领域技术人员理解本发明的技术方案,并不作为对本发明的限定。
实施例1
参见图1,本发明提供了一种软件保护方法,包括下列步骤:
步骤101:准备新指令或新代码;
新指令或新代码为要插入软件的多条信息安全指令或代码,其中指令由底层汇编语言编写;代码由上层编程语言编写。
该指令或代码包括三种形式:
第一种形式:访问信息安全装置的指令或代码,向信息安全装置写入装载软件的硬件设备的信息,指示信息安全装置判断该硬件设备信息的指令或代码,指示信息安全装置返回判断结果的指令或代码;
信息安全装置内预先绑定有装载软件的硬件设备的信息,因此信息安全装置在收到写入的信息后,会进行一致性判断,并将判断结果返回给软件。
第二种形式:访问信息安全装置的指令或代码,向信息安全装置输入登陆信息和密码,指示信息安全装置判断该登陆信息和密码是否正确的指令或代码,指示信息安全装置返回判断结果的指令或代码;
信息安全装置内预先存储有登陆信息和密码,因此在收到输入的登陆信息和密码后,信息安全装置将进行一致性判断,并将判断结果返回给软件。
第三种形式:访问信息安全装置的指令或代码,向信息安全装置写入事先与其绑定过的信息安全装置的硬件特性信息(如信息安全装置的硬件标识),指示信息安全装置判断该硬件特性信息是否符合的指令或代码,指示信息安全装置返回判断结果的指令或代码。
软件内事先写有信息安全装置的硬件特性信息,信息安全装置接收到软件向其写入的上述信息后,将进行一致性判断,并将判断结果返回给软件。
步骤102:加载并分析原软件或者打开软件原代码;
对于步骤101中准备好的指令:需要先加载并分析软件。分析过程为:应用软件一般由若干体构成,如数据体、堆栈体、指令体,资源体等等。分析过程如下:
一个PE文件都是由一个DOS文件头开始的,通过分析该DOS头可以得到PE文件头,分析该PE文件头可以得到文件的全部描述信息,这些描述信息中包含有指令体的起始地址。由此,定位到指令体。在指令体的描述信息中定义了全部指令的偏移地址和指令体大小,指令体中有多个指令段,指令段由多条指令构成,通过分析指令体里的指令段及指令就可以取出所有的函数指令,取到所有函数的起始地址。分析软件的目的就是为了获取指令体及指令体内各个功能模块(功能函数)的地址。对于其它软件的分析过程同上,不再赘述。
对于步骤101中准备好的代码段,打开软件原代码的过程具体为:需要先用工具打开原软件代码,得到用高级语言编写的原代码。
步骤103:在原软件中插入新的指令或代码,将使软件在运行过程中必须经过新的指令或代码;
指令:在应用软件的任意两个指令段之间或者任意一个指令段内添加新的指令,也包括在指令段的任意两个功能模块间或者任意一个功能模块内添加新的指令,使软件运行过程中必须经过新指令。
代码:在原软件代码中插入准备好的代码。
步骤104:对插入了新指令的软件重新编排修改,得到新的软件;或者对插入了新代码的软件重新编译,生成新的软件,保存新软件。对插入了新指令的软件重新编排修改的过程具体为根据新插入指令的地址和长度,修改原软件中插入点地址及该地址后的所有段或功能模块的地址,使得软件在内部相互调用时能够根据正确的地址运行,不会产生混乱。
举例:应用软件A包括指令段A1和A2两部分,选择在A1和A2之间添加指令A3。首先,根据A1指令段的起始地址和长度计算出A1的结束地址,在紧接着该地址的下一个地址插入A3指令,有了A3的起始地址和长度,计算得到A3的结束地址,在紧接A3结束地址的下一个地址补入原A2指令段。相应地,需要修改原软件中A软件的长度,补入A3指令的记录(偏移地址和长度),以及修改A2指令段的偏移地址和长度。
参见图2,为本发明实施例1提供的运行被保护软件的流程图。
步骤105:重新运行新生成的应用软件。
步骤106:运行到新的指令或代码时,软件将自动访问信息安全装置,如果访问成功,则执行步骤107;否则,如果访问不成功,则执行步骤108:
本实施例中,信息安全装置为独立于装载软件的设备的外设,具有存储、运算和加解密功能。
软件运行到新指令时,访问信息安全装置。软件自动访问信息安全装置具体为:软件调用装载它的设备去访问信息安全装置,向信息安全装置写入登陆信息和密码,或自身特征信息,或步骤101中写入的硬件特性信息等,由信息安全装置进行比对,如果比对成功,则软件访问信息安全装置成功,执行步骤107;否则,访问失败,执行步骤108。其中,软件向信息安全装置写入装载软件的硬件设备的信息具体为:信息安全装置内部预先装有某特征软件访问信息安全装置的时钟信息,该时钟信息可以为限定特征软件访问信息安全装置的时间信息,如只能访问固定时间长度或者只能在规定时间段内访问,一旦软件访问信息安全装置超出该时间长度或没有在规定的时间段内访问,则访问失败,执行步骤108;否则,访问成功,执行步骤107;
其中,软件向信息安全装置输入登陆信息和密码,如果信息安全装置确认信息正确,则软件访问信息安全装置成功,执行步骤107;
其中,软件向信息安全装置写入硬件特征信息具体为:软件向信息安全装置写入事先与其绑定过的信息安全装置的硬件特性信息(见步骤101),如果信息安全装置比对内置的信息和收到的信息一致,则访问成功,执行步骤107;否则,访问失败,执行步骤108。
步骤107:应用软件接收到信息安全装置返回的成功信息,继续执行软件,直到整个软件运行完成。
步骤108:应用软件接收到信息安全装置返回的失败信息,软件终止运行。
软件插入指令的指示图如下,其中软件A包括指令段A1和A2,本实施例中的新增指令段即为图中的插入代码。由于插入代码的介入,使得A2指令段的地址发生了变化,因此需要重新调整指令段A2的起始地址或偏移地址,使得原软件和新软件运行后获得相同的结果。
有益效果:本实施例通过在原有软件中加入认证调用指令,增强了软件调用的安全性。
实施例2
参见图3,本发明还提供了一种软件保护方法,包括下列步骤:
步骤201:加载并分析软件,获取其中的特殊指令;
分析原软件的目的在于确定特殊指令的位置。确定的步骤与实施例1中步骤102相同,首先需要确定段及各功能模块的地址和长度,再从段或功能模块中查找特殊指令的位置。
步骤202:编写替换指令,并根据特殊指令编写预置函数;
替换指令用于替换原软件中的特殊指令(如:跳转指令集),本实施例中采用了CALL指令。CALL指令可跳转到预先设置的函数中,预置函数有两种形式,本实施例可以采用其中的任意一种。
预置函数的第一种形式:预置函数中包括有访问信息安全装置的指令、需要写入信息安全装置的信息(包括信息安全装置的硬件标识、时间信息或通讯信息)、原跳转指令集的全部内容、执行原跳转指令的指令及继续执行新软件中CALL指令后面指令的指令。
软件运行替换为第一种形式的预置函数的过程:运行新软件过程中,读到替换指令——CALL指令时,将转入预置函数,并根据该函数内容自动访问信息安全装置,并向信息安全装置写入信息供其确认。信息安全装置确认成功后,可以返回预置函数继续执行原跳转指令的内容,执行完成后执行新软件中CALL指令下面的指令。
预置函数的第二种形式:预置函数中包含有访问信息安全装置的指令、需要写入信息安全装置的信息(包括信息安全装置的硬件标识、时间信息或通讯信息)、原跳转指令集的全部内容、要求信息安全装置执行原跳转指令集的指令,要求信息安全装置返回执行结果的指令以及执行新软件中CALL指令后面指令的指令。
软件运行替换为第二种形式的预置函数的过程:运行新软件过程中,读到CALL指令时,将转入预置函数,并将自动访问信息安全装置,如果访问信息安全装置成功,则向信息安全装置写入相关信息和原跳转指令集的全部内容,信息安全装置认证上述相关信息成功后,执行写入的原跳转指令集的全部内容,将结果返回给CALL指令,CALL指令收到该结果,执行新软件下面的指令。
步骤203:将软件中的特殊指令替换为替换指令;
CALL指令指向步骤202的准备好的预置函数。
步骤204:对用替换指令替换了的软件重新编排,得到新的软件;保存新软件及预置函数。
重新编排是指对加入替换指令的软件进行地址和长度的计算及录入,使得加入替换指令后的新软件仍能正常运行,并得到与运行原软件同样的结果。具体步骤同实施例1的104。
下面,对提取软件中的特殊指令替换为替换指令、并生成预置函数的过程举例说明。
分析软件,得到四条特殊指令A、B、C和D。提取其中的特殊指令B,根据B的内容编写预置函数W,将软件中B的空位替换为调用指令CALL W,该指令将直接调用预置函数W。预置函数W的两种形式上面已有说明。修改后的软件为A、CALL W、C、D。由于B指令的长度与CALL W指令的长度不同,因此需要调整该条指令后C和D指令的地址,使得原软件和新软件运行后得到相同的结果。
本发明中,软件中可能包括更多的特殊指令,可以同时提取多条特殊指令进行替换,替换过程同上,地址修改过程也同上。
参见图4为本发明实施例2提供的运行被保护软件的流程图。
步骤205:运行替换后的新软件;
步骤206:判断软件中的每条指令,如果该指令为替换后的CALL指令,则执行步骤207;否则,执行步骤210;
步骤207:进入预置函数,访问信息安全装置并向其中写入信息;如何访问成功,则执行步骤208;否则,访问失败,终止软件运行;
预置函数访问信息安全装置的步骤同实施例1中的步骤106。
步骤208:继续执行CALL指令中原跳转指令集的内容,并执行新软件中CALL指令下面的指令。
步骤209:执行下一条指令,并返回步骤204。
有益效果:本实施例通过对软件中的特殊指令进行替换,使其在运行时能够对这些特殊功能进行保护,从而保证了软件的安全性!
实施例3
参见图5,本发明还提供了一种软件保护方法,包括下列步骤:
步骤301:加载应用软件;
步骤302:分析软件,取其中的至少一个指令段取出加密;
分析软件的目的在于获取其中所有指令段的地址,其过程同实施例1中步骤102,需要根据软件中段或功能模块的偏移地址及长度获取每个段及功能模块的位置。
对指令段加密可以采用RSA算法、SHA1算法、3-DES算法或AES算法。
步骤303:根据加密后的指令段编写预置函数,并外置该预置函数,将原软件上述指令段的空位替换为函数索引指令。
此处,外置包括存放在原软件之外的软环境、硬环境或虚拟环境。函数索引指令指向预置函数,预置函数包括三种格式:
第一种格式:直接根据预置函数解密软件,并根据解密情况继续或终止软件。具体为:预置函数不但包括加密后的原软件指令段,还包括该指令段被调用后对提取的密文解密的指令,执行解密后的指令段的指令,以及根据解密后指令段的执行情况决定继续或终止执行软件运行的指令。
第二种格式:预置函数从事先绑定的信息安全装置中获取密钥解密指令段,并运行该解密后的指令段,根据解密情况决定继续或终止软件运行。具体包括:预置函数不但包括加密后的指令,还包括向预先绑定的信息安全装置写入预置的硬件特征信息的指令,认证信息安全装置是否为事先绑定的信息安全装置的指令,提取信息安全装置内用于解密的密钥的指令,利用提取的密钥解密密文指令段的指令,执行解密后的指令段的指令,以及根据解密后的指令段的执行情况继续或终止软件运行的指令。
第三种格式:预置函数访问信息安全装置,访问成功后将加密后的指令段写入该信息安全装置,信息安全装置解密加密后的指令段并执行该解密后的指令段,将结果返回给预置函数,由预置函数根据上述返回结果继续或中止软件运行。具体包括:预置函数不但包括加密后的指令,还包括访问并认证信息安全装置的指令(同实施例1中的步骤102),认证通过后向信息安全装置写入加密后的指令段的指令,要求信息安全装置解密加密后的指令段的指令,要求信息安全装置运行解密后的指令段的指令,要求信息安全装置返回运行结果的指令,以及根据运行结果继续或终止软件运行的指令。
步骤303也可以为根据加密后的指令段编写预置函数,并用该预置函数替换原指令段。
步骤304:重新编排修改后的软件,生成新软件;保存新软件及加密后的指令段。
本步骤中,重新编排修改后的软件,具体为根据补入指令的地址和大小将原软件中该指令段后面的指令段地址加以修改。具体步骤同实施例1的104。
如果步骤303为根据加密后的指令段编写预置函数,并用该预置函数替换原指令段,则步骤304为修改预置函数后面的指令的地址,使得运行原软件和新软件获得同样的结果。
下面,对上述插入函数索引指令的过程举例说明:
软件包括A、B、C、D和E四个指令段,通过分析提取其中的指令段C加密,根据加密后的指令段C生成函数w外置,并生成与函数w对应的函数索引指令X,将函数索引指令X指向w外置的地址,在原软件中C空缺的位置补入函数索引指令X,得到新软件A、B、X、D和E。由于指令段C和函数索引指令X的长度不同,因此需要重新编排X后的D和E指令段的地址,使得运行原软件和新软件得到同样的结果。X的三种格式上面已有说明,这里不再赘述。
另外,本发明中,也可以同时提取A到E中的多个指令段加密外置,如提取B和D指令段加密,根据加密的指令段生成对应的函数w1和w2外置,将B和C的空位分别替换为函数索引指令X1和X2,得到新软件A、X1、C、X2和E,其中X1指向存放w1的地址,X2指向存放w2的地址,X1和X2如上所述,都有三种格式可以选择。
参见图6为本发明实施例提供的运行被保护软件的流程图。
步骤305:运行新软件;
步骤306:执行新软件中的指令,并判断是否为函数索引指令或软件
运行结束,如果是函数索引指令,执行步骤307;如果不是函数索引指令,执行下一条指令,并返回步骤306;如果软件运行结束,则结束全部操作;
如果步骤303为根据加密后的指令段编写预置函数,并用该预置函数替换原指令段,则步骤306为软件运行过程中自动执行预置函数及该函数后面的指令,直到软件全部执行完。
步骤307:根据函数索引指令检索预置函数的位置,并执行预置函数的内容,如果执行该指令成功,则返回新软件执行下一条指令,并返回步骤306;否则,结束软件运行。
该步骤中,执行预置函数的内容具体为按照步骤303规定的预置函数的三种内容,执行相应的操作。
对于第一种形式的预置函数,执行其内容具体为:提取密文的指令段,对其解密,并执行解密后的指令段,如果能够成功执行,则返回新软件执行下一条指令,并返回步骤306;否则,结束新软件的运行。
对于第二种形式的预置函数,执行其内容具体为:提取密文指令段,向事先绑定的信息安全装置写入与信息安全装置相关的硬件特性信息,在信息安全装置确认该硬件特性信息正确后,提取信息安全装置中存储的密钥,利用该密钥解密密文指令段,执行解密后的密文指令段,如果执行成功,则返回新软件执行下一条指令,并返回步骤306;否则,结束新软件的运行。如果信息安全装置否认硬件特性信息的正确性,则终止新软件的运行。
对于第三种形式的预置函数,执行其内容具体为:提取密文指令段,向事先绑定的信息安全装置写入与信息安全装置相关的硬件特性信息,在信息安全装置确认该硬件特性信息正确后,将密文指令段写入信息安全装置,由信息安全装置解密并执行密文指令段,并将执行结果返回预置函数,由其根据执行情况调用新软件。
有益效果:本发明实施例通过将软件中的指令段替换为函数索引指令,使得需要保护的指令段外置于软件,保护了软件的安全性!
实施例4
参见图7,本发明还提供了一种软件保护的方法,包括下列步骤:
步骤401:加载软件;
步骤402:分析软件中的所有函数和指令段,获取其中容易识别的类名、命名空间名、函数名或变量名;
分析过程见实施例1中步骤102,获取函数的过程与获取指令段的过程相同,根据段或功能性模块的地址及长度信息获取软件各个段或功能模块的地址信息。
开发软件时,研发人员往往喜欢用功能性的描述来定义函数名称,这对软件的安全很不利,因此,需要通过修改部分或全部函数名称来防止恶意窃取者轻易获知软件功能。用功能性名称定义的函数,举例:函数名称为“encryption module”。该函数名称直接暴露了函数的功能。除函数名外,软件中还会出现容易识别的类名、命名空间名或变量名,这些名称都可以在分析过程中采用与实施例1步骤102相同的方法获得。
步骤403:对软件中容易识别的类名、命名空间名、函数名或变量名进行混淆处理;
所述混淆处理包括修改类名、命名空间名、函数名或变量名。
例如:将上述函数名称为“encryption module”的函数修改为“e_123”,这样,就无法从名称上直接获知函数的功能。
步骤404:重新编排修改了类名或命名空间名或函数名或变量名称的原软件,生成新的软件;
因为函数名称长度有变化,需要对修改的名称地址进行重排;还需要在软件指令中修改相应调用函数的地址,使其能找到重排的名称地址;还需要根据修改后的函数名称对修改后的函数后面的指令的地址进行相应修改。使得运行新软件时,不会因为地址错误引起混乱。具体步骤同实施例1的104。
步骤405:保存修改后的文件。
本发明中,运行该被保护软件的过程非常简单,在此不赘述。
本实施例中,由于只替换了函数名称,修改了函数及其后的指令地址,并不影响原有的运行过程,因此不再对修改后软件的运行过程做说明。
有益效果:
本发明实施例通过修改软件中的函数名称,使函数名称从字面上看很难理解其实际功能,有时还与其它名称如类型名称、数字等混在一起,难以区分,因此保护了软件的安全性。
实施例5
参见图8,本发明还提供了一种软件保护方法,包括下列步骤:
步骤501:加载应用软件;
步骤502:分析软件,得到所有的指令段;
具体分析方法见实施例1中的步骤102。
步骤503:选择一个或多个指令段,转换成一个或多个函数保存到外部环境中,并将原软件中选择的指令段替换为相应的函数调用指令;该步骤中,可任意选择一个或多个指令段,转换成一个或多个函数;并把函数保存到外部环境里,同时,将原软件中存放这些指令段的位置替换为上述函数调用指令。外部环境包括外部软环境、硬环境和虚拟环境等等。
外部函数包括原指令段执行指令及指令段执行结果返回指令,或者包括原指令段执行指令,返回结果到新软件。
本发明中,也可以选择一个或多个指令段,转换成一个或多个函数以替换这一个或多个指令段。
步骤504:重新编排修改后的软件,得到新软件,保存修改后的新软件和外部函数。
重新编排软件的过程同实施例1中的步骤104。
如果步骤503为选择一个或多个指令段,转换成一个或多个函数以替换这一个或多个指令段,这本步骤504为重新编排函数后面的指令段的地址,使得执行新软件和原软件后取得相同的结果。
下面,对上述提取软件中的部分指令段转换成外部函数的过程举例说明。分析软件,得到五个指令段A、B、C、D和E。提取其中的指令段B转换成外部函数保存到其它软件、外设或虚拟环境中,将原软件中B的空位替换为函数调用指令,如:Call B,得到新软件A、CallB、C、D和E。由于指令段B被替换为指令段索引指令,其所占的长度发生了变化,因此需要对指令段B以后的C、D和E的地址进行相应调整,使得运行原软件和新软件获得同样的结果。
当然,本发明中原软件可能包括更多的指令段,且从软件中提取的指令段也可以为多个,但处理过程与上同。
参见图9,为本发明实施例5提供的运行被保护软件的流程图。
步骤505:运行新软件;
步骤506:判断新软件中是否有外部函数调用指令或者软件是否运行完毕,如果有,执行步骤507;如果没有,继续执行步骤506;如果软件运行完毕,结束所有操作;
如果步骤503为选择了一个或多个指令段,转换成一个或多个函数以替换这一个或多个指令段,则步骤506为运行到替换的函数时,自动执行替换的函数,并顺序执行函数后面的指令,直至软件全部运行完毕。
步骤507:按照外部函数调用指令给出的地址检索外部函数,如果检索到外部函数,执行外部函数,返回步骤506;否则,结束软件运行。
有益效果:
本发明实施例通过将软件中的部分指令段外置,在原软件文件中缺失指令段,实现了对软件的保护!
实施例6:
参见图10,本发明提供了一种保护软件安全性的方法,包括下列步骤:
步骤601:加载应用软件;
步骤602:分析软件,得到多个指令段;
分析的步骤同实施例1中的步骤102,通过段或功能模块的地址及长度获取具体某个段或功能模块的位置。
步骤603:选择一个或多个指令段,转换成独立函数;分别运行各独立函数,并把相应的运行结果保存到外部环境中,使得这些结果能被原软件调用;将原软件中上述选择的指令段替换为调用上述运行结果的指令;
本步骤中,一个指令段转换成一个独立函数,多个指令段转换成多个独立函数。独立函数是指能够独立运行直接获取运行结果的函数。
本实施例中,外部环境包括外部软环境、外部硬环境及外部虚拟环境等等。
本步骤也可以为选择一个或多个指令段,转换成独立函数;分别运行各独立函数,并用对应的运行结果替换选择的一个或多个指令段。
步骤604:重新编排插入了运行结果的新软件,生成新的软件。
重新编排的具体步骤同实施例1的104。
如果步骤603为选择一个或多个指令段,转换成独立函数;分别运行各独立函数,并用对应的运行结果替换选择的一个或多个指令段,则重新编排的过程为:更正软件中运行结果后面的指令的地址,使得运行原软件和新软件的结果相同。
下面,对上述提取软件中指令段转换成独立函数、运行独立函数并外置结果的过程举例说明。分析软件,得到四个指令段A、B、C和D。提取其中的B指令段,将其转换为独立函数,运行该独立函数得到结果x,将该结果保存到外部软件、外设或虚拟环境中。将原软件中B指令段的空位替换为结果调用指令CALL x。经过处理后的软件变为:A、CALL x、C、D。由于相对于原指令段B,结果调用指令CALLx的长度发生了变化,因此需要修改C和D指令段的地址,使得原软件和新软件运行后得到相同的结果。
当然,本发明中,软件可以包括更多的指令段。也可以从中选择更多的指令段做上述处理,处理过程不再赘述。
参见图11,本发明还提供了运行被保护软件的流程图。
步骤605:运行新软件;
步骤606:判断软件指令中是否有调用独立函数指令或者是否软件运行完毕,如果有,执行步骤607;如果没有,返回步骤606;如果软件中的所有指令运行完毕,结束。
如果步骤603为选择一个或多个指令段,转换成独立函数;分别运行各独立函数,并用对应的运行结果替换选择的一个或多个指令段,则步骤606为运行到运行结果时,直接执行下面的指令,直到软件全部运行完毕。
步骤608:检查是否存在独立函数,如果存在,返回对应的结果信息,并执行下面的指令,返回步骤606;否则,结束软件运行。
有益效果:本发明实施例通过将原软件的部分指令段独立运行,在外部环境中保存运行结果,在原软件文件中缺失指令段,无法还原原软件,实现了对软件的保护,提高了软件的运行速度!
以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。

Claims (18)

1.软件保护方法,包括下列步骤:
分析软件,对分析得到的软件指令段进行处理,生成处理后的软件指令段;重新编排所述处理后的软件指令段,生成并运行新软件;所述新软件根据处理后的软件指令段的运行结果继续或终止运行;
或获取软件代码,对获取的软件代码进行处理,生成处理后的软件代码;重新编译所述处理后的软件代码,生成并运行新软件;所述新软件根据所述处理后的软件代码的运行结果继续或终止运行。
2.根据权利要求1所述的软件保护方法,其中,所述分析软件为通过软件中各个指令段和段内各功能模块的偏移地址和长度获得所述软件各个指令段的起始地址和指令段内各功能模块的起始地址。
3.根据权利要求1所述的软件保护方法,其中,所述获取软件代码为打开软件的原代码。
4.根据权利要求1所述的软件保护方法,其中,所述对分析得到的软件指令段进行处理为在分析软件后获得的软件指令段之间或指令段内插入信息安全指令。
5.根据权利要求1所述的软件保护方法,其中,所述对获取的软件代码进行处理为在获取软件代码后在所述获取的软件代码中插入信息安全代码。
6.根据权利要求5所述的软件保护方法,其中,所述信息安全代码用于访问信息安全装置,并与所述信息安全装置进行交互认证。
7.根据权利要求1所述的软件保护方法,其中,所述对分析得到的软件指令段进行处理为将所述软件指令段中的特殊指令替换为替换指令,根据所述特殊指令编写预置函数并外置和保存该预置函数,所述替换指令用于调用所述外置的预置函数。
8.根据权利要求7所述的软件保护方法,其中,重新编排所述处理后的软件指令段具体为重新编排所述处理后的软件指令段的偏移地址,使得处理前后的软件运行结果不变。
9.根据权利要求7所述的软件保护方法,其中,所述预置函数包括访问信息安全装置的指令、需要写入信息安全装置的信息及所述特殊指令、执行特殊指令的指令以及返回并执行特殊指令后面指令的指令。
10.根据权利要求7所述的软件保护方法,其中,所述预置函数包括访问信息安全装置的指令、需要写入信息安全装置的信息、所述特殊指令、要求信息安全装置执行所述特殊指令的指令及返回并执行所述特殊指令后面指令的指令。
11.根据权利要求1所述的软件保护方法,其中,所述对分析得到的软件指令段进行处理为加密所述软件指令段中的部分指令,根据所述加密的部分指令编写函数并外置保存,将软件中所述部分指令的空余位置替换为函数索引指令,所述函数索引指令用于调用所述函数。
12.根据权利要求11所述的软件保护方法,其中,所述函数索引指令调用的函数包括:所述加密的部分指令、解密所述加密的部分指令的指令、执行解密后的部分指令的指令以及根据解密后的部分指令的执行情况决定继续或终止软件运行的指令。
13.根据权利要求11所述的软件保护方法,其中,所述函数索引指令调用的函数包括:从事先绑定的信息安全装置中获取密钥以解密所述加密的部分指令的指令、运行所述解密后的部分指令的指令,以及根据解密后的部分指令的执行情况决定继续或终止软件运行的指令。
14.根据权利要求11所述的软件保护方法,其中,所述函数索引指令调用的函数包括:访问事先绑定的信息安全装置的指令、访问成功后将所述加密的部分指令写入所述信息安全装置的指令、信息安全装置解密并执行所述解密后的部分指令的指令,以及将所述运行结果返回给函数索引指令并由所述函数索引指令根据返回结果继续或终止程序运行的指令。
15.根据权利要求1所述的软件保护方法,其中,所述对分析得到的软件指令段进行处理为对所述软件指令段中容易识别的类名、命名空间名、函数名或变量名进行混淆处理,所述混淆处理包括修改类名、命名空间名、函数名或变量名。
16.根据权利要求1所述的软件保护方法,其中,所述对分析得到的软件指令段进行处理为将所述软件指令段中的部分指令外置并保存,所述软件中所述部分指令的空余位置替换为部分指令调用指令。
17.根据权利要求1所述的软件保护方法,其中,所述对分析得到的软件指令段进行处理为取出所述软件指令段中的部分指令运行,外置并保存所述运行结果,将所述软件中所述部分指令的空余位置替换为运行结果调用指令。
18.根据权利要求17所述的软件保护方法,其中,所述外置并保存所述运行结果具体为将所述运行结果保存到外部软环境、硬环境或虚拟环境中。
CN201010163378A 2010-04-28 2010-04-28 软件保护方法 Pending CN101853357A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201010163378A CN101853357A (zh) 2010-04-28 2010-04-28 软件保护方法
PCT/CN2010/075448 WO2011134207A1 (zh) 2010-04-28 2010-07-23 软件保护方法
US12/921,403 US20110271350A1 (en) 2010-04-28 2010-07-23 method for protecting software

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010163378A CN101853357A (zh) 2010-04-28 2010-04-28 软件保护方法

Publications (1)

Publication Number Publication Date
CN101853357A true CN101853357A (zh) 2010-10-06

Family

ID=42804836

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010163378A Pending CN101853357A (zh) 2010-04-28 2010-04-28 软件保护方法

Country Status (3)

Country Link
US (1) US20110271350A1 (zh)
CN (1) CN101853357A (zh)
WO (1) WO2011134207A1 (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104504312A (zh) * 2014-12-23 2015-04-08 北京深思数盾科技有限公司 软件反调试保护方法
CN104793939A (zh) * 2015-04-27 2015-07-22 柳州市网中网络策划中心 一种客户端自主升级软件的开发方法
CN104808993A (zh) * 2015-04-27 2015-07-29 柳州市网中网络策划中心 一种自主升级软件的开发方法
CN105718765A (zh) * 2016-01-26 2016-06-29 国家信息技术安全研究中心 一种利用有限自动机实现代码混淆的方法
CN106325202A (zh) * 2016-09-29 2017-01-11 深圳市合信自动化技术有限公司 一种对子程序进行加密的方法、校验方法及相应的plc编程系统
CN107463810A (zh) * 2017-08-15 2017-12-12 合肥爱吾宠科技有限公司 基于网络通讯实现计算机软件保护的方法
CN108881223A (zh) * 2018-06-17 2018-11-23 张红卫 一种基于网络通信实现计算机软件保护的方法
CN110059456A (zh) * 2019-04-19 2019-07-26 同盾控股有限公司 代码保护方法、代码保护装置、存储介质与电子设备
US10713381B2 (en) 2015-10-19 2020-07-14 Guangdong Oppo Mobile Telecommunications Corp., Ltd. Method and apparatus for securely calling fingerprint information, and mobile terminal
CN111563237A (zh) * 2020-03-24 2020-08-21 博雅正链(北京)科技有限公司 一种智能合约安全增强方法
CN111680271A (zh) * 2020-06-02 2020-09-18 浙江大学 基于智能合约字节码特征的合约代码混淆平台和混淆方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5953867B2 (ja) * 2012-03-26 2016-07-20 富士ゼロックス株式会社 プログラム、及びプログラム保護装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1997042570A1 (en) * 1996-05-08 1997-11-13 Ankor Technologies Limited Computer-implemented data encryption and decryption development environment
US6480959B1 (en) * 1997-12-05 2002-11-12 Jamama, Llc Software system and associated methods for controlling the use of computer programs
CN101156157A (zh) * 2005-02-11 2008-04-02 辛普雷克斯梅杰有限公司 软件保护方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2447451C (en) * 2000-05-12 2013-02-12 Xtreamlok Pty. Ltd. Information security method and system
WO2003090021A2 (en) * 2002-04-15 2003-10-30 Core Sdi, Incorporated Security framework for protecting rights in computer software
US7188241B2 (en) * 2002-10-16 2007-03-06 Pace Antipiracy Protecting software from unauthorized use by applying machine-dependent modifications to code modules
AR042599A1 (es) * 2002-11-19 2005-06-29 Schiavoni Juan Jose Metodo de proteccion de programas y equipo para realizarlo
CN1288526C (zh) * 2004-09-01 2006-12-06 中国科学院计算技术研究所 基于函数加密的软件保护方法
US7765579B2 (en) * 2004-09-07 2010-07-27 Greencastle Technology, Inc. Security deployment system
CN100346255C (zh) * 2005-10-19 2007-10-31 北京飞天诚信科技有限公司 提取部分代码至加密装置中的软件版权保护方法
CN101650664B (zh) * 2009-06-30 2012-06-27 飞天诚信科技股份有限公司 链接方法和链接器

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1997042570A1 (en) * 1996-05-08 1997-11-13 Ankor Technologies Limited Computer-implemented data encryption and decryption development environment
US6480959B1 (en) * 1997-12-05 2002-11-12 Jamama, Llc Software system and associated methods for controlling the use of computer programs
CN101156157A (zh) * 2005-02-11 2008-04-02 辛普雷克斯梅杰有限公司 软件保护方法

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104504312A (zh) * 2014-12-23 2015-04-08 北京深思数盾科技有限公司 软件反调试保护方法
CN104793939A (zh) * 2015-04-27 2015-07-22 柳州市网中网络策划中心 一种客户端自主升级软件的开发方法
CN104808993A (zh) * 2015-04-27 2015-07-29 柳州市网中网络策划中心 一种自主升级软件的开发方法
US10713381B2 (en) 2015-10-19 2020-07-14 Guangdong Oppo Mobile Telecommunications Corp., Ltd. Method and apparatus for securely calling fingerprint information, and mobile terminal
CN105718765A (zh) * 2016-01-26 2016-06-29 国家信息技术安全研究中心 一种利用有限自动机实现代码混淆的方法
CN106325202A (zh) * 2016-09-29 2017-01-11 深圳市合信自动化技术有限公司 一种对子程序进行加密的方法、校验方法及相应的plc编程系统
CN107463810A (zh) * 2017-08-15 2017-12-12 合肥爱吾宠科技有限公司 基于网络通讯实现计算机软件保护的方法
CN108881223A (zh) * 2018-06-17 2018-11-23 张红卫 一种基于网络通信实现计算机软件保护的方法
CN110059456A (zh) * 2019-04-19 2019-07-26 同盾控股有限公司 代码保护方法、代码保护装置、存储介质与电子设备
CN110059456B (zh) * 2019-04-19 2020-06-05 同盾控股有限公司 代码保护方法、代码保护装置、存储介质与电子设备
CN111563237A (zh) * 2020-03-24 2020-08-21 博雅正链(北京)科技有限公司 一种智能合约安全增强方法
CN111563237B (zh) * 2020-03-24 2023-08-08 博雅正链(北京)科技有限公司 一种智能合约安全增强方法
CN111680271A (zh) * 2020-06-02 2020-09-18 浙江大学 基于智能合约字节码特征的合约代码混淆平台和混淆方法
WO2021244054A1 (zh) * 2020-06-02 2021-12-09 浙江大学 基于智能合约字节码特征的合约代码混淆平台和混淆方法

Also Published As

Publication number Publication date
US20110271350A1 (en) 2011-11-03
WO2011134207A1 (zh) 2011-11-03

Similar Documents

Publication Publication Date Title
CN101853357A (zh) 软件保护方法
CN103164666B (zh) 保护安全数据的存储器装置及认证存储器装置的方法
CN1592877B (zh) 用于对大容量存储设备上数据加密/解密的方法和装置
CN103250163A (zh) 用于加密和解密虚拟盘的计算机可读存储介质
US20040177257A1 (en) Data processing device and data processing method
CN106960156B (zh) 基于应用程序的数据加密及访问方法、装置
CN104636444B (zh) 一种数据库的加解密方法及装置
CN105683990A (zh) 用于保护动态库的方法和装置
CN104298926B (zh) 一种运行加密文件的方法和装置
CN106599629A (zh) 一种安卓应用程序加固方法及装置
CN105612715A (zh) 具有可配置访问控制的安全处理单元
CN102163268A (zh) 在执行期间验证软件代码的完整性的方法和设备
CN102799815B (zh) 一种安全加载程序库的方法和装置
CN111191252A (zh) 一种智能卡操作系统加解密方法、装置及存储介质
CN110287208A (zh) 数据库字段加密的方法和装置、存储介质
CN103186746A (zh) 一种可执行文件的保护方法及系统
CN108763401A (zh) 一种文件的读写方法及设备
CN109992974A (zh) 虚拟机字节码文件的保护方法、设备及可读存储介质
CN109543433B (zh) 软件开发工具包加密方法、装置、计算机和存储介质
CN110008724A (zh) 固态硬盘控制器安全加载方法、装置及存储介质
CN106326782A (zh) 一种信息处理方法及电子设备
CN107330339A (zh) 一种电子档案身份证的生成方法及装置
CN113076548A (zh) 机器人自动化流程账户信息处理方法及装置
CN112016336A (zh) 检测复制卡的方法、装置、设备及存储介质
US9965621B2 (en) Program protection device

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20101006