apktool,dex2jar,jd-gui简单使用与实战

article/2025/9/9 19:30:24

前言

最近项目里要实现一个TimePicker,类似于这样的

我一看,瞬间想起了手机上的某APP,他上面就刚好有类似的效果

本来项目时间就有点赶,自己慢慢写这个控件时间上也有点来不及了,而且他又那么的像,于是,嘿嘿嘿…

正文

下载安装apktool,dex2jar以及jd-gui

这三个软件都是免费的,下载地址Google一下也能轻易的搜到,这里还是简单都是汇一下总。

apktool下载地址
dex2jar下载地址
jd-gui下载地址

dex2jar在sourceforge上面,建议代理开全局访问。

OK,下载好了之后就开始安装。
首先是apktool。运行apktool是需要Java环境的,不过我相信需要用到这个软件的人电脑里肯定是有JDK的,这个就不赘叙了。

  1. 在下载apktool压缩包的同一个文件夹里新建一个文本文件,写入
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

并将这个文件命名为apktool.bat。
2. 将刚刚下载的apktool的压缩包更名为apktool.jar(刚下载的时候名字里应该有版本号,干掉他)。
3. 成功。

dex2jar和jd-gui都是绿色版的,不需要安装,下载之后直接解压就好了。

使用apktool得到Android apk的资源文件

一般来说拿到一个apk文件之后想要得到自己想要的部分的代码一个很重要的突破口就是图片和xml文件,尤其是在你想要得到的部分是一个自定义控件的时候。因为图片和xml文件的名字是不会被混淆的,如果编写这个程序的人秉承了良好的代码规范的话,你就可以很容易的猜出你想要的界面使用的那些图片的名字,甚至猜出那个界面或者控件的xml文件的名字,继而找到控件的包名——幸运的是,包名也是不会被混淆的。继而就可以找到相应的Java文件——这是像我这样的小偷的幸运也是像我这样的开发者的悲哀。

ok,接下来该怎么用apktool得到apk的资源文件呢?我们知道,想要看到apk里面的图片是很简单的,直接用WinRAR之类的解压器直接打开apk文件就可以得到图片——也可以看到布局文件或者Manifest文件等,但是他们是被混淆过的,打开是一堆乱码。这个时候就要用到apktool了。

  1. 将想要反编译的apk文件,假设apk文件的名字是base.apk,放到apktool的文件夹下。
  2. 打开控制台,进入apktool所在的文件夹。
  3. 输入apktool d base.apk,敲回车。

然后等一会儿你就会发现在apktool所在的文件夹里面多了一个叫做base的文件夹,进去之后是这样的

这个时候res里面的xml文件就都是可读的了。可以看到,还有一些奇奇怪怪的文件夹,比如smali和unknown,其中smail是apk中的Java文件转换过去的,Android采用的是java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali。我们反编译得到的代码,jar的话可能很多地方无法正确的解释出来,如果我们反编译的是smali则可以正确的理解程序的意思。但是smali有自己的一套语法,而且比较的晦涩难懂,所以虽然他要比反编译出来的jar文件准确一些,但是在大多数情况下我还是更倾向于看反编译出的jar文件。

