CN105718764A - 一种基于Android***陷阱指令的软件加固方法 - Google Patents

一种基于Android***陷阱指令的软件加固方法 Download PDF

Info

Publication number
CN105718764A
CN105718764A CN201610034623.XA CN201610034623A CN105718764A CN 105718764 A CN105718764 A CN 105718764A CN 201610034623 A CN201610034623 A CN 201610034623A CN 105718764 A CN105718764 A CN 105718764A
Authority
CN
China
Prior art keywords
androidmanifest
application
resid
district
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201610034623.XA
Other languages
English (en)
Inventor
文伟平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Devsource Technology Co Ltd
Original Assignee
Beijing Devsource 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 Beijing Devsource Technology Co Ltd filed Critical Beijing Devsource Technology Co Ltd
Priority to CN201610034623.XA priority Critical patent/CN105718764A/zh
Publication of CN105718764A publication Critical patent/CN105718764A/zh
Pending legal-status Critical Current

Links

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)

Abstract

本发明公布了一种基于Android***陷阱指令的软件加固方法,利用陷阱指令分析方法,通过解析axml文件,处理Android安装包中的入口文件AndroidManifest.xml,使得应用程序难以被反编译且加固后的应用不影响程序的正常运行;包括:解析Axml文件;构建application属性项,包括索引名称和属性名称,通过修改StringChunk区和修改RessourceChunk区,加到AndroidManifest.xml文件中;修改AndroidManifest.xml文件中对应的Size属性;打包AndroidManifest.xml,完成加固。本发明一方面能够保证处理过的应用不影响程序的正常运行;另一方面可以使得应用程序难以被反编译,防止恶意使用;从而保护应用程序开发者的利益和应用程序的安全。

Description

