CN110781462B - 一种资源的混淆方法和装置 - Google Patents

一种资源的混淆方法和装置 Download PDF

Info

Publication number
CN110781462B
CN110781462B CN201910960299.8A CN201910960299A CN110781462B CN 110781462 B CN110781462 B CN 110781462B CN 201910960299 A CN201910960299 A CN 201910960299A CN 110781462 B CN110781462 B CN 110781462B
Authority
CN
China
Prior art keywords
resource
file
resource file
information
directory
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
CN201910960299.8A
Other languages
English (en)
Other versions
CN110781462A (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.)
Zhengzhou Apas Technology Co ltd
Original Assignee
Zhengzhou Apas 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 Zhengzhou Apas Technology Co ltd filed Critical Zhengzhou Apas Technology Co ltd
Priority to CN201910960299.8A priority Critical patent/CN110781462B/zh
Publication of CN110781462A publication Critical patent/CN110781462A/zh
Application granted granted Critical
Publication of CN110781462B publication Critical patent/CN110781462B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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

本申请实施例公开了一种资源的混淆方法和装置,该方法包括:获取生成目标程序文件所需的资源文件和资源索引文件,并确定所述资源文件中待混淆的第一资源文件;基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,以更新所述资源索引文件;基于更新后的资源索引文件、所述第二资源文件和所述资源文件中除所述第一资源文件外的资源文件生成所述目标程序文件。

Description

