Android反编译apk逆向分析

handsomeqin5年前技术592

反编译、逆向

反编译 高级语言源程序经过 编译 变成可执行文件,反编译就是逆过程。

  但是通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序。

  计算机软件反向工程(Reversepengineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,作为自己开发软件时的参考,或者直接用于自己的软件产品中。

  反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前还是有许许多多的反编译软件:

  VB: VBExplorer ;只能反编译界面图像,好像代码不能完全反编译

  JAVA: JAD ;java的反编译比较常见,所以反编译比较完全

  C++ : eXeScope

  Dephi: DEDE


软件下载地址

我们对Android apk文件操作,准备工具

共需要四个小软件


dex2jar:将dex转化成jar http://sourceforge.net/projects/dex2jar/

JD-GUI : 反编译jar中的源码 http://jd.benow.ca/

apktool.jar http://ibotpeaches.github.io/Apktool/

apktool-install-windows-r05-ibot.tar(这是所有的apktool文件apktool放在同一个文件夹) https://pan.baidu.com/s/1faOUJ-mr2_0DuI1lpWSkVg

1.获取dex

将demo.apk修改后缀为demo.zip(ren命令或者属性直接修改后缀)并解压。得到以下文件:



2.反编译dex


3.解压dex2jar至指定目录,打开cmd至dex2jar目录,执行命令 dex2jar.bat 目录\classes.dex(有些版本中命令不是dex2jar.bat,而是d2j-dex2jar.bat),如图:


可以看到在dex2jar的目录下生了一个文件classes-dex2jar.jar



4.反编译jar文件,使用JD-GUI查看源代码:

解压JD-GUI文件,打开JD-GUI.exe,将上一步生成的classes-dex2jar.jar文件拖动至JD-GUI窗口,可以看到如下图,代码已经可以查看



反编译xml资源文件


4.使用apkTool反编译apk文件获取xml

源代码可以查看了,但是xml文件打开还是乱码,使用另外两个工具可以反编译xml文件。

将工具中的apktool-install-windows解压,与apktool.jar存放至同一目录,如图:



apktool目录下执行命令:apktool d [-s] -f <apk路径> -o <文件输出目录>,如下:




demo2文件夹中生成的文件如下:




打来AndroidManifest.xml或者res中的xml文件,就不会乱码啦。


注意事项:

路径中最好不要有中文、空格和特殊的符号。

工具的版本不用可能会有微小的差异,需要自已辨别。apktool百度网片连接各个版本都有。

有些apk使用了proguard,毕竟大家都不想自己的东西随便被人拿走,这种apk并不能完全被反编译,反编译出来后的代码如图:


可以看到代码中的包名、类名、方法名都变成了a、b、c等,比较影响阅读。

常见问题:

apkTool报错 : Error: Unable to access jarfile \xx\apktool.jar


确保命令中的路径正确,最好无中文和空格


确保文件中夹中包含apktool.jar (即使是apktool2.0.jar也要改成apktool.jar)


Input file was not found or was not readable.

通常是apktool版本问题,如果你使用的命令是apktool d <apk路径> <输出目录>,

请试一下apktool d [-s] -f <apk路径> -o <输出目录>


Destination directory (C:\Users\user\a) already exists. Use -f switch if you want to overwrite it.

根据提示可以知道使用 -f 覆盖已存在的目录,也可以指定其他目录。

Exception in thread “main” brut.androlib.AndrolibException: Could not decode ars c fil……….

apktool版本过低,升级即可。

————————————————

版权声明:本文为CSDN博主「冷冷清清里风风火火是我」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_33721320/article/details/83413283


相关文章

【强烈推荐】小学一年级奥数资料

这个奥数资料,是美爸亲自挑选,修改的高质量资料。特别适合一年级学有余力的小朋友,开发数学思维,增加学习兴趣,培养数学学霸。下载地址见下方:链接:https://pan.baidu.com/s/1WJe...

微信开发token验证失败的解决办法

第一天做微信开发,需要验证token。1、在公众号里设置好了相关信息。2、在服务器对应的url下放网页。<?php  $timestamp = $_GET['time...

一段买彩票双色球选号代码

random time () input_any = () red_balls = () blue_balls = () red...

python flask实现网站微信登录

python flask实现网站微信登录

转载自:原文链接 https://www.cnblogs.com/cacique/p/4293348.html根据需求选择相应的登录方式微信现在提供两种登录接入方式移动应用微信登录网站应用微...

linux服务器修改ssh默认22端口方法

linux服务器修改ssh默认22端口方法

今天ssh登录时偶然发现root密码登录后提示:Last failed login: Fri Dec 15 10:41:37 CST 2017 from 51.15.220.221 on ssh:no...

解决小程序开发碰到的https问题

解决小程序开发碰到的https问题

小程序需要网站升级成https。五分钟决对搞不定,但可以试试最快速度多久搞定。首先,需要https证书,原来阿里云可以免费申请的,现在已经找不到了,腾讯云申请起来还是很方便,手动点赞腾讯。到腾讯云注册...