CN111428209A - 一种应用程序的混淆方法、装置及存储介质 - Google Patents

一种应用程序的混淆方法、装置及存储介质 Download PDF

Info

Publication number
CN111428209A
CN111428209A CN201910024127.XA CN201910024127A CN111428209A CN 111428209 A CN111428209 A CN 111428209A CN 201910024127 A CN201910024127 A CN 201910024127A CN 111428209 A CN111428209 A CN 111428209A
Authority
CN
China
Prior art keywords
file
target
path
obfuscated
node
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
CN201910024127.XA
Other languages
English (en)
Other versions
CN111428209B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910024127.XA priority Critical patent/CN111428209B/zh
Publication of CN111428209A publication Critical patent/CN111428209A/zh
Application granted granted Critical
Publication of CN111428209B publication Critical patent/CN111428209B/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)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及计算机技术领域,公开了一种应用程序的混淆方法、装置及存储介质,用于实现混淆应用程序以保护应用程序源代码的同时,降低破坏应用程序的源代码的拓扑结构,进而有利于后期的调试。所述方法包括:从应用程序的源文件中,确定待混淆的至少一个目标文件;将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值;由替换后的各目标文件以及所述源文件中的其他剩余文件,形成混淆后的应用程序。

Description

一种应用程序的混淆方法、装置及存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种应用程序的混淆方法、装置及存储介质。
背景技术
随着计算机技术的发展,产生了各种类型的应用程序,这极大的丰富了人们的生活、工作和学习。通常,应用程序在发布后,容易被反编译而暴露其源代码,致使该应用程序所携带的信息不安全,这时,需要对相关应用程序所涉及的代码进行混淆处理,以便对其有效代码的隐藏,然而,如何在实现对应用程序所涉及的源代码的保护的同时,以降低破坏应用程序的源代码的拓扑结构,以便有利于后期的调试,是一个需要解决的技术问题。
发明内容
本发明实施例提供一种应用程序的混淆方法、装置及存储介质,用于实现混淆应用程序以保护应用程序源代码的同时,降低破坏应用程序的源代码的拓扑结构,进而有利于后期的调试。
一方面,本发明实施例提供了一种应用程序的混淆方法,包括:
从应用程序的源文件中,确定待混淆的至少一个目标文件;
将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值;
由替换后的各目标文件以及所述源文件中的其他剩余文件,形成混淆后的应用程序。
另一方面,本发明实施例提供了一种应用程序混淆装置,包括:
确定单元,用于从应用程序的源文件中,确定待混淆的至少一个目标文件;
替换单元,用于将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值;
形成单元,用于由替换后的各目标文件以及所述源文件中的其他剩余文件,形成混淆后的应用程序。
另一方面,本发明实施例提供了一种应用程序混淆装置,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行本发明实施例中提供的应用程序混淆方法的步骤。
另一方面,本发明实施例提供了一种应用程序混淆装置,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行本发明实施例中提供的应用程序混淆方法的步骤。
本发明实施例中提供的应用程序混淆方案,首先从应用程序的源文件中,确定待混淆的至少一个目标文件,然后将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值,并由替换后的各目标文件以及源文件中的其他剩余文件,形成混淆后的应用程序。可见本发明实施例中,仅对应用程序的文件路径进行了混淆,文件路径又可称为文件的名称,所以,本发明实施例中仅修改了应用程序源文件中的部分或全部文件的文件名,保留了应用程序绝大部分源文件的文件内容,因此,在达到混淆应用程序的目的的同时,也不会破坏应用程序的源代码的拓扑结构,因此,若在后期运行中出现异常,能够有效降低异常问题的定位难度,进而有利于后期的调试。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为本发明实施例提供的一种应用场景示意图;
图2为本发明实施例提供的一种应用程序混淆方法的流程图;
图3为本发明实施例提供的应用程序中一种类型文件混淆替换的流程图;
图4为本发明实施例提供的一种抽象语法树结构示意图;
图5为本发明实施例提供的应用程序中另一种类型文件混淆替换的流程图;
图6为本发明实施例提供一种应用程序混淆装置示意图;
图7为本发明实施例提供另一种应用程序混淆装置示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明技术方案的一部分实施例,而不是全部的实施例。基于本申请文件中记载的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明技术方案保护的范围。
下面对本发明实施例中涉及的部分概念进行介绍。
应用程序:又可称为APP,是指基于特定编程语言开发完成的软件,通常,应用程序能够为用户提供特定的服务或体验,这样的应用程序如社交平台中的小程序,手机中的浏览器等等。
JavaScript编程语言:是指一种直译式脚本语言,广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,以及为用户提供更流畅美观的浏览效果。
在具体实践过程中,本发明的发明人发现,现有技术中,主要是采用UglifyJS方案对应用程序所涉及的代码进行混淆,而该方案实质上是通过修改应用程序所涉及的代码中的变量名、改写代码中的表达式、删除代码中的空白字符的方式,来达到混淆代码的目的。然而,上述现有方式中,由于其改变了代码中的变量名、改写了表达式以及删除该代码中的空白字符,会打乱应用程序所涉及的代码的层次,进而破坏该代码的拓扑结构,那么,将通过上述方式混淆后的应用程序部署到生产环境中,例如使用混淆后的代码运行在用户的浏览器上,若运行出现异常,则需要对代码进行异常定位,即寻找代码中产生异常的问题,然而,由于混淆后的代码的拓扑结构已被破坏,导致难以定位代码中的异常问题,进而不利于后期调试。
为此,本发明实施例提出了一种应用程序的混淆方法,该方法从应用程序的源文件中,确定待混淆的至少一个目标文件,然后将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值,并由替换后的各目标文件以及源文件中的其他剩余文件,形成混淆后的应用程序。可见本发明实施例中,仅对应用程序的文件路径进行了混淆,文件路径又可称为文件的名称,所以,本发明实施例中仅修改了应用程序源文件中的部分或全部文件的文件名,保留了应用程序绝大部分源文件的文件内容,因此,在达到混淆应用程序的目的的同时,也不会破坏应用程序的源代码的拓扑结构,因此,若在后期运行中出现异常,能够有效降低异常问题的定位难度,进而有利于后期的调试。
本发明实施例中的应用程序的混淆方法可以应用于如图1所示的应用场景,该应用场景中包括终端设备10以及应用程序混淆装置,其中,终端设备可以为任何能够按照程序运行,自动、高速处理大量数据的智能电子设备,这样的终端设备如电脑,ipad,手机等。应用程序混淆装置也可以与终端设备10不同的其他终端设备,还可以为图1所示的服务器11,服务器11可以是若干台服务器组成的服务器集群或云计算中心,也可以是一台服务器。终端设备10与服务器11可以通过网络连接,网络可以为局域网、广域网或移动互联网等通信网络中的任意一种。
在该应用场景中,服务器11可以按照本发明实施例中的方法,将应用程序源文件中的代码(又可称为源代码)进行混淆,该应用程序可以是基于JavaScript编译的应用程序,这样的应用程序如运行在社交平台中的小程序,该应用程序还可以是基于其他编译语言如Java编译的应用程序,在此就不一一列举了。
终端设备10中可以安装有经过本发明实施例的混淆方法混淆后的应用程序,例如,终端设备10可以向服务器11发送安装应用程序的请求,服务器11在接收到该请求之后,将根据本发明实施例的混淆方法混淆后的应用程序的发送给终端设备10,以便终端设备10将该应用程序的文件部署到终端设备10上,进而可运行该应用程序。
需要说明的是,上文提及的应用场景仅是为了便于理解本发明的精神和原理而示出,本发明实施例在此方面不受任何限制。相反,本发明实施例可以应用于适用的任何场景。
下面结合图1所示的应用场景,对本发明实施例提供应用程序的混淆方法进行说明。
如图2所示,本发明实施例中提供的应用程序的混淆方法,包括:
步骤201:获取应用程序的源文件。
在本发明实施例中,可获取应用程序的源文件,其中,应用程序的源文件是指使用编译语言如JavaScript等写出来的源代码保存为文件后的结果,应用程序又可称为应用项目,通常,一个应用程序可由多个文件构成,对应的,应用程序的源文件的文件数目就为多个,且每个文件中保存有对应的源代码。
步骤202:获取应用程序的映射表。
其中,映射表记录应用程序的源文件中待混淆的各目标文件的文件路径,与各混淆映射值之间的对应关系。
在本发明实施例中,应用程序的映射表可以预先设定,即预先设定应用程序的源文件中需要混淆的目标文件,目标文件的数目可以为一个,也可以为多个,在具体实践过程中,可以根据实际需要灵活设置。其中,目标文件可以是应用程序的源文件中的引入文件,引入文件为应用程序的源文件第一类型文件调用的文件,目标文件也可以是应用程序的源文件中的未调用引入文件的第二类型文件。
例如,应用程序的源文件包括文件1、文件2、以及文件3,其中,文件2调用文件3,文件1与文件2和文件3之间不存在调用关系,即文件1未调用文件2和文件3,文件2和文件3也未调用文件1;那么,源文件中的文件3可视为引入文件,调用文件3的文件2可视为源文件中的第一类型文件,文件1和文件3由于未调用源文件中的引入文件,所以,文件1和文件3可视为第二类型文件。
因此,在本发明实施例中,还可以获取应用程序的映射表,该映射表中待混淆的各目标文件的文件路径对应的混淆映射值,可以通过以下方式获得:先对待混淆的各目标文件的文件路径进行不可逆映射,从而分别获得待混淆的各目标文件的文件路径对应的混淆映射值。然后,根据获得的混淆映射值,建立各文件路径与其对应的混淆映射值之间的对应关系,由该对应关系形成上文中的映射表。
其中,不可逆映射的方式包括多种,例如采用字典序的方式,为待混淆的各目标文件的文件路径(即文件名)在按字典序排序后的位置分配序号,并将待混淆的各目标文件的文件路径分配获得的序号,分别作为待混淆的各目标文件的文件路径的混淆映射值;或者使用待混淆的各目标文件的文件路径的不可逆摘要值,分别作为待混淆的各目标文件的文件路径的混淆映射值,其中,待混淆的各目标文件的文件路径的不可逆摘要值可通过MD5算法获得或通过SHA1算法获得。
需要说明的是,在本发明实施例中,步骤202可以与步骤201同时执行,也可以先于步骤201执行,还可以在步骤201之后执行,在此不做任何限制。
步骤203:根据映射表,从源文件中确定待混淆的至少一个目标文件。
在本方发明实施例中,如上文叙述,应用程序源文件中的待混淆的目标文件的数目可以为一个,也可以为多个,当根据步骤202获取到应用程序的映射表之后,可以通过映射表,从源文件中确定待混淆的至少一个目标文件,即应用程序的源文件中待混淆的各目标文件的文件路径记录在映射表中。
在实际应用中,同一个文件的文件路径可以使用该文件的绝对路径表示该文件的文件路径,也可以使用该文件的相对路径表示该文件的文件路径,其中,绝对路径是指从盘符开始的路径,相对路径是指从当前路径开始的路径,下文将举例说明。因此,在本发明实施例中,映射表中记录的待混淆的各目标文件的文件路径,可以是待混淆的各目标文件的相对路径,也可以是待混淆的各目标文件的绝对路径。
这里继续以上文列举的文件1、文件2、以及文件3为例,若文件2的文件路径(绝对路径或相对路径)和文件3的文件路径(绝对路径或相对路径)记录在映射表中,可确定文件2和文件3即为上述至少一个目标文件;若文件1的文件路径(绝对路径或相对路径)记录在映射表中,文件2和文件3的文件路径未记录在映射表中,则可确定文件1为上述至少一个目标文件;若文件1的文件路径、文件2的文件路径以及文件3的文件路径均记录在映射表中,可确定至少一个目标文件包括文件1、文件2以及文件3。
步骤204:将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值。
在本发明实施例中,映射表中记录了待混淆的各个目标文件对应的混淆映射值,因此,在从源文件中确定待混淆的至少一个目标文件之后,可根据映射表,获取到各个目标文件的文件路径对应的混淆映射值,然后将各个目标文件的文件路径,分别替换为各个目标文件的文件路径对应的混淆映射值。
在本发明实施例中,将各个目标文件的文件路径,分别替换为各个目标文件的文件路径对应的混淆映射值时,若存在目标文件为引入文件,则需要将应用程序源文件中调用该引入文件的第一类型文件所保存的代码中涉及该引入文件的文件路径替换为对应的混淆映射值,以及将应用程序源文件中的源目录中的该引入文件的文件路径替换为对应的混淆映射值,下文将对此详细介绍。
步骤205:由替换后的各目标文件以及源文件中的其他剩余文件,形成混淆后的应用程序。
在本发明实施例中,步骤205中的源文件中的其他剩余文件,是指应用程序的源文件中未进行文件路径替换的文件,在实际应用中,应用程序的源文件中未进行文件路径替换的文件的数目可能为零,即源文件所有的文件均为待替换的目标文件,并按照上文的方式进行了各个目标文件的文件路径的替换,那么,此时步骤205由替换后的所有目标文件形成混淆后的应用程序;应用程序的源文件中未进行文件路径替换的文件的数目也可能为一个或多个,即源文件中部分文件(目标文件)的文件路径需要替换,另一部分文件的文件路径不需要替换,那么,针对需要替换的部分文件即目标文件按照上文的方式进行文件路径的替换之后,可由替换后的各目标文件以及源文件中的其他剩余文件,形成混淆后的应用程序。
作为一种可选的方式,在本发明实施例中,若应用程序的源文件中待混淆的至少一个目标文件包括引入文件时,上文步骤203和步骤204可以按照图3所示流程实现,图3所示的流程包括:
步骤301:解析源文件中的各文件,获得各文件的抽象语法树。
即在本发明实施例中,可解析应用程序源文件中的各个文件,获得各个文件的抽象语法树,其中,抽象语法树是指,源文件中各个文件的源代码的抽象语法结构的树状表现形式,抽象语法树中包括多个节点,每个节点都表示源代码中的一种结构,例如图4所示,为抽象语法树的一种示意图,包括节点1至节点5,其中,每个节点至少包括两种属性,即该节点的名称和该节点的类型,节点的名称如引用函数调用require,节点的类型如变量、字符串常量等,各节点的相连通的上一个节点可视为该节点的父节点,如图4中,节点4的父节点为节点3,抽象语法树的最上面的节点如图4中的节点1可视为根节点。
步骤302:遍历各抽象语法树中的各个节点,以确定是否存在目标节点,若是,则执行步骤303,否则继续执行步骤302,直到遍历各抽象语法树中的所有节点。
在本发明实施例中,目标节点是指满足以下条件的节点,即目标节点的名称为引入文件调用require、目标节点的父节点的类型为函数调用、以及目标节点的父节点仅包括一个传入参数且该传入参数的类型为字符串常量。那么,满足上述条件的目标节点所代表的文件,才为本发明实施例中的引入文件,对应的,该目标节点的父节点的传入参数即为目标节点所代表的引入文件的文件路径。
因此,在本发明实施例中,在获得源文件中的各文件的抽象语法树之后,遍历各抽象语法树中的各个节点,以确定是否存在满足上述条件的目标节点,若存在,则执行以下步骤303。
步骤303:确定目标节点所代表的引入文件的文件路径是否记录在映射表中,若是,则执行步骤304,否则,继续执行步骤302,直到遍历各抽象语法树中的所有节点。
步骤304:确定目标节点所代表的引入文件为至少一个目标文件。
其中,目标节点所在的文件为上文叙述的第一类型文件。
即在遍历到满足上文叙述的条件的目标节点时,还可以确定该目标节点所代表的引入文件的文件路径是否记录在映射表中,即确定该目标节点所代表的引入文件是否为待混淆的目标文件,若目标节点所代表的引入文件的文件路径记录在映射表中,则确定该目标节点所代表的引入文件为待混淆的至少一个目标文件。
在实际应用中,满足上文叙述的条件的目标节点可能为多个,那么,针对每个目标节点,均需要确定每个目标节点所代表的引入文件的文件路径是否记录在映射表,若是,则确定对应的目标节点为待混淆的至少一个目标文件。
步骤305:将各目标节点所代表的引入文件的文件路径,分别替换为各目标节点所代表的引入文件的文件路径对应的混淆映射值。
在本发明实施例中,在确定各目标节点所代表的引入文件为待混淆的至少一个目标文件之后,将各目标节点所代表的引入文件的文件路径,分别替换为各目标节点所代表的引入文件的文件路径对应的混淆映射值,然后,如上文的叙述,将替换后的各目标节点所代表的引入文件以及应用程序源文件中的其他剩余文件,形成混淆后的应用程序。
作为一种可选的方式,在本发明实施例中,若应用程序的源文件中待混淆的至少一个目标文件包括第二类型文件,如上文叙述,第二类型文件为应用程序源文件中未调用引入文件的文件时,上文步骤203和步骤204可以按照图5所示流程实现,图5所示的流程包括:
步骤501:确定第二类型文件的文件路径是否记录在映射表中,若是,则执行步骤502。
步骤502:确定第二类型文件为至少一个目标文件。
在本发明实施例中,应用程序源文件中待混淆的文件该可以为可以包括应用程序源文件中未调用引入文件的文件,即第二类型文件,因此,可将应用程序源文件中未调用引入文件的第二类型文件的文件路径与映射表中记录的各待混淆的文件的文件路径进行对比,若应用程序源文件中未调用引入文件的第二类型文件的文件路径记录在映射表中,则确定第二类型文件为该应用程序的源文件中待混淆的至少一个目标文件。
步骤503:将第二类型文件的文件路径,替换为第二类型文件的文件路径对应的混淆映射值。
在确定第二类型文件为该应用程序的源文件中待混淆的至少一个目标文件之后,可根据映射表,获取与第二类型文件对应的混淆映射值,然后将该应用程序源文件的文件目录中的第二类型文件的文件路径更改为获取的混淆映射值,即改变该第二类型文件的文件名称。
作为一种可选的方式,在本发明实施例中,应用程序的源文件中待混淆的至少一个目标文件还可以同时包括上文叙述的引入文件以及第二类型文件,此时,可参照上文叙述的方法分别进行引入文件的文件路径的替换以及第二类型文件的文件路径的替换,然后,由替换后的引入文件、第二类型文件以及应用程序中的其他剩余文件形成混淆后的应用程序,在此就不重复叙述了。
所以,通过上述方法,从应用程序的源文件中,确定待混淆的至少一个目标文件,然后将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值,并由替换后的各目标文件以及源文件中的其他剩余文件,形成混淆后的应用程序。可见本发明实施例中,仅对应用程序的文件路径进行了混淆,文件路径又可称为文件的名称,所以,本发明实施例中仅修改了应用程序源文件中的部分或全部文件的文件名,保留了应用程序绝大部分源文件的文件内容,因此,在达到混淆应用程序的目的的同时,也不会破坏应用程序的源代码的拓扑结构,因此,若在后期运行中出现异常,能够有效降低异常问题的定位难度,进而有利于后期的调试。
下文以应用程序具体为JavaScript语言编写的小程序为例,来对本发明实施例中的应用程序混淆方法进一步说明,并假设小程序中源文件的源目录结构如下:
Figure BDA0001941852410000111
那么,根据小程序如上文的源目录结构可知,小程序的源文件中包括四个文件,分别为foo.js、bar.js、nice.js、以及well.js,其中,/root/、sub_dir_a/、以及sub_dir_b/表示目录。
并假设文件foo.js中的源代码为:
require(“public_lirbrary”)//引用的公共库
require(“./bar.js”)
require(“bar.js”)
require(“../sub_dir_b/nice.js”)
根据文件foo.js中的源代码,可知小程序源文件中的文件foo.js调用了文件bar.js以及文件nice.js,那么,文件bar.js以及文件nice.js可称为文件foo.js的引入文件,即bar.js以及文件nice.js可视为上文叙述的引入文件,foo.js可视为上文叙述的第一类型文件,由于该小程序源文件中的文件well.js未调用小程序源文件中的文件,因此,该文件well.js可视为上文中的第二类型文件。
同样的,文件foo.js在调用引入文件bar.js以及引入文件nice.js时,可以通过绝对路径调用,也可以通过相对路径调用,例如,文件foo.js中的源代码中的require(“./bar.js”)、require(“bar.js”)以及require(“../sub_dir_b/nice.js”)均为通过相对路径调用引入文件bar.js和引入文件nice.js,若使用绝对路径调用引入文件bar.js以及引入文件nice.js,可表示为require(“/root/sub_dir_a/bar.js”),以调用文件bar.js,以及可表示为equire(“/root/sub_dir_b/nice.js”),以调用文件nice.js。
在本发明实施例中,假设预先设置的该小程序的映射表如下表一所示:
表一:
源文件 混淆映射值
sub_dir_a/foo.js tencentpatent.js
sub_dir_a/bar.js 0700.js
sub_dir_b/nice.js ysh.js
sub_dir_b/well.js 787878.js
其中,源文件中各待混淆的文件的文件路径如上文叙述,可通过不可逆方式进行映射,以分别获得各待混淆的文件的文件路径对应的混淆映射值。
那么,在需要对该小程序进行混淆时,可以如上文叙述的方式,获取该小程序的源文件以及该小程序对应的映射表即表一,然后可对小程序源文件中各个文件进行解析,得到各文件对应的抽象语法树,以确定各文件中是否有引入文件的调用,以及调用的引入文件的文件路径是否记录在表一中,其具体过程包括:
第一步:解析小程序源文件中的文件foo.js、bar.js、nice.js、以及well.js,分别获得文件foo.js对应的抽象语法树Y1,文件bar.js对应的抽象语法树Y2,文件nice.js对应的抽象语法树Y3,文件well.js对应的抽象语法树Y4。
其中,可以同时解析小程序源文件中的文件foo.js、bar.js、nice.js、以及well.js,也可以依次解析上述四个文件,在此不做限制。
第二步:遍历抽象语法树Y1、抽象语法树Y2、抽象语法树Y3、以及抽象语法树Y4中的各个节点,以确定满足上文叙述的条件的目标节点。
由于文件foo.js中调用了文件bar.js和文件nice.js,那么,文件bar.js和文件nice.js可视为文件foo.js的引入文件,对应的,在抽象语法树Y1中,就会确定出满足上文叙述的条件的两个目标节点,分别为代表引入文件bar.js的目标节点1以及代表引入文件nice.js的目标节点2,对应的,目标节点1和目标节点2的名称均为引入文件调用require,目标节点1的父节点的传入参数为一个,且该传入参数的类型为字符串常量,该字符串常量即为引入文件bar.js的文件路径,该目标节点1所在的文件即为文件foo.js;同样的,目标节点2的父节点的传入参数为一个,且该传入参数的类型为字符串常量,该字符串常量即为引入文件nice.js的文件路径,该目标节点2所在的文件即为文件foo.js。
由于文件bar.js、nice.js、以及well.js中均未调用小程序源文件中的文件,那么,在遍历抽象语法树Y2、抽象语法树Y3、以及抽象语法树Y4中的各个节点,就不会寻找到满足条件的目标节点。
第三步:确定目标节点所代表的引入文件的文件路径是否记录在映射表中,若是,则使用目标节点所代表的引入文件的文件路径对应的混淆映射值,替换目标节点所代表的引入文件的文件路径。
在实际应用中,在确定上文叙述的条件的目标节点1和目标节点2之后,需要确定目标节点1和目标节点2分别所代表的引入文件的文件路是否记录在映射表中,确定方式可以具体为:针对目标节点1,可获取该目标节点1所在的文件foo.js的绝对路径AbsSrc,然后,提取目标节点1的父节点的第一个传入参数(该第一个传入参数即为目标节点1的父节点中类型为字符串常量的唯一一个传入参数)的值Dst,该值Dst即为目标节点1所代表的引入文件bar.js的文件路径,然后根据文件foo.js的绝对路径AbsSrc和该值Dst,可得到目标节点1所代表的引入文件bar.js的绝对路径AbsDst。
然后,确定目标节点1所代表的引入文件bar.js的绝对路径AbsDst或该绝对路径对应的相对路径是否记录在表一中,由于该绝对路径对应的相对路径“sub_dir_a/bar.js”记录在表一中,所以,可使用“sub_dir_a/bar.js”对应的混淆映射值“0700.js”替换引入文件bar.js的文件路径,即将抽象语法树Y1中目标节点1的父节点的第一个传入参数的值Dst更改为“0700.js”。
同样的,针对抽象语法树Y1中的目标节点2,也可获取该目标节点2所在的文件foo.js的绝对路径AbsSrc,然后,提取目标节点2的父节点的第一个传入参数的值Dst,该值Dst即为目标节点2所代表的引入文件nice.js的文件路径,然后根据文件foo.js的绝对路径AbsSrc和该值Dst,可得到目标节点2所代表的引入文件nice.js的绝对路径AbsDst。由于该绝对路径对应的相对路径“sub_dir_b/nice.js”记录在表一中,所以,可使用“sub_dir_b/nice.js”对应的混淆映射值“ysh.js”替换引入文件nice.js的文件路径,即将抽象语法树Y1中目标节点2的父节点的第一个传入参数的值Dst更改为“ysh.js”。
然后,重新渲染更改后的抽象语法树Y1形成代码,重新保存在文件foo.js中,重新保存了由更改后的抽象语法树Y1形成代码文件foo.js为:
require(“public_lirbrary”)//引用的公共库
require(“0700.js”)
require(“0700.js”)
require(“ysh.js”)
在本发明实施例中,上述第一步至第二部完成小程序中各文件的代码中涉及的待混淆的文件的文件路径的更改,还需要对小程序源文件的源目录中各待混淆文件的文件路径进行替换,即下文中的第四步,以完成对小程序源文件的源目录中各待混淆文件的文件路径的替换。
第四步:确定小程序源文件的源目录中是否存在待混淆的至少一个目标文件,若是,则将源目录中的各目标文件的文件路径,分别替换为各自对应的混淆映射值。
在本发明实施例中,由于小程序源文件的源目录中文件foo.js、bar.js、nice.js、以及well.js的文件路径均记录在表一中,因此,可将源目录中文件foo.js的文件路径“sub_dir_a/foo.js”替换为其对应的混淆映射值“tencentpatent.js”,将文件bar.js的文件路径“sub_dir_a/bar.js”替换为其对应的混淆映射值“0700.js”,将文件nice.js的文件路径“sub_dir_b/nice.js”替换为其对应的混淆映射值“ysh.js”,将文件well.js的文件路径“sub_dir_b/well.js”替换为其对应的混淆映射值“787878.js”。
第五步:由替换后的各文件,形成混淆后的小程序。
由于本发明实施例中,小程序源文件中的四个文件foo.js、bar.js、nice.js、以及well.js的文件路径均记录在在表一中,即对这四个文件均进行了替换,那么,就可直接由替换后的这四个文件形成混淆后的小程序,混淆后的小程序对应文件目录base为:
Figure BDA0001941852410000151
基于同一发明构思,本发明实施例中提供了一种应用程序混淆装置,如图6所示,包括:
确定单元60,用于从应用程序的源文件中,确定待混淆的至少一个目标文件;
替换单元61,用于将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值;
形成单元62,用于由替换后的各目标文件以及源文件中的其他剩余文件,形成混淆后的应用程序。
可选的,确定单元60,还用于:
获取应用程序的映射表;
根据映射表,从源文件中确定待混淆的至少一个目标文件;
其中,映射表记录源文件中待混淆的各目标文件的文件路径,与各混淆映射值之间的对应关系;
可选的,该应用程序混淆装置还包括映射单元63,用于:
对待混淆的各目标文件的文件路径进行不可逆映射,分别获得待混淆的各目标文件的文件路径对应的混淆映射值。
可选的,至少一个目标文件包括引入文件,引入文件为源文件中第一类型文件调用的文件;
确定单元60,还用于:
解析源文件中的各文件,获得各文件的抽象语法树;
遍历各抽象语法树中的各个节点,并在遍历到目标节点时,确定目标节点所代表的引入文件的文件路径是否记录在映射表中;
若是,则确定目标节点所代表的引入文件为至少一个目标文件,其中,目标节点所在的文件为第一类型文件。
可选的,目标节点满足以下条件:
目标节点的名称为引入文件调用;
目标节点的父节点的类型为函数调用;
目标节点的父节点仅包括一个类型为字符串常量的传入参数;
其中,传入参数为目标节点所代表的引入文件的文件路径。
可选的,替换单元61,还用于:
将各目标节点所代表的引入文件的文件路径,分别替换为各目标节点所代表的引入文件的文件路径对应的混淆映射值。
可选的,至少一个目标文件包括第二类型文件,第二类型文件中未调用引入文件;
确定单元60,还用于:
确定第二类型文件的文件路径是否记录在映射表中,若是,则确定第二类型文件为至少一个目标文件;
替换单元61,还用于:
将第二类型文件的文件路径,替换为第二类型文件的文件路径对应的混淆映射值。
基于同一发明构思,本发明实施例中提供了一种信息处理装置,如图7所示,包括至少一个处理器70、以及至少一个存储器71,其中,存储器71存储有计算机程序,当程序被处理器70执行时,使得处理器70执行本发明实施例中的应用程序混淆方法的步骤。
基于同一发明构思,本发明实施例中提供了一种存储介质,该存储介质存储有计算机指令,当计算机指令在计算机上运行时,使得计算机执行本发明实施例中的应用程序混淆方法的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (15)

