实践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:\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反编译的更多相关文章
- 爬虫app信息抓取之apk反编译抓取
		
之前也抓过一些app,数据都比较好取,也没有研究的太深,毕竟还有android 模拟器+ appium 的方法.直到遇见了一款app ,具体名字就不说了,它安装在模拟器上竟然打不开 !!第一次遇见上网 ...
 - Android实践--apk反编译
		
版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/ysjian_pingcx/article/details/25468867 Android apk反编译一 ...
 - 【安全性测试】利用反编译查看对应activity的方法采用hook技术绑定劫持_入门
		
本次主要为了研究手机端的安全性而写的一篇文章,在基于自己对手机安全性的研究下,想到了这些工具之间的结合,当然这也算是第一次对手机安全研究勇敢地踏出一步,也不知道是否成功,还是准备撞南墙撞到底吧! 使用 ...
 - Android APK反编译(一)
		
apk是安卓工程打包的最终形式,将apk安装到手机或者模拟器上就可以使用APP.反编译apk则是将该安卓工程的源码.资源文件等内容破解出来进行分析. 一.APK反编译基本原理 1.APK分析 apk文 ...
 - Android开发--ZZ:Android APK反编译详解(附图)
		
最近看了很多app的界面和交互非常棒,想学习下他们的源码,简单加压apk文件得到的资源文件和源码都不可读 它们都是编译后的文件,在网上搜索了下,发现这篇blog提到的工具都非常好用~ 文章原地址:ht ...
 - Android APK反编译详解(附图)
		
转载自http://blog.csdn.net/sunboy_2050/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而 ...
 - 从原生APK反编译,拿到界面,用于mono for android
		
从原生APK反编译,拿到界面,用于mono for android 1.用apktool反编译apk,得到xxx.apk.de 2.从xxx.apk.de\res\layout 3.复制所有xml到M ...
 - Android开发学习总结(六)—— APK反编译
		
学习和开发Android应用有一段时间了,今天写一篇博客总结一下Android的apk文件反编译.我们知道,Android应用开发完成之后,我们最终都会将应用打包成一个apk文件,然后让用户通过手机或 ...
 - Android APK反编译详解(附图)(转)
		
这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件, ...
 
随机推荐
- 对微软的敌视何时休? 从一篇语言评论文章对C#的评价说起
			
看到一篇公众号文章<2020年什么编程语言最受欢迎,待遇最高?>,其中对C#的描述如下: 点击阅读原文,看到这是一篇翻译文章:https://codinginfinite.com/top- ...
 - 如何运用PHP+REDIS解决负载均衡后的session共享问题
			
一.为什么要使用Session共享? 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的 ...
 - Asp.NetCore源码学习[1-2]:配置[Option]
			
Asp.NetCore源码学习[1-2]:配置[Option] 在上一篇文章中,我们知道了可以通过IConfiguration访问到注入的ConfigurationRoot,但是这样只能通过索引器IC ...
 - 《Tomcat和JVM的性能调优你真的学会了吗?》总结篇
			
Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...
 - 深度学习环境搭建部署(DeepLearning 神经网络)
			
工作环境 系统:Ubuntu LTS 显卡:GPU NVIDIA驱动:410.93 CUDA:10.0 Python:.x CUDA以及NVIDIA驱动安装,详见https://www.cnblogs ...
 - HDU 6363
			
题意略. 思路: 这里有两个结论需要注意: 1.gcd(a ^ x - 1,a ^ y - 1) = a ^ gcd(x,y) - 1 2.gcd(fib[x],fib[y]) = fib[gcd(x ...
 - Mybatis与SQL Server类型转换遇到的坑
			
一. MyBatis SQL语句遇到的性能问题 1. 场景还原 假设我们有一张User表,其中包含userId.userName.gender字段,其中userId的数据类型为char(20),此时我 ...
 - java虚拟机10.内存模型与线程
			
多任务处理在现代计算机操作系统中是一项必备的功能,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,更重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘 ...
 - 五月月赛 寻宝 exkmp + 主席树
			
: 寻宝 时间限制: Sec 内存限制: MB 提交: 解决: [提交] [状态] [讨论版] [命题人:admin] 题目描述 采蘑菇的小西佬找到了一张上古年间的藏宝图,上面画着m座连绵不断的山,他 ...
 - lightoj 1032 - Fast Bit Calculations(数位dp)
			
A bit is a binary digit, taking a logical value of either 1 or 0 (also referred to as "true&quo ...