Android反编译工具-apktool
反编译
apktool d xxx.apk
反编译后逆向编译
通过以下命令可以把已经修改过的文件重新打包为apk
apktool b xxx
但是这样打包出来的apk是无法安装到手机上的,因为Android在手机都是有一个唯一标识的,也就是签名,如果我们直接安装无签名的apk,系统会提示安装失败,并且打出log信息,Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION] ,所以我们需要给我们的新的apk打上签名。
1)生成签名
我们可以通过AndroidStudio或者ecplise来手动生成一个keystore,也可以通过命令行来生成
keytool -genkey -keystore my.keystore -keyalg RSA -validity 10000 -alias my
-keystore my.keystore 即签名文件的名字
-alias 表示签名文件的别名,一般和普通名字一样,这里也是my
反编译成功之后我们会看到目录文件下:
reset: 资源文件夹,可以是字体文件,或者壁纸等
res: 资源文件夹
smali: Dalvik VM内部执行的核心代码。Android采用的是java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali。也就是由java转化而来。
2)使用签名打包
把你的签名文件和apk拷到同一个目录下,然后执行以后语句:
jarsigner -verbose -keystore my.keystore -signedjar my_signed.apk my.apk my
my.keystore即你的签名文件名称
my.apk即需要进行签名的apk
my_signed.apk即Android签名后的APK执行文件。
3) 常见问题
错误提示:jarsigner: 找不到xx的证书链。xx必须引用包含私有密钥和相应的公共密钥证书链的有效密钥库密钥条目。
解决方法:签名文件的Alias写错,请改正。
错误提示:jarsigner 错误: java.lang.RuntimeException: 密钥库加载: Keystore was tampered with, or password was incorrect
解决方法:签名文件的密码错误,请改正。
错误提示:jarsigner: 与xx关联的密钥不是私有密钥
解决方法:签名文件的Alias的密码错误,请改正。
Android-enjarify
这是是谷歌出品的一款反编译工具,它可以将dalvik字节码转化成 java 字节码。当我们通过apktool反编译出代码工程之后,只能看到smali文件,则这样的可读性是很差的,如果我们希望看到Java代码,我们就需要到enjarify工具
使用方式:
enjarify yourapp.apk
enjarify classes2.dex
enjarify yourapp.apk -o yourapp.jar
转化为jar包之后,可以使用jd-gui.jar打开查看代码,所以我们也需要再去下载jd-gui.jar