CN103902857A - 一种软件程序的保护方法和装置 - Google Patents
一种软件程序的保护方法和装置 Download PDFInfo
- Publication number
- CN103902857A CN103902857A CN201210572410.4A CN201210572410A CN103902857A CN 103902857 A CN103902857 A CN 103902857A CN 201210572410 A CN201210572410 A CN 201210572410A CN 103902857 A CN103902857 A CN 103902857A
- Authority
- CN
- China
- Prior art keywords
- class
- name
- class name
- category information
- manes
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 181
- 241000282414 Homo sapiens Species 0.000 claims description 144
- 230000008676 import Effects 0.000 claims description 23
- 230000001681 protective effect Effects 0.000 claims description 6
- 238000004891 communication Methods 0.000 abstract description 2
- 238000005336 cracking Methods 0.000 abstract 2
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 238000012163 sequencing technique Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 238000004321 preservation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
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)
- Stored Programmes (AREA)
Abstract
本发明公开了一种软件程序的保护方法和装置,属于网络通信领域。方法包括:获取软件程序的资源文件和代码文件;解析所述代码文件中的类信息;所述类信息包括类名和类方法名;解析所述资源文件中与所述代码文件绑定的类信息,得到所述资源类集合;查询所述代码文件中解析的每个类信息,当查询的类信息不在所述资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换所述类信息。本发明解决了IOS/MacOSX程序编译后的文件包含大量的类信息进而为破解者逆向破解程序提供了导向的问题,大大加大了破解难度,保护了程序的安全。
Description
技术领域
本发明涉及网络通信领域,特别涉及一种软件程序的保护方法和装置。
背景技术
随着苹果公司推出的各种终端设备的不断增长,基于iOS(iphone OperatingSystem,苹果公司开发的移动设备操作系统)平台和MacOSX(苹果公司开发的个人电脑的操作系统)平台开发的软件程序也越来越多。
由于IOS/MacOSX程序所使用的Objective-C面向对象的特点,使得IOS/MacOSX程序编译后的最终二进制文件包含大量的类信息,而这些类信息中的类名和类方法名为破解者逆向破解程序提供了很大的帮助,对于保护程序的实现原理非常不利。
参见图1,IOS上的QQ2012,通过反汇编器IDA(Interactive Disassembler,反汇编器)解析能看到原始的类名和方法名,如图1中“App Setting”指示该类为应用软件选项设置相关的类,这就指示破解者这是一个“App选项设置”相关的类;图1中的“setSharelLocation”指示该类方法名是“设置分享位置”、“save App Setting”指示该类方法名是“保存设置项”,这就为破解者指示了每段程序代码的用途,为破解者提供了方向,对于保护程序安全非常不利。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种功能软件程序的保护方法和装置。所述技术方案如下:
一方面,提供了一种软件程序的保护方法,所述方法包括:
获取软件程序的资源文件和代码文件;
解析所述代码文件中的类信息;所述类信息包括类名和类方法名;
解析所述资源文件中与所述代码文件绑定的类信息,得到所述资源类集合;
查询所述代码文件中解析的每个类信息,当查询的类信息不在所述资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换所述类信息。
具体地,所述当所述类信息为类名时,所述方法包括:
解析所述资源文件中与Objective C指针或其他扩展类指针绑定的资源类名,得到资源类名集合;
解析所述代码文件中包含字符串的节,得到字符串类名集合;
查询所述代码文件中解析的每个类名,当查询的类名不在所述资源类名集合中和所述字符串类名集合中、且所述类名不在用户预设的类名白名单中以及所述类名不是代理类名时,随机生成类名字符替换所述类名。
进一步地,所述随机生成类名字符替换所述类名之后,还包括:
保存所述无意义的类名字符以及对应的被替换的类名;
查询所述软件程序的代码文件中的每个类的成员变量和属性;
当所述成员变量或所述属性的类型对应的类名为所述被替换的类名时,将所述成员变量或所述属性的类型对应的类名修改为所述类名字符。
具体地,所述当所述类信息为类方法名时,所述方法包括:
解析所述资源文件中与Objective C指针或其他扩展类指针绑定的资源类方法名,得到所述资源类方法名集合;
获取所述代码文件中的导入表,查找所述导入表所导入的类名和其他导入库,解析所述导入的类名和所述其他导入库对应的类方法名,得到导入类方法名集合;
解析所述代码文件中的每个类,查找类符合的所有协议Protocol,得到所有Protocol要求实现的类方法名集合,得到协议类方法名集合;
解析所述代码文件中的每个类的成员变量,得到成员变量名集合;
查询所述代码文件中的每个类的类方法名,当解析的类方法名不在所述资源类方法名集合中、所述导入类方法名集合中、所述协议类方法名集合中、所述成员变量名集合中和用户预设的类方法名白名单中时,随机生成类方法名字符替换所述类方法名。
另一方面,提供了一种软件程序的保护装置,所述装置包括:
获取模块,用于获取软件程序的资源文件和代码文件;
第一解析模块,用于解析所述代码文件中的类信息;所述类信息包括类名和类方法名;
第二解析模块,用于解析所述资源文件中与所述代码文件绑定的类信息,得到所述资源类集合;
替换模块,用于查询所述代码文件中解析的每个类信息,当查询的类信息不在所述资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换所述类信息。
具体地,当所述第一解析模块解析的所述类信息为类名时,
所述第一解析模块,包括:第一解析单元,用于当所述第一解析模块解析的所述类信息为类名时,解析所述代码文件中包含字符串的节,得到字符串类名集合;
相应地,所述第二解析模块,包括:第二解析单元,用于当解析的所述类信息为类名时,解析所述资源文件中与Objective C指针或其他扩展类指针绑定的资源类名,得到资源类名集合;
相应地,所述替换模块,包括:类名替换单元,用于当所述第一解析模块解析的所述类信息为类名时,查询所述代码文件中解析的每个类名,当查询的类名不在所述资源类名集合中和所述字符串类名集合中、且所述类名不在用户预设的类名白名单中以及所述类名不是代理类名时,随机生成类名字符替换所述类名。
进一步地,所述替换模块,还包括:
变量替换单元,用于随机生成类名字符替换所述类名之后,保存所述无意义的类名字符以及对应的被替换的类名;查询所述代码文件中的每个类的成员变量和属性;当所述成员变量或所述属性的类型对应的类名为所述被替换的类名时,将所述成员变量或所述属性的类型对应的类名修改为所述类名字符。
具体地,所述当所述类信息为类方法名时,
所述第一解析模块,包括:第三解析单元,用于获取所述代码文件中的导入表,查找所述导入表所导入的类名和其他导入库,解析所述导入的类名和所述其他导入库对应的类方法名,得到导入类方法名集合;
第四解析单元,用于解析所述代码文件中的每个类,查找类符合的所有协议Protocol,得到所有Protocol要求实现的类方法名集合,得到协议类方法名集合;
第五解析单元,用于解析所述代码文件中的每个类的成员变量,得到成员变量名集合;
相应地,所述第二解析模块,包括:第六解析单元,用于解析所述资源文件中与Objective C指针或其他扩展类指针绑定的资源类方法名,得到所述资源类方法名集合;
相应地,所述替换模块,包括:类方法名替换单元,用于查询所述代码文件中的每个类的类方法名,当解析的类方法名不在所述资源类方法名集合中、所述导入类方法名集合中、所述协议类方法名集合中、所述成员变量名集合中和用户预设的类方法名白名单中时,随机生成类方法名字符替换所述类方法名。
本发明实施例提供的技术方案带来的有益效果是:
通过获取软件程序的资源文件和代码文件,并解析代码文件中的类信息以及资源文件中与代码文件绑定的类信息得到资源类集合,查询代码文件中解析的每个类信息,当查询的类信息不在资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换类信息,解决了IOS/MacOSX程序编译后的文件包含大量的类信息进而为破解者逆向破解程序提供了导向的问题,大大加大了破解难度,保护了程序的安全。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术提供的软件程序反汇编解析后的示意图;
图2是本发明实施例一提供的软件程序的保护方法流程图;
图3是本发明实施例二提供的软件程序的保护方法流程图;
图4是本发明实施例二提供的软件程序经过替换保护后的示意图;
图5是本发明实施例三提供的软件程序的保护装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
参见图2,本发明实施例提供了一种软件程序的保护方法,该方法包括:
101、获取软件程序的资源文件和代码文件;其中,该软件程序为基于苹果公司开发的系统平台的面向对象的Objective C程序;
102、解析代码文件中的类信息;类信息包括类名和类方法名;
103、解析资源文件中与代码文件绑定的类信息,得到资源类集合;
104、查询代码文件中解析的每个类信息,当查询的类信息不在资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换类信息。
具体地,当类信息为类名时,该方法包括:
解析资源文件中与Objective C指针或其他扩展类指针绑定的资源类名,得到资源类名集合;
解析代码文件中包含字符串的节,得到字符串类名集合;
查询代码文件中解析的每个类名,当查询的类名不在资源类名集合中和字符串类名集合中、且类名不在用户预设的类名白名单中以及类名不是代理类名时,随机生成类名字符替换类名。
进一步地,随机生成类名字符替换类名之后,还包括:
保存无意义的类名字符以及对应的被替换的类名;
查询软件程序的代码文件中的每个类的成员变量和属性;
当成员变量或属性的类型对应的类名为被替换的类名时,将成员变量或属性的类型对应的类名修改为类名字符。
具体地,当类信息为类方法名时,该方法包括:
解析资源文件中与Objective C指针或其他扩展类指针绑定的资源类方法名,得到资源类方法名集合;
获取代码文件中的导入表,查找导入表所导入的类名和其他导入库,解析导入的类名和其他导入库对应的类方法名,得到导入类方法名集合;
解析代码文件中的每个类,查找类符合的所有协议Protocol,得到所有Protocol要求实现的类方法名集合,得到协议类方法名集合;
解析代码文件中的每个类的成员变量,得到成员变量名集合;
查询代码文件中的每个类的类方法名,当解析的类方法名不在资源类方法名集合中、导入类方法名集合中、协议类方法名集合中、成员变量名集合中和用户预设的类方法名白名单中时,随机生成类方法名字符替换类方法名。
本发明实施例提供的方法,通过获取软件程序的资源文件和代码文件,并解析代码文件中的类信息以及资源文件中与代码文件绑定的类信息得到资源类集合,查询代码文件中解析的每个类信息,当查询的类信息不在资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换类信息,解决了IOS/MacOSX程序编译后的文件包含大量的类信息进而为破解者逆向破解程序提供了导向的问题,大大加大了破解难度,保护了程序的安全。
实施例二
参见图3,本发明实施例提供了一种软件程序的保护方法,该方法包括:
201、获取软件程序的资源文件中的资源类名集合;
具体地,该软件程序为为基于苹果公司开发的系统平台如苹果公司开发的移动设备操作系统IOS或苹果公司开发的个人电脑的操作系统MacOSX的面向对象的Objective C程序;
其中,每个iOS/MacOSX程序由代码和资源组成,其中代码包含在Mach-O格式的二进制文件中;Mach-O格式由段和节组成,有部分节Objective-C运行时相关,如_DATA,_objc_classlist节包含所有Objective-C类的指针,_DATA,_objc_catlist节包含所有扩展其它类的类别的指针,通过解析这些节,能得到所有类信息,包括类名、类方法名、类成员变量名等。
具体地,首先读取软件程序的资源文件,即读入iOS/MacOSX程序对应的Nib文件;然后解析资源文件中与Objective C指针或其他扩展类指针绑定的资源类名,得到资源类名集合。
202、获取软件程序的代码文件中的字符串类名集合;
具体地,首先获取软件程序的代码文件,即读入iOS/MacOSX程序对应的Mach-O格式的代码文件;然后解析代码文件中包含字符串的节,得到字符串类名集合;即解析代码文件得到_cfstring节包含的字符串类名集合。
需要说明的是,步骤201和步骤202的先后顺序可以更改,即也可以先执行步骤202,再执行步骤201。
203、查询软件程序的代码文件中的所有类名,当查询的类名不在资源类名集合中和字符串类名集合中、且该类名不在用户预设的类名白名单中以及类名不是代理类名时,随机生成类名字符替换类名。
具体地,遍历代码文件的所有类(在_objc_classlist节中),查询到类对应的类名部分;如果类名满足以下条件,则跳过;否则随机生成一个无意义的类名字符替换原来的类名:
a、类名在资源类名集合中
b、类名在字符串类名集合中
c、类名是代理类名,即以AppDelegate结尾的类名
d、类名在用户预设的类名白名单中
其中,随机生成类名字符替换类名之后,还需要保存无意义的类名字符以及对应的被替换的类名。
204、查询软件程序的代码文件中的每个类的成员变量和属性,当成员变量或属性的类型对应的类名为被替换的类名时,将成员变量或属性的类型对应的类名修改为类名字符。
具体地,遍历查询代码文件的所有类,解析每个类的成员变量(ivars)和属性(properties),如果变量或属性的类名包含步骤203中被修改的类名,则根据步骤203中保存的无意义的类名字符以及对应的被替换的类名,将变量或属性对应的类名中包含的类名也相应的修改。
需要说明的是,通过步骤201-204已完成对类信息中的类名的修改,参见图4,“App Setting”指示的应用软件选项设置的类,替换为随机生成类名字符“are6”。下面再继续对类信息中的类方法名修改,以保证程序的安全;当然也可以在修改类名的同时修改类方法名,即修改类名和类方法名同时进行,本发明实施例对于修改类名和类方法名的步骤不做限制。
205、获取软件程序的资源文件中的资源类方法名集合;软件程序为基于苹果公司开发的系统平台的面向对象的Objective C程序;
具体地,解析步骤201中获取的资源文件中与Objective C指针或其他扩展类指针绑定的资源类方法名,得到资源类方法名集合;即读入iOS/MacOSX程序对应的Nib文件,解析得到绑定的方法名集合。
206、获取软件程序的代码文件中的导入类方法名集合;
具体地,解析步骤202中获取的代码文件中的导入表,查找导入表中导入的类名和其他导入库,解析导入的类名和其他导入库对应的类方法名,得到导入类方法名集合。
207、获取软件程序的代码文件中的协议类方法名集合;
具体地,获取代码文件中的所有的类,查找类符合的所有协议Protocol,得到所有Protocol要求实现的类方法名集合,得到协议类方法名集合;即遍历A文件的所有类(在_objc_classlist节中),解析得到所有Protocol结构,再解析得到所有Protocol要求实现的协议类方法名集合。
上述步骤205-207本发明实施例不限制执行先后顺序,可以根据情况调整先后顺序。
208、查询代码文件中的每个类的成员变量,得到成员变量名集合;
具体地,由于步骤205-207得到的资源类方法名集合、导入类方法名集合、协议类方法名集合针对整个程序文件是不变的,而针对每个类的成员变量方法名是不同的,所以每查询一个类的成员变量,得到一个对应类的成员变量名集合。
209、解析代码文件中的每个类的类方法名,当解析的类方法名不在资源类方法名集合中、导入类方法名集合中、协议类方法名集合中、成员变量名集合中和用户预设的类方法名白名单中时,随机生成类方法名字符替换类方法名。
具体地,查询解析每个类的类方法名,如果类方法名满足以下条件,则跳过;否则随机生成一个无意义的类方法名字符替换原来的类方法名:
a’、类方法名在资源类方法名集合中
b’、类方法名在导入类方法名集合中
c’、类方法名在协议类方法名集合中
d’、类方法名在成员变量名集合中
e’、类方法名在用户预设的类方法名白名单中
经过上述步骤205-209,即实现了对类信息中的类方法名的修改,保证了程序的进一步安全。参见图4,如图4中的“setSharelLocation”指示“保存设置项”类方法名替换为随机生成无意义的类方法名字符“qt1”,这就混淆了每段程序代码的用途,保护了程序的安全。
本发明实施例提供的方法,通过获取软件程序的资源文件和代码文件,并解析代码文件中的类信息以及资源文件中与代码文件绑定的类信息得到资源类集合,查询代码文件中解析的每个类信息,当查询的类信息不在资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换类信息,解决了IOS/MacOSX程序编译后的文件包含大量的类信息进而为破解者逆向破解程序提供了导向的问题,大大加大了破解难度,保护了程序的安全。
实施例三
参见图5,本发明实施例提供了一种软件程序的保护装置,该装置包括:
获取模块301,用于获取软件程序的资源文件和代码文件;其中,该软件程序为基于苹果公司开发的系统平台的面向对象的Objective C程序;
第一解析模块302,用于解析代码文件中的类信息;类信息包括类名和类方法名;
第二解析模块303,用于解析资源文件中与代码文件绑定的类信息,得到资源类集合;
替换模块304,用于查询代码文件中解析的每个类信息,当查询的类信息不在资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换类信息。
具体地,当第一解析模块302解析的类信息为类名时,
第一解析模块302,包括:第一解析单元,用于当第一解析模块解析的类信息为类名时,解析代码文件中包含字符串的节,得到字符串类名集合;
相应地,第二解析模块303,包括:第二解析单元,用于当解析的类信息为类名时,解析资源文件中与Objective C指针或其他扩展类指针绑定的资源类名,得到资源类名集合;
相应地,替换模块304,包括:类名替换单元,用于当第一解析模块解析的类信息为类名时,查询代码文件中解析的每个类名,当查询的类名不在资源类名集合中和字符串类名集合中、且类名不在用户预设的类名白名单中以及类名不是代理类名时,随机生成类名字符替换类名。
进一步地,替换模块304,还包括:
变量替换单元,用于随机生成类名字符替换类名之后,保存无意义的类名字符以及对应的被替换的类名;查询代码文件中的每个类的成员变量和属性;当成员变量或属性的类型对应的类名为被替换的类名时,将成员变量或属性的类型对应的类名修改为类名字符。
具体地,当类信息为类方法名时,
第一解析模块302,包括:第三解析单元,用于获取代码文件中的导入表,查找导入表所导入的类名和其他导入库,解析导入的类名和其他导入库对应的类方法名,得到导入类方法名集合;
第四解析单元,用于解析代码文件中的每个类,查找类符合的所有协议Protocol,得到所有Protocol要求实现的类方法名集合,得到协议类方法名集合;
第五解析单元,用于解析代码文件中的每个类的成员变量,得到成员变量名集合;
相应地,第二解析模块303,包括:第六解析单元,用于解析资源文件中与Objective C指针或其他扩展类指针绑定的资源类方法名,得到资源类方法名集合;
相应地,替换模块304,包括:类方法名替换单元,用于查询代码文件中的每个类的类方法名,当解析的类方法名不在资源类方法名集合中、导入类方法名集合中、协议类方法名集合中、成员变量名集合中和用户预设的类方法名白名单中时,随机生成类方法名字符替换类方法名。
本发明实施例提供的装置,通过获取软件程序的资源文件和代码文件,并解析代码文件中的类信息以及资源文件中与代码文件绑定的类信息得到资源类集合,查询代码文件中解析的每个类信息,当查询的类信息不在资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换类信息,解决了IOS/MacOSX程序编译后的文件包含大量的类信息进而为破解者逆向破解程序提供了导向的问题,大大加大了破解难度,保护了程序的安全。
需要说明的是:上述实施例提供的软件程序的保护装置在保护软件程序时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的软件程序的保护装置与软件程序的保护方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种软件程序的保护方法,其特征在于,所述方法包括:
获取软件程序的资源文件和代码文件;
解析所述代码文件中的类信息;所述类信息包括类名和类方法名;
解析所述资源文件中与所述代码文件绑定的类信息,得到所述资源类集合;
查询所述代码文件中解析的每个类信息,当查询的类信息不在所述资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换所述类信息。
2.根据权利要求1所述的方法,其特征在于,所述当所述类信息为类名时,所述方法包括:
解析所述资源文件中与Objective C指针或其他扩展类指针绑定的资源类名,得到资源类名集合;
解析所述代码文件中包含字符串的节,得到字符串类名集合;
查询所述代码文件中解析的每个类名,当查询的类名不在所述资源类名集合中和所述字符串类名集合中、且所述类名不在用户预设的类名白名单中以及所述类名不是代理类名时,随机生成类名字符替换所述类名。
3.根据权利要求2所述的方法,其特征在于,所述随机生成类名字符替换所述类名之后,还包括:
保存所述类名字符以及对应的被替换的类名;
查询所述软件程序的代码文件中的每个类的成员变量和属性;
当所述成员变量或所述属性的类型对应的类名为所述被替换的类名时,将所述成员变量或所述属性的类型对应的类名修改为所述类名字符。
4.根据权利要求1所述的方法,其特征在于,所述当所述类信息为类方法名时,所述方法包括:
解析所述资源文件中与Objective C指针或其他扩展类指针绑定的资源类方法名,得到所述资源类方法名集合;
获取所述代码文件中的导入表,查找所述导入表所导入的类名和其他导入库,解析所述导入的类名和所述其他导入库对应的类方法名,得到导入类方法名集合;
解析所述代码文件中的每个类,查找类符合的所有协议Protocol,得到所有Protocol要求实现的类方法名集合,得到协议类方法名集合;
解析所述代码文件中的每个类的成员变量,得到成员变量名集合;
查询所述代码文件中的每个类的类方法名,当解析的类方法名不在所述资源类方法名集合中、所述导入类方法名集合中、所述协议类方法名集合中、所述成员变量名集合中和用户预设的类方法名白名单中时,随机生成类方法名字符替换所述类方法名。
5.一种软件程序的保护装置,其特征在于,所述装置包括:
获取模块,用于获取软件程序的资源文件和代码文件;所述软件程序为基于苹果公司开发的系统平台的面向对象的Objective C程序;
第一解析模块,用于解析所述代码文件中的类信息;所述类信息包括类名和类方法名;
第二解析模块,用于解析所述资源文件中与所述代码文件绑定的类信息,得到所述资源类集合;
替换模块,用于查询所述代码文件中解析的每个类信息,当查询的类信息不在所述资源类集合中且不在用户预设的类信息白名单中时,随机生成类信息字符替换所述类信息。
6.根据权利要求5所述的装置,其特征在于,当所述第一解析模块解析的所述类信息为类名时,
所述第一解析模块,包括:第一解析单元,用于当所述第一解析模块解析的所述类信息为类名时,解析所述代码文件中包含字符串的节,得到字符串类名集合;
相应地,所述第二解析模块,包括:第二解析单元,用于当解析的所述类信息为类名时,解析所述资源文件中与Objective C指针或其他扩展类指针绑定的资源类名,得到资源类名集合;
相应地,所述替换模块,包括:类名替换单元,用于当所述第一解析模块解析的所述类信息为类名时,查询所述代码文件中解析的每个类名,当查询的类名不在所述资源类名集合中和所述字符串类名集合中、且所述类名不在用户预设的类名白名单中以及所述类名不是代理类名时,随机生成类名字符替换所述类名。
7.根据权利要求6所述的装置,其特征在于,所述替换模块,还包括:
变量替换单元,用于随机生成类名字符替换所述类名之后,保存所述无意义的类名字符以及对应的被替换的类名;查询所述代码文件中的每个类的成员变量和属性;当所述成员变量或所述属性的类型对应的类名为所述被替换的类名时,将所述成员变量或所述属性的类型对应的类名修改为所述类名字符。
8.根据权利要求5所述的装置,其特征在于,所述当所述类信息为类方法名时,
所述第一解析模块,包括:第三解析单元,用于获取所述代码文件中的导入表,查找所述导入表所导入的类名和其他导入库,解析所述导入的类名和所述其他导入库对应的类方法名,得到导入类方法名集合;
第四解析单元,用于解析所述代码文件中的每个类,查找类符合的所有协议Protocol,得到所有Protocol要求实现的类方法名集合,得到协议类方法名集合;
第五解析单元,用于解析所述代码文件中的每个类的成员变量,得到成员变量名集合;
相应地,所述第二解析模块,包括:第六解析单元,用于解析所述资源文件中与Objective C指针或其他扩展类指针绑定的资源类方法名,得到所述资源类方法名集合;
相应地,所述替换模块,包括:类方法名替换单元,用于查询所述代码文件中的每个类的类方法名,当解析的类方法名不在所述资源类方法名集合中、所述导入类方法名集合中、所述协议类方法名集合中、所述成员变量名集合中和用户预设的类方法名白名单中时,随机生成类方法名字符替换所述类方法名。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210572410.4A CN103902857B (zh) | 2012-12-25 | 2012-12-25 | 一种软件程序的保护方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210572410.4A CN103902857B (zh) | 2012-12-25 | 2012-12-25 | 一种软件程序的保护方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902857A true CN103902857A (zh) | 2014-07-02 |
CN103902857B CN103902857B (zh) | 2017-11-14 |
Family
ID=50994174
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210572410.4A Active CN103902857B (zh) | 2012-12-25 | 2012-12-25 | 一种软件程序的保护方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103902857B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107967415A (zh) * | 2017-12-11 | 2018-04-27 | 北京奇虎科技有限公司 | 资源混淆保护方法、系统及终端装置 |
CN108376072A (zh) * | 2016-11-14 | 2018-08-07 | 平安科技(深圳)有限公司 | 类名更改方法和装置 |
CN108416194A (zh) * | 2018-03-08 | 2018-08-17 | 北京顶象技术有限公司 | 符号混淆方法及装置 |
CN108446541A (zh) * | 2018-02-12 | 2018-08-24 | 北京梆梆安全科技有限公司 | 基于有限状态机和符号执行的源代码加固方法及装置 |
CN108537012A (zh) * | 2018-02-12 | 2018-09-14 | 北京梆梆安全科技有限公司 | 基于变量和代码执行顺序的源代码混淆方法及装置 |
CN109450906A (zh) * | 2018-11-20 | 2019-03-08 | 杭州安恒信息技术股份有限公司 | 基于动态字符集混淆数据的方法和装置 |
CN109657458A (zh) * | 2017-10-10 | 2019-04-19 | 武汉斗鱼网络科技有限公司 | Ios中保护钥匙串数据的方法、存储介质、设备及系统 |
CN109710305A (zh) * | 2018-11-27 | 2019-05-03 | 平安科技(深圳)有限公司 | 一种开发信息的获取方法、装置、存储介质及终端设备 |
CN109918083A (zh) * | 2019-03-07 | 2019-06-21 | 北京智游网安科技有限公司 | 一种基于应用编程的安全处理方法、智能终端及存储介质 |
CN111177662A (zh) * | 2019-12-06 | 2020-05-19 | 浙江中控技术股份有限公司 | 一种应用混淆方法、装置、服务器及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090077383A1 (en) * | 2007-08-06 | 2009-03-19 | De Monseignat Bernard | System and method for authentication, data transfer, and protection against phishing |
CN102760219A (zh) * | 2011-12-20 | 2012-10-31 | 北京安天电子设备有限公司 | 一种Android平台软件保护系统、方法及设备 |
-
2012
- 2012-12-25 CN CN201210572410.4A patent/CN103902857B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090077383A1 (en) * | 2007-08-06 | 2009-03-19 | De Monseignat Bernard | System and method for authentication, data transfer, and protection against phishing |
CN102760219A (zh) * | 2011-12-20 | 2012-10-31 | 北京安天电子设备有限公司 | 一种Android平台软件保护系统、方法及设备 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108376072A (zh) * | 2016-11-14 | 2018-08-07 | 平安科技(深圳)有限公司 | 类名更改方法和装置 |
CN109657458A (zh) * | 2017-10-10 | 2019-04-19 | 武汉斗鱼网络科技有限公司 | Ios中保护钥匙串数据的方法、存储介质、设备及系统 |
CN109657458B (zh) * | 2017-10-10 | 2021-01-01 | 武汉斗鱼网络科技有限公司 | Ios中保护钥匙串数据的方法、存储介质、设备及系统 |
CN107967415B (zh) * | 2017-12-11 | 2021-09-17 | 北京奇虎科技有限公司 | 资源混淆保护方法、系统及终端装置 |
CN107967415A (zh) * | 2017-12-11 | 2018-04-27 | 北京奇虎科技有限公司 | 资源混淆保护方法、系统及终端装置 |
CN108446541A (zh) * | 2018-02-12 | 2018-08-24 | 北京梆梆安全科技有限公司 | 基于有限状态机和符号执行的源代码加固方法及装置 |
CN108537012A (zh) * | 2018-02-12 | 2018-09-14 | 北京梆梆安全科技有限公司 | 基于变量和代码执行顺序的源代码混淆方法及装置 |
CN108446541B (zh) * | 2018-02-12 | 2021-10-29 | 北京梆梆安全科技有限公司 | 基于有限状态机和符号执行的源代码加固方法及装置 |
CN108416194B (zh) * | 2018-03-08 | 2020-10-23 | 北京顶象技术有限公司 | 符号混淆方法及装置 |
CN108416194A (zh) * | 2018-03-08 | 2018-08-17 | 北京顶象技术有限公司 | 符号混淆方法及装置 |
CN109450906A (zh) * | 2018-11-20 | 2019-03-08 | 杭州安恒信息技术股份有限公司 | 基于动态字符集混淆数据的方法和装置 |
CN109710305A (zh) * | 2018-11-27 | 2019-05-03 | 平安科技(深圳)有限公司 | 一种开发信息的获取方法、装置、存储介质及终端设备 |
CN109918083A (zh) * | 2019-03-07 | 2019-06-21 | 北京智游网安科技有限公司 | 一种基于应用编程的安全处理方法、智能终端及存储介质 |
CN111177662A (zh) * | 2019-12-06 | 2020-05-19 | 浙江中控技术股份有限公司 | 一种应用混淆方法、装置、服务器及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103902857B (zh) | 2017-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103902857A (zh) | 一种软件程序的保护方法和装置 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN104346146B (zh) | 一种跨平台转换应用代码的方法及装置 | |
CN104657140B (zh) | 代码生成方法及装置 | |
CN102207873B (zh) | 基于安卓平台的JavaScript扩展对象实现方法及绑定接口结构 | |
CN103902653A (zh) | 一种构建数据仓库表血缘关系图的方法和装置 | |
CN108390773A (zh) | 一种用于脚手架的动态路由的方法及设备 | |
CN107918666A (zh) | 一种区块链上的数据同步方法和系统 | |
CN106843842B (zh) | 一种应用程序配置文件的更新方法及装置 | |
CN106970820A (zh) | 代码存储方法及代码存储装置 | |
CN102750365A (zh) | 即时语音消息的检索方法和系统,以及用户设备和服务器 | |
CN105760184A (zh) | 一种加载组件的方法和装置 | |
CN108121565B (zh) | 生成指令集编码的方法、装置和系统 | |
CN103944944A (zh) | 分享网页链接的方法、电子设备及系统 | |
CN108197440A (zh) | 一种代码混淆方法、设备及计算机可读存储介质 | |
Thomas et al. | Programming Ruby 1.9 & 2.0: the pragmatic programmers' guide | |
CN103927164A (zh) | 一种脚本混淆方法及系统 | |
CN106055375A (zh) | 应用程序安装方法及装置 | |
CN105468661A (zh) | 一种查找elf文件中符号信息的方法及系统 | |
CN105677805A (zh) | 一种利用protobuf的数据存储、读取方法及装置 | |
CN105511935A (zh) | 资源索引值的获取方法及装置 | |
CN103379145B (zh) | 信息处理的方法、设备和系统 | |
CN103034734A (zh) | 文件存储查询代理以及信息查找方法与系统 | |
CN102779045A (zh) | 一种界面生成方法、界面编辑器及电子设备 | |
CN101546272A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |