蹉跎莫遣韶光老,人生唯有读书好。这篇文章主要讲述AndroidAndroid如何对APK反编译相关的知识,希望能为你提供帮助。
本文笔者粗略的介绍如何利用一些工具,对android进行反编译,从而得到源码,希望对你有所帮助,笔者的android环境为4.4.2。
如果笔者的apk被加过壳的话,那么可能不适合这篇文章,可以用加壳工具查看要反编译的apk是否加过壳。
1.准备资源.在开始之前,需要准备三项工具:
apktool
作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看,读者可以到https://ibotpeaches.github.io/Apktool/install网址下下载最新版本的apktools,如果出现Exception in thread "main" brut.androlib.AndrolibException:这样的异常,那么就是apktools的办版本太老的原因。
dex2jar
作用:将apk反编译成java源码(classes.dex转化成jar文件),最新版本的dex2jar可以到SOURCEFORGE下载
jd-gui
作用:查看APK中classes.dex转化成出的jar文件,即源码文件
2.获取资源文件使用apktool这个工具获取资源文件,下载apktool 会获得三个文件:aapt.exe、apktool.bat、apktool.jar 、
接下来将需要反编译的APK文件放到该目录下,
打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:
apktool.bat d -f test.apk test
文章图片
(命令中test.apk指的是要反编译的APK文件全名,test为反编译后资源文件存放的目录名称,即为:apktool.bat d -f [apk文件 ] [输出文件夹])
文章图片
说明获取成功,之后发现在文件夹下多了个test文件,点击便可以查看该应用的所有资源文件了。
打开资源文件后,可以看到里面有res和smali文件夹,res文件夹中放的是图片和XML等一些文件资源,smali里面放的是代码,文件都是.smali格式的,不方便阅读。
如果这里报错的话,可以观察错误信息,然后可以通过输入 apktool.bat 查看帮助信息,笔者在jdk8和jdk6上测试发现,在jdk8中必须使用 -o 输出文件,应该在jdk8中应该使用如下的格式:
apktool.batd-f[apk文件 ]-o[输出文件夹]
如果你想将反编译完的文件重新打包成apk,那你可以:输入 apktool.bat b test(你编译出来文件夹) 便可,效果如下:
文章图片
之后在之前的test文件下便可以发现多了2个文件夹:
dist(里面存放着打包出来的APK文件)
3.获取Java源码文件第二步获得的smali文件不方便阅读,接下来获取源码。
下载好dex2jar和jd-gui后 ,解压
将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),
将获取到的classes.dex放到之前解压出来的工具dex2jar-0.0.9.15 文件夹内,
文章图片
在命令行下定位到dex2jar.bat所在目录,输入 dex2jar.bat classes.dex ,效果如下:
文章图片
被混淆过的效果图(类文件名称以及里面的方法名称都会以a,b,c....之类的样式命名):
文章图片
这种方式可以反编译,但是经过笔者的测试,发现反编译后的源码文件,或多或少都有一些错误。
原文链接:Android APK反编译
【AndroidAndroid如何对APK反编译】
推荐阅读
- MUI 打包android app
- GoodsMapper.xml
- Android5.1修改以太网MAC地址(SElinux)
- final版——爱阅APP功能说明书
- Android 软键盘的显示和隐藏,这样操作就对了
- appcss reset
- appium desktop v1.2.7在android7.0上运行报错“Error: Error executing adbExec”
- 9(安卓事件分发机制)
- RequestMapping manager问题