百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

记一次噩梦般的经历--论学会反编译的重要性

liuian 2025-02-13 13:06 24 浏览

最近在做一个android项目,因为非开源,github上也没购有私有库,所以就没有提交github管理。昨天我感觉写到了一定程度,一个小的版本已经出来了,于是就想U盘和网盘都备份一下。结果出现了下面的一幕.......

我点了两次重试,没用;再点跳过,然后什么都没有复制。我再看想要复制的文件夹,找不到了........

尼玛坑爹的微软……我让我复制也不要把原来的弄个丢啊......无奈之下我赶紧上网搜一下“一个意外错误使你无法复制该文件夹”,发现也有不少人遇到同样的问题,但都都没有解决办法。于是我又想试试能不能数据恢复,然后下载了好几个数据恢复软件,不仅扫描过程要很久,而且根本找不到刚刚莫名其妙丢失的文件。

要是丢失的是其他文件,可能到这也就结束了,但丢失的是android项目文件,而且我是用真机调试过的,于是我就想能不能获取手机的安装文件,再想办法恢复源文件。我之前接触过一点反编译,对于没有经过特殊处理的apk,反编译的效果还是非常好的。就算不好也要试一试了,反正已无其他办法.....

1.获取apk

要进行反编译,首先要获取目标文件。我一开始想的是如何获取已安装的dex文件,但在手机上安装文件被系统隐藏起来了,没root根本没办法查看。那,只能 root ? 我又上网搜了各种从已安装程序获取安装包的方法,发现有一个说android系统在安装完程序后,会保留一份apk的,可以通过adb连接手机,通过 pull 命令获取到。既然这样,那就试试吧。

* 首先将手机通过usb线连接到电脑

* 进入android sdk 安装目录:SDK\platform-tools\

* 按住shift键并右键鼠标,选择“在此处打开命令窗口(W)”

* 输入 adb pull data/app/你的apk包名-1.apk 输出目录\你的apk包名.apk

Android系统备份的apk会在apk包名的后面加上"-N",但N的具体数据一般是1,但我第一次输入的是 “-1”,结果没找到,第二次输入“-2”然后就找到了。第一次因为没有制定目录具体目录,不知道pull到哪了,我又重新试了一次。如图:

有了apk,接下来就好办了。

2.获取xml文件

一般经apk解压后获取的xml文件,打开是乱码的,但用Apktool 将没有经过特殊处理的apk反编译后得到的xml文件恢复程度非常高,只是属性的顺序、属性值的格式会稍微改变一下,比如match_parent 换成fill_parent等,且会增加了一些默认属性,稍微修改一下即可。

具体操作步骤:

* 下载Apktool 的jar包;

* 将Apktool 和要反编译的apk文件放在同一个目录下,以方便操作;

* 在上步目录下打开命令行窗口,输入:

java -jar Apktool的jar包名称 d 要反编译的apk名

回车;

3. 反编译获取java文件

* 下载dex2jar软件包;

* 将apk解压,获取classes.dex文件,并将该文件复制到dex2jar目录下(方便操作);

* 进入dex2jar软件包下打开命令行窗口,输入:

d2j-dex2jar.bat classes.dex

回车,如图:

按以上步骤操作后即可获得classes-dex2jar.jar文件,即我们的源文件的jar包;

* 下载jd-gui软件,打开该软件后直接将jar包拖进去即可看到我们的程序文件;

至此,反编译工作就全部完成了,终于可以松一口气。不过我这次反编译出的java文件出了点错误——反编译软件在每个类里面都自动添加了一些莫名其妙的代码,必须手动删除,还有一些程序资源的ID必须重新设置一下才好....

这次意外导致的问题终于解决了,但过程也极其痛苦,花费的时间也无法挽回。所以以后对于重要文件我们一定要及时备份、及时备份、备份(虽然备份时也可能出错,比如我这次,但备份越早损失越小)!!!不然真不知道什么时候机器或系统会突然恶心你一下......当然一些挽救技术也最好了解一下,关键时刻有可能就会成为我们的救命稻草。

相关推荐

教你把多个视频合并成一个视频的方法