一种资源的混淆方法和装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种资源的混淆方法和装置。
背景技术
随着网络技术的不断发展,通过网络发布信息已成为人们进行信息发布的重要手段,例如某企业或组织可以开发某功能的应用程序,并将该应用程序通过网络发布,以供用户使用该应用程序中的功能完成相应的业务等。而对于通过网络发布的应用程序主要是由程序语言编写的程序代码构成,当前,构成应用程序的源代码和相应的资源文件是相应企业或组织的重要财富,相应的企业或组织都很重视对应用程序的程序内容的保护。
为了对应用程序的程序内容进行保护,通常会采用对其中的源代码进行混淆的方式处理,具体地,通过混淆器将应用程序的代码中的所有变量、函数、类的名称变为简短的英文字母代号,以此来对应用程序中的代码进行重新组织和处理,使得处理后的代码与处理前的代码具有相同的功能,而混淆后的代码却很难被反编译。被混淆的代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前的代码的执行结果相同。并且,在缺乏相应的函数名和程序注释的情况下,即使被反编译,也将难以阅读,因此也就很难得出应用程序的真正语义。但是,应用程序中不仅仅包含源代码,还包含资源文件,而资源文件对于应用程序也同样重要,而且也同样需要被保护,而如何对资源文件进行保护成为需要解决的重要问题。
发明内容
本申请实施例的目的是提供一种资源的混淆方法和装置,以提供一种对资源文件进行保护的处理方案。
为实现上述技术方案,本申请实施例是这样实现的:
本申请实施例提供的一种资源的混淆方法,所述方法包括:
获取生成目标程序文件所需的资源文件和资源索引文件,并确定所述资源文件中待混淆的第一资源文件;
基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,以更新所述资源索引文件;
基于更新后的资源索引文件、所述第二资源文件和所述资源文件中除所述第一资源文件外的资源文件生成所述目标程序文件。
本申请实施例提供的一种资源的混淆装置,所述装置包括:
文件获取模块,用于获取生成目标程序文件所需的资源文件和资源索引文件,并确定所述资源文件中待混淆的第一资源文件;
混淆模块,用于基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
索引文件更新模块,用于根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,以更新所述资源索引文件;
程序文件生成模块,用于基于更新后的资源索引文件、所述第二资源文件和所述资源文件中除所述第一资源文件外的资源文件生成所述目标程序文件。
由以上本申请实施例提供的技术方案可见,本申请实施例通过获取生成目标程序文件所需的资源文件和资源索引文件,并确定该资源文件中待混淆的第一资源文件,然后,可以基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系,根据该映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息,以更新资源索引文件,基于更新后的资源索引文件、第二资源文件和该资源文件中除第一资源文件外的资源文件生成目标程序文件,这样,通过对待混淆的第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理,可以使得不法分子很难通过反编译手段盗取资源文件,从而保护了资源文件和应用程序的安全性,同时,对第一资源文件进行混淆处理还可以会减小目标程序文件的大小。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本申请一种资源的混淆方法实施例;
图2为本申请另一种资源的混淆方法实施例;
图3为本申请又一种资源的混淆方法实施例;
图4为本申请一种资源的混淆设备实施例;
图5为本申请另一种资源的混淆设备实施例。
具体实施方式
本申请实施例提供一种资源的混淆方法和装置。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
实施例一
如图1所示,本申请实施例提供一种资源的混淆方法,该方法的执行主体可以为终端设备或服务器,其中,该终端设备可以如个人计算机等终端设备,还可以是如手机或平板电脑等移动终端设备。该服务器可以是一个独立的服务器,还可以是由多个服务器构成的服务器集群等,该服务器可以是某应用程序的发布服务器,也可以是某应用程序的封装的服务器等。该方法可以应用于对应用程序中的文件进行封装或对应用程序中的资源文件进行保护等处理中。该方法具体可以包括以下步骤:
在步骤S102中,获取生成目标程序文件所需的资源文件和资源索引文件,并确定该资源文件中待混淆的第一资源文件。
其中,目标程序文件可以是实现某应用程序(或应用软件)整体功能或某个模块功能的源代码及调用素材的集合,例如,对于安卓操作系统中的应用程序,该目标程序文件可以是该应用程序的安装包(即apk格式的安装包)等,对于Windows操作系统中的应用程序,该目标程序文件可以是该应用程序的安装包(如exe格式的安装包)等。资源文件可以是实现上述应用程序(或应用软件)的某个功能的过程中使用的资源的文件,不同的目标程序文件可以有不同的资源文件,相同格式的程序文件也可以有不同的资源文件,同一个应用程序的不同版本的程序文件也可以包含不同的资源文件等。为了方便对不同资源文件进行定位与搜索,还可以构建资源索引文件,资源索引文件可以是基于资源文件的索引表构建,该索引表中记录有各个资源文件的存储路径等,通过该索引表可以快速查找到相应的资源文件。
在实施中,随着网络技术的不断发展,通过网络发布信息已成为人们进行信息发布的重要手段,例如某企业或组织可以通过网络发布企业或组织的最新动态信息,或者,某企业或组织可以开发某功能的应用程序,并将该应用程序通过网络发布,以供用户使用该应用程序中的功能完成相应的业务等。而对于通过网络发布的应用程序主要是由程序语言编写的程序代码构成,当前,构成应用程序的源代码和相应的资源文件是相应企业或组织的重要财富,相应的企业或组织都很重视对应用程序的程序内容的保护。
为了对应用程序的程序内容进行保护,通常会采用对其中的源代码进行混淆的方式处理,具体地,通过混淆器将应用程序的代码中的所有变量、函数、类的名称变为简短的英文字母代号,以此来对应用程序中的代码进行重新组织和处理,使得处理后的代码与处理前的代码具有相同的功能,而混淆后的代码却很难被反编译。被混淆的代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前的代码的执行结果相同。并且,在缺乏相应的函数名和程序注释的情况下,即使被反编译,也将难以阅读,因此也就很难得出应用程序的真正语义。同时混淆处理是不可逆的,在进行混淆处理的过程中,某些不影响应用程序正常运行的信息将永久丢失,其中信息的丢失会使应用程序变得更加难以理解。但是,应用程序中不仅仅包含源代码,还包含资源文件,而资源文件对于应用程序也同样重要,而且也同样需要被保护,而如何对资源文件进行保护成为需要解决的重要问题。本申请实施例中提供一种对资源文件的保护方案,具体可以包括以下内容:
应用程序的源代码和资源文件会被打包或封装在该应用程序的程序文件中,技术人员可以根据提供的业务,设置相应的功能,并可以基于设置的功能编写上述源代码和相应的资源文件,同时,为了便于查找相应的资源文件,通常还会设置资源文件的资源索引文件。由于同一个操作系统上使用的不同应用程序,通常具有相同的编程语言和调用逻辑,因此,封装好的程序文件(即目标程序文件)一旦被他人获得,根据资源索引文件,以及常用的编程语言和调用逻辑,很容易识别和调用相应的资源文件,从而导致资源文件被盗取或应用程序被破解,使得应用程序处于危险中,为此,可以对资源文件也进行混淆处理,使得资源文件进行重新组织和处理,且混淆后的资源文件又很难被反编译,具体地,当应用程序有技术人员编写完成进行发布之前,或者,需要对某发布的应用程序的程序文件中的资源文件进行保护等情况下,可以获取生成目标程序文件所需的资源文件和资源索引文件,然后,可以对每个资源文件进行分析,确定每个资源文件是否能够进行混淆处理,进而可以获取能够进行混淆处理的资源文件,并可以将获取的资源文件作为待混淆的第一资源文件。
在步骤S104中,基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系。
其中,混淆规则可以是对资源文件进行混淆处理所使用的规则,例如将资源文件中的指定字符进行混淆的规则等。预定属性信息可以是任意一项或多项属性信息,例如资源文件的名称、所属的类的信息、资源文件中包含的函数名称、资源文件所使用的程序代码的类型、名称等、资源文件的版本信息、修改时间等信息。属性值可以是属性信息对应的值,属性信息与属性值之间的关系可以如键值对等,具体如,属性信息可以为资源文件的名称,相应的属性值可以为A.jpg等。
在实施中,为了对目标程序文件中的资源文件进行混淆处理,可以根据实际情况预先设定混淆规则,该混淆规则可以是对预先指定的属性信息进行混淆处理的规则,也可以是对预先指定的属性信息对应的属性值进行混淆处理的规则等。可以基于设定的混淆规则,对第一资源文件的预定属性信息进行混淆处理生成第二资源文件,和/或,对第一资源文件的预定属性信息对应的属性值进行混淆处理生成第二资源文件。例如,预先设定混淆规则为对资源文件的名称和相应的名称信息进行混淆处理的规则,则可以基于该混淆规则,对第一资源文件的“名称”进行混淆处理,同时,对第一资源文件的名称信息进行混淆处理,最终生成第二资源文件,如资源文件的名称-A.jpg,通过上述混淆规则,可以将“名称”混淆为“A”,同时,将“A.jpg”混淆为“1265.jpg”等,最终得到第二资源文件。
为了能够准确查找到混淆后的资源文件,可以将混淆前的资源文件与混淆后的资源文件建立映射关系,以便当目标程序文件运行的过程中,如果发现目标程序文件出现错误,则可以通过上述映射关系确定出现问题的实际资源文件。基于此,可以构建第一资源文件与第二资源文件的映射关系。
在步骤S106中,根据上述映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息,以更新资源索引文件。
其中,资源索引文件可以是基于资源文件的索引表构建,该索引表中记录有各个资源文件的存储路径等,通过该索引表可以快速查找到相应的资源文件,进而方便对不同资源文件进行定位与搜索。
在实施中,通过上述步骤S104的处理得到第一资源文件与第二资源文件的映射关系后,可以通过该映射关系对资源索引文件进行更新,具体地,由于资源索引文件中记录的第一资源文件的相关信息可能已经发生更改,如果继续使用资源索引文件中的第一资源文件的相关信息,则在后续目标程序文件运行时会出现资源文件无法被调用等错误,因此,可以将资源索引文件中第一资源文件的相关信息替换为第二资源文件的信息,即可以将第一资源文件中进行混淆处理的预定属性信息对应的属性值和/或预定属性信息替换为第二资源文件中与预定属性信息相对应的属性信息(即预定属性信息混淆后的属性信息)和/或该属性信息对应的属性值(即预定属性信息对应的属性值混淆后的属性值),通过上述处理可以对资源索引文件进行更新。
在步骤S108中,基于更新后的资源索引文件、第二资源文件和上述资源文件中除第一资源文件外的资源文件生成目标程序文件。
在实施中,通过上述方式对资源文件进行混淆处理后,混淆后的资源文件将很难被反编译,即使根据资源索引文件,以及常用的编程语言和调用逻辑,在缺少相关注释等情况下也并不容易识别和调用相应的资源文件,从而资源文件得到保护,此时,可以对目标程序文件进行封装,即可以获取更新后的资源索引文件、第二资源文件和上述资源文件中除第一资源文件外的资源文件,并可以将更新后的资源索引文件、第二资源文件和上述资源文件中除第一资源文件外的资源文件,通过预定的封装机制进行封装,以生成目标程序文件。
本申请实施例提供一种资源的混淆方法,通过获取生成目标程序文件所需的资源文件和资源索引文件,并确定该资源文件中待混淆的第一资源文件,然后,可以基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系,根据该映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息,以更新资源索引文件,基于更新后的资源索引文件、第二资源文件和该资源文件中除第一资源文件外的资源文件生成目标程序文件,这样,通过对待混淆的第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理,可以使得不法分子很难通过反编译手段盗取资源文件,从而保护了资源文件和应用程序的安全性,同时,对第一资源文件进行混淆处理还可以会减小目标程序文件的大小。
实施例二
如图2所示,本申请实施例提供一种资源的混淆方法,该方法的执行主体可以为终端设备或服务器,其中,该终端设备可以如个人计算机等终端设备,还可以是如手机或平板电脑等移动终端设备。该服务器可以是一个独立的服务器,还可以是由多个服务器构成的服务器集群等,该服务器可以是某应用程序的发布服务器,也可以是某应用程序的封装的服务器等。该方法可以应用于对应用程序中的文件进行封装或对应用程序中的资源文件进行保护等处理中。该方法具体可以包括以下步骤:
上述实施例一中步骤S102的具体处理可以多种多样,以下提供一种可选的处理方式,具体可以包括以下步骤S202~步骤S206的处理。
在步骤S202中,获取生成目标程序文件所需的资源文件和资源索引文件。
上述步骤S202的具体处理过程可以参见上述实施例一中步骤S102的相关内容,在此不再赘述。
在步骤S204中,获取预设混淆资源文件白名单,该混淆资源文件白名单用于记录禁止进行混淆处理的资源文件的信息。
其中,混淆资源文件白名单可以由用户预先设置,可以将不能够被混淆处理的资源文件的变量、类的名称和数据包的名称、资源文件的名称和资源ID等信息记录在混淆资源文件白名单中。
在实施中,目标程序文件中包含的所有资源文件并不是均可以被混淆,如果其中的某些资源文件被混淆,可能会使得目标程序文件无法正常运行或在运行的过程中产生严重错误,或者,某些资源文件对于用户较重要,用户不希望该资源文件被混淆,为此,可以设置混淆资源文件白名单机制,用户可以通过混淆资源文件白名单记录禁止进行混淆处理的资源文件的信息。当获取到生成目标程序文件所需的资源文件和资源索引文件后,可以从混淆资源文件白名单中获取其中记录的禁止进行混淆处理的资源文件的信息。
在步骤S206中,从上述资源文件中移除混淆资源文件白名单中记录的信息对应的资源文件,将该资源文件中剩余的资源文件确定为待混淆的第一资源文件。
在实施中,由于混淆资源文件白名单中记录有禁止进行混淆处理的资源文件的信息,因此,可以对获取的生成目标程序文件所需的资源文件进行分析,确定上述资源文件中是否包含混淆资源文件白名单中记录的信息对应的资源文件(为了方便后续说明,此处的资源文件记为第三资源文件),如果上述资源文件中包含混淆资源文件白名单中记录的信息对应的第三资源文件,则需要从上述资源文件中将第三资源文件移除,剩余的资源文件即为待混淆的第一资源文件。如果上述资源文件中不包含混淆资源文件白名单中记录的信息对应的第三资源文件,则获取的生成目标程序文件所需的资源文件确定为待混淆的第一资源文件。
在步骤S208中,基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系。
其中,预定的混淆规则可以为生成在上述资源文件中具有唯一性的字符或字符串的规则。第一资源文件的预定属性信息可以包括第一资源文件的文件属性信息和第一资源文件内包含的内容中的属性信息,其中的文件属性信息如资源文件的名称、类型、存储路径、创建日期、修改日期、版本信息等,第一资源文件内包含的内容中的属性信息可以包括如资源文件的内容中包含的函数名、变量名、变量的值等。
在实施中,通过上述方式确定待混淆的第一资源文件后,可以为第一资源文件的预定属性信息对应的属性值和/或预定属性信息生成相应的字符或字符串,然后,可以将生成的字符或字符串分别与第一资源文件中包含的字符或字符串进行对比,如果生成的字符或字符串包含于第一资源文件中,则可以重新为预定属性信息对应的属性值和/或预定属性信息生成相应的字符或字符串,直到生成的字符或字符串不包含于第一资源文件中为止。可以使用生成的字符或字符串替换预定属性信息对应的属性值和/或预定属性信息,替换完成后,可以将替换后的资源文件作为第二资源文件。
同时,为了能够准确查找到混淆后的资源文件,可以将混淆前的资源文件与混淆后的资源文件建立映射关系,即可以构建第一资源文件与第二资源文件的映射关系。
在实际应用中,预定属性信息和预定属性信息对应的属性值可以包括多种,每一个资源文件可以设置有一个资源ID,该资源ID可以是在目标程序文件运行或目标程序文件对应的应用程序运行时,根据目标程序文件或该应用程序所在的终端设备的当前配置信息进行适配,因此,如果预定属性信息对应的属性值包括第一资源文件的资源ID的值,上述步骤S208的处理可以为:如果预先存储的映射关系中不包含第一资源文件的资源ID的值的映射关系,则基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系。
其中,资源ID可以是在目标程序文件运行或目标程序文件对应的应用程序运行时,根据目标程序文件或该应用程序所在的终端设备的当前配置信息进行适配,基于此,给定一个相同的资源ID,在终端设备的不同配置之下查找到的资源文件可能不同。可以通过该资源ID查找相应的资源文件,而在程序内部,如果是通过资源文件的名称来查找相应的资源文件,则需要先根据资源ID查找到相应的资源文件的名称,然后,再通过资源文件的名称确定相应的资源文件。
在实施中,可以根据实际情况预先存储资源文件的资源ID的值的映射关系。可以对第一资源文件的资源ID的值进行检测,如果预先存储的映射关系中不包含第一资源文件的资源ID的值,则可以确定预先存储的映射关系中不包含第一资源文件的资源ID的值的映射关系,也即是本地没有对第一资源文件进行混淆处理,此时,可以基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系,具体处理过程可以参见上述相关内容,在此不再赘述。
此外,如果预先存储的映射关系中包含第一资源文件的资源ID的值的映射关系,则基于预先存储的包含第一资源文件的资源ID的值的映射关系,确定第一资源文件与第二资源文件的映射关系。
在实施中,如果预先存储的映射关系中包含第一资源文件的资源ID的值的映射关系,则表明本地曾经对第一资源文件进行混淆处理,此时,为了提高处理效率,可以直接将预先存储的包含第一资源文件的资源ID的值的映射关系作为第一资源文件与第二资源文件的映射关系,或者,还可以将预先存储的包含第一资源文件的资源ID的值的映射关系进行满足用户需求的处理(如资源ID中的某一个字符为预定字符(具体如资源ID中的第一个字符为A)或为资源ID设置预定后缀等),处理后的映射关系作为第一资源文件与第二资源文件的映射关系。在实际应用中,基于预先存储的包含第一资源文件的资源ID的值的映射关系,确定第一资源文件与第二资源文件的映射关系的具体处理方式可以多种多样,具体可以根据实际情况设定,本申请实施例对此不做限定。
在实际应用中,除了可以对资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理外,还可以对资源文件所在的目录信息进行混淆处理,具体可以参见下述步骤S210~步骤S214的处理。
在步骤S210中,获取上述资源文件所在的根目录信息。
其中,该资源文件可以是第一资源文件,也可以是第一资源文件之外的其它资源文件等。
在实施中,资源文件可以存储于多级目录下,为此,可以构建多级目录的存储机制,其中可以包括一个根目录和一个或多个子目录等。为了确定需要进行混淆处理的目录的信息,可以获取存储资源文件的根目录的信息(即根目录信息)。
在步骤S212中,遍历根目录信息对应的根目录下的子目录,并确定该子目录中待混淆的第一子目录。
在实施中,可以基于多级目录的存储机制,对根目录信息对应的根目录下的各级子目录,从中确定哪些子目录需要进行混淆处理,哪些子目录不能进行混淆处理,具体地,可以预先设置目录白名单机制,用户可以通过目录白名单记录禁止进行混淆处理的目录的信息。可以通过目录白名单确定上述子目录中不能进行混淆处理的子目录的信息(为了方便后续说明,此处的子目录的信息记为第三子目录的信息),如果根目录信息对应的根目录下的子目录中包含第三子目录,则需要从上述子目录中将第三子目录移除,剩余的子目录即为待混淆的第一子目录。如果根目录信息对应的根目录下的子目录中不包含第三子目录,则将根目录下的子目录确定为待混淆的第一子目录。
在步骤S214中,基于预定的混淆规则,对第一子目录的信息进行混淆处理生成第二子目录,并构建第一子目录与第二子目录的目录映射关系。
其中,预定的混淆规则可以为生成在上述根目录下的子目录中具有唯一性的字符或字符串的规则。
在实施中,通过上述方式确定待混淆的第一子目录后,可以为第一子目录生成相应的字符或字符串,然后,可以将生成的字符或字符串分别与根目录下的子目录中包含的字符或字符串进行对比,如果生成的字符或字符串与根目录下的某一个或多个子目录相同,则可以重新为第一子目录生成相应的字符或字符串,直到生成的字符或字符串与根目录下的任一个子目录不同为止。可以使用生成的字符或字符串替换第一子目录的信息,替换完成后,可以将替换后的第一子目录作为第二子目录。
同时,为了能够准确查找到各个子目录下的资源文件,可以将混淆前的子目录与混淆后的子目录建立映射关系,即可以构建第一子目录与第二子目录的目录映射关系。
在步骤S216中,根据目录映射关系,使用第二子目录的信息替换资源索引文件中第一子目录的信息,并根据映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息。
在实施中,通过上述步骤S214的处理得到第一子目录与第二子目录的目录映射关系后,可以通过该目录映射关系对资源索引文件进行更新,具体地,由于资源索引文件中记录的目录的信息可能已经发生更改,如果继续使用资源索引文件中的第一子目录的信息,则在后续目标程序文件运行时会出现资源文件无法被调用等错误,因此,可以将资源索引文件中第一子目录的信息替换为第二子目录的信息,通过上述处理可以对资源索引文件进行更新。
此外,由于资源索引文件中记录的第一资源文件的相关信息可能已经发生更改,因此,还可以根据映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息,具体可以参见上述相关内容,在此不再赘述。
在步骤S218中,基于更新后的资源索引文件、第二资源文件和资源文件中除所述第一资源文件外的资源文件生成目标程序文件。
本申请实施例提供一种资源的混淆方法,通过获取生成目标程序文件所需的资源文件和资源索引文件,并确定该资源文件中待混淆的第一资源文件,然后,可以基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系,根据该映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息,以更新资源索引文件,基于更新后的资源索引文件、第二资源文件和该资源文件中除第一资源文件外的资源文件生成目标程序文件,这样,通过对待混淆的第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理,可以使得不法分子很难通过反编译手段盗取资源文件,从而保护了资源文件和应用程序的安全性,同时,对第一资源文件进行混淆处理还可以会减小目标程序文件的大小。
实施例三
本实施例将结合具体的应用场景,对本发明实施例提供的一种资源信息分享的方法进行详细的阐述,相应的应用场景为在Android操作系统下的应用场景,其中,目标程序文件可以为APK文件,资源索引文件可以为Resource.arsc等,资源文件所在的根目录为Res目录。
如图3所示,本申请实施例提供了一种资源的混淆方法,该方法的执行主体可以为终端设备或服务器。该方法可以应用于对应用程序中的文件进行封装或对应用程序中的资源文件进行保护等处理中。该方法具体可以包括以下步骤:
在步骤S302中,获取生成APK文件所需的资源文件和资源索引文件。
其中,APK文件可以是Android操作系统中文件格式为apk的文件,该APK文件通常为Android操作系统中的应用程序的安装文件。资源文件可以是APK文件对应的Res目录下的布局文件、图片文件、目录名等。资源索引文件可以是Resource.arsc,Resource.arsc可以是由AAPT工具在打包过程中生成的,它本身可以是一个资源的索引表,里面维护者资源ID、名称Name、路径Path或者值Value的对应关系。
在实施中,可以对已生成的APK文件中的资源文件进行混淆处理,具体地,在Android操作系统中,可以通过Gradle Task获取生成的APK文件的存储路径。此外,在Android操作系统中,每一个应用程序一般都会配置很多资源,用来适配不同密度、大小和方向的屏幕,以及适配不同的国家、地区和语言等,上述资源是在应用程序运行时根据终端设备的当前配置信息进行适配的。也即是给定一个相同的资源ID,在不同的终端设备配置之下,查找到的可能是不同的资源。上述查找的过程对应用程序来说,是完全透明的,该过程可以依靠Android资源管理框架来完成,而Android资源管理框架实际是由AssetManager和Resources两个类来实现的。其中,Resources类可以根据资源ID来查找相应的资源,而AssetManager类可以根据文件名来查找相应的资源。如果一个资源ID对应的是一个资源文件,则Resources类可以先根据资源ID查找到资源文件的文件名,然后再将该文件名提供给AssetManager类,以打开对应的资源文件。
通过上述方式查找到APK文件后,可以对APK文件进行解码,从而获取其中的Res目录下的资源文件和Resource.arsc。此外,由于APK文件本质上是一个压缩包,因此,也可以通过指定的解压缩程序对APK文件进行解压处理,以得到Res目录下的资源文件和Resource.arsc。
在步骤S304中,获取预设混淆资源文件白名单,该混淆资源文件白名单用于记录禁止进行混淆处理的资源文件的信息。
在实施中,可以判断是否启用混淆资源文件白名单(如Whitelist),可以通过混淆资源文件白名单指定哪些资源文件不可以被混淆处理(具体如应用程序的图标R.mipmap.ic_launcher等不能被混淆处理)。如果启用混淆资源文件白名单,则可以设置资源文件中的被混淆的字符或字符串为原始的字符或字符串,也即是不进行混淆处理,然后,可以进行相应对象缓存。
上述步骤S304的具体处理过程可以参见上述实施例二中步骤S204的相关内容,在此不再赘述。
在步骤S306中,从上述资源文件中移除混淆资源文件白名单中记录的信息对应的资源文件,将该资源文件中剩余的资源文件确定为待混淆的第一资源文件。
在实施中,可以通过Java程序语言的Files.walkFileTree方法遍历APK文件中的Res目录(即根目录)下的子目录,其中的子目录可以包括如Animator、Anim、Color、Drawable、Layout、Menu、Raw、Values等,同时,可以遍历每个子目录中的资源文件,并可以通过混淆资源文件白名单,确定其中需要混淆的资源文件(即第一资源文件),并可以将确定的第一资源文件放置到设定的集合中(具体采用的集合类型可以为HashSet等)。
其中,Files.walkFileTree方法具有递归遍历目录的功能。walkFileTree接收一个路径Path和FileVisitor作为参数。Path对象是需要遍历的目录,FileVistor则会在每次遍历中被调用。
对于Res目录,APK文件中的Res类资源可以放置在根目录Res的子目录下,其中保存的大部分资源文件可以被编译,并且均被赋予相应的资源ID。这样,即可以在应用程序中通过资源ID来访问Res类的资源。res类资源按照不同的用途可以进一步划分为以下类型:
animator类:该类资源以XML文件的形式保存在Res/Animator路径下,可以用于描述属性动画。属性动画可以通过改变对象的属性来实现动画效果,例如,通过不断地修改对象的坐标值来实现对象移动动画,又如,通过不断地修改对象的Alpha通道值来实现对象的渐变效果。
Anim类:该类资源以XML文件形式保存在Res/Anim路径下,可以用于描述补间动画。补间动画和属性动画不同,补间动画不是通过修改对象的属性来实现,而是在对象的原来形状或者位置的基础上实现一个变换来得到的,例如,对对象施加一个旋转变换,就可以获得一个旋转动画,又如,对对象实施一个缩放变换,就可以获得一个缩放动画。从数学角度来讲,就是在对象的原来形状或者位置的基础上施加一个变换矩阵来实现动画效果。需要说明的是,在动画的执行过程中,对象的属性是始终保持不变的,用户所看到的只不过是它的一个变形副本。
Color类:该类资源以XML文件形式保存在Res/Color路径下,可以用于描述对象颜色状态选择子。例如,可以定义一个选择子,规定一个对象在不同状态下显示不同的颜色,对象的状态可以划分为Pressed、Focused、Selected、Checkable、Checked、Enabled和Window_Focused等7种。
Drawable类:该类资源以XML文件或者Bitmap文件形式保存在Res/Drawable路径下,可以用于描述可绘制对象。例如,可以放置一些图片(图片的格式可以如.png、.9.png、.jpg、.gif等),以此来作为程序界面视图的背景图。需要说明的是,保存在该路径中的Bitmap文件在打包的过程中可能会被优化,例如,一个不需要多于256色的真彩色PNG文件可能会被转换成一个只有8位调色板的PNG面板,这样就可以无损地压缩图片,以减少图片所占用的内存资源。
Layout类:该类资源以XML文件形式保存在Res/Layout路径下,可以用于描述应用程序界面布局。
Menu类:该类资源以XML文件形式保存在Res/Menu路径下,可以用于描述应用程序菜单,例如,Options Menu、Context Menu和Sub Menu等。
Raw类:该类资源以任意格式的文件的形式保存在Res/Raw路径下,Raw类资源与Assets类资源一样,都是原装不动地打包在APK文件中,并且会被赋予资源ID,这样,可以在应用程序中通过资源ID来访问相应的资源文件。例如,假设在Res/Raw路径下有一个文件名为Filename的资源文件,并且它在编译的过程,被赋予的资源ID为R.raw.filename,那么就可以使用以下代码来进行访问:
InputStream is=getResources().openRawResource(R.raw.filename);
Values类:该类资源以XML文件形式保存在Res/Values路径下,可以用于描述某些简单值,例如,数组、颜色、尺寸、字符串和样式值等,通常,上述六种不同的值分别保存在文件名为arrays.xml、colors.xml、dimens.xml、strings.xml和styles.xml的资源文件中。
在步骤S308中,基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系。
其中,预定的混淆规则为生成在资源文件中具有唯一性的字符或字符串。第一资源文件的预定属性信息包括第一资源文件的文件属性信息和第一资源文件内包含的内容中的属性信息。
在实施中,可以解码资源索引文件Resource.arsc,得到资源文件的分布结构并可以缓存相关数据。
其中,Resources.arsc的文件格式是由一系列的Chunk构成,每一个Chunk均包含如下结构的ResChunk_header,可以用于描述该Chunk的基本信息。Resource.arsc的结构可以如下:
Figure BDA0002228697280000141
其中,type表示当前Chunk的类型,headerSize表示当前Chunk的头部大小,size表示当前Chunk的大小。
此外,Resources.arsc的第一个结构是资源文件的索引表头部,用于描述Resources.arsc的大小和资源包数量,其结构可以如下:
Figure BDA0002228697280000151
其中,header表示标准的Chunk头部信息格式,packageCount表示被编译的资源包的个数,Android操作系统中一个APK文件中可能包含多个资源包,默认情况下都只有一个,即应用程序的包名所在的资源包。
此外,紧跟着资源文件的索引表头部的是资源项的值字符串资源池,该字符串资源池包含了所有的在资源包里面所定义的资源项的值字符串,字符串资源池头部的结构如下:
Figure BDA0002228697280000152
Figure BDA0002228697280000161
其中,header表示标准的Chunk头部信息结构,stringCount表示字符串的个数,styleCount表示字符串样式的个数,flags表示字符串的属性,可取值包括0x000(UTF-16),0x001(字符串经过排序)、0X100(UTF-8)及其组合值,stringStart表示字符串内容块相对于其头部的距离,stylesStart表示字符串样式块相对于其头部的距离。
此外,紧接着头部的是两个偏移数组,分别是字符串偏移数组和字符串样式偏移数组。该两个偏移数组的大小分别等于stringCount和styleCount的值,而每一个元素的类型都是无符号整型。
字符串资源池中的字符串前两个字节为字符串长度,长度计算方法如下:len=(((hbyte&0x7F)<<8))|lbyte。另外,如果字符串编码格式为UTF-8,则字符串以0X00作为结束符,如果字符串编码格式为UTF-16,则以0X0000作为结束符。
字符串与字符串样式有一一对应的关系,也即是如果第n个字符串有样式,则其样式描述位于样式块的第n个元素。字符串样式的结构包括如下两个结构体,即ResStringPool_ref和ResStringPool_span。一个字符串可以对应多个ResStringPool_span和一个ResStringPool_ref。ResStringPool_span在前描述字符串的样式,ResStringPool_ref在后固定值为0XFFFFFFFF作为占位符。样式块最后会以两个值为0XFFFFFFFF的ResStringPool_ref作为结束。
此外,还可以创建两个预定格式的文件,如两个txt格式的文件,具体可以命名为:Resource_Mapping+APK名称.txt和merge_duplicated_res_mapping_+APK名称.txt,用于后续对混淆处理前后的资源文件进行记录,例如:Res/Drawable->R/C,这样,在应用程序运行过程中,如果出现问题,则可通过上述两个文件定位出现问题的原因。
可以先根据预制的混淆字符串池生成混淆的字符串名,在实际应用中,混淆字符串池可以分为两组,一组是“a-z”共26个英文字符,另一个组是“a-z”和“0-9”以及“_”,共37个字符,然后,可以通过三组循环处理,以此生成一个混淆的属性信息或属性值的集合。
其中,上述三组循环处理可以如下:
Figure BDA0002228697280000171
Figure BDA0002228697280000181
在实际应用中,预定属性信息和预定属性信息对应的属性值可以包括多种,如果预定属性信息对应的属性值包括第一资源文件的资源ID的值,上述步骤S308的处理可以为:如果预先存储的映射关系中不包含第一资源文件的资源ID的值的映射关系,则基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系。
在实施中,判断是否复用旧的Mapping文件中资源ID值的映射关系,如果可以复用旧的Mapping文件中资源ID值的映射关系,则可以继续使用旧的映射关系中的混淆字符串,否则从上述混淆字符串池中获取一个新的字符串,根据新的混淆字符串,生成相应的资源ID的映射关系,并可将混淆后的结果输出到resource_mapping+APK名称.txt和merge_duplicated_res_mapping+APK名称.txt中,从而形成新的Mapping文件,具体可以如下:
Figure BDA0002228697280000182
Figure BDA0002228697280000191
在步骤S310中,获取资源文件所在的Res目录信息。
在实施中,在Android操作系统中,资源文件所在的根目录可以为Res目录,则得到的根目录信息可以为Res等。
在步骤S312中,遍历Res目标信息对应的Res目录下的子目录,并确定子目录中待混淆的第一子目录的信息。
在实施中,在Android操作系统中,根目录下的子目录可以包括如Animator、Anim、Color、Drawable、Layout、Menu、Raw、Values等,因此,可以遍历上述各个子目录,可以通过目录白名单等方式,确定上述子目录中待混淆的第一子目录,从而得到第一子目录的信息。
在步骤S314中,基于预定的混淆规则,对第一子目录的信息进行混淆处理生成第二子目录,并构建第一子目录与第二子目录的目录映射关系。
其中,对第一子目录的信息的混淆处理可以参见上述对资源文件的混淆处理过程,在此不再赘述。
在步骤S316中,根据目录映射关系,使用第二子目录的信息替换Resource.arsc中第一子目录的信息,并根据映射关系,使用第二资源文件的信息替换Resource.arsc中第一资源文件的信息。
在实施中,可以根据上述混淆处理后的映射关系和目录映射关系,修改Res根目录中的相应子目录或者预定属性信息或其属性值,以更新Resources.arsc,并可以将相应的资源文件的存储路径进行调整,例如,将Res/Layout/test.xml改为R/L/a.xml等。
在步骤S318中,基于更新后的Resource.arsc、第二资源文件和资源文件中除第一资源文件外的资源文件生成APK文件。
在实施中,可以先将所有更新后的数据通过ZipOutputStream(Java程序语言中提供的一种用于生成压缩包的输出流)生成一个压缩包。
Figure BDA0002228697280000201
Figure BDA0002228697280000211
Figure BDA0002228697280000221
基于上述处理后,可以通过Apksigner工具进行签名,进而生成APK文件。
本申请实施例提供一种资源的混淆方法,通过获取生成目标程序文件所需的资源文件和资源索引文件,并确定该资源文件中待混淆的第一资源文件,然后,可以基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系,根据该映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息,以更新资源索引文件,基于更新后的资源索引文件、第二资源文件和该资源文件中除第一资源文件外的资源文件生成目标程序文件,这样,通过对待混淆的第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理,可以使得不法分子很难通过反编译手段盗取资源文件,从而保护了资源文件和应用程序的安全性,同时,对第一资源文件进行混淆处理还可以会减小目标程序文件的大小。
实施例四
以上为本申请实施例提供的资源的混淆方法,基于同样的思路,本申请实施例还提供一种资源的混淆装置,如图4所示。
所述资源的混淆装置包括:文件获取模块401、混淆模块402、索引文件更新模块403和程序文件生成模块404,其中:
文件获取模块401,用于获取生成目标程序文件所需的资源文件和资源索引文件,并确定所述资源文件中待混淆的第一资源文件;
混淆模块402,用于基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
索引文件更新模块403,用于根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,以更新所述资源索引文件;
程序文件生成模块404,用于基于更新后的资源索引文件、所述第二资源文件和所述资源文件中除所述第一资源文件外的资源文件生成所述目标程序文件。
本申请实施例中,所述文件获取模块401,包括:
白名单获取单元,用于获取预设混淆资源文件白名单,所述混淆资源文件白名单用于记录禁止进行混淆处理的资源文件的信息;
文件获取单元,用于从所述资源文件中移除所述混淆资源文件白名单中记录的信息对应的资源文件,将所述资源文件中剩余的资源文件确定为所述待混淆的第一资源文件。
本申请实施例中,所述装置还包括:
根目录获取模块,用于获取所述资源文件所在的根目录信息;
遍历所述根目录信息对应的根目录下的子目录,并确定所述子目录中待混淆的第一子目录;
目录映射构建模块,用于基于预定的混淆规则,对所述第一子目录的信息进行混淆处理生成第二子目录,并构建所述第一子目录与所述第二子目录的目录映射关系;
所述索引文件更新模块403,用于根据所述目录映射关系,使用所述第二子目录的信息替换所述资源索引文件中所述第一子目录的信息,并根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息。
本申请实施例中,所述预定的混淆规则为生成在所述资源文件中具有唯一性的字符或字符串的规则。
本申请实施例中,所述字符或字符串由字母、数字和预定符号中的一种或多种构成。
本申请实施例中,所述预定属性信息对应的属性值包括所述第一资源文件的资源ID的值,所述混淆模块,用于构建所述第一资源文件的资源ID的值与所述第二资源文件的资源ID的值之间的映射关系,以确定所述第一资源文件与所述第二资源文件的映射关系。
本申请实施例中,所述预定属性信息对应的属性值包括所述第一资源文件的资源ID的值,所述混淆模块,用于如果预先存储的映射关系中不包含所述第一资源文件的资源ID的值的映射关系,则基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
所述装置还包括:
映射关系确定模块,用于如果预先存储的映射关系中包含所述第一资源文件的资源ID的值的映射关系,则基于预先存储的包含所述第一资源文件的资源ID的值的映射关系,确定所述第一资源文件与所述第二资源文件的映射关系。
本申请实施例中,所述第一资源文件的预定属性信息包括所述第一资源文件的文件属性信息和所述第一资源文件内包含的内容中的属性信息。
本申请实施例提供一种资源的混淆装置,通过获取生成目标程序文件所需的资源文件和资源索引文件,并确定该资源文件中待混淆的第一资源文件,然后,可以基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系,根据该映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息,以更新资源索引文件,基于更新后的资源索引文件、第二资源文件和该资源文件中除第一资源文件外的资源文件生成目标程序文件,这样,通过对待混淆的第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理,可以使得不法分子很难通过反编译手段盗取资源文件,从而保护了资源文件和应用程序的安全性,同时,对第一资源文件进行混淆处理还可以会减小目标程序文件的大小。
实施例五
基于同样的思路,本申请实施例还提供一种资源的混淆设备,如图5所示。
该资源的混淆设备可以为上述实施例提供的终端设备或服务器等。
资源的混淆设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上的处理器501和存储器502,存储器502中可以存储有一个或一个以上存储应用程序或数据。其中,存储器502可以是短暂存储或持久存储。存储在存储器502的应用程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对资源的混淆设备中的一系列计算机可执行指令。更进一步地,处理器501可以设置为与存储器502通信,在资源的混淆设备上执行存储器502中的一系列计算机可执行指令。资源的混淆设备还可以包括一个或一个以上电源503,一个或一个以上有线或无线网络接口504,一个或一个以上输入输出接口505,一个或一个以上键盘506。
具体在本实施例中,资源的混淆设备包括有存储器,以及一个或一个以上的程序,其中一个或者一个以上程序存储于存储器中,且一个或者一个以上程序可以包括一个或一个以上模块,且每个模块可以包括对资源的混淆设备中的一系列计算机可执行指令,且经配置以由一个或者一个以上处理器执行该一个或者一个以上程序包含用于进行以下计算机可执行指令:
获取生成目标程序文件所需的资源文件和资源索引文件,并确定所述资源文件中待混淆的第一资源文件;
基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,以更新所述资源索引文件;
基于更新后的资源索引文件、所述第二资源文件和所述资源文件中除所述第一资源文件外的资源文件生成所述目标程序文件。
本申请实施例中,所述确定所述资源文件中待混淆的第一资源文件,包括:
获取预设混淆资源文件白名单,所述混淆资源文件白名单用于记录禁止进行混淆处理的资源文件的信息;
从所述资源文件中移除所述混淆资源文件白名单中记录的信息对应的资源文件,将所述资源文件中剩余的资源文件确定为所述待混淆的第一资源文件。
本申请实施例中,所述根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息之前,还包括:
获取所述资源文件所在的根目录信息;
遍历所述根目录信息对应的根目录下的子目录,并确定所述子目录中待混淆的第一子目录;
基于预定的混淆规则,对所述第一子目录的信息进行混淆处理生成第二子目录,并构建所述第一子目录与所述第二子目录的目录映射关系;
所述根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,包括:
根据所述目录映射关系,使用所述第二子目录的信息替换所述资源索引文件中所述第一子目录的信息,并根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息。
本申请实施例中,所述预定的混淆规则为生成在所述资源文件中具有唯一性的字符或字符串的规则。
本申请实施例中,所述字符或字符串由字母、数字和预定符号中的一种或多种构成。
本申请实施例中,所述预定属性信息对应的属性值包括所述第一资源文件的资源ID的值,所述构建所述第一资源文件与所述第二资源文件的映射关系,包括:
构建所述第一资源文件的资源ID的值与所述第二资源文件的资源ID的值之间的映射关系,以确定所述第一资源文件与所述第二资源文件的映射关系。
本申请实施例中,所述预定属性信息对应的属性值包括所述第一资源文件的资源ID的值,所述基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系,包括:
如果预先存储的映射关系中不包含所述第一资源文件的资源ID的值的映射关系,则基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
还包括:
如果预先存储的映射关系中包含所述第一资源文件的资源ID的值的映射关系,则基于预先存储的包含所述第一资源文件的资源ID的值的映射关系,确定所述第一资源文件与所述第二资源文件的映射关系。
本申请实施例中,所述第一资源文件的预定属性信息包括所述第一资源文件的文件属性信息和所述第一资源文件内包含的内容中的属性信息。
本申请实施例提供一种资源的混淆设备,通过获取生成目标程序文件所需的资源文件和资源索引文件,并确定该资源文件中待混淆的第一资源文件,然后,可以基于预定的混淆规则,对第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理生成第二资源文件,并构建第一资源文件与第二资源文件的映射关系,根据该映射关系,使用第二资源文件的信息替换资源索引文件中第一资源文件的信息,以更新资源索引文件,基于更新后的资源索引文件、第二资源文件和该资源文件中除第一资源文件外的资源文件生成目标程序文件,这样,通过对待混淆的第一资源文件的预定属性信息对应的属性值和/或预定属性信息进行混淆处理,可以使得不法分子很难通过反编译手段盗取资源文件,从而保护了资源文件和应用程序的安全性,同时,对第一资源文件进行混淆处理还可以会减小目标程序文件的大小。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (14)

