反编译APK入门

综合技术 2017-11-15

Introduction

本文简单介绍了如果使用dex2jar和jd-gui来反编译apk,查看其源码。

1. 工具和环境

本文的环境为Debian 9 x86_64,使用的工具:

dex2jar 作用:将apk反编译成java源码(classes.dex转化成jar文件)

JD GUI 作用:查看APK中classes.dex转化成出的jar文件,即源码文件

2. apk分析

apk文件的本质是压缩文件,可直接用解压缩软件以zip的形式解压。

文件、文件夹 内容
assets文件夹 原始资源文件夹,对应着Android工程的assets文件夹,一般用于存放原始的图片、txt、css等资源文件。
lib 存放应用需要的引用第三方SDK的so库。比如一些底层实现的图片处理、音视频处理、数据加密的库等。而该文件夹下有时会多一个层级,这是根据不同CPU 型号而划分的,如 ARM,ARM-v7a,x86等。
META-INF 保存apk签名信息,保证apk的完整性和安全性。
res 资源文件夹,其中的资源文件包括了布局(layout),常量值(values),颜色值(colors),尺寸值(dimens),字符串(strings),自定义样式(styles)等。
AndroidManifest.xml文件 全局配置文件,里面包含了版本信息、activity、broadcasts等基本配置。不过这里的是二进制的xml文件,无法直接查看,需要反编译后才能查看。
classes.dex文件 这是安卓代码的核心部分,,dex是在Dalvik虚拟机上可以执行的文件。这里有classes.dex和classes2.dex两个文件,说明工程的方法数较多,进行了dex拆分。
resources.arsc文件 记录资源文件和资源id的映射关系。

3. 将dex文件转换成jar包

下载的dex工具包直接解压即可,处理上一步解压出来的 classes.dex 文件

./dex2jar-2.1-SNAPSHOT/d2j-dex2jar.sh  ./classes.dex

将生成一个 classes-dex2jar.jar 文件,用 java -jar jd-gui.jar classes-dex2jar.jar 打开jar包,即可看到反编译后的源码:

这里会看到大量的a.a,b.b等无意义命名,代码及其难懂。。不过好在jdgui可以点击类名进行跳转,一定程度上减少了工作量。

4. jd gui的使用

jdgui可用的功能比较简单,但都很实用。

search里可以对整个项目的代码进行搜索,但是他搜索的功能有限,最好搜索单词,不要搜索net.findhao等带标点符号的关键词,如要搜索带标点符号的关键词,先用jd导出源码,会生成源码文件夹,然后用vscode or sublime等打开文件夹进行搜索。

Reference

Android APK反编译就这么简单 详解(附图)

Android APK 反编译实践

FindSpace

责编内容by:FindSpace (源链)。感谢您的支持!

您可能感兴趣的

曾经的Java IDE王者Eclipse真的没落了?21 款插件让它强大起来!... 来源: CSDN博客 俗话说,好马配好鞍,才能展现千里马的实力。一名好的开发者,必定要有一套好的开发工具才能打造出最好的产品给用户。要论世界上最好用的 ...
android权限申请Permission 前言 Android权限申请之前写过,然后总结了下,但是后来忘记记录了,导致我再需要用的时候又得重来一次,很郁闷,这次就做个记录吧 本文参...
如何使用工具链搭建企业级CICD流水线 一、搭建企业级容器持续交付流水线 首先我们看看企业级的持续交付流水线应该长成什么样子。上图描述的是单团队持续交付模型,可以看到虚线的部分是&...
Java Pattern / Matcher – Returns mat... I'm an absolute Java beginner. I've searched on the forums, but couldn't find an...
Radio AdBlock Polish Radio Three (so-called Trójka) is famous for broadcasting good ...