岳池网站制作,成都教育行业网站建设,成都专业网站建设公司,苏州高新区建设局网站一、工具介绍#xff1a;
1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用#xff0c;用来反编译apk#xff0c;apk重新打包#xff1b;
2.dex2jar:该工具作用是将classes.dex文件#xff0c;反编译出源码#xff08;如果apk未加固#xff09;
1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用用来反编译apkapk重新打包
2.dex2jar:该工具作用是将classes.dex文件反编译出源码如果apk未加固反编译出文件使用jd-gui工具进行查看
3.Auto-Sign:自动签名工具将重新打包的apk进行签名如果不签名无法安装使用。
工具下载地址https://download.csdn.net/download/sxk874890728/10443156 需要3CSDN积分,原本我设置3积分的不知道为什么涨到16积分了......
使用场景项目源码丢失只有线上apk并且没有加固要求修改apk接口地址并且重新打包再发布。
二、工具使用
解压后工具包如图 1.思路使用工具dex2jar反编译并用jd-gui工具进行查看项目结构查看源码并且找到接口地址类修改接口地址
步骤一下载好工具将需要反编译的APK后缀名改为.rar或则 .zip并解压如图 得到其中的classes.dex文件它就是java文件编译再通过dx工具打包而成的将获取到的
classes.dex复制到解压出来的工具dex2jar-0.0.9.15 文件夹内
在命令行下进入到dex2jar.bat所在目录输入命令
dex2jar.bat classes.dex
1
效果如下 步骤二运行结束后在该目录下会生成一个classes_dex2jar.jar的文件如图 然后打开工具jd-gui文件夹里的jd-gui.exe用该工具打开生成的classes_dex2jar.jar文件便可以看到源码
了效果如下 2.思路apktool,反编译修改smali文件进行重新打包通过用jd-gui工具找到接口地址类后与相应
的smali文件进行对比修改接口地址
下载上述工具中的apktool解压得到3个文件aapt.exeapktool.batapktool.jar 将需要反编译的
APK文件放到该目录下如图 打开命令行界面运行-CMD 定位到apktool文件夹输入以下命令
apktool.bat d -f test.apk -o test
1
apktool -f [待反编译的apk] -o [反编译之后存放文件夹]
1
如图 反编译之后会得到test 文件夹打开test文件夹里边就是反编译出来的各种资源文件 使用jd-gui查看源码找到地址类然后在smali文件里找到地址的smali文件更改smali文件内接口地址。 如图 smali文件内找到与之对应的地址smali文件 修改接口smali文件里的地址将Ip更换成域名如图 修改后保存。
3.重新打包。 执行打包命令
apktool.bat b test
1
在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 { actcom.sun3d.culturejingan.communication.link }
1
如错误提示所示在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步。
整个过程并不复杂只要有耐心就可以更改成功。