实践总结,解决问题,乐在分享!古月大仙荣誉出品,欢迎关注、加粉、点赞、评论、交流!
1 内容摘要
Apk保险措施:混淆、加固、NDK、敏感操作的字符串替代、检查签名、……
高手成长路径:
脱壳→反编译(jadx:dex→jar和apktool:xml)→修改(AS)→重打包(apktool)→重新签(apktool/autosign)
代码的反编译工具:( jadx=dex2jar+ jd-gui)(src)
dex2jar与 jd-gui:dex2jar将Android APK内的dex转化为jar文件,然后使用jd-gui可以查看,保存为java文件。
jadx:jadx是一个非常好用的反编译工具,可以原作者已经没有维护了。但也不妨成为一个经典工具。
资源的反编译工具:apktool (res)
apktool :使用apktool将布局图片等资源可以提取出来。
2 软件下载
(为免除逐个下载的烦恼,本文所有软件已打包,请移步本人文件分享页面:工具合集)
① jadx:查看源码及目录结构。
下载地址:下载1 (源文件 );下载2(推荐);下载3(zip文件)。
② apktool:用来反编译apk,apk重新打包。
下载地址:下载1 (apktool.jar)(推荐);下载2 (apktool.bat和apktool.jar);下载3;下载4。
③ dex2jar:源码文件获取。
④ jd-gui :源码查看。
⑤ autosign:自动签名工具,将重新打包的apk进行签名,如果不签名,无法安装使用。
下载地址:暂无。
⑥ enjarify:google反编译工具,比dex2jar更强大成功率更高,只不过是python项目。
下载地址:下载1。
3 高手成长路径
① 反编译代码(jadx:dex→jar)(jadx在线的反编译网站:http://www.javadecompilers.com/apk)
如图所示, jadx解压后得到5个文件,操作步骤如下:
xxx.apk→xxx.zip→解压缩得classes.dex→拷贝到bin目录→选择执行指令→bin目录生成out文件夹→完成反编译
cmd指令(在该目录下,按住Shift,然后右键选择“在此处打开命令窗口”,根据需要输入命令)
jadx -d out classes.dex // 直接反编译输出.java文件到out目录(out文件加下只生成sources一个文件夹)
jadx-gui classes.dex // 直接使用gui打开查看源码,此操作等同于“双击运行bin / jadx-gui.bat→加载classes.dex”
jadx-gui xxx.apk // 直接反编译输出.java文件到out目录(out文件加下生成resources和sources两个文件夹)
jadx -d out xxx.apk // 直接使用gui打开查看源码,此操作等同于“双击运行bin / jadx-gui.bat→加载xxx.apk”
重要提示:
利用Github开源项目jadx可以直接对 .dex, .apk, .jar, .class 类型的文件进行直接反编译。这只是用于查看源码,并起不到修改作用,不过可以查看要修改的东西在哪个位置,真正修改要通过apktool反编译apk的源码才可以修改。jadx-gui图形化界面:点击文件-另存为Gradle项目,就可以在Android Studio中打开了,这样使用顺手的IDE可以更方便查看。
② 反编译资源(apktool:xml)→只需要res目录和AndroidManifest.xml文件
将apktool_x.x.x.jar、apktool.bat、xxx.apk文件同放apktool文件夹→选择执行指令→生成xxx文件夹→得所有xml资源文件
apktool.bat脚本文件代码:
-
@echo off
-
if
"%PATH_BASE%" == "
" set PATH_BASE=%PATH%
-
set PATH=%CD%;%PATH_BASE%;
-
java -jar -Duser.language=en "%~dp
0\apktool.jar
" %1 %2 %3 %4 %5 %6 %7 %8 %9
cmd指令:
-
apktool.bat d xxx.apk
-
-
apktool.bat d -f xxx.apk -o xxx
// apktool d -f “apk路径” -o “文件保存路径”
参数说明:
- -f 如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。
- -o 指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)。
- -s 不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。
- -r 不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)
重要提示:在这个文件夹下面便是反编译出来的资源文件,我们只需要res目录和AndroidManifest.xml文件。然后进行xxx\res目录去修改ic_launcher,这里所有的ic_launcher都要做替换。另外,反编译的apk会缺少部分资源文件(res–>value下的文件),只需要拷贝缺少资源重新回编译即可
常见报错:解决jdk安装后出现 Error: could not open `E:\jdk\lib\amd64\jvm.cfg'
③ 修改图标和logo
④ 重新打包
apktool文件夹→执行命令→在xxx目录下面生成一个dist目录→得重打包后的apk
cmd指令:
apktool.bat b xxx // xxx为apk名字
重要提示:但是这个apk没有签名,需要重新签名之后,才能安装。
⑤ 生成keystore文件
apktool文件夹→执行命令→生成一个abc.keystore证书文件
cmd指令:
keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore
⑥ 签名(apktool或autosign)
apktool方法:dist/xxx.apk→拷贝到apktool目录→执行命令→得到xxx_signed.apk
jarsigner -verbose -keystore abc.keystore -signedjar xxx_signed.apk xxx.apk abc.keystore
autosign方法:dist/xxx.apk→拷贝到解压好的auto-sign文件夹→执行命令→xxx_signed.apk
java -jar signapk.jar testkey.x509.pem testkey.pk8 xxx.apk xxx_signed.apk
4 参考文章
[1] jadx反编译—下载和使用
[2] jadx-gui反编译apk
[4] 史上最全:Apk反编译之jadx,jd-gui,dex2jar,apktool,dex和smali的使用(总结很细致)
[5] 反编译Android应用,修改代码并重新打包,破解收费APP(以破解实际App为例)
[6] Android 反编译Apk,修改资源,重新打包,签名发布(总结很全面)
[7] Apktool重打包Apk详细介绍(介绍Apktool重打包)
[8] Android反编译流程和apk反编译重新打包签名(值得重复看)
[9] 用jadx和apktool反编译apk(介绍jadx和apktool)
[10] 利用开源项目jadx反编译Android应用(介绍jadx)
[11] 一步一步带你反编译apk,并教你修改smali和重新打包
[12] 安卓反编译入门(二)
转载:https://blog.csdn.net/weixin_46421161/article/details/105012888