一种基于Android***陷阱指令的软件加固方法
技术领域
本发明涉及软件安全技术领域,尤其涉及一种基于Android***陷阱指令分析技术的软件加固方法。
背景技术
随着软件产业日益发展,攻击者利用软件逆向技术对软件的各种攻击和未授权使用以及盗版复制等行为也越来越多。逆向分析技术可以被用来在不知道应用程序源代码的情况下分析应用程序的功能流程、篡改应用程序的数据代码等,逆向分析技术如果被不加限制的恶意使用,利用者可以分析获取应用程序的核心技术,也可以篡改应用程序的签名和作者信息,还可以将恶意代码注入到已有的应用程序中并通过二次打包进行伪装,这些行为都极大的危害了应用程序开发者的利益,严重损害了广大用户的隐私安全。
Android作为新兴的操作***,从07年上市以来迅速发展,与苹果IOS***形成分庭抗礼之势。然而Android平台下的软件加固仍然处于起步阶段。很多应用软件都是以Java代码编写的,但它很容易被反编译。而且Android***淡化了进程的概念,应用是基于消息和事件来运行的,只需要在清单文件中增加一些事件的响应,然后在恶意代码中接收事件响应就可以实现基本的注入。因此,越来越多的软件开发者更加注重应用的安全问题,希望能保证自己的软件不会被轻易的重打包,不会被轻易的注入和破解。
陷阱指令分析技术是指Linux操作***中,CPU在正常工作时执行某条特定指令,进入中断服务程序。发生中断时CPU分析类型码进而判断是否执行陷阱中断指令。
Android软件加固是通过对原Android安装包(AndroidPackage,apk)进行代码处理,在不影响apk正常工作的前提下防止该apk被反编译恶意使用。常用的软件加固方法有完整性校验方法、防反编译调试方法等,目前大部分核心加固方法主要是针对dex文件或so文件进行加密混淆,而针对apk包中主要的入口文件AndroidManifest.xml,目前还没有成熟的保护方法,能够防止逆向分析而获得应用程序软件中的核心技术或恶意使用,且不影响程序的正常运行,从而保护应用程序开发者的利益。
发明内容
为了克服上述现有技术的不足,本发明提供一种基于Android***陷阱指令的软件加固方法,通过陷阱指令分析技术,解析axml技术等,处理apk中入口文件AndroidManifest.xml,使得应用程序难以被反编译,从而达到防止他人逆向分析出应用程序软件中的核心技术进而窃取或有目的的篡改的目的;此外,该方法能够保证处理过的应用不影响程序的正常运行。
本发明的原理是:普通逆向工具如apktool、AAPT、AXMLPrinter2等根据AndroidManifest.xml的属性名及属性值来解析axml(AndroidbinaryXML)文件,而Android***对于非法的ResID不进行解析,因此,在axml中添加带有非法ResID的属性不影响apk的使用,但是会让逆向工具解析axml出现偏差,重打包之后apk将不能使用,从而达到防止他人逆向分析出应用程序软件中的核心技术进而窃取或有目的的篡改的目的。本发明中涉及的axml文件是AndroidManifest.xml文件在Android***中对应的二进制格式。Android***解析axml属性是根据该属性的ResID号而非属性名称来定位的。
本发明提供的技术方案是:
一种基于Android***陷阱指令的软件加固方法,利用陷阱指令分析方法和解析axml方法,通过处理Android安装包(apk)中的入口文件AndroidManifest.xml(axml文件),使得应用程序难以被反编译且处理后的应用不影响程序的正常运行;该加固方法包括以下步骤:
S1)解压apk压缩包,提取压缩包对应的axml文件;
axml文件中包含了用来描述应用程序中暴露的一些组件、实现的类以及各种能被处理的数据和启动位置,这些信息在axml中被称为属性。每一条属性主要包含name、string、type、data、ResId和一些其他项,其中,name对应的是属性的名称;string对应的是:如果属性的描述类型type是ATTR_STRING,这个值就是属性name=”xxx”,xxx在StringChunk中的索引,其它情况为0xffffffff;type是属性的描述类型;data是属性的数据值,如果类型为ATTR_STRING,它的值就是string的值;对于ResId,它的值是依赖于name项的,即name项是属性名的一个StringChunk区的一个索引,也是ResourceChunk区的索引,这要保证两者在各自Chunk区域的索引值是相等的。
axml文件结构主要包括文件头、StringChunk区、ResourceChunk区、AttributionChunk等几部分;开始是文件头header,包含文件标签,以及后面几个区域的偏移值及大小;StringChunk区包含了字符串的索引区和字符串的数据区,所有的字符串数据都放在这个区域;ResourceChunk区包含了各个资源的ID号即ResID,每一个ResID占4个字节;还有一个区域是AttributionChunk。
S2)解析AndroidManifest.xml文件,得到AndroidManifest.xml文件各区域的位置;根据axml文件文件头header偏移定位到StringChunk区和ResourceChunk区;
S3)构建一个application属性项,所述application属性项包括索引名称和属性名称,通过修改StringChunk区和修改RessourceChunk区,加到AndroidManifest.xml文件中;
构建一个application属性项,包括索引名称和属性名称,通过修改StringChunk区加到axml文件中,即在axml文件中增加一个属性(application属性项)来表述一个虚构的类;在本发明实施例中,即修改StringChunk区,在StringChunk中***新构建application属性项的两个字符串“name”(索引名称)和“trap.class”(属性名称);其中,构建的application属性项的索引名称“name”的取值即作为StringChunk区的索引对应到属性名“trap.class”,又作为RessourceChunk区的索引对应到ResID;“name”的取值对应该属性(application属性项)在ResourceChunk区的偏移位置;
设定一个和现有的ResID不同的数字,可采用直接拓展的方法,该数字作为我们增加的属性(步骤S3中构建的application属性项)的ResID值,通过修改RessourceChunk区域***到RessourceChunk中以索引名称的取值(“name”的取值)为偏移地址的位置中;
ResID对应到具体的资源。本发明方法通过直接拓展数字得到一个和现有的ResID不同的数字,作为构建的application属性项的ResID值,由于这个属性项是构造的,并不存在实际使用到的资源,因此,该ResID是一个并不存在的ResID(非法ResID值)。
S4)修改axml中对应的Size属性,包括fileSize、StringChunkSize等,确保axml能够正常打包编译;
S5)打包AndroidManifest.xml,完成加固,得到加固后的Android安装包。
基于Android***陷阱指令的软件加固方法中,进一步地,步骤S3)所述在axml文件中添加一个表示虚构类的一个属性,在本发明实施例中,具体步骤如下:
修改StringChunk区域,添加UTF-16编码的字符串”name”和”trap.class”,并为两个字符串添加偏移值条目,同时对StringChunkSize、CountofString、Style的起始偏移值进行修复。其中,构建的属性可为空白属性(即只增加name项和data项),表明该例中trap.class没有继承application类,无具体功能,可导致逆向出的apk无法运行,因为找不到trap.class类;构建的属性也可为继承自application的属性,产生一个新的和其他类功能一样的类,在逆向的时候会实现trap.class构建出的功能,从而导致逆向失败,apk无法正常运行。
与现有技术相比,本发明的有益效果是:
本发明提供一种基于Android***陷阱指令分析技术的加固方法,通过陷阱指令分析技术,解析axml技术等,处理axml文件,处理apk中入口文件AndroidManifest.xml。该方法一方面能够保证处理过的应用不影响程序的正常运行;另一方面可以导致apk无法被反编译阻止恶意开发者逆向出源代码恶意使用,防止他人逆向分析出应用程序软件中的核心技术进而窃取或有目的的篡改;从而保护应用程序开发者的利益和应用程序的安全。
附图说明
图1是本发明提供方法的流程框图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明提供一种基于Android***陷阱指令的软件加固方法,包括以下步骤:
1)解压apk压缩包,提取对应的axml(AndroidbinaryXML)文件;解析axml文件;
axml文件中包含了应用程序中一些属性的描述,如实现的类、权限的控制等,每一条属性包含name、id、string、data、type和一些其他项。
2)增加一个application属性项,该属性的name项为”name”,data项为”trap.class”,在axml文件的StringChunk中***这两个字符串”name”和”trap.class”;
同时,设定一个和现有的ResID值不同的数字,可采用直接拓展的方法,该数字作为新的非法ResID值,***到RessourceChunk中以name值为偏移地址的位置;
3)修改axml中对应的Size属性,如fileSize,StringChunkSize等,确保axml能够正常打包编译。
以下通过实施例说明本发明提供方法的具体实施:
首先对Android安装包(AndroidPackage,apk)解压,获得AndroidManifest.xml的二进制文件axml,该文件中包含了用来描述应用程序中暴露的一些组件,实现的类,以及各种能被处理的数据和启动位置。Axml文件结构主要包括文件头、StringChunk区、ResourceChunk区、AttributionChunk等几部分,开始是文件头,包含文件标签,以及后面几个区域的偏移值及大小;StringChunk区包含了字符串的索引区和字符串的数据区,所有的字符串数据都放在这个区域;ResourceChunk区包含ResID号,每一个ResID占4个字节;还有一个区域是AttributionChunk,该区域是连续的attribution的结构体,其结构如下:
typedefstruct{
uint32_turi;/*命名空间的url,是一个字符串的索引值*/
uint32_tname;/*属性名,也是一个字符串的索引值,同时也是一个ResId的索引值*/
uint32_tstring;/*如果type==ATTR_STRING,这个值就是一个字符串的索引值*/
uint32_ttype;/*属性类型的索引值*/
uint32_tdata;/*属性的具体值,如果type==ATTR_STRING,其值和string值相等*/
}Attribute_t;
这个AttributionChunk中的attribution结构体中没有对应的ResID的成员,而是***根据name的索引寻找得到ResID;name既作为属性名的一个字符串索引,又可作为ResID的索引。这个结构就是需要添加的主干,我们在AttributionChunk区添加一个attribution结构,只构造一个属性的名称为”name”,属性值为”trap.class”的项。需要在StringChunk区加两个字符串”name”和”trap.class”,在ResourceChunk区增加ResID号。
对axml文件进行分析,根据header偏移定位到StringChunk区和ResourceChunk区(ResourceChunk是一块区域,该区域列出了一系列ResID,对应程序中的使用的资源);增加一个application属性项,相当于新建了一个不存在的类的索引。在使用逆向工具时会通过这个属性索引来找到具体的类,但是由于构建的是一个不存在的类,从而会导致逆向工具失效。
本实施例中,构建的属性项对应到一个具体的类;构建的application属性项包含属性名”name”和属性值”trap.class”;其中,trap.class在被逆向工具解析时会被当作类名。由于这个属性项是虚构的,将会导致逆向工具失效。
在StringChunk区的前部有用于描述字符串的偏移位置的数组;首先修改StringChunk,添加UTF-16编码的字符串“trap.class”和“name”,并为这两个字符串添加偏移值条目,同时对StringChunkSize、CountofString、Style的起始偏移值进行修复。其中构建的属性的其他项可为,表明该例中trap.class没有继承application类,无具体功能。构建的属性也可为继承自application的属性,但是修改会更复杂。
修改好StringChunk后,接下来修改ResourceChunk,对ResID进行扩充(以ResID=0x0为例),增加一个ID号(该ID号是一个之前不存在的ResID号即可),对应到增加的name项,由于在ResourceChunk区域增加一项数据,这块区域的大小发生了变化;根据修改后ResourceChunk的大小值,修复ResourceChunkSize(ResourceChunkSize描述ResourceChunk区域的大小)。
接来下修改application是axml文件中的一个描述符,描述一块区域,它的一个属性描述每一个类,类描述是string所在的chunk,***类型为name,名为trap.class,Id为0的属性。同时根据修改后各个Chunk(包括ResourceChunk、StringChunk、AttributionChunk)的大小和application中的属性个数,对各个Chunk的ChunkSize和application中属性个数进行修复。
最后,由于文件的大小也发生了改变,也要根据修改后实际的大小来修改,根据修改后文件的大小来修复fileSize,保证axml与apk中其他资源一起重新打包成apk后能够正常运行。
普通逆向工具如apktool、AAPT、AXMLPrinter2等根据AndroidManifest.xml的属性名及属性值来解析axml文件,而Android***是根据ResID来解析的,并且对于非法的ResID不解析,因此,添加属性后不影响程序正常运行。但是,若有恶意开发者逆向该axml文件(以本实施例中添加了属性nametrap.class0x0为例),则逆向后的application将带有属性名为name,值为trap.class的,ResID为0x0属性。重新打包时,这个ResID将会变成Android***认为可以解析的,因此,在重新打包成apk包执行时找不到相应的类而报错,从而有效地保护了应用程序。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (5)

