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:\Users\Administrator\Desktop\APKrecompile>java -jar apktool_2.3.4.jar d -f 检测包09111134.apk -o
I: Using Apktool 2.3. on 检测包09111134.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\ADMINI~\AppData\Local\Temp\.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反编译的应对手段主要有以下几种:

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

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

实践APP安全性检测(一):APK反编译的更多相关文章

  1. 爬虫app信息抓取之apk反编译抓取

    之前也抓过一些app,数据都比较好取,也没有研究的太深,毕竟还有android 模拟器+ appium 的方法.直到遇见了一款app ,具体名字就不说了,它安装在模拟器上竟然打不开 !!第一次遇见上网 ...

  2. Android实践--apk反编译

    版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/ysjian_pingcx/article/details/25468867 Android apk反编译一 ...

  3. 【安全性测试】利用反编译查看对应activity的方法采用hook技术绑定劫持_入门

    本次主要为了研究手机端的安全性而写的一篇文章,在基于自己对手机安全性的研究下,想到了这些工具之间的结合,当然这也算是第一次对手机安全研究勇敢地踏出一步,也不知道是否成功,还是准备撞南墙撞到底吧! 使用 ...

  4. Android APK反编译(一)

    apk是安卓工程打包的最终形式,将apk安装到手机或者模拟器上就可以使用APP.反编译apk则是将该安卓工程的源码.资源文件等内容破解出来进行分析. 一.APK反编译基本原理 1.APK分析 apk文 ...

  5. Android开发--ZZ:Android APK反编译详解(附图)

    最近看了很多app的界面和交互非常棒,想学习下他们的源码,简单加压apk文件得到的资源文件和源码都不可读 它们都是编译后的文件,在网上搜索了下,发现这篇blog提到的工具都非常好用~ 文章原地址:ht ...

  6. Android APK反编译详解(附图)

    转载自http://blog.csdn.net/sunboy_2050/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而 ...

  7. 从原生APK反编译,拿到界面,用于mono for android

    从原生APK反编译,拿到界面,用于mono for android 1.用apktool反编译apk,得到xxx.apk.de 2.从xxx.apk.de\res\layout 3.复制所有xml到M ...

  8. Android开发学习总结(六)—— APK反编译

    学习和开发Android应用有一段时间了,今天写一篇博客总结一下Android的apk文件反编译.我们知道,Android应用开发完成之后,我们最终都会将应用打包成一个apk文件,然后让用户通过手机或 ...

  9. Android APK反编译详解(附图)(转)

    这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件, ...

随机推荐

  1. .net core 添加本地dll

    公司内部开发的核心类库,添加到新项目中去,可以使用如下方法. 1.设置包信息 右击项目-属性,选着打包,输入相关信息. 2.核心类库打包成 *.nupkg文件, 3.创建一个文件夹.将打包的nupkg ...

  2. C/C++ 修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析

    修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析 介绍 最近修复项目问题时,发现当系统时间往前修改后,会导致sem_timedwait函数一直阻塞.通过搜索了发现int sem_ ...

  3. Lock同步锁

    Lock同步锁 一.前言 在Java 5.0 之前,协调共享对象的访问时可以使用的机制只有synchronized 和volatile .Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁 ...

  4. Windows Server - SVN 服务器搭建与项目配置、客户端安装与配置

    本教程以Windows Server 2012 R12 为例搭建SVN服务器,安装部署完成后,客户端可通过SVN客户端访问SVN服务器上的项目,也可以访问网上其他SVN服务器上的项目. 一.首先准备三 ...

  5. NLP(二十) 利用词向量实现高维词在二维空间的可视化

    准备 Alice in Wonderland数据集可用于单词抽取,结合稠密网络可实现其单词的可视化,这与编码器-解码器架构类似. 代码 from __future__ import print_fun ...

  6. win8调出右侧菜单栏

    1.快捷键:win+c 2.鼠标放在右下角1s

  7. python查找时,不支持compound class

    1.python使用如下代码查找页面上的元素时, browser.findElement_by_class_name("widget-content nopadding") 报错: ...

  8. AC自动机 建立nlogn个AC自动机

    String Set Queries 题意:给你3种操作,1.加入一个串到集合中. 2.删除集合中的某一个串 3.查询集合中的字符串在给定的字符串种出现几次.(同一个串可重复) 解法:建立多个AC自动 ...

  9. 关于dijkstra的优化 及 多源最短路

    先来看这样一道题目 给你N个点,M条双向边,要求求出1号点到其他所有点的距离.其中 2 <= N <= 1e5,  1 <=M <= 1e6. 对于这样的一道题目 我们当然不可 ...

  10. lightoj 1061 - N Queen Again(状压dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1061 题解:显然能满足情况的8皇后的摆法不多,于是便可以用题目给出的状态来匹配 ...