CN115238249A - 应用程序代码混淆方法、装置、设备和介质 - Google Patents

应用程序代码混淆方法、装置、设备和介质 Download PDF

Info

Publication number
CN115238249A
CN115238249A CN202210958093.3A CN202210958093A CN115238249A CN 115238249 A CN115238249 A CN 115238249A CN 202210958093 A CN202210958093 A CN 202210958093A CN 115238249 A CN115238249 A CN 115238249A
Authority
CN
China
Prior art keywords
array
replaced
character strings
character
encrypted
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
CN202210958093.3A
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.)
Industrial and Commercial Bank of China Ltd ICBC
ICBC Technology Co Ltd
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
ICBC 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 Industrial and Commercial Bank of China Ltd ICBC, ICBC Technology Co Ltd filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202210958093.3A priority Critical patent/CN115238249A/zh
Publication of CN115238249A publication Critical patent/CN115238249A/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/14Protecting 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)
  • Storage Device Security (AREA)

Abstract

本公开提供了一种应用于IOS系统的应用程序代码混淆方法,可以应用于信息安全技术领域。该方法包括:在应用程序的头文件和源文件中查找带有第一预设标记字符的字符串,得到待替换单词数组;针对所述待替换单词数组中的每个字符串,生成大于1小于或等于n的随机整数R;从预设的字典数组中随机选择R个字符串进行拼接,得到加密字符串,从而生成混淆字符串数组,其中,所述混淆字符串数组与所述待替换单词数组中的字符串一一对应,且互不相同;以及将所述应用程序的代码中包含的所述待替换单词数组中的字符串,均替换为所述混淆字符串数组中对应的加密字符串。本公开还提供了一种应用于IOS系统的应用程序代码混淆装置、设备、存储介质和程序产品。

Description

