CN103106356B - 一种在安全环境中生成代码提高软件保护强度的方法 - Google Patents

一种在安全环境中生成代码提高软件保护强度的方法 Download PDF

Info

Publication number
CN103106356B
CN103106356B CN201310040228.9A CN201310040228A CN103106356B CN 103106356 B CN103106356 B CN 103106356B CN 201310040228 A CN201310040228 A CN 201310040228A CN 103106356 B CN103106356 B CN 103106356B
Authority
CN
China
Prior art keywords
code
security context
software
run time
time version
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
CN201310040228.9A
Other languages
English (en)
Other versions
CN103106356A (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 CN201310040228.9A priority Critical patent/CN103106356B/zh
Publication of CN103106356A publication Critical patent/CN103106356A/zh
Priority to PCT/CN2014/071083 priority patent/WO2014117668A1/zh
Application granted granted Critical
Publication of CN103106356B publication Critical patent/CN103106356B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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

Landscapes

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

Abstract

本发明公开了一种基于运行时在安全环境中生成动态代码的软件保护方法,通过在安全环境中即时生成与非安全运行环境相关的代码,在非安全运行环境中运行生成的代码,从而提高软件调试和分析的难度,还可以避免使用安全环境运行代码引起的性能损失,本方法基本没有性能损失,且能够提供较好的安全性,具有非常大的实用价值。

Description

一种在安全环境中生成代码提高软件保护强度的方法
技术领域
本发明涉及软件版权保护技术,特别涉及到基于即时编译的软件保护方法。
背景技术
计算机软件由于具有数字化的特征,因此很容易被复制和非法使用,软件保护技术就是用来保护软件版权、避免软件被非法使用的技术。
针对计算机软件进行破解的主要方法就是调试,通过调试了解软件运行的流程和逻辑,然后加以篡改,实现对软件破解,由于运行计算机软件的计算机硬件和操作系统平台信息是公开的,并且都提供了对调试器的支持以便进行正常的软件调试,因此,在这种环境下很难避免软件被调试,所以,软件保护的一个重要发展方向就是构造安全的运行环境,在安全环境中运行软件的部分代码,这样,针对软件进行分析就必须先分析出安全环境,提高了破解的难度。例如常见的虚拟机保护技术,使用未公开架构的虚拟机来运行软件的部分代码,破解者要调试这部分软件代码就必须分析出虚拟机的指令集。
安全环境显著提高了软件调试的难度,特别是对于将安全环境置于智能卡硬件或者远程服务器的情况,几乎不可能对受保护的部分进行调试,从而可以实现非常高的保护强度。
然而,由于构造安全环境要比构造普通的环境考虑的情况更加复杂,在安全环境中运行代码的速度会大幅度降低,例如某些虚拟机保护方法甚至会使软件的运行速度下降1000倍以上,且如果软件本体和在安全环境中运行的代码之间相互访问频繁的情况下,软件的运行效率还会降低,从而降低安全环境这种软件保护方式的可用性。
发明内容
本发明提供一种在安全环境中生成代码提高受保护软件保护强度的方法,所述安全运行环境是可运行代码、具有安全防范功能、难以进行调试的计算机运行环境,
其中所述安全环境中运行代码生成模块,所述代码生成模块根据源输入逻辑描述生成对应逻辑的可执行代码;其中,所述受保护软件中具有调用模块;
所述方法包括如下步骤:
抽取受保护软件中的部分代码;
将所述部分代码转换为源输入逻辑描述;
在所述受保护软件中被抽取代码的位置插入调用模块;
当所述受保护软件运行到被抽取代码的位置时,所述调用模块将调用安全环境,报告运行环境信息;
所述安全环境中的所述代码生成模块根据所述运行环境信息生成与所述运行环境相关的执行代码;
将生成的与运行环境相关的所述执行代码填充到所述被抽取代码的位置;
所述受保护软件执行所述执行代码。
根据本发明的一个方面,所述安全环境包括但不限于虚拟机、智能卡、远程服务器。
根据本发明的一个方面,每次生成的执行代码不完全相同。
根据本发明的一个方面,所述生成的执行代码是完成相同的功能的等效代码。
根据本发明的一个方面,在执行完所述执行代码之后,将受保护软件中的这部分生成的执行代码清除。
附图说明
附图1为按照本发明的在安全环境中生存代码的软件保护方法的一优选实施例的流程示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
有鉴于此,本发明提供了一种利用安全环境动态生成软件代码的软件保护方法和系统,可以在基本不影响软件运行效率的情况下获得相对较高的安全性。
本发明包括安全运行环境,运行在安全环境中的代码生成模块,受保护软件中加入的调用模块。
所述安全运行环境是可运行代码,但是具有安全防范功能、难以进行调试的计算机运行环境,例如运行在受保护软件所在进程中的虚拟机、智能卡、远程服务器等。
所述代码生成模块可以根据源输入逻辑描述生成对应逻辑的可执行代码。
所述受保护软件中的调用模块用于替代被抽取的代码,当运行到被抽取代码的位置时,调用模块调用安全环境,提交运行环境信息。
步骤A,将受保护软件中的部分代码抽取出来,并转换为代码生成模块的源输入逻辑描述,而且在被抽取代码的位置插入调用模块。
步骤B,当受保护软件运行到被抽取代码的位置时,调用模块将调用安全环境,报告运行环境信息,安全环境中的代码生成模块根据运行环境信息生成与运行环境相关的执行代码。
步骤C,将生成的代码填充到被抽取的位置,软件执行此代码。
其中,根据本发明的一种实施方式,在上述步骤B中,每次生成的代码可以不完全相同,例如用等效的指令完成相同的功能,使用不同的优化方式,这可以增加调试和分析的难度。
其中,根据本发明的一种实施方式,在步骤C之后,还存在步骤D,执行完生成的代码之后,将受保护软件中的这部分生成的代码清除,降低被调试和分析的风险。
其中,根据本发明的一种实施方式,受保护软件中的调用模块可通过其他方式替代,比如通过加载器的方式来加载执行。
运行环境相关的代码指的是所述代码运行依赖当前运行环境,一旦环境变化,代码就不能运行,例如代码中可以有当前CPU的特有指令(比如CPU型号等与当前计算机相关信息),或者使用绝对文件存储位置(比如文件在硬盘盘符下的绝对路径),通过多种此类方法的组合使用之后,其他计算机运行这些代码几乎是不可能的,甚至同一台机器重新运行都可能存在问题。
本实施例中安全环境是远程服务器。本实施例中在服务器内部生成执行代码,服务器外部不知道具体代码信息,也不知道相关代码生成规则,并且每次都是由服务器根据环境相关信息生成的代码,而且服务器端处于远程,无法对服务器进行调试,因此远程服务器是安全的运行环境。
代码生成模块使用开源的GCC,(即,GNUCompilerCollection,中文术语为GNU编译器套装,是一套由GNU开发的编程语言编译器),相对应的,从受保护软件中抽取的代码用GCC的源文件方式保存在远程服务器上。根据本发明的一个实施方式,所述抽取操作可以根据指定的方式进行自动抽取或者进行人工抽取。根据本发明的一个实施方式,可按照C语言原始程序.c格式保存。根据本发明的一个实施方式,另外也可以根据需求或规划自行定制保存位置。
根据本发明的一个实施方式,假设要保护的软件中存在如下函数代码:
intfoo(inta)
{
b=a+1;
returnb;
}
此时需要保护“b=a+1;”,同时将“b=a+1;”在该函数代码中原来的位置处替换为对安全环境的调用secureCall()。一旦替换之后,则该函数代码变为:
intfoo(inta)
{
secureCall();/*调用安全环境*/
returnb;
}
其中,secureCall()函数内部功能如下:
发送环境信息
接收字节码
执行字节码
当软件运行到secureCall()的时候,secureCall()负责和安全环境通信。
根据本发明的一个实施方式,首先secureCall()调用安全环境,向安全环境报告原受保护软件的运行环境信息(如操作系统信息、地址、CPU型号等特有指令信息),安全环境中代码生成模块根据接收到的运行环境信息生成与运行环境相关的执行代码,然后seacureCall()内部接收该执行代码并将代码填充到被抽取的位置,继而软件顺序执行此代码。
此时,代码生成器GCC将“b=a+1;”编译成合适的目标平台代码,比如,根据本发明的一个实施方式,代码生成器GCC编译成的代码与原受保护软件的运行环境一致,比如在x86机器上将代码编译生成对应的可执行的x86指令。secureCall()通过调用安全环境取得由安全环境生成并返回的与运行环境相关的执行代码,然后将这些执行代码放在本地的内存中执行。由于生成的代码和软件的运行环境完全一致,因此效率的下降不多。
根据本发明的一个实施方式,关于代码动态变化,对于“b=a+1;”可以生成多条等价指令,包括但不限于:
1.ADDEAX,1;//寄存器EAX的值加1
2.INCEAX;//寄存器EAX等于寄存器EAX加1
3.SUBEAX,0xFFFFFFFF//寄存器EAX等于寄存器EAX减去-1,即为寄存器EAX等于寄存器EAX加1。
显然,每次运行的指令都不一样,因此更加难以分析。上述代码动态变化部分已有说明,比如:对于上述b=a+1,第一次运行时生成“ADDEAX,1”指令,第二次运行时生成“INCEAX”指令,这些指令是等价的,每次运行动态生成不同的等价指令,代码动态变化增加了分析的难度。
关于环境相关指令(如CPU特有指令,系统信息等),当CPU具有浮点协处理器的时候,可以生成浮点协处理器指令完成计算(浮点协处理器也称为数字或算术协处理器,具有一个旨在大量数字操作的特殊指令集,专门用来进行浮点数运算),或者使用特定的内存地址作为变量a和b的临时存储区域,这都可以使指令和当前的运行环境相关。
本发明的核心思想是将软件一部分代码抽取到一个安全环境中,运行至该部分代码时,安全环境根据软件运行环境相关信息动态生成执行代码并填补回软件中,软件继续正常运行。安全环境中依赖当前软件运行环境相关信息(如cpu型号,地址等指令信息)动态生成代码。一旦运行环境变化,软件无法运行。安全环境能够保证外部人员无法调试、破解,保证外部人员不知道安全环境中抽取的代码信息,也不知道相关代码的生成规则,每次动态生成都依赖运行环境相关信息。智能卡、虚拟机等运行环境也可以作为安全环境,对于本领域的技术人员而言,根据本发明的内容,在智能卡、虚拟机上完全能够实现类似的软件保护方法,其具体实现内容根据具体的智能卡、虚拟机不同而略有不同,但其核心的保护思想与上述内容相同,因此不再赘述。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种在安全环境中生成代码提高受保护软件保护强度的方法,所述安全运行环境是可运行代码、具有安全防范功能、难以进行调试的计算机运行环境,
其中所述安全环境中运行代码生成模块,所述代码生成模块根据源输入逻辑描述生成对应逻辑的可执行代码;其中,所述受保护软件中具有调用模块;
所述方法包括如下步骤:
抽取受保护软件中的部分代码;
将所述部分代码转换为源输入逻辑描述;
在所述受保护软件中被抽取代码的位置插入调用模块;
当所述受保护软件运行到被抽取代码的位置时,所述调用模块将调用安全环境,报告运行环境信息;
所述安全环境中的所述代码生成模块根据所述运行环境信息生成与所述运行环境相关的执行代码;
将生成的与运行环境相关的所述执行代码填充到所述被抽取代码的位置;
所述受保护软件执行所述执行代码。
2.根据权利要求1所述的方法,其特征在于,所述安全环境是虚拟机。
3.根据权利要求1所述的方法,其特征在于,所述安全环境是智能卡。
4.根据权利要求1所述的方法,其特征在于,所述安全环境是远程服务器。
5.根据权利要求1所述的方法,其特征在于,每次生成的执行代码不完全相同。
6.根据权利要求5所述的方法,其特征在于,所述生成的执行代码是完成相同的功能的等效代码。
7.根据权利要求1所述的方法,其特征在于,在执行完所述执行代码之后,将受保护软件中的这部分生成的执行代码清除。
CN201310040228.9A 2013-02-01 2013-02-01 一种在安全环境中生成代码提高软件保护强度的方法 Active CN103106356B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201310040228.9A CN103106356B (zh) 2013-02-01 2013-02-01 一种在安全环境中生成代码提高软件保护强度的方法
PCT/CN2014/071083 WO2014117668A1 (zh) 2013-02-01 2014-01-22 一种在安全环境中生成代码提高软件保护强度的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310040228.9A CN103106356B (zh) 2013-02-01 2013-02-01 一种在安全环境中生成代码提高软件保护强度的方法

Publications (2)

Publication Number Publication Date
CN103106356A CN103106356A (zh) 2013-05-15
CN103106356B true CN103106356B (zh) 2016-03-16

Family

ID=48314210

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310040228.9A Active CN103106356B (zh) 2013-02-01 2013-02-01 一种在安全环境中生成代码提高软件保护强度的方法

Country Status (2)

Country Link
CN (1) CN103106356B (zh)
WO (1) WO2014117668A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106356B (zh) * 2013-02-01 2016-03-16 北京深思数盾科技有限公司 一种在安全环境中生成代码提高软件保护强度的方法
CN103678961B (zh) * 2013-11-07 2016-07-06 北京深思数盾科技股份有限公司 代码动态生成的方法
EP3206148A1 (en) * 2016-02-12 2017-08-16 ABB Schweiz AG Secure code optimization method and system
CN106971096B (zh) * 2017-04-06 2018-12-18 北京深思数盾科技股份有限公司 软件保护方法和系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1987886A (zh) * 2006-12-22 2007-06-27 北京飞天诚信科技有限公司 一种在软件保护装置中实现软件保护的方法与装置
CN1996336A (zh) * 2006-12-28 2007-07-11 北京飞天诚信科技有限公司 .Net程序保护的方法和系统
CN101201883A (zh) * 2007-09-18 2008-06-18 北京赛柏科技有限责任公司 基于虚拟机的软件保护方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7814308B2 (en) * 2004-08-27 2010-10-12 Microsoft Corporation Debugging applications under different permissions
EP1881404A1 (fr) * 2006-07-20 2008-01-23 Gemplus Procédé de protection dynamique des données lors de l'exécution d'un code logiciel en langage intermédiaire dans un appareil numérique
CN101038615A (zh) * 2007-03-12 2007-09-19 吴晓栋 一种直接从软件中任意分离代码到加密锁实现软件版权保护的方法
CN101593257B (zh) * 2008-05-27 2011-02-16 北京飞天诚信科技有限公司 基于.Net虚拟机的软件保护系统和方法
CN103106356B (zh) * 2013-02-01 2016-03-16 北京深思数盾科技有限公司 一种在安全环境中生成代码提高软件保护强度的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1987886A (zh) * 2006-12-22 2007-06-27 北京飞天诚信科技有限公司 一种在软件保护装置中实现软件保护的方法与装置
CN1996336A (zh) * 2006-12-28 2007-07-11 北京飞天诚信科技有限公司 .Net程序保护的方法和系统
CN101201883A (zh) * 2007-09-18 2008-06-18 北京赛柏科技有限责任公司 基于虚拟机的软件保护方法

Also Published As

Publication number Publication date
CN103106356A (zh) 2013-05-15
WO2014117668A1 (zh) 2014-08-07

Similar Documents

Publication Publication Date Title
CN108345773B (zh) 基于虚拟机的代码保护方法及装置、电子设备、存储介质
Kim et al. ScanDal: Static analyzer for detecting privacy leaks in android applications
Zeng et al. Obfuscation resilient binary code reuse through trace-oriented programming
Cai et al. Certified self-modifying code
CN108681457B (zh) 基于代码下沉与残码解释的Android应用程序保护方法
Van Emmerik Static single assignment for decompilation
CN108733988A (zh) 安卓平台上可执行程序的保护方法
CN103106356B (zh) 一种在安全环境中生成代码提高软件保护强度的方法
CN110245467A (zh) 基于Dex2C与LLVM的Android应用程序保护方法
Bauereiss et al. Verified security for the Morello capability-enhanced prototype Arm architecture
Wang et al. Translingual obfuscation
Sammler et al. Islaris: verification of machine code against authoritative ISA semantics
CN103514027B (zh) 一种增强软件保护易用性的方法
Zhao et al. Compile-time code virtualization for android applications
Even-Mendoza et al. Closer to the edge: Testing compilers more thoroughly by being less conservative about undefined behaviour
Kochberger et al. SoK: automatic deobfuscation of virtualization-protected applications
CN106960138B (zh) 虚拟机指令的校验方法及装置、系统
CN107066886A (zh) 一种Android加固脱壳的检测方法
Brauße et al. ESBMC-CHERI: towards verification of C programs for CHERI platforms with ESBMC
Guo et al. A survey of obfuscation and deobfuscation techniques in android code protection
Wang et al. Leveraging WebAssembly for Numerical JavaScript Code Virtualization
Wichelmann et al. MAMBO–V: Dynamic Side-Channel Leakage Analysis on RISC–V
Hwang et al. Identifying Input-Dependent Jumps from Obfuscated Execution using Dynamic Data Flow Graphs
Huyghebaert et al. Formalizing, Verifying and Applying ISA Security Guarantees as Universal Contracts
CN114707124B (zh) 基于代码虚拟化的.net平台代码保护方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: BEIJING SHENSI SHUDUN SCIENCE + TECHNOLOGY CO., LT

Free format text: FORMER OWNER: BEIJING SENSELOCK SOFTWARE TECHNOLOGY CO., LTD.

Effective date: 20150817

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150817

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

Applicant after: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

Address before: 100084 Beijing City, Haidian District Zhongguancun South Street No. 6 Zhucheng building B block 1201

Applicant before: Beijing Senselock Software Technology Co.,Ltd.

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
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.