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

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

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

  • 相关阅读:
    Linux——配置secureCRT远程连接图形化显示
    Oracle——insert ino,insert all into,insert first into
    Mysql——case函数
    Mysql——语句执行顺序
    Mysql——实现按字段部分升序,部分降序的方法
    无线网ping虚拟机
    http协议
    eclipse——32位64位Eclipse和jdk对应关系
    2019-07-24_windows系统一些常用的dos命令
    2019-07-23_zabbix监控安装视频教程
  • 原文地址:https://www.cnblogs.com/dayu2019/p/11562269.html
Copyright © 2020-2023  润新知