应用程序代码混淆方法、装置、设备和介质
技术领域
本公开涉及信息安全领域,更具体地涉及一种应用于IOS系统的应用程序代码混淆方法、装置、设备、介质和程序产品。
背景技术
IOS系统,是苹果公司出品的苹果手机上运行的操作系统。IOS系统的应用程序的开发者,可以将工程源代码进行编译、链接、打包之后分发到应用商店。攻击者从商店下载了应用安装包之后可能会对其进行反编译,这样就有可能获取到应用程序的一些核心的代码逻辑,一旦核心代码逻辑如果泄露,攻击者就可以利用代码中的漏洞进行攻击。因此,在应用程序分发到应用商店之前的开发阶段,就需要想办法降低甚至避免攻击者通过反编译获得应用程序的核心代码的可能性。
发明内容
鉴于上述问题,本公开提供了一种应用于IOS系统的应用程序代码混淆方法、装置、设备、介质和程序产品,可以降低应用程序发布后被攻击者通过反编译拿到代码逻辑和/或关键静态数据的风险。
本公开实施例的第一方面,提供了一种应用于IOS系统的应用程序代码混淆方法。所述方法包括:在应用程序的头文件和源文件中查找带有第一预设标记字符的字符串,得到待替换单词数组;生成与所述待替换单词数组中的每个字符串对应的加密字符串,得到混淆字符串数组,其中,所述混淆字符串数组与所述待替换单词数组中的字符串一一对应,且互不相同;以及将所述应用程序的代码中包含的所述待替换单词数组中的字符串,均替换为所述混淆字符串数组中对应的加密字符串。其中,所述生成与所述待替换单词数组中的每个字符串对应的加密字符串包括:针对所述待替换单词数组中的每个字符串,生成大于1小于或等于n的随机整数R,其中n为大于1的整数;以及从预设的字典数组中随机选择R个字符串进行拼接,得到加密字符串,其中,所述字典数组中包括M个字符串,其中M为大于n的正整数。
根据本公开的实施例,所述生成与所述待替换单词数组中的每个字符串对应的加密字符串还包括:当针对所述待替换单词数组中的全部字符串生成的加密字符串中存在相同字符串时,对具有相同字符串的加密字符串分别按照不同的方式进行变形。
根据本公开的实施例,所述方法还包括:存储所述待替换单词数组中的字符串与所述混淆字符串数组的加密字符串的一一对应关系。
根据本公开的实施例,所述将所述应用程序的代码中包含的所述待替换单词数组中的字符串,均替换为所述混淆字符串数组中对应的加密字符串包括:使用流编辑器stream editor,将所述应用程序的工程目录中的全部文件中包含的所述待替换单词数组中的字符串,替换为所述混淆字符串数组中对应的加密字符串;以及使用文本分析工具awk命令或find命令,将所述应用程序的工程中的全部文件名中包含的所述待替换单词数组中的字符串,替换为所述混淆字符串数组中对应的加密字符串。
根据本公开的实施例,所述方法还包括:查找带有第二预设标记字符的关键静态数据;利用加密函数加密所述关键静态数据的值,得到加密结果;在所述应用程序的代码中利用所述加密结果替换所述关键静态数据的值;以及在调用所述关键静态数据的业务代码中,配置调用解密函数的代码,所述解密函数用于解密所述加密结果以得到所述关键静态数据的值。其中,所述加密函数用于对所述关键静态数据的值进行多重加密处理,所述多重加密处理至少包括:首先利用至少一种加密算法对所述关键静态数据的值进行加密,然后将加密后的值中的字符进行位移变换。
根据本公开的实施例,所述将加密后的值中的字符进行位移变换包括:对换加密后的值中的首尾字符。
根据本公开的实施例,所述至少一种加密算法包括Base64加密算法。
本公开实施例的第二方面,提供了一种应用于IOS系统的应用程序代码混淆装置。所述装置包括查找模块、替换字符生成模块和替换模块。所述查找模块用于在应用程序的头文件和源文件中查找带有第一预设标记字符的字符串,得到待替换单词数组。所述替换字符生成模块用于生成与所述待替换单词数组中的每个字符串对应的加密字符串,得到混淆字符串数组,其中,所述混淆字符串数组与所述待替换单词数组中的字符串一一对应,且互不相同。所述替换模块用于将所述应用程序的代码中包含的所述待替换单词数组中的字符串,均替换为所述混淆字符串数组中对应的加密字符串。其中,所述生成模块具体用于:针对所述待替换单词数组中的每个字符串,生成大于1小于或等于n的随机整数R,其中n为大于1的整数;以及从预设的字典数组中随机选择R个字符串进行拼接,得到加密字符串,其中,所述字典数组中包括M个字符串,其中M为大于n的正整数。
根据本公开的实施例,所述替换字符生成模块还用于存储所述待替换单词数组中的字符串与所述混淆字符串数组的加密字符串的一一对应关系。
根据本公开的实施例,所述装置还包括静态数据混淆加密模块和加解密函数设置模块。所述静态数据混淆加密模块用于:查找带有第二预设标记字符的关键静态数据;利用加密函数加密所述关键静态数据的值,得到加密结果;在所述应用程序的代码中利用所述加密结果替换所述关键静态数据的值;以及在调用所述关键静态数据的业务代码中,配置调用解密函数的代码,所述解密函数用于解密所述加密结果以得到所述关键静态数据的值。所述加解密函数设置模块用于设置所述加密函数和所述解密函数,其中,所述加密函数用于对所述关键静态数据的值进行多重加密处理,所述多重加密处理至少包括:首先利用至少一种加密算法对所述关键静态数据的值进行加密,然后将加密后的值中的字符进行位移变换。
本公开实施例的第三方面,提供了一种电子设备。所述电子设备包括一个或多个处理器和存储器。所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述方法。
本公开实施例的第四方面,还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述方法。
本公开实施例的第五方面,还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述方法。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的应用于IOS系统的应用程序代码混淆方法、装置、设备、介质和程序产品的应用场景图;
图2示意性示出了根据本公开一实施例的应用于IOS系统的应用程序代码混淆方法的流程图;
图3示意性示出了根据本公开另一实施例的应用于IOS系统的应用程序代码混淆方法的流程图;
图4示意性示出了根据本公开再一实施例的应用于IOS系统的应用程序代码混淆方法的流程图;
图5示意性示出了根据本公开实施例的应用于IOS系统的应用程序代码混淆装置的结构框图;以及
图6示意性示出了适于实现根据本公开实施例的应用于IOS系统的应用程序代码混淆方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个特征。
本公开各个实施例提供了一种应用于IOS系统的应用程序代码混淆方法、装置、设备、介质和程序产品。
根据本公开一些实施例,该应用于IOS系统的应用程序代码混淆方法包括混淆字符串数组的生成过程和利用混淆字符串数组中的加密字符串替换工程源代码中的部分字符串的替换过程。其中,在生成混淆字符串数组的过程中,每次产生一个随机整数R,并从预设的字典数组中随机选择R个字符串进行拼接,而且该字典数组中的字符串也是随机生成的。这样使得混淆字符串数组中的字符串(本文中称为“加密字符串”)是随机组合的、不具有可读意义的。从而,当在替换过程中,使用混淆字符串数组中的加密字符串替换了工程源代码中的部分字符串(例如,开发者编写时为方法或者类进行命名的字符串等)后,应用程序的代码可读性降低。从而应用程序被发布后,即使被反编译,攻击者要理解应用程序的代码逻辑难度极大增加,由此降低了代码逻辑泄露的风险。
需要说明的是,本公开实施例确定的应用于IOS系统的应用程序代码混淆方法、装置、设备、介质和程序产品可用于金融领域(例如,手机银行、理财软件等),也可用于除金融领域之外的任意领域,本公开对应用领域不做限定。
图1示意性示出了根据本公开实施例的应用于IOS系统的应用程序代码混淆方法、装置、设备、介质和程序产品的应用场景图。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
开发人员可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有IOS系统的应用程序开发工具。开发人员可以通过该应用程序开发工具开发应用程序。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器。例如,开发人员使用终端设备101、102、103开发完成应用程序后,可以上传到服务器105,通过服务器105发布到苹果应用商店。
需要说明的是,本公开实施例所提供的应用于IOS系统的应用程序代码混淆方法一般可以由终端设备101、102、103执行。相应地,本公开实施例所提供的应用于IOS系统的应用程序代码混淆装置、设备、介质和程序产品一般可以设置于终端设备101、102、103中。例如,根据本公开实施例的应用于IOS系统的应用程序代码混淆装置、设备、介质和/或程序产品可以集成到终端设备101、102、103中的应用程序开发工具中,在开发人员开发完工程源代码后,可以通过本公开实施例的应用于IOS系统的应用程序代码混淆方法,对工程源代码进行混淆。然后再将混淆后的应用程序的代码进行编译、打包并上传到服务器105,以通过服务器105进行发布。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
以下将基于图1描述的场景,通过图2~图4对本公开实施例的应用于IOS系统的应用程序代码混淆方法进行详细描述。
图2示意性示出了根据本公开一实施例的应用于IOS系统的应用程序代码混淆方法的流程图。
如图2所示,该应用于IOS系统的应用程序代码混淆方法可以包括操作S201~操作S207。
首先在操作S201,在应用程序的头文件和源文件中查找带有第一预设标记字符的字符串,得到待替换单词数组。
应用于IOS系统的应用程序(以下简称“IOS应用程序”)中,头文件以.h为后缀名,源文件以.swift为后缀名。IOS应用程序中的类和方法,会在头文件和源文件中会进行定义。
第一预设标记字符可以基于用户操作而指定的,为应用程序的编写规范中规定的用于定义应用程序中的类和/或方法时所使用的字符或字符序列,例如,特定的命名前缀(比如,工程名前缀)。
从而,通过操作S201可以找到应用程序中的至少一种甚至全部的类和/或方法的命名字符串。
然后通过操作S202~操作S206,生成与待替换单词数组中的每个字符串对应的加密字符串,以得到混淆字符串数组。其中,混淆字符串数组与待替换单词数组中的字符串一一对应,且互不相同。
接下来在操作S207,将应用程序的代码中包含的待替换单词数组中的字符串,均替换为混淆字符串数组中对应的加密字符串。
混淆字符串数组与待替换单词数组中的字符串一一对应,且互不相同,保证了经过操作S207的替换后所得到的混淆代码,与IOS应用程序的源代码(即,未混淆前的代码)等价。
根据本公开的实施例,在操作S202~操作S206中生成混淆字符串数组的过程中,通过多处随机设置,来降低混淆字符串数组中的加密字符串的可理解性。具体介绍如下。
首先在操作S202,针对待替换单词数组中的每个字符串,生成大于1小于或等于n的随机整数R,其中n为大于1的整数。
然后在操作S203,从预设的字典数组中随机选择R个字符串进行拼接,得到加密字符串,其中,字典数组中包括M个字符串,其中M为大于n的正整数。
例如,可以预先通过随机方法生成一个字典数组。例如,从网站上爬取大量的字符串,然后对爬取到的每个字符串中的字符打乱顺序重排或者进行字符位置变换,接下来还可以随机选择多个字符串拼接等。在一个实施例中,在兼顾随机性要求以及计算量的大小的考虑下,设置n为7,相应地该字段数组例如可以有300个字符串,其中,每个字符串的长度可以有10~50。
接下来在操作S204,判断针对待替换单词数组中的全部字符串生成的加密字符串中是否存在相同字符串。如果是,则说明存在待替换单词数组中的不同字符串对应于相同加密字符串的情形,这不符合混淆字符串数组与待替换单词数组中的字符串一一对应,且互不相同的条件,因此,要在操作S205中,对具有相同字符串的加密字符串分别按照不同的方式进行变形。然后再返回操作S204进行判断,直至操作S204中判断出生成的加密字符串中不存在相同字符串,即生成的加密字符串互不重复。这样,针对待替换单词数组中的全部字符串生成的加密字符串就组成了混淆字符串数组(即操作S206)。
根据本公开的实施例,在操作S205中对具有相同字符串的加密字符串分别按照不同的方式进行变形时,可以是给具有相同字符串的加密字符串后填充不同个数的某一字符或某一字符串。
根据本公开的实施例,在操作S205之后再次返回操作S204进行判断,避免在操作S205变形后引入新的重复,即避免出现被变形后的加密字符串与其他未经过变形的加密字符串相同的情况。
经过操作S204的判断不存在重复时,就满足了混淆字符串数组的要求,即得到混淆字符串数组。
可见,根据本公开实施例,混淆字符串数组中的加密字符串,通过生成过程中的多处随机性设置,可理解性显著降低。从而在操作S207中使用混淆字符串数组中的加密字符串替换了工程源代码中的相应字符串后,可以明显降低应用程序的代码可读性,从而在应用程序被发布后,即使被反编译,攻击者要理解应用程序的代码逻辑难度极大增加,由此降低了代码逻辑泄露的风险。
根据本公开的实施例,在得到混淆字符串数组后,可以存储待替换单词数组中的字符串与混淆字符串数组的加密字符串的一一对应关系。存储该对应关系,可以便于开发人员对混淆代码(即,经过操作S270替换后的代码)的还原。例如,当应用程序在发布之前需要进行测试时,或者当应用程序被发布使用一段时间后,需要对应用程序进行升级或漏洞修复时,当开发人员无法或难以直接获得混淆前的应用程序代码时,可以从应用商店下载该应用程序,反编译后按照存储的该对应关系将混淆代码进行还原,然后方便开发人员对还原后代码进行逻辑分析和处理。
图3示意性示出了根据本公开另一实施例的应用于IOS系统的应用程序代码混淆方法的流程图。
如图3所示,根据本公开的实施例,该应用于IOS系统的应用程序代码混淆方法除了前述操作S201~操作S207以外,还可以包括操作S301~操作S304。
在操作S301,查找带有第二预设标记字符的关键静态数据。
该关键静态数据例如可以是密钥、密码、用户名、签章、序列号、许可证号等。
第二预设字符标记基于用户操作而指定的,为应用程序的编写规范中规定的用于定义关键静态数据的字符或字符序列,例如密钥的命名前缀或后缀。
在操作S302,利用加密函数对关键静态数据的值进行多重加密处理,得到加密结果。
该多重加密处理至少包括:首先利用至少一种加密算法对关键静态数据的值进行加密,然后将加密后的值中的字符进行位移变换。
该至少一种加密算法可以是任意一种成熟的加密算法,例如Base64加密算法、数据加密标准算法(Data Encryption Standard,DES)、或国际数据加密算法(InternationalData Encryption Algorithm,IDEA)等。
位移变换的实现方式可以有多种多样;例如可以将至少一个加密算命法加密后所得的值中的首尾字符对调;或者例如可以将首字符或末字符换成英文字典中该字符前或后的某个字符;或者例如可以从首字符开始每两个相邻位置的字符组对后互换,当末尾字符无法组对时不予处理或与首字符调换等。
在操作S303,在应用程序的代码中利用加密结果替换关键静态数据的值。
在操作S304,在调用关键静态数据的业务代码中,配置调用解密函数的代码,解密函数用于解密加密结果以得到关键静态数据的值。这样,当应用程序的代码被发布后,在运行中当运行到关键静态数据的业务代码时,先通过解密函数解密得到该关键静态数据的值,然后再继续运行,以此保证应用程序的正常运行。
当攻击者通过从应用商城下载到安装包反编译后,得到的关键静态数据的值是经过多重加密后的值,从而关键静态数据的值不会直接的暴露出来。而且由于关键静态数据的值是经过多重加密得到的,攻击者使用任意已有的成熟的加密算法对应的解密算法解密得到的值,也不是关键静态数据的值。这样通过多重加密,降低了关键静态数据的值被破解的可能性。
图4示意性示出了根据本公开再一实施例的应用于IOS系统的应用程序代码混淆方法的流程图。
如图4所示,根据该实施例的应用于IOS系统的应用程序代码混淆方法可以包括操作S401~操作S408。
在操作S401,在开发应用程序的工程目录中的后缀名为.h和.swift的文件中,查找带有指定前缀(例如,工程名前缀)的字符串,并将其填入“待替换单词数组”。
具体地,可以在在工程目录projectPath中的.h和.swift文件内,查找指定前缀为“xxxx”的所有字符串,命令如下:
find$projectPath-name“*.h”-o-name“.swift”|xargs grep“xxxx”-rl$projectPath
在操作S402,针对待替换单词数组中的每个字符串生成对应的加密字符串,并将对应关系写到密码文件中。具体步骤如下2.1~2.3所示:
步骤2.1,创建一个字典数组dictArray,该字典数组中有300个字符串。该300个字符串是通过随机生成、随机替换等处理得到的。同时针对待替换单词数组中的每个字符串,生成大于1小于7的随机整数R,作为所生成的加密字符串中包含的来自字典数组的字符串的个数。
步骤2.2,在字典数组dictArray中随机抽取R个字符串进行拼接,得到一个加密字符串。
步骤2.3将待替换单词数组中的每个字符串和与之对应的加密字符串的对应关系都记录在密码文件中。
在操作S403,检查密码文件中的加密字符串有无重复。
在操作S404,如果有重复的情况,对重复的字符串进行变换,去除重复,生成混淆字符串数组。具体地,可以在重复的多个字符串后分别添加不同数量的某个字符串,以使重复的字符串可以加以区分。
在操作S405,如果没有重复,则最终得到“混淆字符串数组”。
在操作S406,对于工程目录中的全部文件的内容,使用linux sed命令,将包含在待替换单词数组中的字符串,替换成混淆字符串数组中对应的加密字符串。sed是streameditor的简称,也就是流编辑器。linux sed命令一次处理一行内容,把当前处理的行存储在临时缓冲区中,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,不断重复直到文件末尾。
根据本公开的实施例,可以使用流编辑器stream editor,将应用程序的工程目录中的全部文件中包含的待替换单词数组中的字符串,替换为混淆字符串数组中对应的加密字符串。
具体地,可以搜索ProjectPath中所有文件的内容,将出现的包含在待替换单词数组中的“字符串”替换成对应的“加密字符串”。命令如下:
Sed -i‘’“s/${原字符串}/${加密字符串}/g”`grep$源字符串-rl$ProjectPath`
其中,“原字符串”即为待替换单词数组中的“字符串”。
在操作S407,对于工程中的全部文件的文件名,使用linux find或awk等命令将文件名中出现的包含在待替换单词数组中的字符串替换成混淆字符串数组中对应的加密字符串。
根据本公开的实施例,可以使用文本分析工具awk命令或find命令,将应用程序的工程中的全部文件名中包含的待替换单词数组中的字符串,替换为混淆字符串数组中对应的加密字符串。
具体地,查找要替换的文件名并替换的命令如下:
find$ProjectPath-name$原字符串“*”|awk‘
BEGIN{frecord1=“”’$原字符串“’”;frecord2=“”’$加密字符串“”’;finish=1}
{
gsub(frecord1,frecord2,fileName);
}’
通过操作S406和操作S407,可以将工程中的全部文件的文件名、以及文件内容中的出现的包含在待替换单词数组中的“字符串”替换成对应的“加密字符串”。
混淆过程中的字符串对应关系,作为开发记录,不打包上传。这样可以便于开发人员进行代码恢复。
接下来在操作S408,对关键静态数据进行加解密,其中,可以通过find命令查找源文件中带有指定前缀的关键静态数据(如密钥等),对其进行加解密。具体可以包括如下步骤8.1~8.4。
步骤8.1,编写加密函数encFunc,对输入的字符串进行Base64加密,然后首尾字符对换。
步骤8.2,编写解密函数decFunc,对输入的字符串先进行首尾字符对换,然后进行Base64解密。
步骤8.3,将关键静态数据的值传入加密函数encFunc,得出的结果作为新的关键静态数据写入代码中。
步骤8.4,在使用关键静态数据的业务代码中,首先调用函数decFunc取得解密后的值,然后继续相关业务处理。其中,解密函数decFunc是需要随着IOS应用程序而打包上传的。
基于上述各个实施例的应用于IOS系统的应用程序代码混淆方法,本公开实施例还提供了一种应用于IOS系统的应用程序代码混淆装置。以下将结合图5对该装置进行详细描述。
图5示意性示出了根据本公开实施例的应用于IOS系统的应用程序代码混淆装置500的结构框图。
如图5所示,根据本公开的实施例,该装置500可以包括查找模块510、替换字符生成模块520和替换模块530。根据本公开的另一些实施例,该装置500还可以进一步包括静态数据加密混淆模块540和加解密函数设置模块550。该装置500可以用于实现参考图2~图4所描述的方法。
具体地,查找模块510用于在应用程序的头文件和源文件中查找带有第一预设标记字符的字符串,得到待替换单词数组。在一个实施例中,查找模块510可以执行前文描述的操作S201。
替换字符生成模块520可以用于生成与待替换单词数组中的每个字符串对应的加密字符串,得到混淆字符串数组,其中,混淆字符串数组与待替换单词数组中的字符串一一对应,且互不相同。根据本公开的实施例,生成模块520具体用于:针对待替换单词数组中的每个字符串,生成大于1小于或等于n的随机整数R,其中n为大于1的整数;以及从预设的字典数组中随机选择R个字符串进行拼接,得到加密字符串,其中,字典数组中包括M个字符串,其中M为大于n的正整数。根据本公开的另一些实施例,生成模块520还用于当针对待替换单词数组中的全部字符串生成的加密字符串中存在相同字符串时,对具有相同字符串的加密字符串分别按照不同的方式进行变形。在一个实施例中,替换字符生成模块520可以执行前文描述的操作S202~操作S206。
替换模块530用于将应用程序的代码中包含的待替换单词数组中的字符串,均替换为混淆字符串数组中对应的加密字符串。在一个实施例中,替换模块530可以执行前文描述的操作S207。
静态数据混淆加密模块540用于:查找带有第二预设标记字符的关键静态数据;利用加密函数加密关键静态数据的值,得到加密结果;在应用程序的代码中利用加密结果替换关键静态数据的值;以及在调用关键静态数据的业务代码中,配置调用解密函数的代码,解密函数用于解密加密结果以得到关键静态数据的值。在一个实施例中,静态数据混淆加密模块540可以执行前文描述的操作S301~操作S304。
加解密函数设置模块550用于设置加密函数和解密函数,其中,加密函数用于对关键静态数据的值进行多重加密处理,多重加密处理至少包括:首先利用至少一种加密算法对关键静态数据的值进行加密,然后将加密后的值中的字符进行位移变换。解密函数与加密函数配对。
根据本公开的实施例,查找模块510、替换字符生成模块520、替换模块530、静态数据加密混淆模块540和加解密函数设置模块550中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,查找模块510、替换字符生成模块520、替换模块530、静态数据加密混淆模块540和加解密函数设置模块550中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,查找模块510、替换字符生成模块520、替换模块530、静态数据加密混淆模块540和加解密函数设置模块550中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图6示意性示出了适于实现根据本公开实施例的应用于IOS系统的应用程序代码混淆方法的电子设备的方框图。
如图6所示,根据本公开实施例的电子设备600包括处理器601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。处理器601例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器601还可以包括用于缓存用途的板载存储器。处理器601可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 603中,存储有电子设备600操作所需的各种程序和数据。处理器601、ROM602以及RAM 603通过总线604彼此相连。处理器601通过执行ROM 602和/或RAM 603中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 602和RAM 603以外的一个或多个存储器中。处理器601也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备600还可以包括输入/输出(I/O)接口605,输入/输出(I/O)接口605也连接至总线604。电子设备600还可以包括连接至I/O接口605的以下部件中的一项或多项:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 602和/或RAM 603和/或ROM 602和RAM 603以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。
在该计算机程序被处理器601执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分609被下载和安装,和/或从可拆卸介质611被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被处理器601执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (11)

