从已编译的 apk 中恢复丢失的代码

Posted

技术标签:

【中文标题】从已编译的 apk 中恢复丢失的代码【英文标题】:Recover lost code from compiled apk 【发布时间】:2012-01-06 00:26:39 【问题描述】:

我有一个问题......这让我非常紧张。

我正在开发这款游戏,它进展顺利,所以我在笔记本电脑上复制了一份,以便在远离计算机的情况下做一些工作。

长话短说,硬盘故障 + 糟糕的备份导致我失去了一门非常重要的课程。

有没有办法反编译apk来找回丢失的代码?它并不过分复杂或复杂,只是如果不阅读所有内容就不可能重写它。单身的。线。的。代码。在整个应用程序中,因为它初始化了很多类并以特定的方式加载了一堆东西。

通过快速的谷歌搜索,我找到了 apktool,它将它反编译成一堆 .smali 文件,我认为这些文件不是为人类阅读而设计的。

我需要恢复的是课堂上的一个非常大的方法。我找到了包含它的 smali 文件,我想我找到了它开始的那一行。像

.method public 声明-同步加载(Lcom/X/X/game/X;)I

任何人的帮助都将不胜感激,因为如果没有这种方法,我将不得不废弃整个游戏。

【问题讨论】:

这就是您使用源代码控制的原因(显然是在场外)。 【参考方案1】:

快速 google 发现了一种反编译 apk 的方法 (decompile apk to java source)。但是,即使它生成 java 代码,您也可能不会有任何变量名称(只是默认变量名称,如 param1),因为当您将源代码编译为字节代码时,这些变量名称将不可恢复地删除,这也取决于反编译器, for/foreach 循环将改为 while 循环,由于编译器优化,if/else 块可能不代表您的原始控制流。

作为一般建议:使用某种源代码控制。在你自己的服务器上,用 github 的付费帐户无所谓,但使用源代码控制。即使您只是一个开发项目的人。它有助于解决这种情况,有助于恢复到以前的版本,有助于找到您引入的错误。当工具可用时,使用它们。

【讨论】:

以上是关于从已编译的 apk 中恢复丢失的代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在不更改代码的情况下从已编译的 jar 中检索完整的异常消息?

如何对使用 ProGuard 混淆的 Android APK 进行逆向工程/反编译?

从已编译的应用程序生成单个 exe 文件

如何从已编译的 Electron 应用程序中获取源文件?

如何反编译 Android Studio 生成的 Apk 文件

APK中java代码反编译