网上有很多的反编译文章,个人认为写的比较好的文章有  APK反编译得工具总结(转载) - hayhx - 博客园 。我也是参考其文章来的,本人写此文章目的、以及反编译运用场景 主要有以下几方面:

  • 记录反编译的方法,方便自己用的时候比较方便,起到记录的作用;
  • 运用场景:排查混淆问题,反编译apk,看类是否被混淆;
  • 运用场景:查看jar的代码,以及是否被打入apk中;
  • 运用场景:其他需要反编译的时候;
  • 运用场景:某个技术点想参考别的app,或者研究竞争对手的app等等;(注意:不要用于非法事情)

反编译步骤

工具准备

apktool —— 官方下载 ,其作用是拿到apk 中的dex文件;(可选工具,非必须)

dex2jar——  官方下载,见名知意,就是把dex转化为jar文件,这是最关键的一步;

gui ——  官方下载,这是一个图形化工具,查看jar里面的代码。(非必需,有其他可替代工具)

总结:大致就三步,第一:从apk文件中拿到dex文件;第二:把dex文件转化为jar包文件;第三:查看jar文件中代码;

一:从apk到dex文件

从apk到dex,可以利用jartool ,当然有替代方法:就是解压软件直接解压,这种方式最快,最省事,和jartool 没有区别。

上面两图介绍了解压软件解压apk后的解压产物,可以拿到dex文件。

通过jartool 方式

基本命令: java -jar apktool.jar  d  待解压的apk

// 注意`apktool.jar`是刚才下载后的jar的名称,`d`参数表示decode
// 在这个命令后面还可以添加像`-o -s`之类的参数,例如
// java -jar apktool.jar d yourApkFile.apk -o destiantionDir -s
// 几个主要的参数设置方法及其含义:
-f 如果目标文件夹已存在,强制删除现有文件夹
-o 指定反编译的目标文件夹的名称(默认会将文件输出到以Apk文件名命名的文件夹中)
-s 保留classes.dex文件(默认会将dex文件解码成smali文件)
-r 保留resources.arsc文件(默认会将resources.arsc解码成具体的资源文件)

示例:

apktool.jar 和 apk放在同一个目录下

最后,我们可以看到解压后文件为:

dos命令行截图中一共运行了两个jar命令,第二个命令是 解压app-debug.apk 文件到app-debug-1文件夹,并保持dex文件 。另外,现在app为了突破最大方法数量限制,用了多dex 方式,所以这里apk内部可能会有多个dex文件。

这里,后续还可以研究下,apk文件由什么组成,各部分代表什么。这里,参考一下其他的博主介绍

我们已经得到一个可以用文本编辑器打开的阅读的AndroidManifest.xml文件、assets文件夹、res文件夹、smali文件夹等等。original文件夹是原始的AndroidManifest.xml文件,res文件夹是反编译出来的所有资源,smali文件夹是反编译出来的代码。注意,smali文件夹下面,结构和我们的源代码的package一模一样,只不过换成了smali语言。它有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言。

这时,我们已经可以文本编辑器打开AndroidManifest.xml文件和res下面的layout文件了。这样,我们就可以查看到这个Apk文件的package包名、Activity组件、程序所需要的权限、xml布局、图标等等信息。其实我们把Apk上传到应用市场时,应用市场也会通过类似的方式解析我们的apk。

note1:其实还有一种方法,可以省去每次解包时,都要输入java -jar apktool.jar xxx这行命令,官网也有说明,就是将这个命令包装成shell脚本,方法见:Apktool - How to Install 。而这个shell的脚本在有些博客里介绍是 jartool.bat 文件,其实其作用就是上面的说的。

二、 从dex到jar

这一步是最重要的,需要dex2jar工具,

接下来,我们把第一步获取的dex文件放到 刚刚解压的文件中,然后运行命令:

Mac:sh d2j-dex2jar.sh classes.dex classes2.dex
Windows: d2j-dex2jar.bat classes.dex 

会得到jar 文件,见上面的截图中红色框框。

第三步:用gui 图形化工具查看代码

下载好工具后,双击exe文件,然后把jar文件拖入其中即可。

最后,我把这三个工具统一压缩上传一下,方便其他人吧(资源还在审核中...过了加上链接地址)。

其他想说的