1.一种资源的混淆方法,其特征在于,所述方法包括:
获取生成目标程序文件所需的资源文件和资源索引文件,并确定所述资源文件中待混淆的第一资源文件;
基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
根据预设的目录白名单,确定所述资源文件所在的根目录下待混淆的第一子目录;所述目录白名单用于记录禁止进行混淆处理的子目录;
为所述第一子目录生成具有唯一性的字符或字符串,并使用所述字符或字符串对所述第一子目录的信息进行混淆处理生成第二子目录,构建所述第一子目录与所述第二子目录的目录映射关系;
根据所述目录映射关系,使用所述第二子目录的信息替换所述资源索引文件中所述第一子目录的信息,并根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,以更新所述资源索引文件;
基于更新后的资源索引文件、所述第二资源文件和所述资源文件中除所述第一资源文件外的资源文件生成所述目标程序文件。
2.根据权利要求1所述的方法,其特征在于,所述确定所述资源文件中待混淆的第一资源文件,包括:
获取预设混淆资源文件白名单,所述混淆资源文件白名单用于记录禁止进行混淆处理的资源文件的信息;
从所述资源文件中移除所述混淆资源文件白名单中记录的信息对应的资源文件,将所述资源文件中剩余的资源文件确定为所述待混淆的第一资源文件。
3.根据权利要求1所述的方法,其特征在于,所述根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息之前,所述方法还包括:
获取所述资源文件所在的根目录信息;
遍历所述根目录信息对应的根目录下的子目录,并确定所述子目录中待混淆的第一子目录;
基于预定的混淆规则,对所述第一子目录的信息进行混淆处理生成第二子目录,并构建所述第一子目录与所述第二子目录的目录映射关系;
所述根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,包括:
根据所述目录映射关系,使用所述第二子目录的信息替换所述资源索引文件中所述第一子目录的信息,并根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述预定的混淆规则为生成在所述资源文件中具有唯一性的字符或字符串的规则。
5.根据权利要求4所述的方法,其特征在于,所述字符或字符串由字母、数字和预定符号中的一种或多种构成。
6.根据权利要求1所述的方法,其特征在于,所述预定属性信息对应的属性值包括所述第一资源文件的资源ID的值,所述构建所述第一资源文件与所述第二资源文件的映射关系,包括:
构建所述第一资源文件的资源ID的值与所述第二资源文件的资源ID的值之间的映射关系,以确定所述第一资源文件与所述第二资源文件的映射关系。
7.根据权利要求1所述的方法,其特征在于,所述预定属性信息对应的属性值包括所述第一资源文件的资源ID的值,所述基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系,包括:
如果预先存储的映射关系中不包含所述第一资源文件的资源ID的值的映射关系,则基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
所述方法还包括:
如果预先存储的映射关系中包含所述第一资源文件的资源ID的值的映射关系,则基于预先存储的包含所述第一资源文件的资源ID的值的映射关系,确定所述第一资源文件与所述第二资源文件的映射关系。
8.根据权利要求1所述的方法,其特征在于,所述第一资源文件的预定属性信息包括所述第一资源文件的文件属性信息和所述第一资源文件内包含的内容中的属性信息。
9.一种资源的混淆装置,其特征在于,所述装置包括:
文件获取模块,用于获取生成目标程序文件所需的资源文件和资源索引文件,并确定所述资源文件中待混淆的第一资源文件;
混淆模块,用于基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
根据预设的目录白名单,确定所述资源文件所在的根目录下待混淆的第一子目录;所述目录白名单用于记录禁止进行混淆处理的子目录;
为所述第一子目录生成具有唯一性的字符或字符串,并使用所述字符或字符串对所述第一子目录的信息进行混淆处理生成第二子目录,构建所述第一子目录与所述第二子目录的目录映射关系;
索引文件更新模块,用于根据所述目录映射关系,使用所述第二子目录的信息替换所述资源索引文件中所述第一子目录的信息,并根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息,以更新所述资源索引文件;
程序文件生成模块,用于基于更新后的资源索引文件、所述第二资源文件和所述资源文件中除所述第一资源文件外的资源文件生成所述目标程序文件。
10.根据权利要求9所述的装置,其特征在于,所述文件获取模块,包括:
白名单获取单元,用于获取预设混淆资源文件白名单,所述混淆资源文件白名单用于记录禁止进行混淆处理的资源文件的信息;
文件获取单元,用于从所述资源文件中移除所述混淆资源文件白名单中记录的信息对应的资源文件,将所述资源文件中剩余的资源文件确定为所述待混淆的第一资源文件。
11.根据权利要求9所述的装置,其特征在于,所述装置还包括:
根目录获取模块,用于获取所述资源文件所在的根目录信息;
遍历所述根目录信息对应的根目录下的子目录,并确定所述子目录中待混淆的第一子目录;
目录映射构建模块,用于基于预定的混淆规则,对所述第一子目录的信息进行混淆处理生成第二子目录,并构建所述第一子目录与所述第二子目录的目录映射关系;
所述索引文件更新模块,用于根据所述目录映射关系,使用所述第二子目录的信息替换所述资源索引文件中所述第一子目录的信息,并根据所述映射关系,使用所述第二资源文件的信息替换所述资源索引文件中所述第一资源文件的信息。
12.根据权利要求9所述的装置,其特征在于,所述预定属性信息对应的属性值包括所述第一资源文件的资源ID的值,所述混淆模块,用于构建所述第一资源文件的资源ID的值与所述第二资源文件的资源ID的值之间的映射关系,以确定所述第一资源文件与所述第二资源文件的映射关系。
13.根据权利要求9所述的装置,其特征在于,所述预定属性信息对应的属性值包括所述第一资源文件的资源ID的值,所述混淆模块,用于如果预先存储的映射关系中不包含所述第一资源文件的资源ID的值的映射关系,则基于预定的混淆规则,对所述第一资源文件的预定属性信息对应的属性值和/或所述预定属性信息进行混淆处理生成第二资源文件,并构建所述第一资源文件与所述第二资源文件的映射关系;
所述装置还包括:
映射关系确定模块,用于如果预先存储的映射关系中包含所述第一资源文件的资源ID的值的映射关系,则基于预先存储的包含所述第一资源文件的资源ID的值的映射关系,确定所述第一资源文件与所述第二资源文件的映射关系。
14.根据权利要求9所述的装置,其特征在于,所述第一资源文件的预定属性信息包括所述第一资源文件的文件属性信息和所述第一资源文件内包含的内容中的属性信息。
CN201910960299.8A 2019-10-10 2019-10-10 一种资源的混淆方法和装置 Active CN110781462B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910960299.8A CN110781462B (zh) 2019-10-10 2019-10-10 一种资源的混淆方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910960299.8A CN110781462B (zh) 2019-10-10 2019-10-10 一种资源的混淆方法和装置