1.一种基于Android***陷阱指令的软件加固方法,所述加固方法利用陷阱指令分析方法和解析axml方法,通过处理Android安装包中的入口文件AndroidManifest.xml,使得应用程序难以被反编译且加固后的应用不影响程序的正常运行;所述加固方法包括以下步骤:
S1)解压Android安装包,提取AndroidManifest.xml文件;
S2)解析AndroidManifest.xml文件,得到AndroidManifest.xml文件各区域的位置;根据所述AndroidManifest.xml文件文件头header的偏移定位到AndroidManifest.xml文件的StringChunk区和ResourceChunk区;
S3)构建一个application属性项,所述application属性项包括索引名称和属性名称,通过修改StringChunk区和修改RessourceChunk区,加到AndroidManifest.xml文件中;
S4)修改AndroidManifest.xml文件中对应的Size属性的取值,包括fileSize和StringChunkSize;
S5)打包AndroidManifest.xml,完成加固,得到加固后的Android安装包。
2.如权利要求1所述基于Android***陷阱指令的软件加固方法,其特征是,步骤S3)所述修改StringChunk区,具体为:设定所述构建application属性项的索引名称和属性名称分别为第一字符串和第二字符串,在StringChunk中***第一字符串和第二字符串;所述第一字符串代表的索引名称的取值作为StringChunk区的索引对应到所述第二字符串代表的属性名称,同时作为RessourceChunk区的索引对应到ResID;所述第一字符串代表的索引名称的取值对应所述构建application属性项在ResourceChunk区的偏移位置。
3.如权利要求2所述基于Android***陷阱指令的软件加固方法,其特征是,所述第一字符串和第二字符串为UTF-16编码的字符串。
4.如权利要求2所述基于Android***陷阱指令的软件加固方法,其特征是,步骤S3)所述修改RessourceChunk区域,具体为:设定一个和现有的ResID不同的数字,作为所述构建的application属性项的ResID值,通过修改RessourceChunk区域,***到RessourceChunk中以所述构建的application属性项的索引名称的取值为偏移地址的位置中。
5.如权利要求4所述基于Android***陷阱指令的软件加固方法,其特征是,所述设定一个和现有的ResID不同的数字,具体通过直接拓展现有ResID的方法取得与现有ResID不同的数字,作为所述构建的application属性项的ResID值。
CN201610034623.XA 2016-01-19 2016-01-19 一种基于Android***陷阱指令的软件加固方法 Pending CN105718764A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610034623.XA CN105718764A (zh) 2016-01-19 2016-01-19 一种基于Android***陷阱指令的软件加固方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610034623.XA CN105718764A (zh) 2016-01-19 2016-01-19 一种基于Android***陷阱指令的软件加固方法

