CN107038354A - 代码混淆方法、代码运行方法及装置 - Google Patents
代码混淆方法、代码运行方法及装置 Download PDFInfo
- Publication number
- CN107038354A CN107038354A CN201610076963.9A CN201610076963A CN107038354A CN 107038354 A CN107038354 A CN 107038354A CN 201610076963 A CN201610076963 A CN 201610076963A CN 107038354 A CN107038354 A CN 107038354A
- Authority
- CN
- China
- Prior art keywords
- name
- file
- destination
- class
- called
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 140
- 230000003068 static effect Effects 0.000 claims abstract description 51
- 230000006870 function Effects 0.000 claims description 48
- 238000012545 processing Methods 0.000 claims description 47
- 238000011068 loading method Methods 0.000 claims description 39
- 230000015654 memory Effects 0.000 claims description 29
- 230000007246 mechanism Effects 0.000 claims description 11
- 238000012856 packing Methods 0.000 claims description 9
- 238000013507 mapping Methods 0.000 claims description 7
- 230000008569 process Effects 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 3
- 238000001914 filtration Methods 0.000 claims description 2
- 230000004048 modification Effects 0.000 description 15
- 238000012986 modification Methods 0.000 description 15
- 238000009434 installation Methods 0.000 description 9
- 230000000694 effects Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005034 decoration Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000001556 precipitation Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
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
Abstract
本申请公开了一种代码混淆方法、代码运行方法及装置。其中,该方法包括:通过预设的静态替换操作,获取待调用的对象名,其中,静态替换操作为预先在目标应用程序的第一目标文件中配置的函数,第一目标文件用于记录目标应用程序的安装信息;判断待调用的对象名是否包含在预设的混淆表中,其中,混淆表为根据第一目标文件以及第二目标文件生成的表,混淆表用于指示对象名与混淆名之间的对应关系,第二目标文件用于记录目标应用程序的声明信息;若待调用的对象名包含在混淆表中,从混淆表中查找并输出与待调用的对象名对应的混淆名。本申请解决了现有技术中应用程序的Java层代码混淆率较低的技术问题。
Description
技术领域
本申请涉及计算机领域,具体而言,涉及一种代码混淆方法、代码运行方法及装置。
背景技术
Java层(Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,一般,Java具备由数据访问层、业务逻辑层和界面层所组成的三层架构)的代码混淆是保护代码逻辑不被黑客轻易破解的有效手段之一,其方法主要是在代码编译以后利用外部工具将代码中的类名,方法名和成员变量名等修改成比较难以理解的名称。目前,java层代码混淆主要依靠ProGuard(一款用于压缩、优化和混淆Java代码的工具),但ProGuard在使用过程中至少存在以下三方面的缺陷:
第一、开发人员在使用ProGuard进行Java代码的混淆时,需要熟悉Java代码的业务逻辑并预先知晓哪些类、方法、成员变量可混淆或不可混淆,因此,ProGuard对开发人员的要求较高。
第二、proguard工具无法混淆用户在so文件(Android系统中的动态链接库文件)中需要加载的类,这些类本身不在java层编译的jar包(可包含类的文件包)体现,若未经特殊配置,则proguard会默认将其混淆,进而导致应用程序错误。
第三、proguard工具混淆jar包不能很好的混淆OSGi(Open Service GatewayInitiative,面向Java的动态模型系统)框架的客户端程序,由于OSGi框架的客户端程序一般都是基于类名来查找相应的bundle(一中可执行文件,用于在Android系统中的Activity之间传递数据)的类加载器的,所以使用proguard工具只能将这些类保持原名或者至少保持类的包名不变,而由于OSGi框架的设计导致其框架代码绝大多数的类都是通过查找相应bundle的类加载器来加载类,因此proguard工具无法显著提高其混淆率。
综上,现有技术中主要存在应用程序的Java层代码混淆率较低的问题。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种代码混淆方法、代码运行方法及装置,以至少解决现有技术中应用程序的Java层代码混淆率较低的技术问题。
根据本申请实施例的一个方面,提供了一种代码运行方法,包括:通过预设的静态替换操作,获取待调用的对象名,其中,上述静态替换操作为预先在目标应用程序的第一目标文件中配置的函数,上述第一目标文件用于记录上述目标应用程序的安装信息;判断上述待调用的对象名是否包含在预设的混淆表中,其中,上述混淆表为根据上述第一目标文件以及第二目标文件生成的表,上述混淆表用于指示对象名与混淆名之间的对应关系,上述第二目标文件用于记录上述目标应用程序的声明信息;若上述待调用的对象名包含在上述混淆表中,从上述混淆表中查找并输出与上述待调用的对象名对应的混淆名。
根据本申请实施例的一个方面,还提供了一种代码混淆方法,包括:从目标应用程序中获取第一目标文件及第二目标文件;解析上述第一目标文件及上述第二目标文件,按照预设规则生成上述混淆表,其中,上述混淆表中不包含从上述第二目标文件中解析出的对象名;对上述第一目标文件执行静态替换操作;按照上述混淆表,将上述第一目标文件的对象名混淆为与上述对象名对应的混淆名;将混淆后的上述第一目标文件存入上述目标应用程序。
根据本申请实施例的另一方面,又提供了一种代码运行装置,包括:第一获取单元,用于通过预设的静态替换操作,获取待调用的对象名,其中,上述静态替换操作为预先在目标应用程序的第一目标文件中配置的函数,上述第一目标文件用于记录上述目标应用程序的安装信息;判断单元,用于判断上述待调用的对象名是否包含在预设的混淆表中,其中,上述混淆表为根据上述第一目标文件以及第二目标文件生成的表,上述混淆表用于指示对象名与混淆名之间的对应关系,上述第二目标文件用于记录上述目标应用程序的声明信息;第一处理单元,用于若上述待调用的对象名包含在上述混淆表中,从上述混淆表中查找并输出与上述待调用的对象名对应的混淆名。
根据本申请实施例的另一方面,又提供了一种代码混淆装置,包括:第二获取单元,用于从目标应用程序中获取第一目标文件及第二目标文件;生成单元,用于解析上述第一目标文件及上述第二目标文件,按照预设规则生成上述混淆表,其中,上述混淆表中不包含从上述第二目标文件中解析出的对象名;第二处理单元,用于对上述第一目标文件执行静态替换操作;第三处理单元,用于按照上述混淆表,将上述第一目标文件的对象名混淆为与上述对象名对应的混淆名;存储单元,用于将混淆后的上述第一目标文件存入上述目标应用程序。
在本申请实施例中,采用通过预设的静态替换操作,获取待调用的对象名,其中,静态替换操作为预先在目标应用程序的第一目标文件中配置的函数,第一目标文件用于记录目标应用程序的安装信息;判断待调用的对象名是否包含在预设的混淆表中,其中,混淆表为根据第一目标文件以及第二目标文件生成的表,混淆表用于指示对象名与混淆名之间的对应关系,第二目标文件用于记录目标应用程序的声明信息;若待调用的对象名包含在混淆表中,从混淆表中查找并输出与待调用的对象名对应的混淆名的方式,通过预设的静态替换操作获取待调用的对象名,以及判断待调用的对象名是否包含在预设的混淆表中,达到了在判断为是的情况下从混淆表中查找并输出与待调用的对象名对应的混淆名的目的,从而实现了提高Java层代码混淆率、降低开发人员的代码混淆配置难度、扩充混淆功能以及增强代码破解难度的技术效果,进而解决了现有技术中应用程序的Java层代码混淆率较低的技术问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的一种代码混淆方法或代码运行方法的计算机终端的硬件结构框图;
图2是根据本申请实施例的另一种可选的代码运行方法的流程示意图;
图3是根据本申请实施例的又一种可选的代码混淆方法的流程示意图;
图4是根据本申请实施例的又一种可选的代码混淆方法的流程示意图;
图5是根据本申请实施例的又一种可选的代码混淆方法的流程示意图;
图6是根据本申请实施例的又一种可选的代码混淆方法的流程示意图;
图7是根据本申请实施例的又一种可选的代码混淆方法的流程示意图;
图8是根据本申请实施例的又一种可选的代码混淆方法的流程示意图;
图9是根据本申请实施例的又一种可选的代码混淆方法的流程示意图;
图10是根据本申请实施例的一种可选的代码运行装置的结构示意图;
图11是根据本申请实施例的另一种可选的代码混淆装置的结构示意图;
图12是根据本申请实施例的又一种可选的代码混淆装置的结构示意图;
图13是根据本申请实施例的又一种可选的代码混淆装置的结构示意图;
图14是根据本申请实施例的又一种可选的代码混淆装置的结构示意图;
图15是根据本申请实施例的又一种可选的代码混淆装置的结构示意图;
图16是根据本申请实施例的又一种可选的代码混淆装置的结构示意图;
图17是根据本申请实施例的又一种可选的代码混淆装置的结构示意图;
图18是根据本申请实施例的一种计算机终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本申请实施例,还提供了一种代码运行方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种代码运行方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本申请实施例中的代码运行方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的代码运行方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(RadioFrequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在上述运行环境下,本申请提供了如图2所示的代码运行方法。图2是根据本申请实施例一的代码运行方法的流程图。
如图2所示,该代码运行方法可以包括如下实现步骤:
步骤S202,通过预设的静态替换操作,获取待调用的对象名,其中,静态替换操作为预先在目标应用程序的第一目标文件中配置的函数,第一目标文件用于记录目标应用程序的安装信息。
本申请上述步骤S202中,静态替换操作可以为Android系统中的Java层静态替换操作,具体地,可以通过在要混淆dex文件中插入或者修改相应的调用指令的方式,进行java层函数的拦截。其中,该第一目标文件可以为dex文件(Android系统中的可执行文件),该静态替换操作可以为so静态替换操作。
步骤S204,判断待调用的对象名是否包含在预设的混淆表中,其中,混淆表为根据第一目标文件以及第二目标文件生成的表,混淆表用于指示对象名与混淆名之间的对应关系,第二目标文件用于记录目标应用程序的声明信息。
本申请上述步骤S204中,第一目标文件可以为dex文件,该dex文件可以为安装文件;第二目标文件可以为xml(Extensible Markup Language,可扩展标记语言)文件,该xml文件可以用于声明应用程序支持版本的合理范围。该混淆表可预先存储。
步骤S206,若待调用的对象名包含在混淆表中,从混淆表中查找并输出与待调用的对象名对应的混淆名。
本申请上述步骤S206中,从混淆表中输出与待调用的对象名对应的混淆名可以为将混淆后的类名传给代码保存的寄存器。若待调用的对象名未包含在混淆表中,则记录传入的类名、抛出异常并中止程序,发生该情况的原因主要在于混淆表生成错误或者拦截错误,因此需要根据异常来查找问题。
可选地,对象名包括以下一种或几种的组合:类名、方法名以及成员变量名。
由上可知,本申请上述实施例一所提供的方案,通过预设的静态替换操作获取待调用的对象名,以及判断待调用的对象名是否包含在预设的混淆表中,达到了在判断为是的情况下从混淆表中查找并输出与待调用的对象名对应的混淆名的目的,从而实现了提高Java层代码混淆率、降低开发人员的代码混淆配置难度、扩充混淆功能以及增强代码破解难度的技术效果,进而解决了现有技术中应用程序的Java层代码混淆率较低的技术问题。
实施例2
根据本申请实施例,还提供了一种代码混淆方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例二所提供的方法实施例仍旧可以在移动终端、计算机终端或者类似的运算装置中执行。此处需要说明的是,实施例二所提供的方法实施例仍旧可以运行在图1所示的计算机终端上。
在上述运行环境下,本申请提供了如图3所示的代码混淆方法,图3是根据本申请实施例二的代码混淆方法的流程示意图。
如图3所示,该代码混淆方法包括:
步骤S302,从目标应用程序中获取第一目标文件及第二目标文件。
本申请上述步骤S302中,目标应用程序为基于Android系统的应用程序,第一目标文件可以为dex文件,该dex文件可以为安装文件;第二目标文件可以为xml文件,该xml文件可以用于声明应用程序支持版本的合理范围。
步骤S304,解析第一目标文件及第二目标文件,按照预设规则生成混淆表,其中,混淆表中不包含从第二目标文件中解析出的对象名。
本申请上述步骤S304中,解析第一目标文件可以为解析dex文件中所有的类名、方法名以及成员变量名称,该dex文件一般基于OSGi框架。解析第二目标文件可以为解析AndroidManifest.xml文件中需要给Android系统提供的类。
步骤S306,对第一目标文件执行静态替换操作。
本申请上述步骤S306中,在第一目标文件中配置的静态替换操作可以为so静态替换操作。
步骤S308,按照混淆表,将第一目标文件的对象名混淆为与对象名对应的混淆名。
本申请上述步骤S308中,可以按照混淆表,对要混淆的dex文件进行类名,方法名,成员变量名进行混淆。
步骤S310,将混淆后的第一目标文件存入目标应用程序。
本申请上述步骤S310中,可以将需要进行so拦截的so文件,修改后的各个bundle中的dex文件重新打包进入Android应用程序中。
由上可知,本申请上述实施例二所提供的方案,通过预设的静态替换操作获取待调用的对象名,以及判断待调用的对象名是否包含在预设的混淆表中,达到了在判断为是的情况下从混淆表中查找并输出与待调用的对象名对应的混淆名的目的,从而实现了提高Java层代码混淆率、降低开发人员的代码混淆配置难度、扩充混淆功能以及增强代码破解难度的技术效果,进而解决了现有技术中应用程序的Java层代码混淆率较低的技术问题。
可选地,图4是根据本申请实施例的又一种可选的代码混淆方法的流程示意图,如图4所示,步骤S302,从目标应用程序中获取第一目标文件及第二目标文件包括:
步骤S402,解压缩目标应用程序,得到第一目标文件。
本申请上述步骤S402中,目标应用程序可以基于Android系统,可以对目标应用程序中的Apk包(Android Package,安卓安装包)进行解压缩,进而得到该Apk包中的所有dex文件。
步骤S404,反编译目标应用程序,得到第二目标文件。
本申请上述步骤S404中,反编译Android应用程序中的Android Manifest.xml文件,得到第二目标文件。
可选地,图5是根据本申请实施例的又一种可选的代码混淆方法的流程示意图,如图5所示,步骤S304,解析第一目标文件及第二目标文件,按照预设规则生成混淆表包括:
步骤S502,解析第一目标文件,得到第一目标文件中的对象名。
本申请上述步骤S502中,第一目标文件中的对象名可以为dex文件的文件名。
步骤S504,解析第二目标文件,得到第二目标文件中的对象名。
本申请上述步骤S504中,第二目标文件中的对象名可以为xml文件的文件名。
步骤S506,从第一目标文件中的对象名中,滤除第二目标文件中的对象名,得到不包含第二目标文件中的对象名的对象名集合。
本申请上述步骤S506中,可以根据解析上述第一目标文件及第二目标文件而获取到的类名,方法名以及成员变量名称来做一张原始名到混淆名的映射表,并滤除第二目标文件所获取的类名。
步骤S508,根据对象名集合,生成混淆表。
本申请上述步骤S508中,可以根据Android应用程序包中的dex文件和AndroidManifest.xml文件,生成能够混淆的类,方法和成员变量的混淆表。
可选地,对第一目标文件执行静态替换操作包括:修改第一目标文件中的函数调用关系以及常量,以使目标应用程序在运行时通过静态替换操作获取待调用的对象名,其中,函数调用关系包括影响类加载的关键函数的调用关系和/或类加载函数的调用关系,常量包括影响类加载的且与注解相关的常量。
可选地,图6是根据本申请实施例的又一种可选的代码混淆方法的流程示意图,如图6所示,步骤S306,对所述第一目标文件执行静态替换操作还包括:
步骤S602,在第一目标文件中添加包含混淆前后映射转换方法的类。
本申请上述步骤S602中,可以在需要混淆的dex文件中添加包含混淆前后映射转换方法的类。
步骤S604,修改关键函数的调用关系,其中,关键函数为影响类加载的函数。
本申请上述步骤S604中,可以修改影响到类加载的关键函数的调用关系,其中,主要进行修改的调用关系可以包括java Class类中的getName方法、java System类中的LoadLibrary方法等。
步骤S606,修改目标常量,其中,目标常量为影响类加载的且与注解相关的常量。
本申请上述步骤S606中,可以修改影响到类加载的java注解相关的常量。
步骤S608,修改类加载的函数调用关系,并在类中添加相应的方法。
本申请上述步骤S608中,可以修改类加载的函数调用关系,并且在该类中添加混淆前后转换关系的方法,其中,主要进行修改的调用关系可以包括java Class类中的forName方法、java System类中的LoadLibrary方法等。
步骤S610,处理含有第一调用的有关类加载的类,重新在含有第一调用的有关类加载的类中生成私有方法,并且将第一调用为第二调用,其中,第一调用为用于调用父类的调用,第二调用为用于调用类中的私有方法的调用;对于有关类加载机制中继承自系统的类加载器但未实现类加载方法的类,重新在有关类加载机制中继承自系统的类加载器但未实现类加载方法的类中生成私有方法,并对私有方法进行重载调用。
本申请上述步骤S610中,第一调用可以为invoke-super调用,第二调用可以为invoke-direct调用。invoke-super调用是直接调用父类的虚方法,编译时静态确认;invoke-direct调用是指没有被覆盖方法的调用,即不用根据动态实例所引用的调用,编译时静态确认的一般是private或者init方法。对于有关类加载机制中继承自系统的类加载器但未实现类加载方法的类,重新在有关类加载机制中继承自系统的类加载器但未实现类加载方法(如loadClass方法)的类中生成私有方法,并对私有方法进行重载调用。
本实施例中,私有方法是指别的类不能调用的方法。
可选地,图7是根据本申请实施例的又一种可选的代码混淆方法的流程示意图,如图7所示,步骤S308,按照混淆表,将第一目标文件的对象名混淆为与对象名对应的混淆名包括:
步骤S702,解析混淆表,将对象名与混淆名的对应关系存放在哈希表中。
本申请上述步骤S702中,哈希表(hashmap)又名散列表,是根据关键码值(keyValue)而直接进行访问的数据结构。
步骤S704,解析出第一目标文件中的对象名。
本申请上述步骤S704中,可以解析要混淆的dex文件,分析出来其类名,方法名和成员变量名。
步骤S706,重新将解析出的对象名写入第一目标文件,其中,在写入解析出的对象名时,查询哈希表,将解析出的对象名混淆为与解析出的对象名对应的混淆名。
本申请上述步骤S706中,执行该步骤可以通过以下两种方法:
方法一,重新写回dex文件,在写回类名,方法名和成员变量名的时候查询1中的hashmap,当发现有需要修改的地方按照返回值进行修改。
方法二,重新写回dex文件,在写回方法,成员变量的调用引用的时候查询1中的hashmap,当发现有需要修改的地方按照返回值进行修改。
可选地,图8是根据本申请实施例的又一种可选的代码混淆方法的流程示意图,如图8所示,步骤S310,将混淆后的第一目标文件存入目标应用程序包括:
步骤S802,将混淆后的第一目标文件进行压缩,并对混淆后的第一目标文件进行重新签名。
本申请上述步骤S802中,可以将所有更改后dex文件压缩替换到其原有的bundle压缩包中,并对所有修改过的bundle压缩包进行重新签名。
步骤S804,将预先配置的用于获取待调用的对象名的第三目标文件以及混淆后的第一目标文件打包写入目标应用程序。
本申请上述步骤S804中,将第三目标文件以及第一目标文件打包写入目标应用程序可以包括以下几个步骤:
步骤S10,将所有更改后dex文件压缩替换到其原有的bundle压缩包中;
步骤S20,对所有修改过的bundle压缩包进行重新签名;
步骤S30,将要进行so拦截的so文件添加到主压缩包中的assets目录中;
步骤S40,将主框架的dex文件压缩替换到主压缩包中的根目录中。
可选地,图9是根据本申请实施例的又一种可选的代码混淆方法的流程示意图,如图9所示,步骤S804,在将预先配置的用于获取待调用的对象名的第三目标文件以及混淆后的第一目标文件打包写入目标应用程序之后,方法还包括:
步骤S902,对目标应用程序进行重新签名。
本申请上述步骤S902中,可以使用初始或原有的应用程序(即未对其经混淆操作的应用程序)中的签名文件对目标应用程序进行重新签名,该目标应用程序可以为重新打包后的Android应用程序。其中,签名文件(Signature File)可以是用作标准文件的简短文本文件。需要说明的是,由于Android系统对于安装的应用程序都要求必须签名,因此,在执行完成上述混淆方法之后,需要对应用程序进行重新签名,保证应用程序能够正常安装及运行。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
实施例3
根据本申请实施例,还提供了一种用于实施上述代码运行方法的代码运行装置,如图10所示,该装置可以包括:第一获取单元1001、判断单元1003、第一处理单元1005。
其中,第一获取单元1001,用于通过预设的静态替换操作,获取待调用的对象名,其中,静态替换操作为预先在目标应用程序的第一目标文件中配置的函数,第一目标文件用于记录目标应用程序的安装信息;判断单元1003,用于判断待调用的对象名是否包含在预设的混淆表中,其中,混淆表为根据第一目标文件以及第二目标文件生成的表,混淆表用于指示对象名与混淆名之间的对应关系,第二目标文件用于记录目标应用程序的声明信息;第一处理单元1005,用于若待调用的对象名包含在混淆表中,从混淆表中查找并输出与待调用的对象名对应的混淆名。
此处需要说明的是,上述第一获取单元1001、判断单元1003、第一处理单元1005对应于实施例一中的步骤S202至步骤S206,三个单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选地,本申请上述实施例中的对象名包括以下一种或几种的组合:类名、方法名以及成员变量名。
由上可知,本申请上述实施例三所提供的方案,通过预设的静态替换操作获取待调用的对象名,以及判断待调用的对象名是否包含在预设的混淆表中,达到了在判断为是的情况下从混淆表中查找并输出与待调用的对象名对应的混淆名的目的,从而实现了提高Java层代码混淆率、降低开发人员的代码混淆配置难度、扩充混淆功能以及增强代码破解难度的技术效果,进而解决了现有技术中应用程序的Java层代码混淆率较低的技术问题。
实施例4
根据本申请实施例,又提供了一种用于实施上述代码混淆方法的代码混淆装置,如图11所示,该装置可以包括:第二获取单元1101、生成单元1103、第二处理单元1105、第三处理单元1107、存储单元1109。
其中,第二获取单元1101,用于从目标应用程序中获取第一目标文件及第二目标文件;生成单元1103,用于解析第一目标文件及第二目标文件,生成混淆表,其中,混淆表中不包含从第二目标文件中解析出的对象名;第二处理单元1105,用于在第一目标文件中配置静态替换操作;第三处理单元1107,用于按照混淆表,将第一目标文件的对象名混淆为与对象名对应的混淆名;存储单元1109,用于将混淆后的第一目标文件存入目标应用程序。
此处需要说明的是,上述第二获取单元1101、生成单元1103、第二处理单元1105、第三处理单元1107、存储单元1109对应于实施例二中的步骤S302至步骤S310,五个单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。
由上可知,本申请上述实施例四所提供的方案,通过预设的静态替换操作获取待调用的对象名,以及判断待调用的对象名是否包含在预设的混淆表中,达到了在判断为是的情况下从混淆表中查找并输出与待调用的对象名对应的混淆名的目的,从而实现了提高Java层代码混淆率、降低开发人员的代码混淆配置难度、扩充混淆功能以及增强代码破解难度的技术效果,进而解决了现有技术中应用程序的Java层代码混淆率较低的技术问题。
可选地,如图12所示,第二获取单元1101可以包括:第一处理子单元1201、第二处理子单元1203。
其中,第一处理子单元1201,用于解压缩目标应用程序,得到第一目标文件;以及第二处理子单元1203,用于反编译目标应用程序,得到第二目标文件。
此处需要说明的是,上述第一处理子单元1201、第二处理子单元1203对应于实施例一中的步骤S402至步骤S404,两个子单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例二所公开的内容。需要说明的是,上述子单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选地,如图13所示,生成单元1103可以包括:第一解析子单元1301、第二解析子单元1303、第三处理子单元1305、生成子单元1307。
其中,第一解析子单元1301,用于解析第一目标文件,得到第一目标文件中的对象名;第二解析子单元1303,用于解析第二目标文件,得到第二目标文件中的对象名;第三处理子单元1305,用于从第一目标文件中的对象名中,滤除第二目标文件中的对象名,得到不包含第二目标文件中的对象名的对象名集合;生成子单元1307,用于根据对象名集合,生成混淆表。
此处需要说明的是,上述第一解析子单元1301、第二解析子单元1303、第三处理子单元1305、生成子单元1307对应于实施例二中的步骤S502至步骤S508,四个子单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述子单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选地,第二处理单元1105可以包括:修改子单元。
其中,修改子单元,用于修改第一目标文件中的函数调用关系以及常量,以使目标应用程序在运行时通过静态替换操作获取待调用的对象名,其中,函数调用关系包括影响类加载的关键函数的调用关系和/或类加载函数的调用关系,常量包括影响类加载的且与注解相关的常量。
可选地,如图14所示,第二处理单元1105还可以包括:添加子单元1401、第一修改子单元1403、第二修改子单元1405、第三修改子单元1407、第四处理子单元1409。
其中,添加子单元1401,用于在第一目标文件中添加包含混淆前后映射转换装置的类;第一修改子单元1403,用于修改关键函数的调用关系,其中,关键函数为影响类加载的函数;第二修改子单元1405,用于修改目标常量,其中,目标常量为影响类加载的且与注解相关的常量;第三修改子单元1407,用于修改类加载的函数调用关系,并在类中添加混淆前后转换关系的方法;第四处理子单元1409,用于处理含有第一调用的有关类加载的类,重新在含有第一调用的有关类加载的类中生成私有方法,并且将第一调用为第二调用,其中,第一调用为用于调用父类的调用,第二调用为用于调用类中的私有方法的调用;对于有关类加载机制中继承自系统的类加载器但未实现类加载方法的类,重新在有关类加载机制中继承自系统的类加载器但未实现类加载方法的类中生成私有方法,并对私有方法进行重载调用。
此处需要说明的是,上述添加子单元1401、第一修改子单元1403、第二修改子单元1405、第三修改子单元1407、第四处理子单元1409对应于实施例一中的步骤S602至步骤S610,五个子单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述子单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选地,如图15所示,第三处理单元1107可以包括:第三解析子单元1501、第四解析子单元1503、第五处理子单元1505。
其中,第三解析子单元1501,用于解析混淆表,将对象名与混淆名的对应关系存放在哈希表中;第四解析子单元1503,用于解析出第一目标文件中的对象名;第五处理子单元1505,用于重新将解析出的对象名写入第一目标文件,其中,在写入解析出的对象名时,查询哈希表,将解析出的对象名混淆为与解析出的对象名对应的混淆名。
此处需要说明的是,上述第三解析子单元1501、第四解析子单元1503、第五处理子单元1505对应于实施例一中的步骤S702至步骤S706,三个子单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述子单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选地,如图16所示,存储单元1109可以包括:第六处理子单元1601、写入子单元1603。
其中,第六处理子单元1601,用于将混淆后的第一目标文件进行压缩,并对混淆后的第一目标文件进行重新签名;写入子单元1603,用于将预先配置的用于获取待调用的对象名的第三目标文件以及混淆后的第一目标文件打包写入目标应用程序。
此处需要说明的是,上述第六处理子单元1601、写入子单元1603对应于实施例一中的步骤S802至步骤S804,两个子单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述子单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选地,如图17所示,装置还可以包括:第三处理单元1701。
其中,第四处理单元1701,用于对目标应用程序进行重新签名。
此处需要说明的是,上述第三处理单元1701对应于实施例一中的步骤S902,该单元与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述单元作为装置的一部分可以运行在实施例一提供的计算机终端10中。
实施例5
本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行代码运行方法中以下步骤的程序代码:通过预设的静态替换操作,获取待调用的对象名,其中,静态替换操作为预先在目标应用程序的第一目标文件中配置的函数,第一目标文件用于记录目标应用程序的安装信息;判断待调用的对象名是否包含在预设的混淆表中,其中,混淆表为根据第一目标文件以及第二目标文件生成的表,混淆表用于指示对象名与混淆名之间的对应关系,第二目标文件用于记录目标应用程序的声明信息;若待调用的对象名包含在混淆表中,从混淆表中查找并输出与待调用的对象名对应的混淆名。
由上可知,本申请上述实施例五所提供的方案,通过预设的静态替换操作获取待调用的对象名,以及判断待调用的对象名是否包含在预设的混淆表中,达到了在判断为是的情况下从混淆表中查找并输出与待调用的对象名对应的混淆名的目的,从而实现了提高Java层代码混淆率、降低开发人员的代码混淆配置难度、扩充混淆功能以及增强代码破解难度的技术效果,进而解决了现有技术中应用程序的Java层代码混淆率较低的技术问题。
可选地,图18是根据本申请实施例的一种计算机终端的结构框图。如图18所示,该计算机终端A可以包括:一个或多个(图中仅示出一个)处理器1801、存储器1803、以及传输装置1805。
其中,存储器1803可用于存储软件程序以及模块,如本申请实施例中的代码运行方法和装置对应的程序指令/模块,处理器1801通过运行存储在存储器1803内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的代码运行方法。存储器1803可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1803可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
上述的传输装置1805用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1805包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1805为射频(RadioFrequency,RF)模块,其用于通过无线方式与互联网进行通讯。
实施例6
本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行应用程序的漏洞检测方法中以下步骤的程序代码:从目标应用程序中获取第一目标文件及第二目标文件;解析第一目标文件及第二目标文件,按照预设规则生成混淆表,其中,混淆表中不包含从第二目标文件中解析出的对象名;对第一目标文件执行静态替换操作;按照混淆表,将第一目标文件的对象名混淆为与对象名对应的混淆名;将混淆后的第一目标文件存入目标应用程序。
由上可知,本申请上述实施例六所提供的方案,通过预设的静态替换操作获取待调用的对象名,以及判断待调用的对象名是否包含在预设的混淆表中,达到了在判断为是的情况下从混淆表中查找并输出与待调用的对象名对应的混淆名的目的,从而实现了提高Java层代码混淆率、降低开发人员的代码混淆配置难度、扩充混淆功能以及增强代码破解难度的技术效果,进而解决了现有技术中应用程序的Java层代码混淆率较低的技术问题。
可选的,上述处理器1801还可以执行如下步骤的程序代码:解压缩目标应用程序,得到第一目标文件;以及反编译目标应用程序,得到第二目标文件。
可选的,上述处理器1801还可以执行如下步骤的程序代码:解析第一目标文件,得到第一目标文件中的对象名;解析第二目标文件,得到第二目标文件中的对象名;从第一目标文件中的对象名中,滤除第二目标文件中的对象名,得到不包含第二目标文件中的对象名的对象名集合;根据对象名集合,生成混淆表。
可选的,上述处理器1801还可以执行如下步骤的程序代码:修改第一目标文件中的函数调用关系以及常量,以使目标应用程序在运行时通过静态替换操作获取待调用的对象名,其中,函数调用关系包括影响类加载的关键函数的调用关系和/或类加载函数的调用关系,常量包括影响类加载的且与注解相关的常量。
可选的,上述处理器1801还可以执行如下步骤的程序代码:在第一目标文件中添加包含混淆前后映射转换方法的类;处理含有第一调用的有关类加载的类,重新在含有第一调用的有关类加载的类中生成私有方法,并且将第一调用为第二调用,其中,第一调用为用于调用父类的调用,第二调用为用于调用类中的私有方法的调用;对于有关类加载机制中继承自系统的类加载器但未实现类加载方法的类,重新在有关类加载机制中继承自系统的类加载器但未实现类加载方法的类中生成私有方法,并对私有方法进行重载调用。
可选的,上述处理器1801还可以执行如下步骤的程序代码:解析混淆表,将对象名与混淆名的对应关系存放在哈希表中;解析出第一目标文件中的对象名;重新将解析出的对象名写入第一目标文件,其中,在写入解析出的对象名时,查询哈希表,将解析出的对象名混淆为与解析出的对象名对应的混淆名。
可选的,上述处理器1801还可以执行如下步骤的程序代码:将混淆后的第一目标文件进行压缩,并对混淆后的第一目标文件进行重新签名;将预先配置的用于获取待调用的对象名的第三目标文件以及混淆后的第一目标文件打包写入目标应用程序。
可选的,上述处理器1801还可以执行如下步骤的程序代码:对目标应用程序进行重新签名。
本领域普通技术人员可以理解,图18所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图18其并不对上述电子装置的结构造成限定。例如,计算机终端A还可包括比图18中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图18所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
实施例7
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的代码运行方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:通过预设的静态替换操作,获取待调用的对象名,其中,静态替换操作为预先在目标应用程序的第一目标文件中配置的函数,第一目标文件用于记录目标应用程序的安装信息;判断待调用的对象名是否包含在预设的混淆表中,其中,混淆表为根据第一目标文件以及第二目标文件生成的表,混淆表用于指示对象名与混淆名之间的对应关系,第二目标文件用于记录目标应用程序的声明信息;若待调用的对象名包含在混淆表中,从混淆表中查找并输出与待调用的对象名对应的混淆名。
此处需要说明的是,上述计算机终端群中的任意一个可以与网站服务器和扫描器建立通信关系,扫描器可以扫描计算机终端上php执行的web应用程序的值命令。
实施例8
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的代码混淆方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:从目标应用程序中获取第一目标文件及第二目标文件;解析第一目标文件及第二目标文件,按照预设规则生成混淆表,其中,混淆表中不包含从第二目标文件中解析出的对象名;对第一目标文件执行静态替换操作;按照混淆表,将第一目标文件的对象名混淆为与对象名对应的混淆名;将混淆后的第一目标文件存入目标应用程序。
此处需要说明的是,上述计算机终端群中的任意一个可以与网站服务器和扫描器建立通信关系,扫描器可以扫描计算机终端上php执行的web应用程序的值命令。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (21)
1.一种代码混淆方法,其特征在于,包括:
从目标应用程序中获取第一目标文件及第二目标文件;
解析所述第一目标文件及所述第二目标文件,按照预设规则生成混淆表,其中,所述混淆表中不包含从所述第二目标文件中解析出的对象名;
对所述第一目标文件执行静态替换操作;
按照所述混淆表,将所述第一目标文件的对象名混淆为与所述对象名对应的混淆名;
将混淆后的所述第一目标文件存入所述目标应用程序。
2.根据权利要求1所述的方法,其特征在于,所述从所述目标应用程序中获取所述第一目标文件及所述第二目标文件包括:
解压缩所述目标应用程序,得到所述第一目标文件;以及
反编译所述目标应用程序,得到所述第二目标文件。
3.根据权利要求1所述的方法,其特征在于,所述解析所述第一目标文件及所述第二目标文件,按照预设规则生成所述混淆表包括:
解析所述第一目标文件,得到所述第一目标文件中的对象名;
解析所述第二目标文件,得到所述第二目标文件中的对象名;
从所述第一目标文件中的对象名中,滤除所述第二目标文件中的对象名,得到不包含所述第二目标文件中的对象名的对象名集合;
根据所述对象名集合,生成所述混淆表。
4.根据权利要求1所述的方法,其特征在于,所述对所述第一目标文件执行静态替换操作包括:
修改所述第一目标文件中的函数调用关系以及常量,以使所述目标应用程序在运行时通过所述静态替换操作获取待调用的对象名,其中,所述函数调用关系包括影响类加载的关键函数的调用关系和/或类加载函数的调用关系,所述常量包括影响类加载的且与注解相关的常量。
5.根据权利要求4所述的方法,其特征在于,所述对所述第一目标文件执行静态替换操作还包括:
在所述第一目标文件中添加包含混淆前后映射转换方法的类;
处理含有第一调用的有关类加载的类,重新在所述含有第一调用的有关类加载的类中生成私有方法,并且将第一调用为第二调用,其中,所述第一调用为用于调用父类的调用,所述第二调用为用于调用类中的私有方法的调用;
对于有关类加载机制中继承自系统的类加载器但未实现类加载方法的类,重新在所述有关类加载机制中继承自系统的类加载器但未实现类加载方法的类中生成私有方法,并对私有方法进行重载调用。
6.根据权利要求1所述的方法,其特征在于,所述按照所述混淆表,将所述第一目标文件的对象名混淆为与所述对象名对应的混淆名包括:
解析所述混淆表,将对象名与混淆名的对应关系存放在哈希表中;
解析出所述第一目标文件中的对象名;
重新将解析出的对象名写入所述第一目标文件,其中,在写入所述解析出的对象名时,查询所述哈希表,将所述解析出的对象名混淆为与所述解析出的对象名对应的混淆名。
7.根据权利要求1所述的方法,其特征在于,所述将混淆后的所述第一目标文件存入所述目标应用程序包括:
将混淆后的所述第一目标文件进行压缩,并对混淆后的所述第一目标文件进行重新签名;
将预先配置的用于获取待调用的对象名的第三目标文件以及混淆后的所述第一目标文件打包写入所述目标应用程序。
8.根据权利要求7所述的方法,其特征在于,在将预先配置的用于获取待调用的对象名的第三目标文件以及混淆后的所述第一目标文件打包写入所述目标应用程序之后,所述方法还包括:
对所述目标应用程序进行重新签名。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述对象名包括以下一种或几种的组合:类名、方法名以及成员变量名。
10.一种代码运行方法,其特征在于,包括:
通过预设的静态替换操作,获取待调用的对象名,其中,所述静态替换操作为预先在目标应用程序的第一目标文件中配置的操作,所述第一目标文件用于记录所述目标应用程序的安装信息;
判断所述待调用的对象名是否包含在预设的混淆表中,其中,所述混淆表为根据所述第一目标文件以及第二目标文件生成的表,所述混淆表用于指示对象名与混淆名之间的对应关系,所述第二目标文件用于记录所述目标应用程序的声明信息;
若所述待调用的对象名包含在所述混淆表中,从所述混淆表中查找并输出与所述待调用的对象名对应的混淆名。
11.根据权利要求10所述的方法,其特征在于,所述对象名包括以下一种或几种的组合:类名、方法名以及成员变量名。
12.一种代码运行装置,其特征在于,包括:
第一获取单元,用于通过预设的静态替换操作,获取待调用的对象名,其中,所述静态替换操作为预先在目标应用程序的第一目标文件中配置的操作,所述第一目标文件用于记录所述目标应用程序的安装信息;
判断单元,用于判断所述待调用的对象名是否包含在预设的混淆表中,其中,所述混淆表为根据所述第一目标文件以及第二目标文件生成的表,所述混淆表用于指示对象名与混淆名之间的对应关系,所述第二目标文件用于记录所述目标应用程序的声明信息;
第一处理单元,用于若所述待调用的对象名包含在所述混淆表中,从所述混淆表中查找并输出与所述待调用的对象名对应的混淆名。
13.根据权利要求12中任一项所述的装置,其特征在于,所述对象名包括以下一种或几种的组合:类名、装置名以及成员变量名。
14.一种代码混淆装置,其特征在于,包括:
第二获取单元,用于从目标应用程序中获取第一目标文件及第二目标文件;
生成单元,用于解析所述第一目标文件及所述第二目标文件,按照预设规则生成混淆表,其中,所述混淆表中不包含从所述第二目标文件中解析出的对象名;
第二处理单元,用于对所述第一目标文件执行静态替换操作;
第三处理单元,用于按照所述混淆表,将所述第一目标文件的对象名混淆为与所述对象名对应的混淆名;
存储单元,用于将混淆后的所述第一目标文件存入所述目标应用程序。
15.根据权利要求14所述的装置,其特征在于,所述第二获取单元包括:
第一处理子单元,用于解压缩所述目标应用程序,得到所述第一目标文件;以及
第二处理子单元,用于反编译所述目标应用程序,得到所述第二目标文件。
16.根据权利要求14所述的装置,其特征在于,所述生成单元包括:
第一解析子单元,用于解析所述第一目标文件,得到所述第一目标文件中的对象名;
第二解析子单元,用于解析所述第二目标文件,得到所述第二目标文件中的对象名;
第三处理子单元,用于从所述第一目标文件中的对象名中,滤除所述第二目标文件中的对象名,得到不包含所述第二目标文件中的对象名的对象名集合;
生成子单元,用于根据所述对象名集合,生成所述混淆表。
17.根据权利要求14所述的装置,其特征在于,所述第二处理单元包括:
修改子单元,用于修改所述第一目标文件中的函数调用关系以及常量,以使所述目标应用程序在运行时通过所述静态替换操作获取待调用的对象名,其中,所述函数调用关系包括影响类加载的关键函数的调用关系和/或类加载函数的调用关系,所述常量包括影响类加载的且与注解相关的常量。
18.根据权利要求17所述的装置,其特征在于,所述第二处理单元还包括:
添加子单元,用于在所述第一目标文件中添加包含混淆前后映射转换装置的类;
第四处理子单元,用于处理含有第一调用的有关类加载的类,重新在所述含有第一调用的有关类加载的类中生成私有方法,并且将第一调用为第二调用,其中,所述第一调用为用于调用父类的调用,所述第二调用为用于调用类中的私有方法的调用;
第五处理子单元,用于对于有关类加载机制中继承自系统的类加载器但未实现类加载方法的类,重新在所述有关类加载机制中继承自系统的类加载器但未实现类加载方法的类中生成私有方法,并对私有方法进行重载调用。
19.根据权利要求14所述的装置,其特征在于,所述第三处理单元包括:
第三解析子单元,用于解析所述混淆表,将对象名与混淆名的对应关系存放在哈希表中;
第四解析子单元,用于解析出所述第一目标文件中的对象名;
第五处理子单元,用于重新将解析出的对象名写入所述第一目标文件,其中,在写入所述解析出的对象名时,查询所述哈希表,将所述解析出的对象名混淆为与所述解析出的对象名对应的混淆名。
20.根据权利要求14所述的装置,其特征在于,所述存储单元包括:
第六处理子单元,用于将混淆后的所述第一目标文件进行压缩,并对混淆后的所述第一目标文件进行重新签名;
写入子单元,用于将预先配置的用于获取待调用的对象名的第三目标文件以及混淆后的所述第一目标文件打包写入所述目标应用程序。
21.根据权利要求20所述的装置,其特征在于,所述装置还包括:
第四处理单元,用于对所述目标应用程序进行重新签名。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610076963.9A CN107038354A (zh) | 2016-02-03 | 2016-02-03 | 代码混淆方法、代码运行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610076963.9A CN107038354A (zh) | 2016-02-03 | 2016-02-03 | 代码混淆方法、代码运行方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107038354A true CN107038354A (zh) | 2017-08-11 |
Family
ID=59532456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610076963.9A Pending CN107038354A (zh) | 2016-02-03 | 2016-02-03 | 代码混淆方法、代码运行方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107038354A (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108133126A (zh) * | 2017-12-04 | 2018-06-08 | 北京奇虎科技有限公司 | 一种安卓应用的加固方法和装置 |
CN108537012A (zh) * | 2018-02-12 | 2018-09-14 | 北京梆梆安全科技有限公司 | 基于变量和代码执行顺序的源代码混淆方法及装置 |
CN108804883A (zh) * | 2018-04-27 | 2018-11-13 | 北京奇艺世纪科技有限公司 | 一种混淆代码的运行方法和装置 |
CN109409037A (zh) * | 2018-09-29 | 2019-03-01 | 阿里巴巴集团控股有限公司 | 一种数据混淆规则的生成方法、装置及设备 |
CN109614771A (zh) * | 2018-10-31 | 2019-04-12 | 同盾控股有限公司 | 一种基于Java代码的混淆方法和装置 |
CN110084005A (zh) * | 2019-05-06 | 2019-08-02 | 北京奇艺世纪科技有限公司 | 一种代码的处理方法及装置 |
CN110298146A (zh) * | 2019-06-27 | 2019-10-01 | 北京奇艺世纪科技有限公司 | 一种应用程序的处理、运行方法及装置 |
CN110618967A (zh) * | 2019-06-13 | 2019-12-27 | 北京无限光场科技有限公司 | 应用程序运行方法、安装包生成方法、装置、设备及介质 |
CN110781462A (zh) * | 2019-10-10 | 2020-02-11 | 郑州阿帕斯科技有限公司 | 一种资源的混淆方法和装置 |
CN111065088A (zh) * | 2019-10-18 | 2020-04-24 | 宇龙计算机通信科技(深圳)有限公司 | 一种位置获取方法、装置、存储介质及电子设备 |
CN111104671A (zh) * | 2018-10-25 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 应用的标识确定方法和应用的检测方法 |
CN111177662A (zh) * | 2019-12-06 | 2020-05-19 | 浙江中控技术股份有限公司 | 一种应用混淆方法、装置、服务器及存储介质 |
CN111198710A (zh) * | 2020-01-03 | 2020-05-26 | 厦门美图之家科技有限公司 | 程序安装包处理方法、装置、电子设备和计算机可读存储介质 |
CN112231520A (zh) * | 2019-07-15 | 2021-01-15 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN112328978A (zh) * | 2020-11-03 | 2021-02-05 | 广东三维家信息科技有限公司 | 代码混淆处理及运行的方法、装置、终端设备及存储介质 |
CN113010857A (zh) * | 2021-03-02 | 2021-06-22 | 北京顶象技术有限公司 | 一种可自定义规则的JavaScript代码混淆方法和系统 |
CN116662942A (zh) * | 2023-07-31 | 2023-08-29 | 成都初心互动科技有限公司 | 一种iOS应用程序加固方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779029A (zh) * | 2011-05-10 | 2012-11-14 | 北京磊友信息科技有限公司 | 一种对JavaScript代码加扰的方法及设备 |
CN103150493A (zh) * | 2013-02-28 | 2013-06-12 | 浙江中控技术股份有限公司 | 一种JavaScript代码的混淆方法和装置 |
CN103324872A (zh) * | 2013-07-12 | 2013-09-25 | 上海交通大学 | 基于指令混淆的Android应用程序保护方法及系统 |
CN105354449A (zh) * | 2015-11-04 | 2016-02-24 | 北京鼎源科技有限公司 | 一种面向Lua语言的加扰混淆方法和解密方法 |
-
2016
- 2016-02-03 CN CN201610076963.9A patent/CN107038354A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779029A (zh) * | 2011-05-10 | 2012-11-14 | 北京磊友信息科技有限公司 | 一种对JavaScript代码加扰的方法及设备 |
CN103150493A (zh) * | 2013-02-28 | 2013-06-12 | 浙江中控技术股份有限公司 | 一种JavaScript代码的混淆方法和装置 |
CN103324872A (zh) * | 2013-07-12 | 2013-09-25 | 上海交通大学 | 基于指令混淆的Android应用程序保护方法及系统 |
CN105354449A (zh) * | 2015-11-04 | 2016-02-24 | 北京鼎源科技有限公司 | 一种面向Lua语言的加扰混淆方法和解密方法 |
Non-Patent Citations (2)
Title |
---|
赖堃: "JavaScript引擎Rhino研究与J2ME实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
赵志超: "嵌入式移动警务终端软件系统的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108133126A (zh) * | 2017-12-04 | 2018-06-08 | 北京奇虎科技有限公司 | 一种安卓应用的加固方法和装置 |
CN108537012A (zh) * | 2018-02-12 | 2018-09-14 | 北京梆梆安全科技有限公司 | 基于变量和代码执行顺序的源代码混淆方法及装置 |
CN108804883A (zh) * | 2018-04-27 | 2018-11-13 | 北京奇艺世纪科技有限公司 | 一种混淆代码的运行方法和装置 |
CN108804883B (zh) * | 2018-04-27 | 2020-06-19 | 北京奇艺世纪科技有限公司 | 一种混淆代码的运行方法和装置 |
CN109409037A (zh) * | 2018-09-29 | 2019-03-01 | 阿里巴巴集团控股有限公司 | 一种数据混淆规则的生成方法、装置及设备 |
CN109409037B (zh) * | 2018-09-29 | 2022-04-29 | 创新先进技术有限公司 | 一种数据混淆规则的生成方法、装置及设备 |
CN111104671A (zh) * | 2018-10-25 | 2020-05-05 | 阿里巴巴集团控股有限公司 | 应用的标识确定方法和应用的检测方法 |
CN111104671B (zh) * | 2018-10-25 | 2023-05-30 | 阿里巴巴集团控股有限公司 | 应用的标识确定方法和应用的检测方法 |
CN109614771A (zh) * | 2018-10-31 | 2019-04-12 | 同盾控股有限公司 | 一种基于Java代码的混淆方法和装置 |
CN110084005A (zh) * | 2019-05-06 | 2019-08-02 | 北京奇艺世纪科技有限公司 | 一种代码的处理方法及装置 |
CN110618967A (zh) * | 2019-06-13 | 2019-12-27 | 北京无限光场科技有限公司 | 应用程序运行方法、安装包生成方法、装置、设备及介质 |
CN110298146A (zh) * | 2019-06-27 | 2019-10-01 | 北京奇艺世纪科技有限公司 | 一种应用程序的处理、运行方法及装置 |
CN110298146B (zh) * | 2019-06-27 | 2022-04-22 | 北京奇艺世纪科技有限公司 | 一种应用程序的处理、运行方法及装置 |
CN112231520A (zh) * | 2019-07-15 | 2021-01-15 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN110781462A (zh) * | 2019-10-10 | 2020-02-11 | 郑州阿帕斯科技有限公司 | 一种资源的混淆方法和装置 |
CN111065088B (zh) * | 2019-10-18 | 2021-10-22 | 宇龙计算机通信科技(深圳)有限公司 | 一种位置获取方法、装置、存储介质及电子设备 |
CN111065088A (zh) * | 2019-10-18 | 2020-04-24 | 宇龙计算机通信科技(深圳)有限公司 | 一种位置获取方法、装置、存储介质及电子设备 |
CN111177662A (zh) * | 2019-12-06 | 2020-05-19 | 浙江中控技术股份有限公司 | 一种应用混淆方法、装置、服务器及存储介质 |
CN111198710A (zh) * | 2020-01-03 | 2020-05-26 | 厦门美图之家科技有限公司 | 程序安装包处理方法、装置、电子设备和计算机可读存储介质 |
CN111198710B (zh) * | 2020-01-03 | 2022-08-26 | 厦门美图之家科技有限公司 | 程序安装包处理方法、装置和电子设备 |
CN112328978A (zh) * | 2020-11-03 | 2021-02-05 | 广东三维家信息科技有限公司 | 代码混淆处理及运行的方法、装置、终端设备及存储介质 |
CN113010857A (zh) * | 2021-03-02 | 2021-06-22 | 北京顶象技术有限公司 | 一种可自定义规则的JavaScript代码混淆方法和系统 |
CN116662942A (zh) * | 2023-07-31 | 2023-08-29 | 成都初心互动科技有限公司 | 一种iOS应用程序加固方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107038354A (zh) | 代码混淆方法、代码运行方法及装置 | |
CN110535831B (zh) | 基于Kubernetes和网络域的集群安全管理方法、装置及存储介质 | |
CN103150513B (zh) | 拦截应用程序中的植入信息的方法及装置 | |
CN105303112B (zh) | 组件调用漏洞的检测方法及装置 | |
US20180314514A1 (en) | Techniques to isolating a portion of an online computing service | |
CN107450941B (zh) | 自动打包方法、装置、存储介质和计算机设备 | |
CN104111944B (zh) | 页面处理方法和装置以及页面生成方法和装置 | |
CN108491236A (zh) | 一种插件加载方法、装置及计算机可读存储介质 | |
CN105391811A (zh) | 域名解析方法、应用服务器的访问方法及其终端 | |
US20160050128A1 (en) | System and Method for Facilitating Communication with Network-Enabled Devices | |
CN107451852A (zh) | 一种直播平台中第三方直播应用app的推广方法及服务器 | |
US10686821B2 (en) | Analysis of mobile applications | |
CN108376073A (zh) | 一种测试软件包生成方法及终端 | |
CN108920359B (zh) | 应用程序的测试方法、装置、存储介质和电子装置 | |
EP2782311A1 (en) | Methods of testing a firewall, and apparatus therefor | |
GB2407661A (en) | Method of validating device profiles and capability class descriptions | |
CN105511933A (zh) | 一种源代码的编译方法及相关设备 | |
CN103475746A (zh) | 一种终端服务方法及装置 | |
CN105653943B (zh) | Android应用的日志审计方法及系统 | |
CN106445548A (zh) | 一种测试包下发方法和装置 | |
CN107908632A (zh) | 网站文件处理方法、装置、网站文件处理平台及存储介质 | |
CN106815524A (zh) | 恶意脚本文件的检测方法及装置 | |
CN104484484B (zh) | 清理缓存文件的方法及装置 | |
CN105607944B (zh) | 一种共享应用环境的方法及装置 | |
CN107846449A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170811 |