1.一种应用程序的混淆方法,其特征在于,包括:
从应用程序的源文件中,确定待混淆的至少一个目标文件;
将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值;
由替换后的各目标文件以及所述源文件中的其他剩余文件,形成混淆后的应用程序。
2.如权利要求1所述的方法,其特征在于,所述确定待混淆的至少一个目标文件,具体包括:
获取所述应用程序的映射表;
根据所述映射表,从所述源文件中确定待混淆的至少一个目标文件;
其中,所述映射表记录所述源文件中待混淆的各目标文件的文件路径,与各混淆映射值之间的对应关系。
3.如权利要求2所述的方法,其特征在于,所述各混淆映射值,通过以下方式获得:
对所述待混淆的各目标文件的文件路径进行不可逆映射,分别获得所述待混淆的各目标文件的文件路径对应的混淆映射值。
4.如权利要求2或3所述的方法,其特征在于,所述至少一个目标文件包括引入文件,所述引入文件为所述源文件中第一类型文件调用的文件;
所述根据所述映射表,从所述源文件中确定待混淆的至少一个目标文件,具体包括:
解析所述源文件中的各文件,获得各文件的抽象语法树;
遍历各抽象语法树中的各个节点,并在遍历到目标节点时,确定所述目标节点所代表的引入文件的文件路径是否记录在所述映射表中;
若是,则确定所述目标节点所代表的引入文件为所述至少一个目标文件,其中,所述目标节点所在的文件为所述第一类型文件。
5.如权利要求4所述的方法,其特征在于,所述目标节点满足以下条件:
所述目标节点的名称为引入文件调用;
所述目标节点的父节点的类型为函数调用;
所述目标节点的父节点仅包括一个类型为字符串常量的传入参数;
其中,所述传入参数为所述目标节点所代表的引入文件的文件路径。
6.如权利要求4所述的方法,其特征在于,所述将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值,具体为:
将各目标节点所代表的引入文件的文件路径,分别替换为各目标节点所代表的引入文件的文件路径对应的混淆映射值。
7.如权利要求6所述的方法,其特征在于,所述将各目标节点所代表的引入文件的文件路径,分别替换为各目标节点所代表的引入文件的文件路径对应的混淆映射值,具体包括:
针对每个目标节点,将该目标节点所在的第一类型文件的代码中包括的该目标节点所代表的引入文件的文件路径,替换为该目标节点所代表的引入文件的文件路径对应的混淆映射值,以及
将所述源文件的源目录中包括的该目标节点所代表的引入文件的文件路径,替换为该目标节点所代表的引入文件的文件路径对应的混淆映射值。
8.如权利要求2或3所述的方法,其特征在于,所述至少一个目标文件包括第二类型文件,所述第二类型文件中未调用引入文件;
所述根据所述映射表,从所述源文件中确定待混淆的至少一个目标文件,具体为:
确定所述第二类型文件的文件路径是否记录在所述映射表中,若是,则确定所述第二类型文件为所述至少一个目标文件;
所述将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值,具体为:
将所述第二类型文件的文件路径,替换为所述第二类型文件的文件路径对应的混淆映射值。
9.一种应用程序混淆装置,其特征在于,包括:
确定单元,用于从应用程序的源文件中,确定待混淆的至少一个目标文件;
替换单元,用于将各目标文件的文件路径,分别替换为各目标文件的文件路径对应的混淆映射值;
形成单元,用于由替换后的各目标文件以及所述源文件中的其他剩余文件,形成混淆后的应用程序。
10.如权利要求9所述的装置,其特征在于,所述确定单元,还用于:
获取所述应用程序的映射表;
根据所述映射表,从所述源文件中确定待混淆的至少一个目标文件;
其中,所述映射表记录所述源文件中待混淆的各目标文件的文件路径,与各混淆映射值之间的对应关系。
11.如权利要求10所述的装置,其特征在于,所述至少一个目标文件包括引入文件,所述引入文件为所述源文件中第一类型文件调用的文件;
所述确定单元,还用于:
解析所述源文件中的各文件,获得各文件的抽象语法树;
遍历各抽象语法树中的各个节点,并在遍历到目标节点时,确定所述目标节点所代表的引入文件的文件路径是否记录在所述映射表中;
若是,则确定所述目标节点所代表的引入文件为所述至少一个目标文件,其中,所述目标节点所在的文件为所述第一类型文件。
12.如权利要求11所述的装置,其特征在于,所述目标节点满足以下条件:
所述目标节点的名称为引入文件调用;
所述目标节点的父节点的类型为函数调用;
所述目标节点的父节点仅包括一个类型为字符串常量的传入参数;
其中,所述传入参数为所述目标节点所代表的引入文件的文件路径。
13.如权利要求9-12任一项所述的装置,其特征在于,所述至少一个目标文件包括第二类型文件,所述第二类型文件中未调用引入文件;
所述确定单元,还用于:
确定所述第二类型文件的文件路径是否记录在所述映射表中,若是,则确定所述第二类型文件为所述至少一个目标文件;
所述替换单元,还用于:
将所述第二类型文件的文件路径,替换为所述第二类型文件的文件路径对应的混淆映射值。
14.一种应用程序混淆装置,其特征在于,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1~8任一项所述方法的步骤。
15.一种存储介质,其特征在于,所述存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如权利要求1-8任一项所述的方法的步骤。
CN201910024127.XA 2019-01-10 2019-01-10 一种应用程序的混淆方法、装置及存储介质 Active CN111428209B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910024127.XA CN111428209B (zh) 2019-01-10 2019-01-10 一种应用程序的混淆方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910024127.XA CN111428209B (zh) 2019-01-10 2019-01-10 一种应用程序的混淆方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN111428209A true CN111428209A (zh) 2020-07-17
CN111428209B CN111428209B (zh) 2023-09-19