Publications (1)

Publication Number Publication Date
CN105718764A true CN105718764A (zh) 2016-06-29

Family

ID=56147222

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610034623.XA Pending CN105718764A (zh) 2016-01-19 2016-01-19 一种基于Android***陷阱指令的软件加固方法

Country Status (1)

Country Link
CN (1) CN105718764A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107292134A (zh) * 2017-05-27 2017-10-24 北京思特奇信息技术股份有限公司 一种防止Android应用被反编译的应用加固方法及***
CN109542459A (zh) * 2018-09-29 2019-03-29 中国平安人寿保险股份有限公司 应用程序打包方法及装置、计算机装置及计算机存储介质
CN109814912A (zh) * 2018-12-15 2019-05-28 中国平安人寿保险股份有限公司 应用程序打包方法及***
CN110362970A (zh) * 2019-07-23 2019-10-22 北京智游网安科技有限公司 一种防止应用程序反编译的方法、存储介质及终端设备
CN114519043A (zh) * 2021-12-31 2022-05-20 北京握奇数据股份有限公司 一种可执行二进制文件格式逆向分析方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140006923A1 (en) * 2012-06-27 2014-01-02 Nimrod Barak Modeled applications multiple views generation mechanism
CN105205358A (zh) * 2015-09-21 2015-12-30 中科信息安全共性技术国家工程研究中心有限公司 一种识别Android APP加固的方法及检测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140006923A1 (en) * 2012-06-27 2014-01-02 Nimrod Barak Modeled applications multiple views generation mechanism
CN105205358A (zh) * 2015-09-21 2015-12-30 中科信息安全共性技术国家工程研究中心有限公司 一种识别Android APP加固的方法及检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
WANCHOUCHOU: "AndroidManifest Ambiguity方案原理及代码", 《博客园,URL:HTTP://WWW.CNBLOGS.COM/WANYUANCHUN/P/4084292.HTML》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107292134A (zh) * 2017-05-27 2017-10-24 北京思特奇信息技术股份有限公司 一种防止Android应用被反编译的应用加固方法及***
CN109542459A (zh) * 2018-09-29 2019-03-29 中国平安人寿保险股份有限公司 应用程序打包方法及装置、计算机装置及计算机存储介质
CN109814912A (zh) * 2018-12-15 2019-05-28 中国平安人寿保险股份有限公司 应用程序打包方法及***
CN110362970A (zh) * 2019-07-23 2019-10-22 北京智游网安科技有限公司 一种防止应用程序反编译的方法、存储介质及终端设备
CN114519043A (zh) * 2021-12-31 2022-05-20 北京握奇数据股份有限公司 一种可执行二进制文件格式逆向分析方法
CN114519043B (zh) * 2021-12-31 2024-05-24 北京握奇数据股份有限公司 一种可执行二进制文件格式逆向分析方法