既然都已经得到了布局文件,那么现在就来找目标界面所在的xml。很显然我的目标名字里含有time或者picker这类的单词,我很快就找到了我的目标——一个叫做time_picker.xml的文件——也许原来的APP里面这个控件在多个地方都有出现,所以原作者把它单独抽取出来了。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:gravity="center"android:orientation="horizontal"><net.simonvt.calendarview.CalendarViewandroid:id="@id/calendar_view"android:layout_width="245.0dip"android:layout_height="280.0dip"android:layout_marginLeft="16.0dip"android:layout_marginRight="16.0dip"android:layout_weight="1.0"android:focusable="true"android:focusableInTouchMode="true"/><LinearLayoutandroid:id="@id/pickers"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:gravity="center"android:orientation="horizontal"><net.simonvt.numberpicker.NumberPickerandroid:id="@id/month"android:layout_width="48.0dip"android:layout_height="wrap_content"android:layout_marginLeft="6.0dip"android:layout_marginRight="6.0dip"android:focusable="true"android:focusableInTouchMode="true"/><net.simonvt.numberpicker.NumberPickerandroid:id="@id/day"android:layout_width="48.0dip"android:layout_height="wrap_content"android:layout_marginLeft="6.0dip"android:layout_marginRight="6.0dip"android:focusable="true"android:focusableInTouchMode="true"/><net.simonvt.numberpicker.NumberPickerandroid:id="@id/year"android:layout_width="42.0dip"android:layout_height="wrap_content"android:layout_marginLeft="6.0dip"android:layout_marginRight="6.0dip"android:focusable="true"android:focusableInTouchMode="true"/><net.simonvt.numberpicker.NumberPickerandroid:id="@id/hour"android:layout_width="48.0dip"android:layout_height="wrap_content"android:layout_marginLeft="16.0dip"android:layout_marginRight="5.0dip"android:focusable="true"android:focusableInTouchMode="true"/><TextViewandroid:id="@id/colon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=":"android:textColor="#ff000000"android:textSize="16.0sp"android:textStyle="bold"/><net.simonvt.numberpicker.NumberPickerandroid:id="@id/min"android:layout_width="48.0dip"android:layout_height="wrap_content"android:layout_marginLeft="5.0dip"android:layout_marginRight="10.0dip"android:focusable="true"android:focusableInTouchMode="true"/></LinearLayout>
</LinearLayout>

我们可以很清晰的看到,我最终希望的效果是五个NumberPicker拼凑出来的,而且我还知道了他的包名是net.simonvt.numberpicker,那么接下来几乎可以直接动手粗暴的获取apk反编译之后的jar文件了。

使用dex2jar获取jar文件

在用dex2jar的时候我还出了一点问题,试了好几次都不能成功的搞定,等我将正确的方式说了之后一会儿再分享坑爹的经历。

  1. 首先将目标apk文件的后缀改为.rar,比如base.apk改为base.rar,方便解压。
  2. 解压刚刚得到base.rar文件。可以看到解压出来的文件里面有一个的后缀名是.dex,名字一般来说是classes.dex,反正他是什么一会儿就输入什么。没错,dex2jar就是对他起作用的。
  3. 进入dex2jar的那一堆bat命令所在的文件夹,找到那个名字里面带有dex2jar.bat的bat命令,我的这个版本是这个

  4. 打开控制台,进入dex2jar所在的文件夹,注意,是那个有一大堆bat命令的地方,那才是终点。

  5. 输入命令 d2j-dex2jar.bat classes.dex的全路径(比如:E:\lypeer\classes.dex),敲回车。

然后稍等一会儿就可以看到在dex2jar的文件夹里多了一个jar包,像这样的

这是正确的流程。然而一开始我用dex2jar的时候踩到了好多的地雷:(。
有可能是dex2jar的版本不一样的原因,有好多地方都和网上搜到的教程不一样。比如我看到的教程他输入的命令是 dex2jar.bat %class.dex的地址%class.dex 简直坑啊…这命令一共就两部分,两部分都是错的。第一部分根本就没有那个命令,人家包里的命令是d2j-dex2jar.bat,第二部分明明是classes.dex他写成了class.dex……不过这有可能是由于版本的原因,大家要善于自己找这些命令的正确书写方式。

使用jd-gui查看得到的jar包

然后怎么看这个jar包呢?这个时候jd-gui就起作用了。
先前说过将下载来的jd-gui解压就好了,解压之后会有一个叫做jd-gui.exe的可执行文件,双击点开,然后根据目录打开刚刚得到的jar包或者直接将jar包拖进去,就可以看到反编译之后的结果了。

可以看到,jar包里面的文件是根据包结构排列的像这样

而我之前已经知道了我的目标的包名,所以很容易我就找到了我的目标

点进去就是目标代码了,当然具体的代码肯定是经过混淆的,比如参数都是aa,bb,cc啦,方法名都是a,b,c,d啦,都很常见,这个时候就取不得巧了,慢慢研读吧,读得多了掌握了一些技巧之后其实还是很快的。

后记

到最后,其实我发现我的目标是一个开源库:)


http://chatgpt.dhexx.cn/article/UwWe8eYB.shtml

相关文章

