【总结】Apk反编译全解
实践总结,解决问题,乐在分享!古⽉⼤仙荣誉出品,欢迎关注、加粉、点赞、评论、交流!
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:查看源码及⽬录结构。
下载地址: (源⽂件 );(推荐);(zip⽂件)。
② apktool:⽤来反编译apk,apk重新打包。
下载地址:  (apktool.jar)(推荐); (apktool.bat和apktool.jar);;。
③ dex2jar:源码⽂件获取。
下载地址:;。
④ jd-gui :源码查看。
下载地址: (推荐);。
⑤ autosign:⾃动签名⼯具,将重新打包的apk进⾏签名,如果不签名,⽆法安装使⽤。
下载地址:暂⽆。
⑥ enjarify:google反编译⼯具,⽐dex2jar更强⼤成功率更⾼,只不过是python项⽬。
下载地址:。
3 ⾼⼿成长路径
如图所⽰, 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⽬录和l⽂件
将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 "%~dp0\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⽬录和l⽂件。然后进⾏xxx\res⽬录去修改ic_launcher,这⾥所有的ic_launcher都要做替换。另外,反编译的apk会缺少部分资源⽂件(res–>value下的⽂件),只需要拷贝缺少资源重新回编译即可
常见报错:
③ 修改图标和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]
[2]
[3]
[4] (总结很细致)
[5] (以破解实际App为例)
[6] (总结很全⾯)
[7] (介绍Apktool重打包)
[8] (值得重复看)
[9] (介绍jadx和apktool)
[10] (介绍jadx)
[11]
[12]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。