CN103413069A - 一种保护面向对象语言编写的软件的方法 - Google Patents

一种保护面向对象语言编写的软件的方法 Download PDF

Info

Publication number
CN103413069A
CN103413069A CN2013102842226A CN201310284222A CN103413069A CN 103413069 A CN103413069 A CN 103413069A CN 2013102842226 A CN2013102842226 A CN 2013102842226A CN 201310284222 A CN201310284222 A CN 201310284222A CN 103413069 A CN103413069 A CN 103413069A
Authority
CN
China
Prior art keywords
software
class
protecting equipment
code
protected
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.)
Granted
Application number
CN2013102842226A
Other languages
English (en)
Other versions
CN103413069B (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 CN201310284222.6A priority Critical patent/CN103413069B/zh
Publication of CN103413069A publication Critical patent/CN103413069A/zh
Application granted granted Critical
Publication of CN103413069B publication Critical patent/CN103413069B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明涉及一种对使用面向对象语言编写的软件进行保护的方法。此方法的处理对象是被保护软件的所有工程源码。通过分析工程源码,找出适合保护的若干个类,然后将这些类的实例字段替换成读写软件保护装置的函数,并且将所有源码中对这些实例字段的读写操作都改为对这些函数的调用。经过这样处理过的源码在编译之后,对被选出来的类的所有实例字段的读写操作都变成了对软件保护装置的读写操作,很难手动实现软件脱离软件保护装置单独运行,增强了软件保护强度,并且整个保护过程可以通过一个工具软件自动实现,简化了软件保护流程。

Description

一种保护面向对象语言编写的软件的方法
技术领域
本发明涉及计算机软件保护技术领域,特别涉及一种利用软件保护装置对使用面向对象语言编写的计算机软件进行保护的方法。
 
背景技术
随着经济技术的飞速发展,软件作为辅助工具已经深入到了各行各业当中。软件产品是软件设计者和软件编程人员智慧的结晶,软件开发商的生存和发展是软件产品充足供应的基础,因而,保护软件产品的版权,防止软件产品被盗版,具有很重要的现实意义。
在软件开发商已有的保护软件产品的众多方案中,多数采用了这样一种方式:提炼出软件产品中的核心算法或密钥作为关键程序代码,将所述关键程序代码及该程序代码所需要的数据放在软件保护装置中。功能模块是软件开发商中从软件产品中提取出来的可以或者已经放在软件保护装置中的供外部调用代码、数据或者代码和数据。作为软件保护装置的功能模块,能够供外部软件调用。采用这种方式,以后当用户使用软件产品时,必须要有软件保护装置同时运行,否则将无法使用该软件产品。
这种方案的优势是,软件产品的关键代码是放在软件保护装置中的,破解者很难得到软件产品的关键程序代码,也很难克隆软件保护装置,也就很难破解该软件产品。当然所述的软件保护装置的处理芯片是一个具有一定安全认证等级的智能卡芯片才可以防止被硬克隆。正因为有这种优势,国内外越来越多的软件开发商都采用了这种方案来保护自己的软件产品。至于软件保护装置硬件产品,则是现有技术,本发明的申请人已研发了多种软件保护装置产品,具体内容参见其公司网址www.sense.com.cn,不再详细介绍其具体内容。
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。函数把执行的代码整合在一个方法中,当需要做这些动作的时候直接通过调用这个方法而达到使用的目的。 
从面向对象的角度来看,使用面向对象语言编写的计算机软件在运行时的大致流程为:首先,在内存中创建若干个对象,对象中主要包含类中的所有实例字段,然后对对象中的实例字段进行一系列读写操作,最后将其从内存中删除。
而使用软件保护装置对软件进行保护的一般做法就是在软件中加入对软件保护装置的访问代码,达到脱离软件保护装置不能运行的目的。
现有技术中,在软件中选取一段被保护的代码段,然后编写一段同样逻辑的代码放入软件保护装置内运行,并把软件中选取的被保护代码段替换成访问软件保护装置的代码。这种保护方式有以下几个缺点:一是由于软件保护装置在性能、成本等方面的限制,导致移植到软件保护装置内部的算法不能太复杂,且不能占用太多内存,这样选取软件中的被保护代码段就会变得比较困难,而如果选取的代码段逻辑过于简单则会降低软件保护强度;二是在选取代码段之后还要手动编写软件保护装置内的代码和修改软件中的代码,流程比较复杂。本发明提出一种对使用面向对象语言编写的软件进行保护的新的方法,解决了以上两个问题。 
发明内容
对于使用面向对象语言开发的软件进行保护,可以选定若干个类作为被保护对象,将这些类的实例字段替换成读写软件保护装置的函数,并将所有对这些类的字段的读写代码都替换成对上述函数的调用。
根据本发明的一个方面,提供一种通过软件保护装置保护面向对象语言编写的软件的方法,所述软件保护装置具有安全处理芯片,
步骤1:在所述软件的工程源码中选择被保护的类;
步骤2、将所述被保护的类中的实例字段替换成读写所述软件保护装置中的软件功能模块;
步骤3、搜索所述软件的工程源码,将所有对所述被保护的类的实例字段的读写代码都替换成上述步骤2中所述的读写所述软件保护装置的所述软件功能模块。
根据本发明的一个方面,在所述步骤2中,直接在所述被保护的类中将实例字段去掉并替换成所述软件功能模块。
根据本发明的一个方面,,在所述步骤2中,声明一个类作为所述被保护的类的代理类,并且在所述代理类中对应所述被保护的类的各个实例字段中分别声明用于读写所述软件保护装置的软件功能模块。
根据本发明的一个方面,在所述软件保护装置中进行创建和删除所述被保护的类的对象的操作。
根据本发明的一个方面,在创建和删除所述被保护的类的对象中加入用于在所述软件保护装置中创建和删除被保护的类的对象的代码。
根据本发明的一个方面,在创建和删除所述代理类的软件功能模块中加入用于在所述软件保护装置中创建和删除被保护的类的对象的代码。 
附图说明
图1是使用C++编写的计算机软件在运行时对某个类A进行操作的一般流程。
图2是经过以本发明提出的方法处理过的软件在运行时的流程。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
根据本发明的一个具体实施方式,具体的工作步骤如下所述:
步骤1、在被保护软件的工程源码中选择若干个类作为被保护类。根据本发明的一个实施例,将具有实例字段的类作为被保护对象;
步骤2、将被保护类的实例字段替换成读写软件保护装置中的软件功能模块或者函数。根据本发明的一个实施例,有两种替换方式:一是直接在原来类的基础上将实例字段去掉并替换成函数;二是可以另外声明一个类作为被保护类的代理类,在代理类中对应被保护类的各个实例字段分别声明一对读写软件保护装置的函数。另外,还需要一些在软件保护装置中创建和删除被保护类的对象的操作。对于上述替换方式一,就需要在构造和删除被保护类的对象时加入一段代码,用于在软件保护装置中创建和删除被保护类的对象;对于上述替换方式二,则在创建和删除代理类的函数中加入一段代码,用于在软件保护装置中创建和删除被保护类的对象;
步骤3、搜索待保护软件的整个工程源码,将所有对被保护类的实例字段的读写代码都替换成上述步骤2所述的读写软件保护装置的函数。如果在步骤2中采用替换方式二,则还需要将整个工程源码中所有创建和删除被保护类的代码替换成创建和删除代理类的代码。
图1是使用C++编写的计算机软件在运行时对某个类A进行操作的一般流程。其中Field为类A的实例字段,A()和~A()分别为类A的构造函数和析构函数。当然本领域的技术人员也可以采用其他面向对象的编程语言来进行操作,其改写方式对于本领域的技术人员而言是很容易的,因此采用C++作为实施例而言,并不构成对本发明的限制。
如图1所示,步骤101,创建类A的对象a;
步骤102,写入类A的字段Field;
其中,图1中的“XXX”仅为一种示例,用于表示类A的字符Field同一类型的常量或变量,步骤102和103中的“XXX”可以表示同一变量也可以表示不同变量。当然,对于本领域的技术人员而言,这些变量也可以用不同的符号来标记。
步骤103,读取类A的字段Field到XXX中;
步骤104,删除类A的对象a。
图2是经过以本发明提出的方法处理过的软件在运行时的流程。
其中类B作为类A的一个代理类。
如图2所示,将类A的实例字段Field改为两个函数Set_Field()和Get_Field(),这两个函数分别向软件保护装置中写入类A的字段Field和从软件保护装置中读取类A的字段Field。另外,类B的构造函数B()会在软件保护装置中创建一个类A的对象,析构函数~B()会删除软件保护装置中类A的对象。
步骤201:在计算机内存中创建类A的代理类B的对象a;
步骤201’:通过类B的构造函数在软件保护装置中创建类A的对象;
步骤202:通过类B的Set_Field()函数写入类A的字段Field;
步骤202’: 在软件保护装置中写入类A的字段Field;
步骤203:通过类B的Get_Field()函数读取类A的字段Field;
步骤203’:从软件保护装置中获取类A的字段Field;
步骤204:删除类B的对象;
步骤204’:通过类B的析构函数从软件保护装置中删除类A的对象。
实施例1
本实施例以C++编写的计算机软件为例,结合图1、2对本发明做进一步描述。具体的操作步骤包括:
1、根据图1中所示的类A创建图2所示的类B。其中,类B的构造函数B()中包括在软件保护装置中创建一个类A的对象的代码,类B的析构函数~B()会删除软件保护装置中类A的对象,类B的成员函数Set_Field()和Get_Field()分别写入软件保护装置中类A的对象的Field字段和读取软件保护装置中类A的对象的Field字段;
2、将图1所示的步骤101改为图2所示的步骤201和步骤201’。其中,步骤101的作用为在计算机内存中创建一个类A的对象a,而步骤201和201’的作用为在计算机内存中创建一个类B的对象a和通过调用B的构造函数在软件保护装置中创建一个类A的对象;
3、将图1所示的步骤102改为图2所示的步骤202和步骤202’。其中,步骤102的作用为给对象a的字段Field赋值XXX,而步骤202和步骤202’的作用为通过类B的Set_Field()函数将值XXX写入软件保护装置内类A的对象的Field字段; 
4、将图1所示的步骤103改为图2所示的步骤203和步骤203’。其中,步骤103的作用为读取对象a的字段Field的值并赋给XXX,而步骤203和步骤203’的作用为通过类B的Get_Field()函数将软件保护装置中类A的对象的Field字段的值读取出来并赋给XXX;
5、将图1所示的步骤104改为图2所示的步骤204和步骤204’。其中,步骤104的作用为从计算机内存中删除类A的对象a,而步骤204和步骤204’的作用为从计算机内存中删除类B的对象b,并通过类B的析构函数将软件保护装置中的类A的对象删除。
上述实施例1是以C++为例举出的一种具体例子,当然还可以把Java、C#等语言当做实施例。对于本领域的技术人员而言,只要根据不同语言的语法特点,按照上述实施例的方式,对代码进行类似的修改即可实现发明目的,因此无需赘述。
此外,上述流程可编写为工具软件或者特定的功能模块,自动地按照上述过程对代码进行改写,从而实现自动化的代码移植和改写,提高工作效率并保证替换的准确性。具体的工具软件或者功能模块的编写对于本领域的技术人员而言是容易做到的,在不脱离本发明的范围内,能够采用多种形式进行编写,其具体的编写形式并非本发明的改进重点,因此不再赘述。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。

Claims (6)

1. 一种通过软件保护装置保护面向对象语言编写的软件的方法,所述软件保护装置具有安全处理芯片,其特征在于,
步骤1:在所述软件的工程源码中选择被保护的类;
步骤2、将所述被保护的类中的实例字段替换成读写所述软件保护装置中的软件功能模块;
步骤3、搜索所述软件的工程源码,将所有对所述被保护的类的实例字段的读写代码都替换成上述步骤2中所述的读写所述软件保护装置的所述软件功能模块。
2. 根据权利要求1所述的方法,其特征在于,在所述步骤2中,直接在所述被保护的类中将实例字段去掉并替换成所述软件功能模块。
3. 根据权利要求1所述的方法,其特征在于,在所述步骤2中,声明一个类作为所述被保护的类的代理类,并且在所述代理类中对应所述被保护的类的各个实例字段中分别声明用于读写所述软件保护装置的软件功能模块。
4. 根据权利要求2所述的方法,其特征在于,在所述软件保护装置中进行创建和删除所述被保护的类的对象的操作。
5. 根据权利要求4所述的方法,其特征在于,在创建和删除所述被保护的类的对象中加入用于在所述软件保护装置中创建和删除被保护的类的对象的代码。
6. 根据权利要求3所述的方法,其特征在于,在创建和删除所述代理类的软件功能模块中加入用于在所述软件保护装置中创建和删除被保护的类的对象的代码。
CN201310284222.6A 2013-07-08 2013-07-08 一种保护面向对象语言编写的软件的方法 Active CN103413069B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310284222.6A CN103413069B (zh) 2013-07-08 2013-07-08 一种保护面向对象语言编写的软件的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310284222.6A CN103413069B (zh) 2013-07-08 2013-07-08 一种保护面向对象语言编写的软件的方法

Publications (2)

Publication Number Publication Date
CN103413069A true CN103413069A (zh) 2013-11-27
CN103413069B CN103413069B (zh) 2016-09-07

Family

ID=49606080

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310284222.6A Active CN103413069B (zh) 2013-07-08 2013-07-08 一种保护面向对象语言编写的软件的方法

Country Status (1)

Country Link
CN (1) CN103413069B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103955635A (zh) * 2014-04-04 2014-07-30 北京深思数盾科技有限公司 一种对.net可执行程序进行保护的方法和系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087958A1 (en) * 2000-04-20 2002-07-04 International Business Machines Corporation Method and apparatus of transforming a class
CN101706859A (zh) * 2009-10-20 2010-05-12 北京龙芯中科技术服务中心有限公司 一种源代码保护的装置及方法
CN101872404A (zh) * 2009-04-21 2010-10-27 普天信息技术研究院有限公司 一种保护Java软件程序的方法
CN102081546A (zh) * 2009-11-30 2011-06-01 国际商业机器公司 通过分隔额外信息来内存优化虚拟机代码的方法和系统
CN102736905A (zh) * 2011-04-12 2012-10-17 深圳市金蝶中间件有限公司 一种动态替换类中字段的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087958A1 (en) * 2000-04-20 2002-07-04 International Business Machines Corporation Method and apparatus of transforming a class
CN101872404A (zh) * 2009-04-21 2010-10-27 普天信息技术研究院有限公司 一种保护Java软件程序的方法
CN101706859A (zh) * 2009-10-20 2010-05-12 北京龙芯中科技术服务中心有限公司 一种源代码保护的装置及方法
CN102081546A (zh) * 2009-11-30 2011-06-01 国际商业机器公司 通过分隔额外信息来内存优化虚拟机代码的方法和系统
CN102736905A (zh) * 2011-04-12 2012-10-17 深圳市金蝶中间件有限公司 一种动态替换类中字段的方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103955635A (zh) * 2014-04-04 2014-07-30 北京深思数盾科技有限公司 一种对.net可执行程序进行保护的方法和系统
CN103955635B (zh) * 2014-04-04 2017-02-15 北京深思数盾科技股份有限公司 一种对.net可执行程序进行保护的方法和系统

Also Published As

Publication number Publication date
CN103413069B (zh) 2016-09-07

Similar Documents

Publication Publication Date Title
Keller et al. Design components: Towards software composition at the design level
CN105683990B (zh) 用于保护动态库的方法和装置
CN105204393B (zh) 基于虚核单片机的单片机生产研发工具及其实现方法
CN106970820A (zh) 代码存储方法及代码存储装置
CN107077337A (zh) 用于执行根据两个指令集架构编译的应用编码的系统和方法
CN103975336B (zh) 对动态语言值中的安全性标签进行编码的方法和计算装置
CN101821714A (zh) 复用运行应用中的组件
CN108399318A (zh) 可执行文件的生成方法、执行方法及电子设备
CN101158911A (zh) .Net程序保护方法及装置
CN104462990A (zh) 字符串加解密方法和装置
CN106415495A (zh) 用于应用开发的编程系统和语言
CN105046116A (zh) Android系统中保护dex文件不被反编译的方法
CN106250104A (zh) 一种针对服务器的远程操作系统、方法及装置
CN107667376A (zh) 用于数据监测以减轻面向对象情境中的传递性问题的技术
CN107204848A (zh) 一种管理秘钥数据的方法及管理密钥数据的装置
CN108304727A (zh) 数据处理的方法与装置
CN107844519A (zh) 电子装置、数据库查询脚本生成方法及存储介质
CN106528115A (zh) 界面的可视化开发方法及装置
CN103413069A (zh) 一种保护面向对象语言编写的软件的方法
CN104321774A (zh) 用于防逆向工程和/或篡改程序的方法、系统以及设备
CN104156209B (zh) 跨平台应用界面建模方法及装置
CN106055935A (zh) 一种进程控制方法、装置及电子设备
CN109271596A (zh) 一种基于教育云平台的缓存数据的方法及电子设备
CN103593186B (zh) 一种操作注册表的方法及装置
JP4669934B2 (ja) プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

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

Applicant after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

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

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

COR Change of bibliographic data
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP02 Change in the address of a patent holder

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