d2j-dex2jar之DexException :not support version

近期使用dex2jar反编译apk&#xff0c;遇到报错&#xff0c;这里记录下解决过程。 命令详细错误如下&#xff1a; ./d2j-dex2jar.sh ../classes.dex dex2jar ../classes.dex -> ./classes-dex2jar.jar com.googlecode.d2j.DexException: not support version.at com.googl…

用apktool和dex2jar反编译

一&#xff0c;利用apktool反编译 1&#xff0c;首先在 http://code.google.com/p/android-apktool/downloads/list 下载两个文件&#xff1a;apktool1.4.3.tar.bz2 和apktool-install-windows-r04-brut1.tar.bz2 2&#xff0c;解压第一个文件得到apktool1.4.3.jar 放到c:…

Android apk反编译之旅——(二)dex2jar-2.0和jd-gui1.4的使用

【上一篇】Android apk反编译之旅——&#xff08;一&#xff09;apktool下载、安装及使用已经讲了如何使用apktool2.3.1反编译工具&#xff0c;得到res和xml文件&#xff0c;现在介绍使用dex2jar-2.0和jd-gui1.4编译得到java源码的方法。 PS. dex2jar-2.0和jd-gui1.4是较新版…

Android dex2jar反编译dex文件报错 Detail Error Information in File .\classes-error.zip

日常反编译apk 后把里面的 classes.dex 文件放到 dex2jar 所在的文件夹中。然后在当前目录下在命令行中输入&#xff1a; d2j-dex2jar classes.dex 就会生成一个 classes.jar 包&#xff0c;此时会报如下错误&#xff1a; dex2jar classes.dex -> .\classes-dex2jar.jar De…

dex转jar , jar转dex , class转java

简单先解释下&#xff0c;一般java编写后的脚本文件是.java&#xff0c;.class是字节码文件&#xff0c;.dex是android平台可执行文件类型&#xff0c;一般java文件打包成jar包后里面的jar资源是.class&#xff0c;如果需要运行于android&#xff0c;那必须jar里面资源为.dex&a…

安卓逆向_2 --- Androidkiller,apktool、dex2jar、jd-gui、jadx反编译工具 的 安装、设置及使用教程...

From&#xff1a;https://www.52pojie.cn/thread-726176-1-1.html 爱盘 - 在线 PJ 工具包&#xff1a;https://down.52pojie.cn/ 哔哩哔哩 &#xff1a;https://www.bilibili.com/video/BV1UE411A7rW?p6 Android反编译工具的使用-Android Killer - 反编译美柚&#xff1a;http…

使用dex2jar反编译APK中的classes.dex

先说下写这篇博文的初衷。 为了应用的代码不直接被他人窥视&#xff0c;我们一般都会在代码的时候进行代码混淆&#xff0c;这样子可以将原来的包名、类名、参数名等给替换成无意义的字母。而我们怎么知道代码混淆起效果了呢&#xff0c;自己把应用的安装包反编译一下就可以了…

android 反编译之dex2jar

首先要下载工具&#xff1a;http://download.csdn.net/download/ysl_ali/10044728 第一步&#xff1a;下载该zip包&#xff0c;&#xff0c;解压密码&#xff1a;ysl12345 然后解压&#xff0c;得到dex2jar-2.0和jd-gui两个文件 第二步&#xff1a;然后在把你需要反编译的apk…

apktool、dex2jar、jd-gui的区别及详解

反编译相关&#xff1a; apktool 作用&#xff1a;资源文件的获取&#xff0c;可以提取出图片文件和布局文件进行查看 dex2jar 作用&#xff1a;将apk反编译成java源码&#xff08;classes.dex转化成jar文件&#xff09; jd-gui 作用&#xff1a;查看APK中的cl…

dex2jar 报错 com.googlecode.d2j.DexException: not support version

1. 前言 ​ 在日常开发中&#xff0c;有时候想做一点羞羞的事情(ps: 学习一下别人的代码)&#xff0c;但是一用dex2jar工具反编就报com.googlecode.d2j.DexException: not support version异常&#xff0c;在我高涨的学习热情上直接浇了一盆冷水。(后面有工具下载地址) 2. 反…

Ubuntu下dex2jar的安装和使用

