在进行安卓开发或者爬虫开发过程中,偶尔会遇到需要将app进行反编译分析参考源码的需求,接下来,笔者将自己实践过程记录下来,給需要的朋友一个参考。仅供学习之用,勿做坏事儿,哈哈哈!
准备工作:确保电脑已经配置好了java环境,最好是jdk1.8以上
使用工具:
apktool (作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看) 下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads/
dex2jar(作用:将apk反编译成java源码(classes.dex转化成jar文件)) 下载地址:https://sourceforge.net/projects/dex2jar/files/
jd-gui (作用:查看APK中classes.dex转化成出的jar文件,即源码文件) 下载地址: http://java-decompiler.github.io/
百度云盘下载地址:https://pan.baidu.com/s/1u7h1VT8WCW4vhQXpzq6png
将下载好的工具放在指定目录,解压,如下图所示:
1.用apktool反编译apk得到图片、XML配置、语言资源等文件
1.1 使用cmd命令cd到工具所在的目录,例如
cd C:\Users\lyl\Desktop\app反编译相关
1.2 使用 apktool 反编译得到 图片、XML等静态资源
java -jar [apktool_2.4.0.jar] d -f [apk地址] -o [输出的目录名称]
例如下图所示,我这里需要反编译的app为非常准的app,名字为:feichangzhun_142.apk:
执行成功之后,将会在指定的 fcz 目下生成如下图类似的文件,资源都在这里面:
如果你想将反编译完的文件重新打包成apk,那你可以:
java -jar [apktool_2.4.0.jar] b fcz (你编译出来文件夹)
例如:
java -jar apktool_2.4.0.jar b fcz
之后在之前的fcz文件下便可以发现多了2个文件夹:
build
dist(里面存放着打包出来的APK文件)
2.Apk反编译得到Java源代码
将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的 classes.dex放到之前解压出来的工具 dex2jar-0.0.9.13文件夹内,例如下图
2.1 在命令行下定位到 dex2jar.bat所在目录,输入
dex2jar.bat classes.dex
如图:
在该目录下会生成一个 classes_dex2jar.jar 的文件,然后打开工具 jd-gui 文件夹里的 jd-gui.exe,之后用该工具打开之前生成的classes_dex2jar.jar文件,便可以看到源码了,效果如下:
备注:如果要反编译的app是加了壳的话,需要脱壳,这里推荐有个大佬的文章地址可以参考一下:http://www.52bug.cn/cracktool/4794.html
作者我这里这个app也是使用的360加壳过的,所以也需要进行脱壳处理,具体脱壳步骤将在下一篇文章进行记录
3.签名
在从新打包之后,需要进行重新签名,这样才能在手机上成功安装,这里需要下载 Auto-sign.zip 工具,我这里有整理一份以上传百度云盘,下载地址:https://pan.baidu.com/s/1JeA4MkS7BWdeQkSHLvUs1w
将 Auto-sign.zip 解压,然后通过命令行 cd 到路径下,并且把要签名的app拷贝进去,例如我这里要签名的app为 飞常准.apk ,拷贝进去之后,目录结构如下图:
在命令行使用此命令进行签名
java -jar signapk.jar testkey.x509.pem testkey.pk8 飞常准.apk fcz.apk
注意:这里的 fcz.apk 是指的签名成功之后,要生成的新的app名称
执行成功之后,将会在当前目录生成已经签名好的新文件,如下图
我这里遇到一个问题,就是我已经从新签名之后,并且把安装包发到手机上也成功安装了,但是打开运行app之后,会闪退,不不知道是否是我修改源码之后,修改出了问题,如有遇到同样问题的朋友,可以留言互相交流下喔!