由于兴趣的原因需要对某地图APK进行反编译,然后修改AndroidManifest,再重新打包编译。此处声明,并没有做什么坏事,只是纯粹的了解下技术。网上最大的坑就是下载apktool这个工具,自己下载了好多次,很多都有问题的,现在提供自己的反编译用到的所有工具git@github.com:justinhaisheng/-Java_Decompiler.git
。
APKTOOL的使用
apktool工具最最有的两个文件分别为apktool.bat与apktool.jar。
- 打开cmd.exe 进入到apktool工具所在的目录下执行apktool d +apk所在位置 。例如:
执行过程会出现这些。
如果中途出错,考虑是不是以前有执行过过时的apktool,可以到C盘符下user目录寻找到apktool/framework下的文件删除,然后重新反编译。
反编译完之后会在apktool下生成相应的文件文件内容如下:
通过apktool工具反编译出来后的文件,我们主要可以看到资源文件例如AndroidManifest.xml,如果只是改动这里的话,用编辑器打开改动就可以重新打包编译了。在这个文件目录下,smali是我们的主要代码所在的位置,只是现在打开看也是我们无法识别的东西(当然主要是我对这个不懂),看得懂的人可以不需要借助dex2jar继续反编译。
重新编译打包
改完代码后想重新编译打包也不难主要命令是:apktool d -r xxx.apk
在此说说我遇到的另一坑,大家也估计有机会遇到,就是重新打包后不能直接安装进手机的,原因是签名,必须要有签名才行,可是如果你是反编译别人家的apk你哪有人家的签名呀,没办法可以用自己Android工具下的签名工具(具有怎么签名请百度谷歌)来进行签名,我说的坑就是你用自己的默认签名之后,一开应用就奔溃了,原因是这个软件有做检测签名的逻辑代码,所以还必须要找到这个代码然后干掉才行。
dex2jar的使用
- 把.apk的包重命名为.zip,然后解压出来
- 解压之后会有.dex 的文件,使用dex2jar就是把.dex文件转化为.jar文件
- 打开cmd.exe 进入到dex2jar-2.0工具所在的目录下执行d2j-dex2jar xxx.dex。例如:
*然后就可以看到生成了.jar文件了。
jd-gui的使用
这个的使用就很简单了,打开刚刚生成的.jar就可以看到真正的.class的
代码了