CN104462883A - 一种apk文件加固的方法 - Google Patents
一种apk文件加固的方法 Download PDFInfo
- Publication number
- CN104462883A CN104462883A CN201410632466.3A CN201410632466A CN104462883A CN 104462883 A CN104462883 A CN 104462883A CN 201410632466 A CN201410632466 A CN 201410632466A CN 104462883 A CN104462883 A CN 104462883A
- Authority
- CN
- China
- Prior art keywords
- file
- apk file
- apk
- source code
- classes
- 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 15
- 238000005728 strengthening Methods 0.000 title abstract 4
- 230000002787 reinforcement Effects 0.000 claims description 6
- 230000003014 reinforcing effect Effects 0.000 claims description 6
- 238000007596 consolidation process Methods 0.000 claims description 5
- 230000000694 effects Effects 0.000 claims description 4
- 239000000284 extract Substances 0.000 claims description 3
- 238000012856 packing Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000006837 decompression 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
- 239000000203 mixture Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000003068 static effect 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开一种APK文件加固的方法,其包括步骤:将需要加固的APK文件的源代码分成作为主体部分的第一源代码及作为核心功能部分的第二源代码;将第一源代码、第二源代码分别编译成第一APK文件及第二APK文件;解压第一APK文件,提取第一APK文件中的第一classes.dex文件;对第二APK文件进行加密处理,统计加密后第二APK文件的文件长度信息;将加密后的第二APK文件及其文件长度信息添加在第一classes.dex文件的尾部;重新计算并更新第一classes.dex文件中文件头信息,将使用Android SDK中提供的签名工具对第一APK文件进行签名,即得到加固处理后的APK文件。本发明可以规避现有Android逆向工具的反编译,增加反编译的难度,从而可以极大程度地提高APK文件的安全性。
Description
技术领域
本发明涉及移动终端应用安全领域,特别涉及一种APK文件加固的方法。
背景技术
APK(Android PacKage的缩写)即Android安装包。将APK文件(即APK应用程序)直接传到Android模拟器或Android操作系统的终端设备(比如安卓智能手机)中执行即可安装。APK文件其实是zip格式,但后缀名被修改为apk,在windows系统上可以通过解压缩工具(比如winrar软件)直接解压查看。解压APK文件后,一般的可看到的目录结构如下表1所示:
表1
Android应用程序开发的最后阶段是打包签名,生成APK文件供用户下载安装,打包封装成APK文件如图1所示。由此可以看出,如果能够对Dex文件和AndroidManifest.XML进行逆向,即可还原出应用APK文件的源代码,若在源代码的基础上加入恶意代码,重新签名打包,即可生成携带恶意代码的APK文件。
随着Android移动终端平台的日益发展,第三方应用程序大量涌现,对第三方应用的盗版和重打包现象日益严重。由于Android平台软件使用的编程语言是Java,而Java源代码编译后的二进制代码极易被反编译,导致其破解难度远小于其他使用编译性语言编写的程序。鉴于Android下APK文件能够很容易的由dex2jar和JD-GUI、JAD等反编译工具反编译为易于阅读的JAVA代码,从而代码中的明文字符串、库函数调用、核心功能函数等都一目了然,使得非法开发者对第三方应用程序的盗版或者核心功能的逆向工程变得更加容易。
发明内容
本发明提供了一种APK文件加固的方法,解决了APK文件(即APK应用程序)易于被反编译显示的问题,能够使第三方应用程序加固,最大化保护APK应用程序的安全。
本发明采用如下技术方案实现:一种APK文件加固的方法,其包括步骤:
将需要加固的APK文件的源代码分成作为主体部分的第一源代码及作为核心功能部分的第二源代码;
将第一源代码、第二源代码分别编译成第一APK文件及第二APK文件;
解压第一APK文件,提取第一APK文件中的第一classes.dex文件;
对第二APK文件进行加密处理,统计加密后第二APK文件的文件长度信息;
将加密后的第二APK文件及其文件长度信息添加在第一classes.dex文件的尾部;
重新计算并更新第一classes.dex文件中文件头信息,将更新后的第一classes.dex文件放回第一APK文件中,使用Android SDK中提供的签名工具对第一APK文件进行签名,即得到加固处理后的APK文件。
其中,重新计算的第一classes.dex文件中文件头信息包括效验码checksum字段、SHA-1签名signature字段和第一classes.dex文件的总长度file_size字段。
其中,对第二APK文件进行加密处理的加密方式为标准加密方式或已知的任意一种文件加密方法。
与现有技术相比,本发明具有如下有益效果:
通过本发明的方法,能够对Android下的APK应用程序进行加固处理,使反编译结果中APK文件的核心功能部分或关键部分的源代码得以隐藏,可以规避现有Android逆向工具的反编译,增加反编译的难度,从而可以极大程度地提高APK文件的安全性。
附图说明
图1是APK文件的打包封装流程示意图。
图2是本发明一个优选实施例的流程示意图。
具体实施方式
为了便于理解本申请的技术方案,申请人先对APK文件目录结构中classes.dex文件先做进一步的详细介绍:
classes.dex文件是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。classes.dex文件由文件头、索引区和数据区三大部分组成。其中,classes.dex文件头部分结构定义如下表2所示。
表2
在Android源码中,Dalvik虚拟机的实现位于dalvik/目录下,其中dalvik/vm是虚拟机的实现部分,将会编译成libdvm.so;而dalvik/libdex将会编译成libdex.a静态库作为dex工具;dalvik/dexdump是.dex文件的反编译工具;虚拟机的可执行程序位于dalvik/dalvikvm中,将会编译成dalvikvm可执行文件。
在Android平台运行APK文件时,先由Dalvik虚拟机加载解压APK文件并校验完整性,提取Classes.dex文件,然后执行classes.dex文件中的字节码。在执行classes.dex文件时,Dalvik虚拟机首先会检查其文件头部分的checksum字段和siganature字段,确保classes.dex文件没有被损坏或篡改,然后才根据文件头里定义的其他结构的偏移地址和长度信息进行寻址解析与执行。最后dalvik虚拟机会从classes.dex文件中读取指令和数据,进而运行该APK文件的程序逻辑。
结合图2所示,本发明的一个优选实施例包括如下实现步骤:
步骤S1、从需要加固的APK文件的源代码中提取部分或全部的核心功能源代码或关键部分源代码,该核心功能源代码或关键部分源代码记为第二源代码,而APK文件的源代码中剩余部分的源代码记为第一源代码。即,将需要加固的APK文件的源代码分成作为主体部分的第一源代码及作为核心功能部分(或关键部分源代码)的第二源代码。
哪些源代码属于核心功能代码或关键部分源代码、到底需要提取全部还是部分的核心功能源代码或关键部分源代码,可以在加固打包时根据实际需要确定。
步骤S2、将第一源代码、第二源代码分别编译成第一APK文件及第二APK文件。
步骤S3、解压第一APK文件,提取第一APK文件中的第一classes.dex文件。
步骤S4、采用为标准加密方式或已知的任意一种文件加密方法对第二APK文件进行加密处理,统计加密后第二APK文件的文件长度信息。
步骤S5、将加密后的第二APK文件及其文件长度信息添加在第一classes.dex文件的尾部,以便在解密时通过文件长度信息能够确定第二APK文件在第一classes.dex文件中的起始位置。
步骤S6、重新计算并更新第一classes.dex文件中文件头信息,包括效验码checksum、SHA-1签名signature和第一classes.dex文件的总长度file_size字段的值。其中,效验码checksum字段为第一classes.dex文件第12字节以后的内容的循环冗余校验码,存储在第一classes.dex文件的第8到12字节位置,共4个字节;SHA-1签名signature字段为第一classes.dex文件第32字节以后的SHA-1签名值,存储在第12到32字节位置,共20个字节;第一classes.dex文件的总长度file_size字段为第一classes.dex文件的文件长度,存储在第32到36字节位置,共4个字节。分别计算这几个字段变化之后的值,替换第一classes.dex文件中原文件头信息即可。
步骤S7、将第一classes.dex文件放回第一APK文件中,使用Android SDK中提供的签名工具对第一APK文件进行签名,即完成了APK文件的加固处理。
利用上述加固方法进行加固的APK文件,分别使用目前最流行的Android逆向工具dex2jar与apktool进行逆向编译,逆向编译出来的源代码均只有第一源代码,而核心功能部分或关键部分的第二源代码均被隐藏了。由此可见,利用本申请提到的加固方法加固处理后,实现了APK文件的核心功能部分或关键部分的源代码的隐藏,可以规避现有Android逆向工具的反编译,从而可以极大程度地提高APK文件的安全性。
本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、安卓系统的数字电视接收装置、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种APK文件加固的方法,其特征在于,包括步骤:
将需要加固的APK文件的源代码分成作为主体部分的第一源代码及作为核心功能部分的第二源代码;
将第一源代码、第二源代码分别编译成第一APK文件及第二APK文件;
解压第一APK文件,提取第一APK文件中的第一classes.dex文件;
对第二APK文件进行加密处理,统计加密后第二APK文件的文件长度信息;
将加密后的第二APK文件及其文件长度信息添加在第一classes.dex文件的尾部;
重新计算并更新第一classes.dex文件中文件头信息,将更新后的第一classes.dex文件放回第一APK文件中,使用Android SDK中提供的签名工具对第一APK文件进行签名,即得到加固处理后的APK文件。
2.根据权利要求1所述一种APK文件加固的方法,其特征在于,重新计算的第一classes.dex文件中文件头信息包括效验码checksum字段、SHA-1签名signature字段和第一classes.dex文件的总长度file_size字段。
3.根据权利要求1所述一种APK文件加固的方法,其特征在于,对第二APK文件进行加密处理的加密方式为标准加密方式或已知的任意一种文件加密方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410632466.3A CN104462883A (zh) | 2014-11-09 | 2014-11-09 | 一种apk文件加固的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410632466.3A CN104462883A (zh) | 2014-11-09 | 2014-11-09 | 一种apk文件加固的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104462883A true CN104462883A (zh) | 2015-03-25 |
Family
ID=52908910
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410632466.3A Pending CN104462883A (zh) | 2014-11-09 | 2014-11-09 | 一种apk文件加固的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104462883A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426708A (zh) * | 2016-01-19 | 2016-03-23 | 北京鼎源科技有限公司 | 一种Android系统的应用程序的加固方法 |
CN105512521A (zh) * | 2015-12-25 | 2016-04-20 | 北京奇虎科技有限公司 | 一种软件安装包的加固保护方法和系统 |
CN106570354A (zh) * | 2016-10-18 | 2017-04-19 | 国家电网公司 | 移动应用的重构方法和装置、运行方法和装置 |
CN107220529A (zh) * | 2017-05-19 | 2017-09-29 | 湖南鼎源蓝剑信息科技有限公司 | 一种针对Android平台SDK包的加固方法 |
CN111597514A (zh) * | 2020-04-15 | 2020-08-28 | 卓望数码技术(深圳)有限公司 | 安卓源代码保护方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102236757A (zh) * | 2011-06-30 | 2011-11-09 | 北京邮电大学 | 一种适用于Android系统的软件保护方法及系统 |
KR101284676B1 (ko) * | 2012-02-28 | 2013-08-23 | 건국대학교 산학협력단 | 암호화 기반 사용자 인증 및 안드로이드 앱 불법복제 방지시스템 및 그 방법 |
CN104111832A (zh) * | 2014-07-03 | 2014-10-22 | 北京思特奇信息技术股份有限公司 | 一种安卓应用程序安装包加壳方法及系统及解壳方法 |
-
2014
- 2014-11-09 CN CN201410632466.3A patent/CN104462883A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102236757A (zh) * | 2011-06-30 | 2011-11-09 | 北京邮电大学 | 一种适用于Android系统的软件保护方法及系统 |
KR101284676B1 (ko) * | 2012-02-28 | 2013-08-23 | 건국대학교 산학협력단 | 암호화 기반 사용자 인증 및 안드로이드 앱 불법복제 방지시스템 및 그 방법 |
CN104111832A (zh) * | 2014-07-03 | 2014-10-22 | 北京思特奇信息技术股份有限公司 | 一种安卓应用程序安装包加壳方法及系统及解壳方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105512521A (zh) * | 2015-12-25 | 2016-04-20 | 北京奇虎科技有限公司 | 一种软件安装包的加固保护方法和系统 |
CN105426708A (zh) * | 2016-01-19 | 2016-03-23 | 北京鼎源科技有限公司 | 一种Android系统的应用程序的加固方法 |
CN105426708B (zh) * | 2016-01-19 | 2018-08-21 | 北京鼎源科技有限公司 | 一种Android系统的应用程序的加固方法 |
CN106570354A (zh) * | 2016-10-18 | 2017-04-19 | 国家电网公司 | 移动应用的重构方法和装置、运行方法和装置 |
CN107220529A (zh) * | 2017-05-19 | 2017-09-29 | 湖南鼎源蓝剑信息科技有限公司 | 一种针对Android平台SDK包的加固方法 |
CN111597514A (zh) * | 2020-04-15 | 2020-08-28 | 卓望数码技术(深圳)有限公司 | 安卓源代码保护方法和装置 |
CN111597514B (zh) * | 2020-04-15 | 2023-10-13 | 卓望数码技术(深圳)有限公司 | 安卓源代码保护方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104317625A (zh) | 一种apk文件的动态加载方法 | |
CN104318155A (zh) | 一种防逆向apk文件的动态加载方法 | |
CN104408337A (zh) | 一种apk文件防逆向的加固方法 | |
CN101436141B (zh) | 基于数字签名的固件升级、固件封装方法与装置 | |
KR101471589B1 (ko) | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 | |
CN106203006A (zh) | 基于dex与so文件动态执行的Android应用加固方法 | |
CN107992723A (zh) | 一种基于动态链接库的Java源码保护方法 | |
CN107908392B (zh) | 数据采集工具包定制方法、装置、终端和存储介质 | |
KR101545272B1 (ko) | 안드로이드에서의 dex파일 바이너리 난독화 방법 | |
CN104462883A (zh) | 一种apk文件加固的方法 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
KR101521765B1 (ko) | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 | |
CN108363911B (zh) | 一种Python脚本混淆、水印的方法及装置 | |
CN103177199A (zh) | 网页应用代码保护方法及系统和执行的提速方法及系统 | |
US10296728B2 (en) | Method and system for providing cloud-based application security service | |
CN105683990A (zh) | 用于保护动态库的方法和装置 | |
CN104866739A (zh) | 安卓系统中应用程序加密方法及系统 | |
CN108399319B (zh) | 源代码保护方法、应用服务器及计算机可读存储介质 | |
CN108829396B (zh) | 脚本编译的方法、脚本执行的方法、相关装置及系统 | |
CN106897587A (zh) | 加固应用、加载加固应用的方法和装置 | |
CN109241707A (zh) | 应用程序的混淆方法、装置和服务器 | |
WO2022078366A1 (zh) | 应用保护方法、装置、设备及介质 | |
CN106228041A (zh) | 一种针对Android预编译的代码保护方法 | |
CN112948773B (zh) | 脚本加密与解密方法、终端设备及可读存储介质 | |
CN109840400B (zh) | 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150325 |
|
WD01 | Invention patent application deemed withdrawn after publication |