正如大家所知道的,Android App打包后一般会生成apk文件,那怎样能够将apk文件还原成为可以阅读的java文件和可以更改密码的smali文件?我们可以一起研究学习下:
反编译apk,你需要确保你的电脑环境里安装了jdk,此外我们需要用到以下两款工具:
- dex2jar 这个工具用于将dex文件转换成jar文件
下载地址:http://sourceforge.net/projects/dex2jar/files/ - jd-gui 这个工具用于将jar文件转换成java代码
下载地址:http://jd.benow.ca/
反编译前,你需要将你的apk文件后缀名修改为zip包,解压后,会看到很多文件夹,如下图所示
找到你的classes.dex文件夹,放入dex2jar文件包中,如下图:
此时打开你的命令器,将路径cd到该文件夹下面,输入:
如果没有报任何错误说明已经转换成功了,此时你可以发现dex2jar文件包中多出了一个classes-dex2jar.jar文件,
打开你下载好的gui工具,然后点击file—> open file,选择刚才生成的classes-dex2jar.jar文件夹,则可以看见apk的内容了,混淆后的apk文件,只能看见很多abc组成的文件夹包,点击进去也可以看见代码,但阅读性不强,如果感兴趣可以试着阅读,我是很头疼,最后半途而废,但是,有些地方的逻辑你还是可以认出来的,哈哈。
如果想要修改文件,需要在smali文件里面实现。smali获得途径为,打开apktool工具,把apk包放入apktool文件里面,如下图,打开命令器,cd到apktool文件目录下,输入命令apktool d xxx.apk,可以在该目录下生成一个同名文件夹,里面包含了smali文件。
下载apktool地址为:
https://ibotpeaches.github.io/Apktool/install/
此时,可以进入smali文件夹中,找到你要修改的smila文件,用任意编译器或者记事本打开smila文件,此时你可以修改,所有smali文件需要使用汇编smali语言,如果需要学习的话,可以参考我后面的文章。修改完成后,则可以重新打包了,同样打开命令器,cd到apktool文件目录下,注意你的打包文件夹也应该在该目录下,输入命令:apktool b 123 -o xxx.apk
此时你打出来的包暂时不能用,还需要签名工具。所以你需要去生成一个keystore,然后签名,使用androidstudio或者eclipse都可以生成keystore文件,或者使用命令器生成,如果不会可以参考其他文章,在此不叙述了。我们需要把生成的.keystore文件放入到apktool目录下,然后同样打开命令器,cd到apktool文件目录下,输入命令:
jarsigner -verbose -keystore xxx.keystore -signedjar new_sign.apk xxx.apk asia
jarsigner -verbose代表签名命令标识符
-keystore后面则是你目录下的.keystore文件
-signedjar后面分别表示
new_sign.apk:签名后生成的apk文件。
xxx.apk:未签名的apk文件。
asia:你的证书別名。
此外还需要输入你的keystore密码,打包成功后,你可以得到你的apk文件了。