1.一种应用于IOS系统的应用程序代码混淆方法,包括:
在应用程序的头文件和源文件中查找带有第一预设标记字符的字符串,得到待替换单词数组;
生成与所述待替换单词数组中的每个字符串对应的加密字符串,得到混淆字符串数组,其中,所述混淆字符串数组与所述待替换单词数组中的字符串一一对应,且互不相同;以及
将所述应用程序的代码中包含的所述待替换单词数组中的字符串,均替换为所述混淆字符串数组中对应的加密字符串;
其中,
所述生成与所述待替换单词数组中的每个字符串对应的加密字符串包括:
针对所述待替换单词数组中的每个字符串,生成大于1小于或等于n的随机整数R,其中n为大于1的整数;以及
从预设的字典数组中随机选择R个字符串进行拼接,得到加密字符串,其中,所述字典数组中包括M个字符串,其中M为大于n的正整数。
2.根据权利要求1所述的方法,其中,所述生成与所述待替换单词数组中的每个字符串对应的加密字符串还包括:
当针对所述待替换单词数组中的全部字符串生成的加密字符串中存在相同字符串时,对具有相同字符串的加密字符串分别按照不同的方式进行变形。
3.根据权利要求1所述的方法,其中,所述方法还包括:
存储所述待替换单词数组中的字符串与所述混淆字符串数组的加密字符串的一一对应关系。
4.根据权利要求1所述的方法,其中,所述将所述应用程序的代码中包含的所述待替换单词数组中的字符串,均替换为所述混淆字符串数组中对应的加密字符串包括:
使用流编辑器stream editor,将所述应用程序的工程目录中的全部文件中包含的所述待替换单词数组中的字符串,替换为所述混淆字符串数组中对应的加密字符串;以及
使用文本分析工具awk命令或find命令,将所述应用程序的工程中的全部文件名中包含的所述待替换单词数组中的字符串,替换为所述混淆字符串数组中对应的加密字符串。
5.根据权利要求1所述的方法,其中,所述方法还包括:
查找带有第二预设标记字符的关键静态数据;
利用加密函数加密所述关键静态数据的值,得到加密结果;
在所述应用程序的代码中利用所述加密结果替换所述关键静态数据的值;以及
在调用所述关键静态数据的业务代码中,配置调用解密函数的代码,所述解密函数用于解密所述加密结果以得到所述关键静态数据的值;
其中,
所述加密函数用于对所述关键静态数据的值进行多重加密处理,所述多重加密处理至少包括:首先利用至少一种加密算法对所述关键静态数据的值进行加密,然后将加密后的值中的字符进行位移变换。
6.根据权利要求5所述的方法,其中,所述将加密后的值中的字符进行位移变换包括:
对换加密后的值中的首尾字符。
7.根据权利要求5所述的方法,其中,所述至少一种加密算法包括Base64加密算法。
8.一种应用于IOS系统的应用程序代码混淆装置,包括:
查找模块,用于在应用程序的头文件和源文件中查找带有第一预设标记字符的字符串,得到待替换单词数组;
替换字符生成模块,用于生成与所述待替换单词数组中的每个字符串对应的加密字符串,得到混淆字符串数组,其中,所述混淆字符串数组与所述待替换单词数组中的字符串一一对应,且互不相同;以及
替换模块,用于将所述应用程序的代码中包含的所述待替换单词数组中的字符串,均替换为所述混淆字符串数组中对应的加密字符串;
其中,
所述生成模块具体用于:
针对所述待替换单词数组中的每个字符串,生成大于1小于或等于n的随机整数R,其中n为大于1的整数;以及
从预设的字典数组中随机选择R个字符串进行拼接,得到加密字符串,其中,所述字典数组中包括M个字符串,其中M为大于n的正整数。
9.一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行权利要求1~7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现权利要求1~7中任一项所述的方法。
11.一种计算机程序产品,包括计算机程序指令,所述计算机程序指令被处理器执行时实现权利要求1~7中任一项所述的方法。
CN202210958093.3A 2022-08-10 2022-08-10 应用程序代码混淆方法、装置、设备和介质 Pending CN115238249A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210958093.3A CN115238249A (zh) 2022-08-10 2022-08-10 应用程序代码混淆方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210958093.3A CN115238249A (zh) 2022-08-10 2022-08-10 应用程序代码混淆方法、装置、设备和介质

