使用工具
- apktool 将apk安装包解析成能看懂的资源文件
- dex2jar 将classes.dex打成jar包
- jd-gui 查看源码
一、首先参照 官网 安装apktool
1)右键链接保存脚本文件命名为apktool(txt格式)
2)点击链接下载 apktool 最新jar包
3)将 2)中下载的jar重命名为apktool.jar
4)将下载好的apktool和apktool.jar文件复制到/usr/local/bin文件目录下,如果没有此目录就创建一个
sudo mkdir bin //创建,然后输入权限密码
ls //查看已经有了此目录,看看是否创建
cp //复制命令
5)执行命令 chomod +x apktool , chomod +x apktool.jar(需要先进入bin目录下执行这两条命令)
cd /usr/local/bin //进入bin目录的命令
chmod +x filename //给文件执行的权限
./FileName // 检验文件是否已经可执行
6)执行命令 apktool,如果出现下图结果即说明apktool安装好了
二、反编译apk
进入要反编译的apk所在的目录下,执行命令apktool d xxx.apk
,出现如下结果即反编译成功了
此时会发现在该文件目录下会多出一个与apk名字一样的文件夹,该文件夹内包含:AndroidManifest.xml,res文件夹,smali文件夹。其中smali文件夹内就是每个java类所对应的smali文件。
三、修改apk内容
资源和xml文件好改,smail文件有自己的规则看得懂也可以直接改。
这里有第二种方法可以查看源代码,在上述命令行添加 -s 生成classes.dex文件,表示禁止将dex文件解码成smali
apktool d -s -f xxx.apk
生成classes.dex文件:
再使用dex2jar工具把classes.dex文件转化成.jar文件:
进入到解压后的dex2jar文件夹下,如:
cd Downloads/dex2jar-2.0
把classes.dex文件复制到解压后的dex2jar文件夹下,终端执行命令
sh d2j-dex2jar.sh classes.dex
执行完毕后,会在文件夹下生成一个.jar文件,里面就是java源码
最后使用JD-GUI软件查看jar包下的java源码
1.下载并安装jd-gui
2. 打开安装好的JD-GUI,直接把第二步生成的.jar文件拖进去,就能看到反编译出来的java源码了
四、重打包apk
执行命令apktool b 反编译的文件名,如下所示,即重新打包成功。此时会在反编译得到的文件夹内多出dist文件夹,重新打包的apk即在该文件夹内,apk处于未签名状态。。
五、重新生成签名文件(待尝试)
1
执行命令:keytool -genkey -keystore cloudbeacon.keystore -keyalg RSA -validity 10000 -alias cloudbeacon
该命令会重新生成签名文件,默认保存在与原apk同级的文件夹下。
2
jarsigner -verbose -keystore [keystore路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [keystore别名]
由于你的keystore与原开发者的keystore不同,所以签名后的apk与原apk的签名肯定不同。但可以在设备上先卸载原来的app,再重新安装新的apk。