还有其他的反编译工具,比如之前说的博客里也有介绍,试过一些,不太好用;还有一些python写的脚本之类的,没有试过,有兴趣的可以看看。另外,这种方式的反编译对混淆过的apk还是无能为力,因为没有解析过mapping文件,所以混淆过的反编译对于这种方式反编译不够完美。后续谁有比较好的方式针对混淆过的apk文件,欢迎指出,谢谢。

android 反编译方法、工具介绍相关推荐

  1. android 反编译 jadx,jadx gui下载 jadx(Android反编译gui工具) v0.6.1 官方版 下载-脚本之家...

    jadx是一款Android反编译gui工具,它支持apk.dex.jar.class.zip.aar等文件.jadx操作方便,反编译后的代码可读性高,同时还拥有较完善的gui界面,除去混淆部分的代码 ...

  2. Android逆向反编译之工具介绍

    傻瓜式操作图形化工具 Smali2JavaUI smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的 ...

  3. Android反编译方法

    Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构, ...

  4. Android反编译分析工具

    通常我们会看到好的APP,都想知道内部结构是如设计的,希望能借鉴一些好的设计和功能,因此需要找到可以通过反编译的方式去查看一些想看的APP META-INF: 存放签名文件签名信息的目录,用于系统签名 ...

  5. android 反编译apktool工具

    下载地址:http://pan.baidu.com/s/1bnHANtd 1.将编译的*.apk放在apktool的根目录下: 2.双击"解压软件.bat"后,会提示完成:这样就反 ...

  6. Android反编译工具使用方法

    Android反编译工具使用方法 前言 apktool使用方法 dex2jar使用方法 jd-gui使用方法 前言 Android的反编译主要分为两个部分,一个是对资源的反编译(使用apktool), ...

  7. 【Android 安全】DEX 加密 ( 常用 Android 反编译工具 | apktool | dex2jar | enjarify | jd-gui | jadx )

    文章目录 一.apktool 1.apktool 简介 2.直接解压 3.使用 apktool 反编译 4.使用 apktool 重新打包 二.dex2jar 1.dex2jar 简介 2.dex2j ...

  8. android+包+反编译,简单的Android之apk包反编译方法

    网上相关的文章一大堆了,我只是总结下自己的反编译方法和工具 工具下载地址: 下载上面的三个工具的压缩包 Apktool_v1.5.1_CHS_By_b-sf.rar dex2jar.zip jd-gu ...

  9. Android反编译工具与反编译步骤及常见问题

    Android代码混淆很大程度上就是为了别人反编译我们的代码,用反编译工具也可以测试我们的代码是否混淆成功. "工欲善其事,必先利其器",先介绍一下反编译的工具: apktool. ...

最新文章

  1. Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
  2. 全职奶爸的一年深度学习之路:从零基础到成为研究科学家
  3. Webcast 系列课程 NET最全,最权威的学习资源
  4. Android学习笔记--动画特效
  5. 《数据安全法》今日实施,中国信通院联合百度等企业发起“数据安全推进计划”
  6. 第1章 统计学习方法概论
  7. css原生样式支持,原生JS读写CSS样式的方法
  8. Apache - Storm
  9. comparator接口_8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理
  10. 322. 零钱兑换(JavaScript)
  11. 华为实习日记——第三十七天
  12. http访问请求慢的解决思路
  13. Linux系统启动需要多长时间,Linux系统启动时间的极限优化是怎样进行的?
  14. 判断浏览器是否最小化
  15. 如何写出一份好的解决方案
  16. 火车票能不能选座_终于,买火车票也能选座了!
  17. 2019年终总结,一朝看尽长安花
  18. java months between,ORACLE函数MONTHS_BETWEEN
  19. OLED显示屏驱动程序
  20. 服务器系统没网灯在闪,电脑没网交换机灯全部一闪一闪的解决方法

热门文章

  1. 引入MySQL驱动包进行JDBC编程
  2. uTools(工具集合)
  3. 基于Bert文本分类进行行业识别
  4. P2P网贷系统-核心功能-用户投标-业务讲解
  5. Android ActivityGroup简介
  6. Flink SqlServer CDC 连接器的使用
  7. Luedecke LPH-23
  8. fast角点与ShiTomas角点速度对比
  9. 怎么卸载现有Python?【全方位解决】
  10. Android的WiFi子系统架构