Publications (2)

Publication Number Publication Date
CN110781462A CN110781462A (zh) 2020-02-11
CN110781462B true CN110781462B (zh) 2022-02-15

Family

ID=69385117

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910960299.8A Active CN110781462B (zh) 2019-10-10 2019-10-10 一种资源的混淆方法和装置

Country Status (1)

Country Link
CN (1) CN110781462B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112052464B (zh) * 2020-08-21 2024-03-22 北京智游网安科技有限公司 对资源文件进行虚拟化保护的方法、智能终端、存储介质
CN112016059A (zh) * 2020-08-31 2020-12-01 百度时代网络技术(北京)有限公司 用于处理数据的方法、装置、设备以及存储介质
CN113064609B (zh) * 2021-03-05 2024-05-28 深圳市欢太科技有限公司 一种资源加载方法及客户端、服务器、存储介质
CN113094664B (zh) * 2021-04-09 2022-11-04 每日互动股份有限公司 一种防止安卓应用程序被反编译的系统
CN113190237B (zh) * 2021-05-10 2024-01-19 北京百度网讯科技有限公司 数据处理方法、系统和装置
CN115935302B (zh) * 2022-12-13 2023-09-15 深圳市探鸽智能科技有限公司 安卓安装包的生成方法和装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101711092B1 (ko) * 2014-09-25 2017-03-02 주식회사 안랩 실행파일 복원 장치 및 방법
US10075291B1 (en) * 2015-05-27 2018-09-11 Citigroup Technology, Inc. Data deduplication and compression evaluation methods and systems
CN107038354A (zh) * 2016-02-03 2017-08-11 阿里巴巴集团控股有限公司 代码混淆方法、代码运行方法及装置
CN107967415B (zh) * 2017-12-11 2021-09-17 北京奇虎科技有限公司 资源混淆保护方法、系统及终端装置
CN108932436B (zh) * 2018-07-06 2020-07-28 四川长虹电器股份有限公司 一种基于安卓系统的app说明书的软件安全加固方法
CN109614771B (zh) * 2018-10-31 2020-07-03 同盾控股有限公司 一种基于Java代码的混淆方法和装置
CN109858203A (zh) * 2018-12-21 2019-06-07 厦门市美亚柏科信息股份有限公司 一种Android平台应用的安全防护方法、装置及存储介质