Similar Documents

Publication Publication Date Title
CN105718764A (zh) 一种基于Android***陷阱指令的软件加固方法
Gupta et al. Enhancing the browser-side context-aware sanitization of suspicious HTML5 code for halting the DOM-based XSS vulnerabilities in cloud
Lekies et al. 25 million flows later: large-scale detection of DOM-based XSS
CN112805694A (zh) 用于改进的实施区块链的智能合约的***和方法
Xu et al. A novel machine learning‐based analysis model for smart contract vulnerability
Yu et al. Automata-based symbolic string analysis for vulnerability detection
Doupe et al. deDacota: toward preventing server-side XSS via automatic code and data separation
CN110096853B (zh) 基于Mono的Unity安卓应用加固方法、存储介质
CN105426708A (zh) 一种Android***的应用程序的加固方法
US20160142437A1 (en) Method and system for preventing injection-type attacks in a web based operating system
US20100107251A1 (en) MIME Handling Security Enforcement
CN104866739A (zh) 安卓***中应用程序加密方法及***
CN103177199A (zh) 网页应用代码保护方法及***和执行的提速方法及***
Prokhorenko et al. Context-oriented web application protection model
Endignoux et al. Caradoc: A pragmatic approach to pdf parsing and validation
US20080027866A1 (en) System and method for authenticating file content
Møller et al. Automated detection of client-state manipulation vulnerabilities
Fu et al. A String Constraint Solver for Detecting Web Application Vulnerability.
Fu et al. Simple linear string constraints
Narayanan et al. Detection and prevention of sql injection attacks using semantic equivalence
CN109299610B (zh) 安卓***中不安全敏感输入验证识别方法
CN113419734B (zh) 应用程序加固的方法、装置及电子设备
CN114357391A (zh) 数据加、解密方法及计算机存储介质
Fernando et al. Securing RFID systems from SQLIA
Ulucenk et al. Techniques for analysing pdf malware

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20160629

RJ01 Rejection of invention patent application after publication