反编译APK入门

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包,即可看到反编译后的源码:

img

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

4. jd gui的使用

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

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

Reference

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

Android APK 反编译实践

文章版权归 FindHao 所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明作者 FindHao 和本文原始地址:
https://www.findhao.net/easycoding/2182

你可能喜欢:(相似内容推荐和广告都使用了谷歌的推荐系统,需要对本站取消广告屏蔽才能显示。感谢点击↓广告支持博主~)

Find

新浪微博(FindSpace博客)QQ群:不安分的Coder(375670127) 不安分的Coder

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*