超详细!apk安装包快速反编译,多种反编译及失败的解决方案(包含classes.dex的反编译,新增加快速反编译)

article/2025/9/11 20:52:56

 

如要转载,请贴出原地址:https://blog.csdn.net/Nobody_else_/article/details/83996441

 

众所周知,我们开发所用的手机App安装包都是apk文件,Android应用开发完成之后,我们最终都会将应用打包成一个apk文件供用户安装,这时候就很难再看到开发这个应用时使用的资源文件以及代码了,所以就有了反编译这个东西。通过一些工具,还是可以将apk文件进行反编译的,反编译之后,我们就可以看到开发这个应用使用的资源文件(图片)、layout、样式、相关的实现代码等等。

注意:这里分享的反编译方法,不是鼓励大家去搞抄袭 搞破解 搞破坏,主要目的是为了促进开发者学习的,借鉴别人,提升自我

 

 

更新:快速反编译方法

目前反编译已经不需要像以前那么麻烦了,可以直接下载jadx GUI后打开,将需要反编译的apk安装包直接拖进去,即可自动完成(为工具开发者点赞,实在太是方便!)

下载 jadx GUI

这里我把工具打包好放在云盘了(如果资源挂了,可以评论区艾特我)

链接:https://pan.baidu.com/s/1vlVIfyZJ0g6QGJQUTzsJAA 
提取码:pvni

如果不想用百度云的话,就稍微花一点点积分在CSDN下载吧↓↓↓

工具包下载地址:https://download.csdn.net/download/Nobody_else_/12720408

 

下载完毕后,解压得到.exe运行文件,点击运行(有可能会失败,解决方法后面介绍),然后将要反编译的apk文件拖进去,就会得到反编译后的代码,如图

 

 

期间有可能遇到GUI打不开的情况,并报错:

最近在使用反编译时出现以下问题,特意更新一下博客

关于这个问题,网上很多帖子都说是注册表的问题,答案都千篇一律,解决方法介绍非常含糊不清,但是其中有一种能强制打开GUI的方法,下面进行介绍。

1.先将GUI的exe运行文件放到桌面

2.按住Shift,右键桌面空白处,选择在此处打开命令窗口

2.会出现以下窗口,输入java -jar jadx然后按Tab键补全,按Enter回车键,即可打开GUI

 

原博客地址,感谢Code for Coffee的分享:

https://blog.csdn.net/qq_24118527/article/details/88353808

 

 

传统反编译方法

一、工具下载