1. 下载dex2jar 下载的地址 https://sourceforge.net/projects/dex2jar/ https://github.com/pxb1988/dex2jar 我用的是第一个地址. 2. 安装 之后解压缩 unzip dex2jar-2.0.zip得到了解包的文件夹,我一般会重新命名一下 改成 dex2jar 之后把这个文件夹的路径加到我们的 环…

dex文件的反编译-dex2jar和jd-gui

dex文件的反编译-dex2jar和jd-gui 前言&#xff1a;最近在搞android分包&#xff0c;想查看分包后dex里包含了哪些类&#xff0c;那就需要对dex文件进行反编译&#xff0c;所以写个对dex文件反编译工具使用的文章。 我们需要两个工具 dex2jar和 jd-gui&#xff0c;dex2jar将我…

Android .apk逆向工程(安装篇):如何正确使用dex2jar

将apk反编译成java源码&#xff08;classes.dex转化成jar文件&#xff09; 目录 dex2jar 简介 dex2jar 安装 下载 dex2jar 安装 dex2jar 解压 dex2jar dex2jar 使用 解压 apk 使用 dex2jar 运行 命令完成编译 为什么要用dex2jar&#xff1f; dex2jar顾名思义&#xf…

安卓反编译入门03-dex2jar反编译apk得到Java源代码

1.获取工具 dex2jar下载地址&#xff1a;http://sourceforge.net/projects/dex2jar/files/ 直接下载 下载完成后&#xff0c;解压得到文件夹dex2jar-2.0 jd-gui下载地址&#xff1a;http://jd.benow.ca/ 直接下载&#xff08;官网版本无法复制中文&#xff0c;可以用这个&…

爬虫----dex2jar工具的安装与使用

【原文链接】爬虫----dex2jar工具的安装与使用 &#xff08;1&#xff09;打开 [dex2jar下载地址(https://github.com/pxb1988/dex2jar) &#xff0c;直接点到release &#xff08;2&#xff09;下载最新版的稳定版的可执行文件 &#xff08;3&#xff09;下载完成后解压&…

dex2jar 使用方法

android反编译工具使用 java文件反编译及dex2jar 使用方法 Android学习笔记之反编译工具介绍及下载&#xff08;Class文件反编译&#xff0c;xml文件反编译整理&#xff09; 最近在网上查了一些Android文件反编译工具&#xff0c;供大家参考。 1.CLASS文件反编译工具&#xff1…

安卓逆向_2 --- Androidkiller,apktool、dex2jar、jd-gui、jadx、jeb、gda

From&#xff1a;https://www.52pojie.cn/thread-726176-1-1.html AndroidKiller 与 Android Studio 的使用 ( 反编译后通过 android studio 动态调试 smali )&#xff1a;https://blog.csdn.net/a_1054280044/article/details/60465267 Androidkiller 的简单使用&#xff1a;…

Android反编译apktool,dex2jar和jd-gui的使用和一键反编译查看apk

在实际应用中反编译有下面这几种用途&#xff1a; 1.测试应用的安全性。 这无疑是最重要的&#xff0c;不过难度很高需要专门做安全的人来做才有效果。 2.反编译别的的apk 可以获取别的资源文件。如果要破解代码&#xff0c;那难度就更高了。 3.混淆查看效果 还有一个就是混淆看…

dex2jar反编译工具2.1版本(下载,使用)

概述&#xff1a; dex2jar是一个反编译apk的工具&#xff0c;可以将dex文件转换成jar文件&#xff0c;去查看源代码&#xff08;混淆&#xff09;&#xff0c;反之也能将jar文件转换成dex文件 文章诞生原因&#xff1a; 之前使用的是dex2jar2.0版本&#xff0c;当apk的dex文件为…

dex2jar和jd-GUI的下载安装与使用

1、dex2jar 1&#xff09;dex2jar 描述&#xff1a; dex2jar 是 Android 中的一个反编译工具&#xff0c;它可以将 Android 程序安装包 Apk 文件中的 .dex 文件反编译成一个 .jar 文件&#xff0c;也可以将反编译后的 .jar 文件重新编译成 .dex 文件。 2&#xff09;下载地址…