CN107133502A - 一种应用程序的处理方法及装置 - Google Patents
一种应用程序的处理方法及装置 Download PDFInfo
- Publication number
- CN107133502A CN107133502A CN201710243953.4A CN201710243953A CN107133502A CN 107133502 A CN107133502 A CN 107133502A CN 201710243953 A CN201710243953 A CN 201710243953A CN 107133502 A CN107133502 A CN 107133502A
- Authority
- CN
- China
- Prior art keywords
- data
- program
- control flow
- function
- flow data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012545 processing Methods 0.000 title claims abstract description 57
- 238000003672 processing method Methods 0.000 title claims abstract description 15
- 238000000034 method Methods 0.000 claims abstract description 46
- 230000006870 function Effects 0.000 claims description 133
- 230000009897 systematic effect Effects 0.000 claims description 3
- 238000003860 storage Methods 0.000 description 15
- 238000004590 computer program Methods 0.000 description 9
- 230000006872 improvement Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000008602 contraction Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 239000011800 void material Substances 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种应用程序的处理方法及装置,该方法包括:获取待保护的应用程序中的预定程序数据;从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数;基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据,所述控制流混淆处理能够使得所述控制流数据在所述待保护的应用程序中被混淆。利用本申请实施例,可以降低了应用程序的程序代码的泄露或篡改风险,提高应用程序的程序代码的安全性。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种应用程序的处理方法及装置。
背景技术
程序语言通常是解释性语言,如Java程序语言、C程序语言等。在编译的过程中,很多程序语言编写的源程序代码需要编译成某种中间代码,例如,Java语言编写的源程序代码可编译为一种“字节码”形式的中间代码。在中间代码中会包含很多源程序代码的信息,例如方法名、变量名等,这样就使得中间代码的反编译变得非常容易,从而造成应用程序的程序代码的泄露或篡改。为了保护应用程序的应用版权等,就需要对应用程序进行保护。
应用程序加壳是极其普遍的应用程序保护方式,即编写程序代码,并将该程序代码设置在应用程序的程序代码外,设置在外层的程序代码在待保护的程序代码(或应用程序)前执行,以便执行其中的解密程序代码、反调试等操作,完成上述操作后,再执行待保护的应用程序(或其程序代码),这样,通过在待保护的程序代码外层增加包含解密程序代码、反调试等操作的程序代码来对应用程序进行保护。
然而,应用程序加壳的方式尽管可以有效的阻止对待保护的应用程序的静态分析,但是,由于解密后的待保护的程序代码最终要在内存中执行,因此,只要用户能够在内存中找到解密后的待保护的程序代码的地址,即可获取待保护的程序代码,因此,对于对待保护的应用程序的动态分析,应用程序加壳的方式却无法阻止,应用程序的程序代码的泄露或篡改风险依然存在,从而使得应用程序的程序代码的安全性低下。
发明内容
本申请实施例的目的是提供一种应用程序的处理方法及装置,以解决现有技术中存在的应用程序的程序代码的泄露或篡改风险,从而使得应用程序的程序代码的安全性低下的问题。
为解决上述技术问题,本申请实施例是这样实现的:
本申请实施例提供的一种应用程序的处理方法,所述方法包括:
获取待保护的应用程序中的预定程序数据;
从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数;
基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据,所述控制流混淆处理能够使得所述控制流数据在所述待保护的应用程序中被混淆。
可选地,所述从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数,包括:
将所述预定程序数据转换为预定程序语言的目标程序数据;
从所述目标程序数据中提取控制流数据,基于所述控制流数据生成预定程序函数。
可选地,所述基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据,包括:
将所述预定程序数据中除控制流数据外的程序数据输入所述预定程序函数中,得到返回值;
基于所述返回值确定相应的统一控制流函数;
将所述控制流数据输入到所述统一控制流函数中,以通过所述统一控制流函数能够调用所述控制流数据;
根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据生成目标应用程序的数据。
可选地,所述方法还包括:
为每个控制流数据设置相应的索引,以标记所述控制流数据所对应的函数类型;
相应地,所述根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据生成目标应用程序的数据,包括:
根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数、所述控制流数据和所述索引生成目标应用程序的数据。
可选地,所述待保护的应用程序为基于Android操作系统的应用程序,所述预定程序数据为classes.dex文件中包含的程序数据,所述目标程序数据为基于smali程序语言的程序数据。
本申请实施例提供的一种应用程序的处理装置,所述装置包括:
预定数据获取模块,用于获取待保护的应用程序中的预定程序数据;
预定函数生成模块,用于从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数;
目标数据获取模块,用于基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据,所述控制流混淆处理能够使得所述控制流数据在所述待保护的应用程序中被混淆。
可选地,所述预定函数生成模块,包括:
转换单元,用于将所述预定程序数据转换为预定程序语言的目标程序数据;
预定函数生成单元,用于从所述目标程序数据中提取控制流数据,基于所述控制流数据生成预定程序函数。
可选地,所述目标数据获取模块,包括:
返回值获取单元,用于将所述预定程序数据中除控制流数据外的程序数据输入所述预定程序函数中,得到返回值;
统一函数确定单元,用于基于所述返回值确定相应的统一控制流函数;
输入单元,用于将所述控制流数据输入到所述统一控制流函数中,以通过所述统一控制流函数能够调用所述控制流数据;
目标数据获取单元,用于根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据生成目标应用程序的数据。
可选地,所述装置还包括:
索引设置模块,用于为每个控制流数据设置相应的索引,以标记所述控制流数据所对应的函数类型;
相应地,所述目标数据获取单元,用于根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数、所述控制流数据和所述索引生成目标应用程序的数据。
可选地,所述待保护的应用程序为基于Android操作系统的应用程序,所述预定程序数据为classes.dex文件中包含的程序数据,所述目标程序数据为基于smali程序语言的程序数据。
由以上本申请实施例提供的技术方案可见,本申请实施例通过获取的待保护的应用程序中的预定程序数据,从中获取控制流数据,基于控制流数据生成预定程序函数,然后,基于控制流数据、预定程序数据和预定程序函数对待保护的应用程序进行控制流混淆处理,以使控制流数据在待保护的应用程序中被混淆,得到目标应用程序的数据,这样,预定程序数据在控制流程上无法再被反编译出具体含义,降低了应用程序的程序代码的泄露或篡改风险,同时,由于生成的预定程序函数在控制流程上直接操作寄存器,对预定程序数据进行反编译后无法直接查看到应用程序中真实的相应程序代码,进一步降低了应用程序的程序代码的泄露或篡改风险,提高应用程序的程序代码的安全性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一种应用程序的处理方法实施例;
图2为本申请另一种应用程序的处理方法实施例;
图3为本申请一种应用程序的处理装置实施例。
具体实施方式
本申请实施例提供一种应用程序的处理方法及装置。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
实施例一
如图1所示,本申请实施例提供一种应用程序的处理方法,该方法的执行主体可以为终端设备,其中,终端设备可以如个人计算机、手机或平板电脑等等。该方法可以用于对任何应用程序的程序代码进行保护,防止除开发者外的其它用户对程序代码的篡改等,该方法具体可以包括以下步骤:
在步骤S101中,获取待保护的应用程序中的预定程序数据。
其中,待保护的应用程序可以包括多种,例如,基于不同操作系统的应用程序,具体如,基于Windows操作系统的应用程序、基于Android操作系统的应用程序或基于iOS操作系统的应用程序等,应用程序也可以是任意的应用程序,如即时通讯应用、某游戏应用或购物应用等。预定程序数据可以是待保护的应用程序中包含的任意程序数据,例如,全部或部分的程序代码,或者,配置文件或资源文件中包含的数据等。本申请实施例中考虑到应用程序中的程序代码的重要性,预定程序数据可以为全部或部分的程序代码。
在实施中,为了使得本申请实施例中的具体处理可以更加详细和具体,以下以基于Android操作系统的应用程序为例,基于Android操作系统的应用程序是基于Java程序语言而编写的可执行程序,该应用程序可以封装成apk(Android Package,Android安装包)文件,apk文件本质为zip压缩文件,其中主要包括以下多种类型的文件:classes.dex文件、so文件、AndroidManifest.xml文件和其他资源文件(如图片、xml文件等)等。其中,classes.dex文件是Android操作系统中Dalvik可执行程序的文件,该classes.dex文件中包含所有的Java源程序代码经过编译后的字节码。classes.dex文件中主要由以下多个部分组成:头部(即其中的Dex Header部分)、各种类型的表(即其中的Table部分)和数据段(即其中的Data Section部分),其中,头部包含了每个部分或区域的大小及偏移信息,各种类型的表中可以包含各种数据,如字符串表、类名表、函数表等,数据段中包含字节码等信息,字节码中可以通过上述表的索引来进行编码。基于Android操作系统的应用程序除了可以使用Java程序语言编写外,还可以使用C/C++程序语言进行混合编写,这样就需要提供JNI接口(Java native interface,Java本地接口)。JNI接口提供了允许通过C/C++程序语言操作Java程序语言中的对象的机制,如设置某个Java对象的域(即Field)或调用Java中的某函数(如method函数等)等。通过C/C++程序语言编写的源程序代码通过Android NDK(Native Development Kit,原生开发工具包)编译为动态库即形成了so文件。
当开发人员或用户编写完成某应用程序(即待保护的应用程序)的所有程序代码和文件后,可以将该应用程序的所有程序代码和文件封装成apk文件,如果测试人员对该apk文件对应的应用程序进行测试,并测试通过后,可以将该apk文件推送给用户使用。在将该apk文件推送给用户使用之前,可以先对应用程序中的程序代码进行保护,防止其中的Java字节码很容易被其它用户反编译,具体地,对于Android操作系统的应用程序来说,Java字节码主要存在于classes.dex文件中,因此,终端设备可以获取上述apk文件中包含的classes.dex文件中的程序数据。技术人员或用户可以预先指定需要重点保护的程序数据或程序代码中的某一个或多个程序函数的数据,然后,终端设备可以从classes.dex文件中的程序数据中选取满足预先指定的上述条件的程序数据作为预定程序数据,如程序代码中的某一个程序函数的数据等。其中,程序函数的呈现形式通常如:Func-Name(Para-Type1Para-Type2Para-Type3...)Return-Type,其中的参数与参数之间没有任何分隔符,例如,foo()V表示void foo()、foo(III)Z表示boolean foo(int,int,int)、foo(Z[I[ILjava/lang/String;J]Ljava/lang/String)表示String foo(boolean,int[],int[],String,long)等。其中,形如[XXX和Lxxx/yyy为数组的表示方式,即数组的表示方式是:在基本数据类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I和[F,对象的表示则以L作为开头,格式可以是LpackageName/objectName;(注意必须有个分号跟在最后),例如String对象在smali程序语言中为:Ljava/lang/String;,其中java/lang对应java.lang包,String就是定义在该包中的一个对象。对于Windows或iOS操作系统的应用程序的情况可以参见上述相关内容,并结合实际情况处理,在此不再赘述。
在步骤S102中,从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数。
其中,控制流数据可以包括多种,例如分支语句对应的数据和/或循环语句对应的数据和/或跳转语句对应的数据等,而分支语句又可以包括if语句、if-else语句、if-elseif-else语句和switch语句等,循环语句可以包括while循环语句、do-while循环语句和for循环语句等,跳转语句可以包括break语句和continue语句等。预定程序函数可以根据实际情况设定,例如程序语言中常用的程序函数,或者根据实际情况自行构建的程序函数等,所述预定程序函数可以用于对控制流数据进行混淆,为控制流混淆处理的控制因素。
在实施中,考虑到控制流数据在应用程序中往往能够起到较重要的作用,而且,控制流数据通常也是应用程序中的核心数据,包括较多指令集,可用于对应用程序的整个或部分执行流程的控制,因此,可以将基于指令集控制流数据作为混淆对象,以打乱预定程序代码中方法的执行流程,基于此,从所述预定程序数据中查找控制流数据所在的位置,查找到其相应位置后,可以将控制流数据所在的位置的上部和下部分别提取指定数据量的程序数据(即提取出包含控制流数据的程序代码),例如,程序数据中if语句对应的数据所在的程序代码的片段等。可以基于提取出的包含控制流数据的程序代码构建新的程序函数(即预定程序函数)。其中,预定程序函数中可以包括一个或多个参数,例如寄存器信息、索引信息等,本申请实施例对此不做限定。
在步骤S103中,基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据。
其中,控制流混淆处理可以是对提取的包括控制流数据的程序数据进行打乱、代码混淆等处理,所述控制流混淆处理可以使得所述控制流数据在所述待保护的应用程序中被混淆。
在实施中,可以先将所述预定程序数据中的所述控制流数据进行混淆处理,得到混淆处理后的预定程序数据,具体如,可以预先根据所述预定程序函数等信息设置混淆处理机制,如打乱控制流数据的呈现形式,使得控制流数据对应的程序代码随机排列等,基于该混淆处理机制可以对所述预定程序数据中的所述控制流数据进行混淆处理,从而可以得到控制流数据对应的程序代码随机排列的预定程序数据。可以将该混淆处理后的预定程序数据还原到所述待保护的应用程序的程序数据中,然后,可以通过预定的编译工具对上述程序数据进行重新编译,得到编译后的程序数据得到目标应用程序的数据,即编译后的apk文件。
本申请实施例提供一种应用程序的处理方法,通过获取的待保护的应用程序中的预定程序数据,从中获取控制流数据,基于控制流数据生成预定程序函数,然后,基于控制流数据、预定程序数据和预定程序函数对待保护的应用程序进行控制流混淆处理,以使控制流数据在待保护的应用程序中被混淆,得到目标应用程序的数据,这样,预定程序数据在控制流程上无法再被反编译出具体含义,降低了应用程序的程序代码的泄露或篡改风险,同时,由于生成的预定程序函数在控制流程上直接操作寄存器,对预定程序数据进行反编译后无法直接查看到应用程序中真实的相应程序代码,进一步降低了应用程序的程序代码的泄露或篡改风险,提高应用程序的程序代码的安全性。
实施例二
如图2所示,本申请实施例提供一种应用程序的处理方法,该方法的执行主体可以为终端设备,终端设备可以如个人计算机、手机或平板电脑等。该方法可以用于对任何应用程序的程序代码进行保护,防止除开发者外的其它用户对程序代码的篡改等,本申请实施例中以应用程序为基于Android操作系统的应用程序为例进行说明,对于其它应用程序的情况,可以参见下述相关内容,在此不再赘述。该方法具体可以包括以下步骤:
在步骤S201中,获取待保护的应用程序中的预定程序数据。
其中,所述预定程序数据为classes.dex文件中包含的程序数据,可以是classes.dex文件中任意一部分或多个不同部分的程序数据。
上述步骤S201的步骤内容与上述实施例一中的步骤S101的步骤内容相同,步骤S201的处理可以参见步骤S101的相关内容,在此不再赘述。
在步骤S202中,将所述预定程序数据转换为预定程序语言的目标程序数据。
其中,预定程序语言可以根据实际情况确定,例如可以是除Java程序语言外的任一种程序语言,具体如C程序语言或C++程序语言等,在实际应用中,预定程序语言也可以是Java程序语言,本申请实施例对此不做限定。
在实施中,基于Android操作系统的应用程序采用的是java程序语言进行开发,通常,Android操作系统具有相应的虚拟机Dalvik,应用程序中的程序代码的编译最终并不是采用的java程序语言中的class完成,而是使用Smali程序语言完成。如果反编译的是Smali程序语言,则反编译后的程序代码可以被用户正确理解,从而造成程序代码的泄露。
由于应用程序中的程序代码的编译最终使用的是Smali程序语言完成,因此,为了简化处理过程,可以将所述预定程序数据转换为Smali程序语言的目标程序数据(即所述目标程序数据为基于smali程序语言的程序数据)。例如,获取的待保护的应用程序中的预定程序数据如下:
可以将上述预定程序数据转换为Smali程序语言的目标程序数据,得到的目标程序数据可以如下:
在步骤S203中,从所述目标程序数据中提取控制流数据,基于所述控制流数据生成预定程序函数。
上述步骤S203的处理过程可以参见上述实施例一中的相关内容,基于上述步骤S202的示例,可以从上述目标程序数据中选取if判断的控制语句if-eqz所在的片段或部分作为控制流数据,可以使用该控制流数据生成新的预先设定的hello1函数(即预定程序函数),具体内容可以如下:
在步骤S204中,将所述预定程序数据中除控制流数据外的程序数据输入所述预定程序函数中,得到返回值。
在实施中,由于控制流数据需要做程序代码的打乱等处理,使得用户无法确定该控制流数据的真实情况,为了能够在正常使用控制流数据时,可以及时执行上述控制流数据,可以设置用于调用该控制流数据的统一控制流函数,该统一控制流函数中包括寄存器信息,为了确定该寄存器信息可以通过步骤S204的处理执行,具体地,可以将预定程序数据中的控制流数据(或其对应的程序代码)去除,并将当前寄存器中的所有内容都输入到生成的新的预先设定的hello1函数(即预定程序函数)中,得到相应的返回值。
需要说明的是,预先设定的hello1函数生成的伪代码可以如下:
其中,Makenewreg用于将预定程序数据的寄存器装配到hello1函数的寄存器上,makenewbuf用于将预定程序数据的程序代码装配到hello1函数中,genretval用于处理hello1函数的返回值。hello1函数在处理寄存器的输入与输出时,可以判断各种寄存器内容,并将基础数据类型进行转换成Object类型,同时Long与Double数据类型为64位,可占用两个寄存器。
在步骤S205中,基于所述返回值确定相应的统一控制流函数。
在实施中,可以将通过上述步骤S204中得到的返回值赋值到统一控制流函数中的寄存器中,将该返回值作为其中的寄存器信息,这样,即可得到用于调用控制流数据的统一控制流函数。其中,预定程序数据的伪代码可以如下:
.method public static hello([Ljava/lang/Object;]Ljava/lang/Object;
call hello1//预定程序数据的程序代码
call cfg_fun(寄存器,index_1)//统一控制流函数。
在步骤S206中,将所述控制流数据输入到所述统一控制流函数中,以通过所述统一控制流函数能够调用所述控制流数据。
在实施中,将上述控制流数据对应的程序代码提取到上述得到的统一控制流函数中,其中寄存器信息为上述返回值,这样,可以使用调用函数的方式调用控制流数据。
此外,统一控制流函数还可以包括索引,可以用于标记或确定所述控制流数据所对应的函数类型,基于此,可以为每个控制流数据、每一条控制流数据或每一个控制流数据中的程序语句设置相应的索引,从而标记所述控制流数据所对应的函数类型,以标记每个控制流数据、每一条控制流数据或每一个控制流数据中的程序语句具体属于哪一个程序函数。基于此,其程序数据对应的伪代码可以如下:
Fun cfg_fun(registers,index)//输入对应寄存器,与对应索引
Switch index:
1:if-eqz v2,:cond_31
2:…
3:…
其中的Switch index,及其后续内容为索引。
通过上述方式生成调用所述控制流数据统一控制流函数,使得待保护的应用程序中的控制流数据被混淆或被隐藏,使得程序数据对应的程序代码的长度缩短,减少了混淆所需的时间开销,增加了程序代码的语义复杂度,提高了程序代码的隐蔽性。
需要说明的是,统一控制流函数在处理控制流数据的跳转时,可以将所有转换后的程序数据中的控制流数据提取到统一控制流函数,其中,各种判断语句与所有跳转语句包括:if-eq、if-ne、if-lt、if-ge、if-gt、if-le、if-eqz、if-nez、if-ltz、if-gez、if-gtz、if-lez。可以根据语义处理各种情况,同时调整语句还需要保留原始判断参数、寄存器内容和常量。
在步骤S207中,根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据生成目标应用程序的数据。
在实施中,终端设备中可以预先设置有Smali工具,可以使用Smali工具将通过上述修改后的基于smali程序语言的程序代码(包括所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据对应的程序代码)编译成新的classes.dex文件。可以通过编译成的新的classes.dex文件,以及待保护的应用程序中的其它数据或文件生成新的apk文件,或者,使用编译成的新的classes.dex文件替换待保护的应用程序中的classes.dex文件,得到新的apk文件,即可将apk文件的数据作为目标应用程序的数据。
对于上述为每个控制流数据设置相应的索引的处理,上述步骤S207的处理相应的可以为:根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数、所述控制流数据和所述索引生成目标应用程序的数据。
具体处理过程可以参见上述步骤S207的相关内容,在此不再赘述。
本申请实施例提供一种应用程序的处理方法,通过获取的待保护的应用程序中的预定程序数据,从中获取控制流数据,基于控制流数据生成预定程序函数,然后,基于控制流数据、预定程序数据和预定程序函数对待保护的应用程序进行控制流混淆处理,以使控制流数据在待保护的应用程序中被混淆,得到目标应用程序的数据,这样,预定程序数据在控制流程上无法再被反编译出具体含义,降低了应用程序的程序代码的泄露或篡改风险,同时,由于生成的预定程序函数在控制流程上直接操作寄存器,对预定程序数据进行反编译后无法直接查看到应用程序中真实的相应程序代码,进一步降低了应用程序的程序代码的泄露或篡改风险,提高应用程序的程序代码的安全性。
实施例三
以上为本申请实施例提供的应用程序的处理方法,基于同样的思路,本申请实施例还提供一种应用程序的处理装置,如图3所示。
所述应用程序的处理装置包括:预定数据获取模块301、预定函数生成模块302和目标数据获取模块303,其中:
预定数据获取模块301,用于获取待保护的应用程序中的预定程序数据;
预定函数生成模块302,用于从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数;
目标数据获取模块303,用于基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据,所述控制流混淆处理能够使得所述控制流数据在所述待保护的应用程序中被混淆。
本申请实施例中,所述预定函数生成模块302,包括:
转换单元,用于将所述预定程序数据转换为预定程序语言的目标程序数据;
预定函数生成单元,用于从所述目标程序数据中提取控制流数据,基于所述控制流数据生成预定程序函数。
本申请实施例中,所述目标数据获取模块303,包括:
返回值获取单元,用于将所述预定程序数据中除控制流数据外的程序数据输入所述预定程序函数中,得到返回值;
统一函数确定单元,用于基于所述返回值确定相应的统一控制流函数;
输入单元,用于将所述控制流数据输入到所述统一控制流函数中,以通过所述统一控制流函数能够调用所述控制流数据;
目标数据获取单元,用于根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据生成目标应用程序的数据。
本申请实施例中,所述装置还包括:
索引设置模块,用于为每个控制流数据设置相应的索引,以标记所述控制流数据所对应的函数类型;
相应地,所述目标数据获取单元,用于根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数、所述控制流数据和所述索引生成目标应用程序的数据。
本申请实施例中,所述待保护的应用程序为基于Android操作系统的应用程序,所述预定程序数据为classes.dex文件中包含的程序数据,所述目标程序数据为基于smali程序语言的程序数据。
本申请实施例提供一种应用程序的处理装置,通过获取的待保护的应用程序中的预定程序数据,从中获取控制流数据,基于控制流数据生成预定程序函数,然后,基于控制流数据、预定程序数据和预定程序函数对待保护的应用程序进行控制流混淆处理,以使控制流数据在待保护的应用程序中被混淆,得到目标应用程序的数据,这样,预定程序数据在控制流程上无法再被反编译出具体含义,降低了应用程序的程序代码的泄露或篡改风险,同时,由于生成的预定程序函数在控制流程上直接操作寄存器,对预定程序数据进行反编译后无法直接查看到应用程序中真实的相应程序代码,进一步降低了应用程序的程序代码的泄露或篡改风险,提高应用程序的程序代码的安全性。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种应用程序的处理方法,其特征在于,所述方法包括:
获取待保护的应用程序中的预定程序数据;
从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数;
基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据,所述控制流混淆处理能够使得所述控制流数据在所述待保护的应用程序中被混淆。
2.根据权利要求1所述的方法,其特征在于,所述从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数,包括:
将所述预定程序数据转换为预定程序语言的目标程序数据;
从所述目标程序数据中提取控制流数据,基于所述控制流数据生成预定程序函数。
3.根据权利要求1或2所述的方法,其特征在于,所述基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据,包括:
将所述预定程序数据中除控制流数据外的程序数据输入所述预定程序函数中,得到返回值;
基于所述返回值确定相应的统一控制流函数;
将所述控制流数据输入到所述统一控制流函数中,以通过所述统一控制流函数能够调用所述控制流数据;
根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据生成目标应用程序的数据。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
为每个控制流数据设置相应的索引,以标记所述控制流数据所对应的函数类型;
相应地,所述根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据生成目标应用程序的数据,包括:
根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数、所述控制流数据和所述索引生成目标应用程序的数据。
5.根据权利要求2所述的方法,其特征在于,所述待保护的应用程序为基于Android操作系统的应用程序,所述预定程序数据为classes.dex文件中包含的程序数据,所述目标程序数据为基于smali程序语言的程序数据。
6.一种应用程序的处理装置,其特征在于,所述装置包括:
预定数据获取模块,用于获取待保护的应用程序中的预定程序数据;
预定函数生成模块,用于从所述预定程序数据中获取控制流数据,基于所述控制流数据生成预定程序函数;
目标数据获取模块,用于基于所述控制流数据、所述预定程序数据和所述预定程序函数对所述待保护的应用程序进行控制流混淆处理,得到目标应用程序的数据,所述控制流混淆处理能够使得所述控制流数据在所述待保护的应用程序中被混淆。
7.根据权利要求6所述的装置,其特征在于,所述预定函数生成模块,包括:
转换单元,用于将所述预定程序数据转换为预定程序语言的目标程序数据;
预定函数生成单元,用于从所述目标程序数据中提取控制流数据,基于所述控制流数据生成预定程序函数。
8.根据权利要求6或7所述的装置,其特征在于,所述目标数据获取模块,包括:
返回值获取单元,用于将所述预定程序数据中除控制流数据外的程序数据输入所述预定程序函数中,得到返回值;
统一函数确定单元,用于基于所述返回值确定相应的统一控制流函数;
输入单元,用于将所述控制流数据输入到所述统一控制流函数中,以通过所述统一控制流函数能够调用所述控制流数据;
目标数据获取单元,用于根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数和所述控制流数据生成目标应用程序的数据。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
索引设置模块,用于为每个控制流数据设置相应的索引,以标记所述控制流数据所对应的函数类型;
相应地,所述目标数据获取单元,用于根据所述预定程序数据中除控制流数据外的程序数据、所述统一控制流函数、所述控制流数据和所述索引生成目标应用程序的数据。
10.根据权利要求7所述的装置,其特征在于,所述待保护的应用程序为基于Android操作系统的应用程序,所述预定程序数据为classes.dex文件中包含的程序数据,所述目标程序数据为基于smali程序语言的程序数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710243953.4A CN107133502B (zh) | 2017-04-14 | 2017-04-14 | 一种应用程序的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710243953.4A CN107133502B (zh) | 2017-04-14 | 2017-04-14 | 一种应用程序的处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107133502A true CN107133502A (zh) | 2017-09-05 |
CN107133502B CN107133502B (zh) | 2019-10-15 |
Family
ID=59716005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710243953.4A Active CN107133502B (zh) | 2017-04-14 | 2017-04-14 | 一种应用程序的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107133502B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109409037A (zh) * | 2018-09-29 | 2019-03-01 | 阿里巴巴集团控股有限公司 | 一种数据混淆规则的生成方法、装置及设备 |
CN110675256A (zh) * | 2019-08-30 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
CN111125644A (zh) * | 2018-11-01 | 2020-05-08 | 百度在线网络技术(北京)有限公司 | 应用产品的信息隐藏方法和装置 |
CN111343204A (zh) * | 2020-05-18 | 2020-06-26 | 鹏城实验室 | 控制命令混淆方法、装置及计算机可读存储介质 |
US10783082B2 (en) | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
CN111752570A (zh) * | 2020-06-29 | 2020-10-09 | 重庆小雨点小额贷款有限公司 | 一种编译方法、装置、终端及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080235355A1 (en) * | 2004-10-20 | 2008-09-25 | Electro Industries/Gauge Tech. | Intelligent Electronic Device for Receiving and Sending Data at High Speeds Over a Network |
CN104298534A (zh) * | 2014-10-23 | 2015-01-21 | 广州华多网络科技有限公司 | 基于Lua语言的编程方法和装置 |
CN106326694A (zh) * | 2016-08-30 | 2017-01-11 | 北京鼎源科技有限公司 | 一种基于C源代码的混淆的Android应用加固方法 |
-
2017
- 2017-04-14 CN CN201710243953.4A patent/CN107133502B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080235355A1 (en) * | 2004-10-20 | 2008-09-25 | Electro Industries/Gauge Tech. | Intelligent Electronic Device for Receiving and Sending Data at High Speeds Over a Network |
CN104298534A (zh) * | 2014-10-23 | 2015-01-21 | 广州华多网络科技有限公司 | 基于Lua语言的编程方法和装置 |
CN106326694A (zh) * | 2016-08-30 | 2017-01-11 | 北京鼎源科技有限公司 | 一种基于C源代码的混淆的Android应用加固方法 |
Non-Patent Citations (2)
Title |
---|
刘方圆等: "基于smali 代码混淆的Android 应用保护方法", 《山东大学学报(理学版)》 * |
杨秋翔等: "分存技术在代码混淆中的研究", 《计算机工程与设计》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109409037A (zh) * | 2018-09-29 | 2019-03-01 | 阿里巴巴集团控股有限公司 | 一种数据混淆规则的生成方法、装置及设备 |
CN111125644A (zh) * | 2018-11-01 | 2020-05-08 | 百度在线网络技术(北京)有限公司 | 应用产品的信息隐藏方法和装置 |
CN110675256A (zh) * | 2019-08-30 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
US10783082B2 (en) | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
US11010303B2 (en) | 2019-08-30 | 2021-05-18 | Advanced New Technologies Co., Ltd. | Deploying a smart contract |
US11307990B2 (en) | 2019-08-30 | 2022-04-19 | Advanced New Technologies Co., Ltd. | Deploying a smart contract |
CN111343204A (zh) * | 2020-05-18 | 2020-06-26 | 鹏城实验室 | 控制命令混淆方法、装置及计算机可读存储介质 |
CN111752570A (zh) * | 2020-06-29 | 2020-10-09 | 重庆小雨点小额贷款有限公司 | 一种编译方法、装置、终端及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107133502B (zh) | 2019-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107133502B (zh) | 一种应用程序的处理方法及装置 | |
CN106778288B (zh) | 一种数据脱敏的方法及系统 | |
CN111290778B (zh) | Ai模型的包装方法、平台及电子设备 | |
JP7201078B2 (ja) | データ引数を動的に識別し、ソースコードを計装するためのシステムと方法 | |
CN108932406A (zh) | 虚拟化软件保护方法和装置 | |
CN110245468B (zh) | 一种编译方法、装置、设备及系统 | |
CN107368292A (zh) | 一种资源编译方法及装置 | |
CN106415496A (zh) | 统一中间表示 | |
CN107526625A (zh) | 一种基于字节码检查的Java智能合约安全检测方法 | |
CN107506181A (zh) | 业务处理、数据处理方法、装置以及电子设备 | |
CN107480476B (zh) | 一种基于ELF感染的Android本地层指令编译虚拟化加壳方法 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN111316232A (zh) | 使用程序的注释来提供优化 | |
CN106295390A (zh) | 一种信息处理的方法及装置 | |
WO2024045379A1 (zh) | 编译方法和编译器、Wasm虚拟机 | |
CN108595187A (zh) | 安卓安装包集成软件开发工具包的法、装置及存储介质 | |
CN106599629A (zh) | 一种安卓应用程序加固方法及装置 | |
Watson et al. | Capability hardware enhanced RISC instructions: CHERI instruction-set architecture | |
CN108537012A (zh) | 基于变量和代码执行顺序的源代码混淆方法及装置 | |
CN107038058A (zh) | 一种代码处理方法及装置 | |
CN110309630A (zh) | 一种Java代码加密方法及装置 | |
CN107577925A (zh) | 基于双重ARM指令虚拟的Android应用程序保护方法 | |
US8887142B2 (en) | Loop control flow diversion | |
CN114925338A (zh) | 一种编译方法、装置、设备、介质和产品 | |
CN105005497A (zh) | 一种Java卡虚拟机中本地函数的调用方法及装置 |
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 | ||
CB02 | Change of applicant information |
Address after: 100083 Beijing, Haidian District Xueyuan Road 30 days building A 20 floor Applicant after: Beijing Bang Bang Safety Technology Co. Ltd. Address before: 100083 Xueyuan Road, Haidian District, Haidian District, Beijing, Haidian District, Beijing Applicant before: Yangpuweiye Technology Limited |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |