android 反编译方法、工具介绍
网上有很多的反编译文章,个人认为写的比较好的文章有 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 反编译方法、工具介绍相关推荐
- android 反编译 jadx,jadx gui下载 jadx(Android反编译gui工具) v0.6.1 官方版 下载-脚本之家...
jadx是一款Android反编译gui工具,它支持apk.dex.jar.class.zip.aar等文件.jadx操作方便,反编译后的代码可读性高,同时还拥有较完善的gui界面,除去混淆部分的代码 ...
- Android逆向反编译之工具介绍
傻瓜式操作图形化工具 Smali2JavaUI smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的 ...
- Android反编译方法
Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构, ...
- Android反编译分析工具
通常我们会看到好的APP,都想知道内部结构是如设计的,希望能借鉴一些好的设计和功能,因此需要找到可以通过反编译的方式去查看一些想看的APP META-INF: 存放签名文件签名信息的目录,用于系统签名 ...
- android 反编译apktool工具
下载地址:http://pan.baidu.com/s/1bnHANtd 1.将编译的*.apk放在apktool的根目录下: 2.双击"解压软件.bat"后,会提示完成:这样就反 ...
- Android反编译工具使用方法
Android反编译工具使用方法 前言 apktool使用方法 dex2jar使用方法 jd-gui使用方法 前言 Android的反编译主要分为两个部分,一个是对资源的反编译(使用apktool), ...
- 【Android 安全】DEX 加密 ( 常用 Android 反编译工具 | apktool | dex2jar | enjarify | jd-gui | jadx )
文章目录 一.apktool 1.apktool 简介 2.直接解压 3.使用 apktool 反编译 4.使用 apktool 重新打包 二.dex2jar 1.dex2jar 简介 2.dex2j ...
- android+包+反编译,简单的Android之apk包反编译方法
网上相关的文章一大堆了,我只是总结下自己的反编译方法和工具 工具下载地址: 下载上面的三个工具的压缩包 Apktool_v1.5.1_CHS_By_b-sf.rar dex2jar.zip jd-gu ...
- Android反编译工具与反编译步骤及常见问题
Android代码混淆很大程度上就是为了别人反编译我们的代码,用反编译工具也可以测试我们的代码是否混淆成功. "工欲善其事,必先利其器",先介绍一下反编译的工具: apktool. ...
最新文章
- Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
- 全职奶爸的一年深度学习之路:从零基础到成为研究科学家
- Webcast 系列课程 NET最全,最权威的学习资源
- Android学习笔记--动画特效
- 《数据安全法》今日实施,中国信通院联合百度等企业发起“数据安全推进计划”
- 第1章 统计学习方法概论
- css原生样式支持,原生JS读写CSS样式的方法
- Apache - Storm
- comparator接口_8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理
- 322. 零钱兑换(JavaScript)
- 华为实习日记——第三十七天
- http访问请求慢的解决思路
- Linux系统启动需要多长时间,Linux系统启动时间的极限优化是怎样进行的?
- 判断浏览器是否最小化
- 如何写出一份好的解决方案
- 火车票能不能选座_终于,买火车票也能选座了!
- 2019年终总结,一朝看尽长安花
- java months between,ORACLE函数MONTHS_BETWEEN
- OLED显示屏驱动程序
- 服务器系统没网灯在闪,电脑没网交换机灯全部一闪一闪的解决方法