小言_互联网的博客

【总结】Apk反编译全解

371人阅读  评论(0)

实践总结,解决问题,乐在分享古月大仙荣誉出品欢迎关注、加粉、点赞、评论、交流

1  内容摘要

Apk保险措施混淆、加固、NDK、敏感操作的字符串替代、检查签名、……

高手成长路径

脱壳→反编译(jadx:dexjarapktool: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:源码文件获取。

下载地址:下载1下载2

 jd-gui :源码查看。

下载地址:下载1 (推荐);下载2

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

下载地址:暂无。

enjarify:google反编译工具,比dex2jar更强大成功率更高,只不过是python项目。

下载地址:下载1


3 高手成长路径

  ① 反编译代码jadx:dexjar)(jadx在线的反编译网站:http://www.javadecompilers.com/apk

     如图所示, jadx解压后得到5个文件,操作步骤如下:

xxx.apkxxx.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文件加下生成resourcessources两个文件夹)
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脚本文件代码:


  
  1. @echo off
  2. if "%PATH_BASE%" == " " set PATH_BASE=%PATH%
  3. set PATH=%CD%;%PATH_BASE%;
  4. java -jar -Duser.language=en "%~dp 0\apktool.jar " %1 %2 %3 %4 %5 %6 %7 %8 %9

cmd指令:


  
  1. apktool.bat d xxx.apk
  2. 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

⑥ 签名apktoolautosign

     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

[3] Android逆向工具 - jadx

[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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场