实践APP安全性检测(一):APK反编译

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反编译的应对手段主要有以下几种:

  • 代码混淆技术 
  • 签名比对技术 
  • 动态库技术 
  • 动态加载技术
  • 第三方加固

作为审计和测试方,应该结合渗透性测试和代码审计,确定被测的产品已经加入了妥善的防御措施。

原文地址:https://www.cnblogs.com/dayu2019/p/11562269.html