工欲善其事,必先利其器,得先下载好以下三个工具(提供官网、度盘、C站下载地址):

  1. apktool (获取文件,以提取出图片文件和布局文件进行使用查看) 
  2. dex2jar(获取源码,可以将classes.dex转化成classes_dex2jar.jar文件
  3. jd-gui  (查看源码,查看classes_dex2jar.jar文件内的源码

 

1.apktool下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads

 

 

1.1然后选择最新版本,点击下载

 

 

1.2点击保存,开始下载

 

 

注:建议使用IE浏览器打开这个链接,因为作者在使用其他非自带浏览器时出现下载链接消失的情况(如下图),所以为了避免不必要的麻烦,直接用IE浏览器下载就好

 

 

 

1.3下载完成后会得到一个.jar文件

 

 

 

2.dex2jar下载地址:http://sourceforge.net/projects/dex2jar/files/

 

2.1点击下载最新版的

 

 

2.2这里会有一个读秒动作,耐心等待地秒完成即可自动下载

 

 

2.3下载完成后,会得到如图的压缩包:

 

 

 

3.jd-gui下载地址:http://jd.benow.ca/

 

 

3.1找到JD-GUI一栏

 

 

3.2选择要下载的的系统版本,我这里选择的事Windows版

 

 

3.3下载完成后,会得到另一个压缩包:

 

 

-----------------------------------------------这样我们所需要的工具就下载完成了-----------------------------------------------

 

 

有的开发者也许会遇到网页无法打开的情况,可以直接下载我整理好的工具包(如果资源挂了,可以评论区艾特我):

链接:https://pan.baidu.com/s/10c3ljZs1W75EUAknfcXrsQ 
提取码:js9q 

如果不想用百度云的话,就稍微花一点点积分在CSDN下载吧↓↓↓

CSDN工具包下载地址:https://download.csdn.net/download/nobody_else_/11583041

 

 

二、Apk反编译流程

首先,为了方便操作,把之前下载的三个工具放在同一个文件里(位置自定,尽量放方便的地方):

下面是我放的位置

 

 

1.然后把dex2jar-2.0.zipjd-gui-windows-1.4.0.zip解压到当前文件夹

 

 

2.然后将你要反编译的安装包.apk文件复制到该目录下,准备好反编译:

 

 

2.1开始反编译

 

1.点击左下角 开始菜单,进入CMD命令行(直接按 Windows键 + R 后输入cmd):

 

 

 

2.进入到以上三个工具所在的文件位置:

 

 

3.输入“cd ”+文件位置(cd后面要有空格),然后按回车Enter:

 

 

4.然后继续输入工具所在的磁盘符号+“:”,我这里是G盘,所以输入“g:”,就会进入到工具所在的位置

 

 

接下来就是反编译的重要步骤了,运行apktool_2.3.4.jar工具,在电脑安装了java并且配置好jdk环境后(开发人员一般具备,非开发人员可以百度“jdk环境变量配置”自行操作),运行可执行jar包的命令如下:

java -jar jar包名.jar

 

而根据我电脑的工具文件位置和.apk文件的位置,可以接着“>”符号后面输入:

java -jar apktool_2.3.4.jar d -f G:\安装包\APK反编译\物流助手2.0.apk -o OK

 

意思是通过Java使用jar apktool_2.3.4.jar这个工具对G:\安装包\APK反编译\物流助手2.0.apk文件进行反编译,反编译得到的源码文件放在OK这个文件内

 

 

5.按回车Enter执行,等待完成(如图为完成状态)

 

 

6.回到文件夹,会看到工具包同级文件内生成了OK文件夹:

 

 

7.打开这个文件夹,就可以看到里面反编译得到的文件:

 

通过这种方法,如果能成功反编译,就可以直接跳到本文章后面,按照阅读源码部分来进行操作了。

经过一番努力,终于到了可以饱读代码的时刻了!

 

 

这样是否就已经完事了呢?然而并没有。。。这篇博客的标题清楚地说到了多种方法,另外的方法呢?不用着急接下来继续介绍。第二种方法主要针对上面无法成功反编译的情况:

 

使用上面的方法反编译,cmd小黑框显示:Input file (XXX) was not found or was not readable.

注:<XXX>是文件的名称

 

如果多次检查自己操作没有错的时候,可以修改apk文件的名字再试一次,如果还是不行的话就说明这个apk文件无法用上面的方法反编译了。那这时候怎么办呢?这就要用到下面介绍的classes.dex反编译方法了↓↓↓

 

 

classes.dex的反编译

 

一、下载新的工具dex2jar(这里dex2jar与上面已经下载的不一样,需要重新下载

这里我把工具打包好放在云盘了(如果资源挂了,可以评论区艾特我)

链接:https://pan.baidu.com/s/17uIKAssf_9kljzKyZOEQeQ 
提取码:fu7h 

 

如果不想用百度云的话,就稍微花一点点积分在CSDN下载吧↓↓↓

工具包下载地址:https://download.csdn.net/download/nobody_else_/11583031

 

把下载好的工具包,解压开,发现有两个文件夹:dex2jar(和之前的不一样)和jd-gui(和之前的一样)

 

 

二、处理apk文件

这里依旧是以Fly.apk文件为例子演示:

1.将要反编译的apk文件后缀改成.zip(原来是.apk):

注:如果电脑不显示文件后缀,或者无法怎么修改后缀名的可以自行百度关键词:修改文件后缀名

 

 

2.弹出确认弹框,点击是

 

 

3.将刚改名得到的zip文件解压,找到里面的classes.dex文件并复制

 

 

4.打开文件夹,复制classes.dex文件

 

 

 

5.然后将其复制到新下载的工具所解压出来的dex2jar文件夹内

 

 

6.放到dex2jar.bat所在目录

 

 

-----------------------------------------------------------以上都准备好就可开始反编译了-----------------------------------------

 

 

三、开始反编译

 

1.点击左下角 开始菜单,进入CMD命令行(直接按 Windows键 + R 后输入cmd):

步骤和前面相同,这里就不啰嗦了,通过指令直接进入到dex2jar内:

 

 

2.输入命令dex2jar.bat    classes.dex,按回车Enter开始反编译

 

 

3.开始反编译

 

4.编译完成后,如下图:

 

5.这时候,dex2jar文件夹内会生成一个classes_dex2jar.jar文件,这就是我们费尽心思才弄出来的源码文件

 

 

--------------------------------------------------那么接下来就是查看源码了------------------------------------------------

 

 

查看反编译所得的源码

 

1.打开下载的另一个工具包jd-gui

 

 

2.运行JD-GUI(jd-gui.exe),这里查看源码的软件

 

 

3.依次点击左上角File -> Open File,在弹出的文件窗口找到并打开上面生成的jar包,即可看到源代码了:

 

 

 

4.如这里所示,这就是我们历尽千辛万苦得到的源码了!

 

------------------------------现在,尽情地学习所得到的代码了!!!----------------------

 

 

 

另外,在使用CMD反编译时,可能会遇到一些意料之外的问题(这里也稍加整理一下):

1.Input file  was not found or was not readable.

2.Destination directory (C:\Users\user\...) already exists. Use -f switch if you want to overwrite it.

3.Exception in thread "main" brut.androlib.AndrolibException: Could not decode ars c fil..........

 

解决方案:

1和2是因为apktool升级到2.0以上时,使用方式已经替换,格式为:apktool d [-s] -f <apkPath> -o <folderPath>,参数具体的意思可以直接打apktool回车(windows)查看帮助

3是因为apktool版本过低导致,请升级到最新版本,地址:https://bitbucket.org/iBotPeaches/apktool/downloads

 

如果觉得有帮助或者喜欢的话希望能点个赞和收藏,花了一晚上写这篇博客,希望能帮到进击路上奋斗的各位,如有不足还望指正,哎呀累死了,终于可以下班了 (~ ̄▽ ̄)~ 

 

共勉!


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

相关文章

反编译与反汇编

反编译做的就是编译的相反动作。举例来说&#xff0c;例如一个程序用C语言来写&#xff0c;写完之后要编译成CPU可以识别和运行的机器代码&#xff0c;也就是生成EXE程序。而反编译是反过来&#xff0c;把EXE反编译成编程源代码&#xff0c;也就是C程序&#xff0c;不过一般反编…

VS的反编译

痛点: ● 在使用系统库或者第三方库遇到问题&#xff0c;感觉自己写的没问题&#xff0c;怀疑源码有BUG&#xff0c;非要钻牛角尖 ● 求知欲旺盛&#xff0c;很想知道别人的代码怎么实现的 ● 反编译工具安装难&#xff0c;源码定位难&#xff08;主要是懒&#xff09; 其实宇…

Android如何防止apk程序被反编译

作为Android应用开发者&#xff0c;不得不面对一个尴尬的局面&#xff0c;就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。 Google似乎也发现了这个问题&#xff0c;从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹 proguard是…

反编译基础知识

!!! 严正声明 本文相关反编译技术仅限于技术研究使用,不能用于非法目的,否则后果自负. 1. apktool 逆向APK文件的工具 官方网站 apktool主要用于逆向apk文件,可以将资源解码,并在修改之后可以重新构建它们.它还可以用来重新构建apk. 1.1 功能 将资源解码成近乎原始的形式…

Android安全攻防战,反编译与混淆技术完全解析(上)

转载请注明出处&#xff1a;http://blog.csdn.net/guolin_blog/article/details/49738023 之前一直有犹豫过要不要写这篇文章&#xff0c;毕竟去反编译人家的程序并不是什么值得骄傲的事情。不过单纯从技术角度上来讲&#xff0c;掌握反编译功能确实是一项非常有用的技能&…

通知(Notifications)

通知(Notifications) 如需转载&#xff0c;请注明地址http://blog.csdn.net/carrey1989/article/details/9027585 我们可以通过notification来在应用UI之外的地方来向用户展示信息。当你告诉系统来发布一个notification的时候&#xff0c;系统会首先在notification area里展示一…

解读Notification

综述 status bar notification添加一个图标(和一条可选的ticker-text消息)到系统的status bar(状态条)&#xff0c;并且显示一个notification message(通知消息)在系统的notifications window(消息窗口)中。当用户选择了消息窗口中的一条消息&#xff0c;Android系统就发出一个…

Android-自定义Notification

Android-自定义Notification 2014年4月26日 消息栏的消息&#xff0c;想必各位Android发烧友很清楚知道是什么&#xff0c;比如我们下载了一个应用&#xff0c;它可能会定时推送些消息到我们的手机中&#xff0c;比如微信消息送达的时候&#xff0c;可能会在通知栏显示。本博文…

notification新旧用法 notification builder

api 11 版本之前&#xff1a; //显示通知信息protected void showNotification() {NotificationManager notificationManager (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // Notification notification new Notification(this,R.drawable.ic_launche…

Android Notification 详解

下图是我对 Notification 做的思维导图&#xff0c;也是本文的主要逻辑。&#xfffc; 本文主要讲述 Notification 的基本操作部分&#xff0c;进阶部分的内容还在学习ing~ Notification 概述 Notification&#xff0c;是一种具有全局效果的通知&#xff0c;可以在系统的通知栏…

Android Notification

日记月累第四天。发现做事情坚持真的很重要&#xff0c;其实我今天都有点凌乱了&#xff0c;不想记录了&#xff0c;在坚持一下吧&#xff0c;毕竟才第四天。今天对昨天同事所说的Notification进行了一下温故今天主要是拿来主意&#xff0c;明天代码实践。今天公司又有同事分享…

HTML5 桌面通知:Notification API

Notification API 是 HTML5 新增的桌面通知 API&#xff0c;用于向用户显示通知信息。该通知是脱离浏览器的&#xff0c;即使用户没有停留在当前标签页&#xff0c;甚至最小化了浏览器&#xff0c;该通知信息也一样会置顶显示出来。 用户权限 想要向用户显示通知消息&#xf…

Android自定义Notification

Notification是一种让你的应用程序在不使用Activity的情况下警示用户&#xff0c;Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径。 作为UI部分&#xff0c;Notification对移动设备来说是最适合不过的了。用户可能随时都带着手机在身边。一般来说&…

Notification-通知

Notification-通知 通知是一种消息&#xff0c;这种消息呈现在应用UI之外&#xff0c;通过通知可以对用户进行提醒、可以和其他用户收发信息等。通过点击通知&#xff0c;可以唤起app页面或者直接在通知上执行一些操作。下面介绍通知的一些常用用法。 展示一条普通通知 先来…

全面解析Notification

Notification在Android中使用的频率可以说是非常高的,本篇博客,我将围绕着Notification的各方面进行解析,使大家对Notification有更好的认识。 Notification的使用步骤 1.获取NotificationManager NotificationManager mNotificationManager = (NotificationManager) get…

Android Notification使用

Android 通知栏适配 前言正文一、Android中通知的变化1. Android 4.1&#xff0c;API 162. Android 4.4&#xff0c;API 19 和 203. Android 5.0&#xff0c;API 214. Android 7.0&#xff0c;API 245. Android 8.0&#xff0c;API 266. Android 12.0&#xff0c;API 31 二、创…

Android之Notification的多种用法

我们在用手机的时候&#xff0c;如果来了短信&#xff0c;而我们没有点击查看的话&#xff0c;是不是在手机的最上边的状态栏里有一个短信的小图标提示啊&#xff1f;你是不是也想实现这种功能呢&#xff1f;今天的Notification就是解决这个问题的。 我们也知道Android系统也是…

Android--通知之Notification

前言 之前一篇博客讲了Android下使用Toast的方式提示消息。这篇博客讲解一下在Android中使用Notification提示消息给用户&#xff0c;Notification是一种具有全局效果的通知&#xff0c;程序一般通过NotificationManager服务来发送Notification。在本篇博客中&#xff0c;将介绍…

Android通知Notification使用全解析,看这篇就够了

1、效果 2、简介 通知是 Android 在您的应用 UI 之外显示的消息&#xff0c;用于向用户提供提醒、来自其他人的通信或来自您的应用的其他及时信息。用户可以点击通知打开您的应用或直接从通知中执行操作。 2.1、展示 通知以不同的位置和格式向用户显示&#xff0c;例如状态栏…

php cacti,cacti搭建遇到的那些事

最近闲的无聊&#xff0c;亲手操刀了一把整个生产环境cacti的搭建&#xff0c;时间消耗了3-4天&#xff0c;这里主要感谢网友老李、不想扮演逃兵、jiam的指导和帮助。下面就说说我搭建这个遇到的一些棘手的问题吧&#xff01; 搭建完成的界面如下图&#xff1a; 系统环境&#…