反编译:
- 资源文件获取Apktool
按照官网的指示配置完成后,执行apktool命令apktool d xxx.apk // 如果提示-bash: /usr/local/bin/apktool: Permission denied cd /usr/local/bin sudo chmod +x apktool sudo chmod +x apktool.jar
执行完成后会在apktool.jar的目录下升级一个文件,里面可以看到xml的信息
cd /usr/loca/bin open .
- 源码文件获取dex2jar
将apk文件解压后获取class.dex文件,然后将dex文件拷贝到dex2jar目录中sh d2j-dex2jar.sh classes.dex d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied // chmod一下 sudo chmod +x d2j_invoke.sh sh d2j-dex2jar.sh classes.dex
执行完成后会在当前目录中生成一个 classes-dex2jar.jar
-
jar包源码查看工具jd-gui
里面有osx的版本,安装后直接打开上面用dex2jar编译出来的.jar文件就可以查看源码了
反编译后的源码修改
修改代码及资源,最好的方式是修改apktool反编译后的资源级smali代码。JD-GUI查看的java代码不适宜修改,因为修改后还需要重新转换成smali,才能重新编译打包会apk。
至于smali的修改,则要学习smali语言的语法了,smali是一种类似汇编语言的语言,具体语法可自行上网学习。
在smali文件夹中找到与具体类对应的smali文件,然后进行修改
可以用到java2smali将java代码转换成smali代码
重新打包
B0000000134553m:bin xuchuanren$ apktool b xxxfilename
I: Using Apktool 2.4.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
S: WARNING: Could not write to ( instead...
S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
生成的apk在该文件xxxfilename中的dist目录中
重新签名
重新签名用的是jarsigner命令
jarsigner -verbose -keystore [your_key_store_path] -signedjar [signed_apk_name] [usigned_apk_name] [your_key_store_alias] -digestalg SHA1 -sigalg MD5withRSA
- [your_key_store_path]:密钥所在位置的绝对路径
- [signed_apk_name]:签名后安装包名称
- [usigned_apk_name]:未签名的安装包名称
- [your_key_store_alias]:密钥的别名
如:
jarsigner -verbose -keystore /development/key.keystore -signedjar signed_apk.apk xxx.apk charon -digestalg SHA1 -sigalg MD5withRSA
Enter Passphrase for keystore:
adding: META-INF/MANIFEST.MF
adding: META-INF/CHARON.SF
adding: META-INF/CHARON.RSA
执行完后会在当前目录下生成签名后的apk文件