上次看了两篇反编译APK文件的文章,反编译了几个音乐播放器,自己借用其中一个应用的界面做了一个相应播放器。近期有比较多的空闲时间,所以打算做一个LBS旅行应用。但目前发现又不会反编译了,所以还是记录下来,下次再忘直接看自己的文章比较快。(注:以下为Windows环境下)
1:反编译Java源码(从dex文件->jar文件->java文件)
利用工具(1)dex2jar,下载地址:http://code.google.com/p/dex2jar/(不知道能不能连上) (2)jd-gui,下载地址:http://jd.benow.ca/
解压后启动命令行(开始->cmd),更改目录到解压路径,如我的目录:D:adtapk2javadex2jar-0.0.9.15
运行命令
(1) d:
(2) cd D:adtapk2javadex2jar-0.0.9.15
(3) 解压要反编的APK文件,得到classes.dex文件,如我要反编译去哪儿旅游攻略,classes.dex文件路径为:D:android_relate ravelLBScom.qunar.travelplan_222048classes.dex
(4) d2j-dex2jar -o D:android_relate ravelLBScom.qunar.travelplan_222048qne.jar D:android_relate ravelLBScom.qunar.travelplan_222048classes.dex
注:dex2jar命令已经废弃,官方推荐用d2j-dex2jar命令,上面的命令d2j-dex2jar -o [反编译后的文件保存位置及名字] [要反编译的dex文件];如果不加-o参数即指反编译到d2j-dex2jar命令所在路径中,这里还有其他的参数,具体可以自己去看d2j-dex2jar -help
(5) 得到qne.jar文件后用jd-gui打开就行了,这个就不解释了,去用就懂
2:反编译资源文件
工具:apktoole,下载地址:http://code.google.com/p/android-apktool/ (假设我的apktool文件路径为:D:adtfbyprk-window)
运行命令
(1) d:
(2) cd D:adtfbyprk-window
(3) apktool d -s D:android_relate ravelLBScom.qunar.travelplan_222048.apk D:android_relate ravelLBSqne
注:-s是指src目录就不要反编译出来了,反编译的话得到的是.smali文件(对我反正暂时没什么用)。命令apktool d -s [apk文件路径] [生成的资源目录路径]。具体参数可以自己了解一下apktool -help
至此Java文件和资源文件都得到了。反编出来的java文件可能添加了混淆,类名为a,b,c这样,暂时没办法还原
截个图看一下吧:
命令行:
得到的文件(1个jar文件,1个资源目录):
3:直接用apk2java反编译得到资源文件和java源码
apk2java,下载地址:https://apk2java.googlecode.com/files/apk2java_v1.0.zip
解压后(例如,我的解压后目录D:adtapk2javaapk2java_v1.0),命令行切换到该目录,把要反编译的apk文件放到D:adtapk2javaapk2java_v1.0目录下
(1)D:
(2)cd D:adtapk2javaapk2java_v1.0
(3)apk2java sample.apk
得到一个src的目录,如截图:
其中,com目录存放有java源码,other则是存在资源文件