一.情况介绍当你有一个m3u8文件和一个目录,目录中有连续的视频片段,这些片段可以连成一段完整的视频。m3u8文件打开后像这样:m3u8文件,可以理解为播放列表,里面是播放视频片段的顺序。视频片段像这...

零代码编程:用kimichat合并一个文件夹下的多个文件

一个文件夹里面有很多个srt字幕文件,如何借助kimichat来自动批量合并呢?在kimichat对话框中输入提示词:你是一个Python编程专家,完成如下的编程任务:这个文件夹:D:\downloa...

Java APT_java APT 生成代码

JavaAPT(AnnotationProcessingTool)是一种在Java编译阶段处理注解的工具。APT会在编译阶段扫描源代码中的注解,并根据这些注解生成代码、资源文件或其他输出,...

Unit Runtime:一键运行 AI 生成的代码,或许将成为你的复制 + 粘贴神器

在我们构建了UnitMesh架构之后,以及对应的demo之后,便着手于实现UnitMesh架构。于是,我们就继续开始UnitRuntime,以用于直接运行AI生成的代码。PS:...

挣脱臃肿的枷锁:为什么说Vert.x是Java开发者手中的一柄利剑?

如果你是一名Java开发者,那么你的职业生涯几乎无法避开Spring。它如同一位德高望重的老国王,统治着企业级应用开发的大片疆土。SpringBoot的约定大于配置、SpringCloud的微服务...

五年后,谷歌还在全力以赴发展 Kotlin

作者|FredericLardinois译者|Sambodhi策划|Tina自2017年谷歌I/O全球开发者大会上,谷歌首次宣布将Kotlin(JetBrains开发的Ja...

kotlin和java开发哪个好,优缺点对比

Kotlin和Java都是常见的编程语言,它们有各自的优缺点。Kotlin的优点:简洁:Kotlin程序相对于Java程序更简洁,可以减少代码量。安全:Kotlin在类型系统和空值安全...

移动端架构模式全景解析:从MVC到MVVM,如何选择最佳设计方案?

掌握不同架构模式的精髓,是构建可维护、可测试且高效移动应用的关键。在移动应用开发中,选择合适的软件架构模式对项目的可维护性、可测试性和团队协作效率至关重要。随着应用复杂度的增加,一个良好的架构能够帮助...

颜值非常高的XShell替代工具Termora,不一样的使用体验!

Termora是一款面向开发者和运维人员的跨平台SSH终端与文件管理工具,支持Windows、macOS及Linux系统,通过一体化界面简化远程服务器管理流程。其核心定位是解决多平台环境下远程连接、文...

预处理的底层原理和预处理编译运行异常的解决方案

若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好![Mac-10.7.1LionIntel-based]Q:预处理到底干了什么事情?A:预处理,顾名思义,预先做的处理。源代码中...

为“架构”再建个模:如何用代码描述软件架构?

在架构治理平台ArchGuard中,为了实现对架构的治理,我们需要代码+模型描述所要处理的内容和数据。所以,在ArchGuard中,我们有了代码的模型、依赖的模型、变更的模型等,剩下的两个...

深度解析:Google Gemma 3n —— 移动优先的轻量多模态大模型

2025年6月,Google正式发布了Gemma3n,这是一款能够在2GB内存环境下运行的轻量级多模态大模型。它延续了Gemma家族的开源基因,同时在架构设计上大幅优化,目标是让...

比分网开发技术栈与功能详解_比分网有哪些

一、核心功能模块一个基本的比分网通常包含以下模块:首页/总览实时比分看板:滚动展示所有正在进行的比赛,包含比分、比赛时间、红黄牌等关键信息。热门赛事/焦点战:突出显示重要的、关注度高的比赛。赛事导航...

设计模式之-生成器_一键生成设计

一、【概念定义】——“分步构建复杂对象,隐藏创建细节”生成器模式(BuilderPattern):一种“分步构建型”创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建...

构建第一个 Kotlin Android 应用_kotlin简介

第一步:安装AndroidStudio(推荐IDE)AndroidStudio是官方推荐的Android开发集成开发环境(IDE),内置对Kotlin的完整支持。1.下载And...