Family

ID=71546123

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910024127.XA Active CN111428209B (zh) 2019-01-10 2019-01-10 一种应用程序的混淆方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN111428209B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113392346A (zh) * 2021-06-16 2021-09-14 北京豆萌信息技术有限公司 资源文件的路径处理方法、装置、电子设备及存储介质

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110138351A1 (en) * 2008-08-21 2011-06-09 Antoine Monsifrot Method and device for code obfuscation
US20140053285A1 (en) * 2012-08-16 2014-02-20 Infosys Limited Methods for detecting plagiarism in software code and devices thereof
US8949802B1 (en) * 2011-10-18 2015-02-03 Google Inc. Sharding program compilation for large-scale static analysis
US20160283214A1 (en) * 2015-03-26 2016-09-29 Ca, Inc. Transparent and near-real time code deploys
CN106874394A (zh) * 2017-01-13 2017-06-20 百度在线网络技术(北京)有限公司 一种文件打包预处理的方法与设备
CN107122169A (zh) * 2017-03-21 2017-09-01 武汉斗鱼网络科技有限公司 一种Flash函数加密的方法及装置
WO2017148316A1 (zh) * 2016-03-03 2017-09-08 腾讯科技(深圳)有限公司 文件加密方法、文件解密方法、电子设备和存储介质
US20170351847A1 (en) * 2016-06-03 2017-12-07 Electronic Arts Inc. Simple obfuscation of text data in binary files
CN107967415A (zh) * 2017-12-11 2018-04-27 北京奇虎科技有限公司 资源混淆保护方法、系统及终端装置
CN108197440A (zh) * 2017-11-28 2018-06-22 五八有限公司 一种代码混淆方法、设备及计算机可读存储介质
CN108595921A (zh) * 2018-03-22 2018-09-28 北京奇艺世纪科技有限公司 一种源代码中字符串的混淆方法和装置

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110138351A1 (en) * 2008-08-21 2011-06-09 Antoine Monsifrot Method and device for code obfuscation
US8949802B1 (en) * 2011-10-18 2015-02-03 Google Inc. Sharding program compilation for large-scale static analysis
US20140053285A1 (en) * 2012-08-16 2014-02-20 Infosys Limited Methods for detecting plagiarism in software code and devices thereof
US20160283214A1 (en) * 2015-03-26 2016-09-29 Ca, Inc. Transparent and near-real time code deploys
WO2017148316A1 (zh) * 2016-03-03 2017-09-08 腾讯科技(深圳)有限公司 文件加密方法、文件解密方法、电子设备和存储介质
US20170351847A1 (en) * 2016-06-03 2017-12-07 Electronic Arts Inc. Simple obfuscation of text data in binary files
CN106874394A (zh) * 2017-01-13 2017-06-20 百度在线网络技术(北京)有限公司 一种文件打包预处理的方法与设备
CN107122169A (zh) * 2017-03-21 2017-09-01 武汉斗鱼网络科技有限公司 一种Flash函数加密的方法及装置
CN108197440A (zh) * 2017-11-28 2018-06-22 五八有限公司 一种代码混淆方法、设备及计算机可读存储介质
CN107967415A (zh) * 2017-12-11 2018-04-27 北京奇虎科技有限公司 资源混淆保护方法、系统及终端装置
CN108595921A (zh) * 2018-03-22 2018-09-28 北京奇艺世纪科技有限公司 一种源代码中字符串的混淆方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113392346A (zh) * 2021-06-16 2021-09-14 北京豆萌信息技术有限公司 资源文件的路径处理方法、装置、电子设备及存储介质
CN113392346B (zh) * 2021-06-16 2023-09-12 北京豆萌信息技术有限公司 资源文件的路径处理方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN111428209B (zh) 2023-09-19

