CN110457872B - 一种Android App应用资源的隐藏加固方法 - Google Patents
一种Android App应用资源的隐藏加固方法 Download PDFInfo
- Publication number
- CN110457872B CN110457872B CN201910657080.0A CN201910657080A CN110457872B CN 110457872 B CN110457872 B CN 110457872B CN 201910657080 A CN201910657080 A CN 201910657080A CN 110457872 B CN110457872 B CN 110457872B
- Authority
- CN
- China
- Prior art keywords
- resource
- character string
- file
- encryption
- code
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 230000003014 reinforcing effect Effects 0.000 title claims abstract description 10
- 230000008569 process Effects 0.000 claims description 7
- 230000004048 modification Effects 0.000 claims description 4
- 238000012986 modification Methods 0.000 claims description 4
- 230000002787 reinforcement Effects 0.000 abstract description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000005336 cracking Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003997 social interaction Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
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
本发明公开了一种Android App应用资源的隐藏加固方法,步骤包括:1)资源文件加固分为资源id加密和明文字符串加密;2)反编译App文件,获取到其.smali文件夹;3)使用正则表达式来判别.smali文件的语句,针对资源id和明文字符串分别进行加密并使用具体加密代码进行加密然后将其进行解密;4)插入解密代码文件;5)重新编译App文件并签名;6)安装加固之后的App,然后进行正常运行。本发明的方法,可以将软件中资源id进行隐藏,使得逆向攻击人员无法通过资源id进行定位到关键代码,也通过对明文字符串进行加密防止代码中的字符串对逆向人员进行提示有效消息。
Description
技术领域
本发明属于Android应用技术领域,涉及一种Android App应用资源的隐藏加固方法。
背景技术
移动应用越来越普及,覆盖了人们生活的方方面面,如社交、新闻、娱乐、游戏等等。在移动应用快速发展的今天,越来越多的恶意应用逆向人员通过逆向手段破解移动应用,然后通过修改或者复用应用代码为自己谋取私利,严重破坏了正版应用开发人员的利益,侵害了用户的个人隐私,对移动应用的市场造成了极大的破坏,普通的客户并不具备区别正版移动应用与盗版移动应用的能力,更加促进了恶意盗版应用的发展和传播。目前的移动应用保护方案有很多,主要是是代码混淆、软件加壳、资源混淆、动态加载等技术。这些软件保护技术都是对应用软件的源代码或者资源文件的隐藏,这其中并没有对代码中的移动应用的资源id和未添加到资源文件的明文字符串进行操作的加密方法。而通常逆向人员破解都会通过资源文件找到资源文件的id,然后通过id进入源码文件定位到使用此资源id代码文件,进而对该模块进行分析破解。因此对源码文件中的资源id和明文字符串进行加密是非常重要的。
发明内容
本发明的目的是提供一种Android App应用资源的隐藏加固方法,解决了逆向攻击人员通过资源文件定位到源码模块,非法获取应用代码的问题。
本发明的技术方案,一种Android App应用资源的隐藏加固方法,其特征在于,按照以下步骤实施:
步骤1、将加密分为资源id加密和代码中的明文字符串加密;
步骤2、反编译App文件,获取到其.smali文件夹;
步骤3、使用正则表达式来判别步骤2中.smali文件夹中的语句,并将匹配的代码使用解密方法语句进行替换;
步骤4、插入解密代码文件;
步骤5、重新编译App文件并签名;
步骤6、安装加固之后的App,然后进行正常运行。
步骤1具体为:
资源id加密是针对代码中通过资源id查找资源文件的过程改变,代码中明文字符串针对未将字符串添加到资源文件,直接在代码中引用的字符串。
步骤3中,具体包括:
3.1)首先获取到所有的.smali文件,然后对每个文件进行遍历。
3.2)对于一个.smali文件,进行逐行读取,然后使用正则表达式进行匹配是否是资源id。
3.3)如果匹配成功,则使用加密方法生成随机密钥对资源id进行加密,并将密钥和加密后的数字当作参数在此调用解密方法,用解密方法将该行覆盖之后,进入3.2。如果不匹配则直接进入3.4。
3.4)使用正则表达式进行匹配字符串,如果匹配成功则修改,此处不使用随机密钥而直接将该字符串传递给加密字符串方法返回加密之后的字符串,然后使用以加密字符串为参数的解密字符串方法代替此行,修改完毕之后返回第3步,如果不匹配直接返回3.2。
3.5)重复修改下一个.smali文件。
的步骤6中,具体包括:
6.1)对于资源id只需要在应用启动后调用解密方法返回正确的id值,然后加载对应的资源文件。
6.2)对于明文字符串,则直接调用解密方法返回正确的字符串进行显示。
本发明的有益效果是,一是将代码中的资源id进行加密防止了逆向人员通过资源id的搜索来定位到核心代码模块;二是资源id加密使用的加密算法可以使代码中所有的id均不相同,即使是相同的资源id其加密结果也不一样;三是将代码中的明文字符串信息进行加密,可以保证代码编写规范的同时,防止代码中的有效字符对逆向攻击人员的提示作用;四是增加了逆向过程的操作难度,增加了逆向分析成本,保证了应用系统的安全。
附图说明
图1为本发明一种Android App应用资源的隐藏加固方法的总体流程图;
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
本发明的方法,主要是对资源加载过程的分析,针对逆向手段静态分析破解的拦截手段,逆向技术主要是先定位资源文件,再确定资源文件的资源 id,通过资源id定位到代码调用模块,资源id加密主要是通过异或运算将资源id进行加密的技术,可以使资源id均被隐藏,调用的时候再利用解密算法对资源id进行还原。同样针对于未添加到资源文件的字符串明文,可以使用Base64编码,将信息隐藏起来,在程序进行运行的时候再使用解密方法将加密字符串解密。
针对两种加密对象,使用不同的的方式对其进行加密。针对资源id本发明使用异或运算,先随机生成一个密钥,然后将前两个与固定密钥异或;针对代码中的字符串,则直接使用Base64对字符串进行加密。
参照图1,一种Android App应用资源的隐藏加固方法,其特征在于,按照以下步骤实施:
步骤1、将加密分为资源id加密和代码中的明文字符串加密;
步骤2、反编译App文件,获取到其.smali文件夹;
步骤3、使用正则表达式来判别步骤2中.smali文件夹中的语句,并将匹配的代码使用解密方法语句进行替换;
步骤4、插入解密代码文件;
步骤5、重新编译App文件并签名;
步骤6、安装加固之后的App,然后进行正常运行。
2.根据权利要求1所述的Android App软件加固方法,其特征在于:所述的步骤1具体为:
资源id加密是针对代码中通过资源id查找资源文件的过程改变,代码中明文字符串针对未将字符串添加到资源文件,直接在代码中引用的字符串。
步骤3中,具体包括:
3.1)首先获取到所有的.smali文件,然后对每个文件进行遍历。
3.2)对于一个.smali文件,进行逐行读取,然后使用正则表达式进行匹配是否是资源id。
3.3)如果匹配成功,则使用加密方法生成随机密钥对资源id进行加密,并将密钥和加密后的数字当作参数在此调用解密方法,用解密方法将该行覆盖之后,进入3.2。如果不匹配则直接进入3.4。
3.4)使用正则表达式进行匹配字符串,如果匹配成功则修改,此处不使用随机密钥而直接将该字符串传递给加密字符串方法返回加密之后的字符串,然后使用以加密字符串为参数的解密字符串方法代替此行,修改完毕之后返回第3步,如果不匹配直接返回3.2。
3.5)重复修改下一个.smali文件。
的步骤6中,具体包括:
6.1)对于资源id只需要在应用启动后调用解密方法返回正确的id值,然后加载对应的资源文件。
6.2)对于明文字符串,则直接调用解密方法返回正确的字符串进行显示。
本发明方法的软件加固,是对代码文件中的对资源id和明文字符串分别进行加密保护的方法,资源id使用异或运算对每个id进行加密且保证每个id不会相同,而字符串加密则主要是使用Base64加密算法对明文字符串进行加密。
以下分别资源id和字符串加密的实施例进行详述。
实施例1、资源id加密
步骤1、可以将加密分为资源id加密和代码中的明文字符串加密。
资源id加密主要是针对代码中通过资源id查找资源文件的过程改变,代码中明文字符串主要针对未将字符串添加到资源文件,直接在代码中引用的字符串。
步骤2、反编译App文件,获取到其.smali文件夹。
步骤3、使用正则表达式来判别.smali文件的语句,并将具体代码进行替换。
3.1)首先获取到所有的.smali文件,然后对每个文件进行遍历。
3.2)对于一个.smali文件,进行逐行读取,然后使用正则表达式进行匹配是否是资源id。
3.3)如果匹配成功,则使用加密方法生成随机密钥对资源id进行加密,并将密钥和加密后的数字当作参数在此调用解密方法,用解密方法将该行覆盖之后,进入3.2。如果不匹配则直接进入3.4。
3.4)加密代码中的明文字符串返回第3步,如果不匹配直接返回3.2。
3.5)重复修改下一个.smali文件。
步骤4、插入解密代码文件。
步骤5、重新编译App文件并签名。
步骤6、安装加固之后的App,然后进行正常运行。
6.1)对于资源id只需要在应用启动后调用解密方法返回正确的id值,然后加载对应的资源文件。
6.2)对于明文字符串,则直接调用解密方法返回正确的字符串进行显示。
实施例2、明文字符串加密
步骤1、可以将加密分为资源id加密和代码中的明文字符串加密。
资源id加密主要是针对代码中通过资源id查找资源文件的过程改变,代码中明文字符串主要针对未将字符串添加到资源文件,直接在代码中引用的字符串。
步骤2、反编译App文件,获取到其.smali文件夹。
步骤3、使用正则表达式来判别.smali文件的语句,并将具体代码进行替换。
3.1)首先获取到所有的.smali文件,然后对每个文件进行遍历。
3.2)对于一个.smali文件,进行逐行读取,然后使用正则表达式进行匹配是否是资源id。
3.3)加密资源文件id成功,进入3.2。如果不匹配则直接进入3.4。
3.4)使用正则表达式进行匹配字符串,如果匹配成功则修改,此处不使用随机密钥而直接将该字符串传递给加密字符串方法返回加密之后的字符串,然后使用以加密字符串为参数的解密字符串方法代替此行,修改完毕之后返回第3步,如果不匹配直接返回3.2。
3.5)重复修改下一个.smali文件。
步骤4、插入解密代码文件。
步骤5、重新编译App文件并签名。
步骤6、安装加固之后的App,然后进行正常运行。
6.1)对于资源id只需要在应用启动后调用解密方法返回正确的id值,然后加载对应的资源文件。
6.2)对于明文字符串,则直接调用解密方法返回正确的字符串进行显示。
从上面的两个实施例可以看出,通过本发明的加固方法可以对资源文件进行很好的保护,阻止了逆向攻击人员对资源id和明文字符串的利用,防止了显而易见的攻击目标,可以防止对于全局文件进行资源id的搜索,保证每一个资源id均不相同,即使是相同的资源id其加密结果也不相同。对于代码中的明文字符串,通过加密后所有的明文字符串均进行加密不会显露出有效信息,保证了代码规范的同时增加了程序的安全性,并且代码在正常运行的时候可以自动恢复原样,不会影响应用运行效果。
Claims (2)
1.一种Android App应用资源的隐藏加固方法,其特征在于,是对代码文件中的对资源id和明文字符串分别进行加密保护的方法,资源id使用异或运算对每个id进行加密且保证每个id不会相同,字符串加密则是使用Base64加密算法对明文字符串进行加密;
资源id加密是针对代码中通过资源id查找资源文件的过程改变,代码中明文字符串针对未将字符串添加到资源文件,直接在代码中引用的字符串;
3.1首先获取到所有的.smali文件,然后对每个文件进行遍历;
3.2对于一个.smali文件,进行逐行读取,然后使用正则表达式进行匹配是否是资源id;
3.3如果匹配成功,则使用加密方法生成随机密钥对资源id进行加密,并将密钥和加密后的数字当作参数在此调用解密方法,用解密方法将该行覆盖之后,进入3.2,如果不匹配则直接进入3.4;
3.4使用正则表达式进行匹配字符串,如果匹配成功则修改,此处不使用随机密钥而直接将该字符串传递给加密字符串方法返回加密之后的字符串,然后使用以加密字符串为参数的解密字符串方法代替此行,修改完毕之后返回3.3,如果不匹配直接返回3.2;
3.5重复修改下一个.smali文件;
按照以下步骤实施:
步骤1、将加密分为资源id加密和代码中的明文字符串加密;
步骤2、反编译App文件,获取到其.smali文件夹;
步骤3、使用正则表达式来判别步骤2中.smali文件夹中的语句,并将匹配的代码使用解密方法语句进行替换;
步骤4、插入解密代码文件;
步骤5、重新编译App文件并签名;
步骤6、安装加固之后的App,然后进行正常运行。
2.根据权利要求1所述的Android App应用资源的隐藏加固方法,其特征在于:所述的步骤6中,具体包括:
6.1)对于资源id只需要在应用启动后调用解密方法返回正确的id值,然后加载对应的资源文件;
6.2)对于明文字符串,则直接调用解密方法返回正确的字符串进行显示;资源id使用异或运算对每个id进行加密且保证每个id不会相同,而字符串加密则主要是使用Base64加密算法对明文字符串进行加密。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910657080.0A CN110457872B (zh) | 2019-07-19 | 2019-07-19 | 一种Android App应用资源的隐藏加固方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910657080.0A CN110457872B (zh) | 2019-07-19 | 2019-07-19 | 一种Android App应用资源的隐藏加固方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110457872A CN110457872A (zh) | 2019-11-15 |
CN110457872B true CN110457872B (zh) | 2021-08-06 |
Family
ID=68482990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910657080.0A Active CN110457872B (zh) | 2019-07-19 | 2019-07-19 | 一种Android App应用资源的隐藏加固方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110457872B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112214653B (zh) * | 2020-10-29 | 2024-06-18 | Oppo广东移动通信有限公司 | 字符串识别方法、装置、存储介质及电子设备 |
CN112199647A (zh) * | 2020-12-07 | 2021-01-08 | 江苏东大集成电路系统工程技术有限公司 | 一种Android跨应用资源访问安全加固方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335151A (zh) * | 2014-08-14 | 2016-02-17 | 优视科技有限公司 | 安装文件的保护方法及装置 |
CN105956425A (zh) * | 2016-04-28 | 2016-09-21 | 西北大学 | 一种基于smali代码混淆的Android应用保护方法 |
CN107122660A (zh) * | 2017-03-29 | 2017-09-01 | 中国科学院信息工程研究所 | 一种Android应用软件用户隐私信息泄露检测方法 |
CN109992935A (zh) * | 2019-03-15 | 2019-07-09 | 同盾控股有限公司 | 一种源代码保护方法及装置 |
-
2019
- 2019-07-19 CN CN201910657080.0A patent/CN110457872B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335151A (zh) * | 2014-08-14 | 2016-02-17 | 优视科技有限公司 | 安装文件的保护方法及装置 |
CN105956425A (zh) * | 2016-04-28 | 2016-09-21 | 西北大学 | 一种基于smali代码混淆的Android应用保护方法 |
CN107122660A (zh) * | 2017-03-29 | 2017-09-01 | 中国科学院信息工程研究所 | 一种Android应用软件用户隐私信息泄露检测方法 |
CN109992935A (zh) * | 2019-03-15 | 2019-07-09 | 同盾控股有限公司 | 一种源代码保护方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110457872A (zh) | 2019-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426708B (zh) | 一种Android系统的应用程序的加固方法 | |
JP6227772B2 (ja) | 動的ライブラリを保護する方法及び装置 | |
CN105681039B (zh) | 用于生成密钥及对应解密的方法和设备 | |
US9602289B2 (en) | Steganographic embedding of executable code | |
KR101798672B1 (ko) | 코드 불변식을 이용한 스테가노그래픽 메시징 시스템 | |
CN104318135B (zh) | 一种基于可信执行环境的Java代码安全动态载入方法 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN106788995B (zh) | 文件加密方法及装置 | |
CN106027228B (zh) | 一种网页标识的加解密方法及其加解密系统 | |
Kovacheva | Efficient code obfuscation for Android | |
CN106506159A (zh) | 用于密钥安全的加密方法和设备 | |
US9892661B2 (en) | Steganographic embedding of hidden payload | |
CN102236757A (zh) | 一种适用于Android系统的软件保护方法及系统 | |
KR20140099126A (ko) | 소프트웨어를 보안하기 위하여 해시 함수를 이용한 소프트웨어 처리 방법, 그 장치 및 그 방법을 실행하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체 | |
CN109284585B (zh) | 一种脚本加密方法、脚本解密运行方法和相关装置 | |
Piao et al. | Server‐based code obfuscation scheme for APK tamper detection | |
CN110210211B (zh) | 一种数据保护的方法和计算设备 | |
CN112507326B (zh) | 基于sm3杂凑算法的密码信息加密方法、装置以及计算机设备 | |
CN110457872B (zh) | 一种Android App应用资源的隐藏加固方法 | |
CN104123488A (zh) | 应用程序的验证方法和装置 | |
CN111950035A (zh) | 对apk文件完整性保护的方法、系统、设备及存储介质 | |
Zheng et al. | Security analysis of modern mission critical android mobile applications | |
US20200265135A1 (en) | Protecting a software program against tampering | |
CN110502874B (zh) | 一种基于文件自修改的Android App加固方法 | |
Haupert et al. | On App-based Matrix Code Authentication in Online Banking. |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |