1、概述
APP安全性一般可以从以下几方面进行考量:
以及其他一些杂项(或者通用并不局限于APP的安全项):
本文讨论反编译问题。
2、APK反编译
安卓开发的APP,如果不做任何处理是很容易被反编译的。也就是说,一个APP的源代码可以轻易的被泄露。
对于商业软件而言,这当然是不可接受的。而作为测试团队,应该确保自己的产品能够妥善抵御反编译。
测试可以可以自己尝试反编译来进行验证,这是一种渗透性测试思维。
2.1 反编译工具
- apktool
作用:用于提取APK中的资源文件,比如图片文件和布局文件等。
下载:https://bitbucket.org/iBotPeaches/apktool/downloads/
- dex2jar
作用:将apk反编译成jar文件
下载:https://sourceforge.net/projects/dex2jar/files/
- jd-gui
作用:查看dex2jar反编译得到的jar包中的源码
下载:http://java-decompiler.github.io/
将以上工具包下载并放置到同一文件夹,解压其中的ZIP包。将待反编译的APK也放置进同一文件夹(方便起见)。
若官网下载有困难,以下是工具的网盘地址:
链接:https://pan.baidu.com/s/18YGxwVX9KNnRU3rm3qvOUg
提取码:zskt
2.2 apktool提取资源文件
打开windows命令行,CD进入上一步中的目录。
第一步使用apktool进行资源文件提取,命令语法:
java -jar [apktool_2.3.4.jar] d -f [apk地址] -o [输出目录]
执行效果:
C:UsersAdministratorDesktopAPKrecompile>java -jar apktool_2.3.4.jar d -f 检测包09111134.apk -o 09111134 I: Using Apktool 2.3.4 on 检测包09111134.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: C:UsersADMINI~1AppDataLocalTemp1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files...
执行完毕后,得到APK反编译提取的资源文件:
2.3 dex2jar反编译得到Jar包
将APK后缀名改写为ZIP,打开此ZIP文件,提取出其中的class.dex:
这个文件实际上就是java源文件使用dx工具打包而来的,而dex2jar(dex to jar)顾名思义就是将dex文件转换回jar
将classes.dex放置进第一步准备好的dex2jar文件夹中。
命令行中,进入该文件夹,输入命令:
d2j-dex2jar classes.dex
执行效果:
d2j-dex2jar classes.dex
dex2jar classes.dex -> .classes-dex2jar.jar
执行完毕后,得到反编译而来的classes-dex2jar.jar文件:
2.4 jd-gui查看jar文件
打开第一步准备的jd-gui.exe(无需安装)。
将第三步中得到的classes-dex2jar.jar拖拽进打开的界面中,即可查看jar包中源代码了。
3、防御和检测
现今对于APK反编译的应对手段主要有以下几种:
- 代码混淆技术
- 签名比对技术
- 动态库技术
- 动态加载技术
- 第三方加固
作为审计和测试方,应该结合渗透性测试和代码审计,确定被测的产品已经加入了妥善的防御措施。