一直比较喜欢反编译之类的操作,没有不尊重原创的意思.就是感觉好玩,或者向别人说的想看下别人怎么实现的.
对于android反编译重要的是这么两步,java代码的反编译,资源文件的反编译.这个由apk的解压结果可以看出来.
由这个结论也就引出了反编译所需要的工具, dex2jar和apktool
java代码的处理
得到jar文件
解压的内容有个classes.dex文件.
- dex文件是android平台上的可执行文件.这个里面就是处理后的java代码.
- 所以想要看到java代码只要对这个文件处理可以了
- 所需要的工具就是dex2jar
使用方法就是命令行输入 d2j-dex2jar dex文件
需要注意的是你的电脑系统window的执行 d2j-dex2jar.bat
mac 的执行 d2j-dexjar.sh
因此这里执行的命令格式为 sh d2j-dex2ajr.sh dex文件
到这里已经得到了jar文件,是不是非常简单.如果想看jar文件这里就需要另外一个工具了jd-gui可以根据不同的系统区下载相应的工具
查看jar文件内容
jd-gui 就是查看jar文件的java代码的可视化工具直接将jar文件
拖进工具就可以看到结果.
xml文件的处理
上面就已经看到了java代码,另外对于引用的图片资源,在我们解压后打开相应的文件夹就可以看到
同样的方式那么布局文件也是这样的,有一点不同的是布局文件打开是乱码的这个时候就需要另外一个工具apktool了
下载apktool
下载apktool后按照说明,将apktool和apktool.jar(window平台的是apktoo.bat 和apktool.jara)放到同一个文件夹,然后就可以执行下面的相关步骤了.
为了方便处理,我将apk文件也放到该目录下
1.执行命令 apktool d release.apk 的到一个编译后的文件夹结果
2.打开release 文件夹 进入相关文件夹内 再次找到原来乱码的xml文件打开发现已经看到正常的布局文件了,其他的xml文件也一样
3.通过这种方式的到的结果中还有一个smali文件夹,这个里面放的也是处理后的java代码,smali文件还是有必要学习一下的.
重新打包
如果我们修改了布局之后,如何重新打包呢?同样的还是apktool来完成,因为不会修改java代码所以革命的学习路线还是遥远的.
通过如下命令
apktool b release -o new_file.apk
可以看到新的apk已经得到了,正常情况下现在的这个apk还不能安装,因为需要重新签名.
另外在开发者模式下,通过adb命令可以将目前的这个apk安装,但是不建议这么区做.android系统为了安全考虑,规定每个软件或者ROM都要签名,如果没有签名系统会认为那对系统有害,无法安装.
对新文件进行签名安装
通过如下格式命令进行签名
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名
线路如图
相关工具的下载