Also Published As

Publication number Publication date
CN110781462A (zh) 2020-02-11

Similar Documents

Publication Publication Date Title
CN110781462B (zh) 一种资源的混淆方法和装置
CN110506271B (zh) 针对隐私敏感用户内容的可配置注释
US9471288B2 (en) Compile based obfuscation
JP6257754B2 (ja) データの保護
WO2021217980A1 (zh) java代码的加壳方法与系统
EP2897074A1 (en) Application code obfuscation device based on self-conversion and method therefor
CN111159662A (zh) 一种数据的处理方法和装置
CN107967415B (zh) 资源混淆保护方法、系统及终端装置
CN109598107B (zh) 一种基于应用安装包文件的代码转换方法及装置
CN113704706B (zh) 代码加固方法、装置
CN109740315A (zh) 基于安卓平台的常量保护方法、装置、设备及存储介质
CN109614772B (zh) 基于应用安装包文件的代码转换方法及装置
CN114925338A (zh) 一种编译方法、装置、设备、介质和产品
CN113342918A (zh) 森林资源一张图质检逻辑规则更新方法、系统及云平台
CN117093964A (zh) 一种源代码的加密方法、装置、存储介质及电子设备
CN114090965B (zh) java代码混淆方法、系统、计算机设备及存储介质
CN114357391A (zh) 数据加、解密方法及计算机存储介质
CN113282294A (zh) 基于安卓平台Java字符串混淆的方法和装置
CN116235174A (zh) 用于执行加密算法的设备和方法
CN111291333A (zh) 一种Java应用程序加密方法及装置
CN111090425A (zh) 一种程序封装方法、装置及电子设备
CN115935302B (zh) 安卓安装包的生成方法和装置
CN110084005A (zh) 一种代码的处理方法及装置
CN113642020B (zh) 配置文件的动态加密方法、装置、电子设备及存储介质
CN115168883A (zh) 字符串加密方法、装置、终端设备以及存储介质

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
GR01 Patent grant
GR01 Patent grant