Publications (1)

Publication Number Publication Date
CN115238249A true CN115238249A (zh) 2022-10-25

Family

ID=83679156

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210958093.3A Pending CN115238249A (zh) 2022-08-10 2022-08-10 应用程序代码混淆方法、装置、设备和介质

Country Status (1)

Country Link
CN (1) CN115238249A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116910711A (zh) * 2023-07-13 2023-10-20 北京领创医谷科技发展有限责任公司 一种mcu固件混淆方法、系统、服务器及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116910711A (zh) * 2023-07-13 2023-10-20 北京领创医谷科技发展有限责任公司 一种mcu固件混淆方法、系统、服务器及存储介质
CN116910711B (zh) * 2023-07-13 2024-06-11 北京领创医谷科技发展有限责任公司 一种mcu固件混淆方法、系统、服务器及存储介质

Similar Documents

Publication Publication Date Title
JP6815385B2 (ja) アプリケーションのコード難読化のためのシステムおよび方法
CN102760219B (zh) 一种Android平台软件保护系统、方法及设备
US20180260199A1 (en) Method and apparatus for intermediate representation of applications
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
US20180227366A1 (en) Providing access to a resource for a computer from within a restricted network
WO2010070959A1 (ja) 情報処理装置、プログラム開発装置、プログラム検証方法及びプログラム
CN108229112A (zh) 一种保护应用程序、应用程序的运行方法以及装置
CN113568680B (zh) 应用程序的动态链接库保护方法、装置、设备及介质
US20140059341A1 (en) Creating and accessing encrypted web based content in hybrid applications
CN106897587A (zh) 加固应用、加载加固应用的方法和装置
CN114547558B (zh) 授权方法、授权控制方法及装置、设备和介质
CN106415491A (zh) 一种应用保护方法、服务器以及终端
US10379886B2 (en) Method and system for enhancing loading speed of intermediate language file
CN115238249A (zh) 应用程序代码混淆方法、装置、设备和介质
US10013517B1 (en) High level programming language core protection for high level synthesis
CN107871066A (zh) 基于安卓系统的代码编译方法及装置
CN112416395A (zh) 一种热修复更新方法和装置
CN113515747B (zh) 设备升级方法、装置、设备及存储介质
CN116249980A (zh) 通过异构加密的软件访问
CN115033870A (zh) 一种基于大数据云部署的反恶意篡改代码方法和装置
CN114756833A (zh) 代码混淆方法、装置、设备、介质以及程序产品
KR102229879B1 (ko) 소스코드관리방법, 이를 수행하는 소스코드관리서버, 및 이를 이용한 소스코드개발방법
CN110795704A (zh) 一种应用程序的源代码混淆方法、装置及存储介质
JP2018005915A (ja) アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム
KR101916109B1 (ko) 동적 프레임워크를 이용한 iOS 애플리케이션의 문자열 복호화 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination