apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用

一、工具介绍:

1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包;

2.dex2jar:该工具作用是将classes.dex文件,反编译出源码(如果apk未加固),反编译出文件,使用jd-gui工具进行查看;

3.Auto-Sign:自动签名工具,将重新打包的apk进行签名,如果不签名,无法安装使用。

工具下载地址:http://download.csdn.net/detail/wxk105/9782180

使用场景:项目源码丢失,只有线上apk,并且没有加固,要求修改apk接口地址,并且重新打包,再发布。

二、工具使用:

解压后工具包如图:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第1张图片

1.思路:使用工具dex2jar反编译,并用jd-gui工具进行查看项目结构,查看源码,并且找到接口地址类,修改接口地址;

步骤一:下载好工具,将需要反编译的APK后缀名改为.rar或则 .zip,并解压,如图:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第2张图片

得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的

classes.dex复制到解压出来的工具dex2jar-0.0.9.15 文件夹内

在命令行下,进入到dex2jar.bat所在目录,输入命令:

dex2jar.bat   classes.dex

效果如下:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第3张图片

步骤二:运行结束后,在该目录下会生成一个classes_dex2jar.jar的文件,如图:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第4张图片

然后打开工具jd-gui文件夹里的jd-gui.exe,用该工具打开生成的classes_dex2jar.jar文件,便可以看到源码

了,效果如下:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第5张图片

2.思路:apktool,反编译修改smali文件,进行重新打包,通过用jd-gui工具找到接口地址类后,与相应

的smali文件进行对比,修改接口地址;

下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的

APK文件放到该目录下,如图:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第6张图片

打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:

apktool.bat d -f test.apk -o test    
apktool -f [待反编译的apk] -o [反编译之后存放文件夹] 

如图:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第7张图片

反编译之后会得到test 文件夹,打开test文件夹,里边就是反编译出来的各种资源文件

这里写图片描述

使用jd-gui查看源码找到地址类,然后在smali文件里找到地址的smali文件,更改smali文件内接口地址。
如图:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第8张图片

smali文件内找到与之对应的地址smali文件

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第9张图片

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第10张图片

修改接口smali文件里的地址将Ip更换成域名如图:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第11张图片

修改后,保存。

3.重新打包。 执行打包命令

apktool.bat b test

在test文件内会多出两个文件如下图所示:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第12张图片

dist文件内就是我们需要的apk。

4.签名apk,重新发布。

接下来就要用到签名工具了,如果不经过签名是不能正确运行的。工具: auto-sign.zip

将打包好的test.apk 拷贝到解压好的auto-sign文件夹下,并且重命名为 test.zip ,执行命令:

java -jar signapk.jar testkey.x509.pem testkey.pk8 test.zip test_signed.zip 

接下来输入 将test_signed.zip,更改为后缀名apk的文件,就可以了 :

这里写图片描述

5.运行之后,发现在5.0上运行会直接崩溃,android studio捕捉到错误所在:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第13张图片

这里是在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文件代码定位:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第14张图片

由于不太懂smali语法的书写,所以我们直接将写好java代码用插件转换为smali语法,拷贝进来,替换原有smali代码
这是java代码
apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第15张图片

转换成smali代码

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第16张图片

相应代码会直接展示,找到相应转换结果:

apk反编译,smali文件修改,重新打包,java转samli插件在项目中的实际应用_第17张图片

替换反编译出的相应smali文件里的相应代码,然后执行重新打包命令,签名命令,执行第3步。

整个过程并不复杂,只要有耐心就可以更改成功。

你可能感兴趣的:(项目中小功能抽离,反编译,插件,apk反编译工具,apk源码查看,android)