1、工具介绍:css
1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk从新打包;java
2.dex2jar:该工具做用是将classes.dex文件,反编译出源码(若是apk未加固),反编译出文件,使用jd-gui工具进行查看;android
3.Auto-Sign:自动签名工具,将从新打包的apk进行签名,若是不签名,没法安装使用。工具
工具下载地址:https://download.csdn.net/download/sxk874890728/10443156 (须要3CSDN积分,本来我设置3积分的,不知道为何涨到16积分了......)ui
使用场景:项目源码丢失,只有线上apk,而且没有加固,要求修改apk接口地址,而且从新打包,再发布。spa
2、工具使用:.net
解压后工具包如图:插件
1.思路:使用工具dex2jar反编译,并用jd-gui工具进行查看项目结构,查看源码,而且找到接口地址类,修改接口地址;命令行
步骤一:下载好工具,将须要反编译的APK后缀名改成.rar或则 .zip,并解压,如图:3d
获得其中的classes.dex文件(它就是java文件编译再经过dx工具打包而成的),将获取到的
classes.dex复制到解压出来的工具dex2jar-0.0.9.15 文件夹内,
在命令行下,进入到dex2jar.bat所在目录,输入命令:
dex2jar.bat classes.dex
效果以下:
步骤二:运行结束后,在该目录下会生成一个classes_dex2jar.jar的文件,如图:
而后打开工具jd-gui文件夹里的jd-gui.exe,用该工具打开生成的classes_dex2jar.jar文件,即可以看到源码
了,效果以下:
2.思路:apktool,反编译修改smali文件,进行从新打包,经过用jd-gui工具找到接口地址类后,与相应
的smali文件进行对比,修改接口地址;
下载上述工具中的apktool,解压获得3个文件:aapt.exe,apktool.bat,apktool.jar ,将须要反编译的
APK文件放到该目录下,如图:
打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入如下命令:
apktool.bat d -f test.apk -o test apktool -f [待反编译的apk] -o [反编译以后存放文件夹]
如图:
反编译以后会获得test 文件夹,打开test文件夹,里边就是反编译出来的各类资源文件
使用jd-gui查看源码找到地址类,而后在smali文件里找到地址的smali文件,更改smali文件内接口地址。
如图:
smali文件内找到与之对应的地址smali文件
修改接口smali文件里的地址将Ip更换成域名如图:
修改后,保存。
3.从新打包。 执行打包命令
apktool.bat b test
在test文件内会多出两个文件以下图所示:
dist文件内就是咱们须要的apk。
4.签名apk,从新发布。
接下来就要用到签名工具了,若是不通过签名是不能正确运行的。工具: auto-sign.zip
将打包好的test.apk 拷贝到解压好的auto-sign文件夹下,执行命令:
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test_signed.apk
- 1
test_signed.apk就是签名后的apk :
5.运行以后,发如今5.0上运行会直接崩溃,android studio捕捉到错误所在:
这里是在jd-gui上查看到了源码位置
错误缘由:
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.sun3d.culturejingan.communication.link }
如错误提示所示,在android 5.0版本之后,service intent必须为显式指出。
那么就须要修改smali文件相关类,这里就用到将java2smali文件
6.java2smali插件,地址:https://plugins.jetbrains.com/plugin/7385-java2smali
插件安装,选择本地安装,不懂怎么安装插件,请百度下。
找到相应问题的smali文件代码定位:
因为不太懂smali语法的书写,因此咱们直接将写好java代码用插件转换为smali语法,拷贝进来,替换原有smali代码
这是java代码
转换成smali代码
相应代码会直接展现,找到相应转换结果:
替换反编译出的相应smali文件里的相应代码,而后执行从新打包命令,签名命令,执行第3步。
整个过程并不复杂,只要有耐心就能够更改为功。
反编译+从新打包+签名
java -jar apktool.jar d -f zhugechengyu.apk -o MMTS d2j-dex2jar classes.dex 反编译从新打包 java -jar apktool.jar b MMTS 生成签名 keytool -genkey -alias android.keystore -keyalg RSA -validity 36500 -keystore android.keystore 从新签名 jarsigner -verbose -keystore android.keystore -storepass hzx123 -keypass hzx123 -signedjar zg_signed.apk zhugechengyu.apk android.keystore
from:https://blog.csdn.net/sxk874890728/article/details/80486223