Similar Documents

Publication Publication Date Title
US11138311B2 (en) Distributed security introspection
US20200379752A1 (en) Equivalency of revisions on modern version control systems
CN107632827B (zh) 应用的安装包的生成方法及装置
US10282175B2 (en) Methods and systems for performing a partial build
CN110032388B (zh) 一种增量文件的构建、发布、下载方法及装置
CN108647025A (zh) 文档对象模型中节点的处理方法及装置、电子和存储设备
CN108255708B (zh) 测试环境中访问生产文件的方法、装置、存储介质及设备
US11068244B2 (en) Optimized transpilation
US11748243B2 (en) Intelligent generation of page objects for user interface testing
CN104320312A (zh) 网络应用安全测试工具及模糊测试用例生成方法和系统
CN105260169A (zh) 一种跨平台移植python程序的方法及装置
JP2016099857A (ja) 不正プログラム対策システムおよび不正プログラム対策方法
CN111428209B (zh) 一种应用程序的混淆方法、装置及存储介质
US20200142714A1 (en) Methods and systems for autocompletion
CN108153745B (zh) 一种应用数据调用方法及应用开发系统
CN105988785A (zh) 一种rpc服务开发方法及装置
CN112230963A (zh) 安全漏洞修复的方法、装置、计算机设备和存储介质
CN114090965B (zh) java代码混淆方法、系统、计算机设备及存储介质
CN106357704A (zh) 一种基于开发环境的服务调用方法及装置
CN115562971A (zh) e2e测试的持续集成方法、装置、设备及存储介质
CN114417347A (zh) 应用程序的漏洞检测方法、装置、设备、存储介质和程序
CN114816437A (zh) 一种逆向生成Java实体类的方法、系统和设备
CN114253595A (zh) 代码仓库管理方法、装置、计算机设备及存储介质
US20180218165A1 (en) Method for Locking Sensitive Data in the Cloud Based on Refactoring Technology
CN113254470A (zh) 一种数据更改方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40025954

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant