反编译APK,修改它然后重新编译它

dar*_*eir 63 java android decompiling recompile

我需要修改现有的APK,修改源代码然后重新编译它.

  • 我可以使用dex2jar或apktool对它进行反编译,它工作得很好
  • 从jar文件中我可以获得java源码(使用jd-gui)
  • 然后我可以修改java文件

但是现在我想知道如何重新编译java文件并将它们放回到jar文件中!(jar部分应该很简单,主要问题似乎是如何为android重新编译java文件)

我知道另一种解决方案是使用apktool然后修改smali文件,但是当我们想要添加大量代码时,它似乎真的很复杂!

我的应用程序是一个基本的HelloWorld whitout混淆.

dar*_*eir 41

感谢Chris Jester-Young,我设法让它成功!

我认为我设法做到的方式只适用于非常简单的项目:

  • 用Dex2jar我获得了Jar.
  • 使用jd-gui我将我的Jar转换回Java文件.
  • 使用apktool我得到了android清单和ressources文件

  • 在Eclipse中,我使用与旧项目相同的设置创建一个新项目(检查清单文件中的所有信息)

  • 创建项目时,我将所有的资源和清单替换为我使用apktool获得的资源
  • 我将我从jar中提取的java文件粘贴到src中(尊重包)
  • 我用我需要的东西修改这些文件
  • 一切都在编译!

/!\一定要从设备中删除旧的apk,会抛出错误,说明apk签名与旧签名不一样!

  • 这不适用于复杂的应用程序(Dex2jar并不完美 - 也有一些开发人员设法通过使用proguard或siilar技术来锁定他们的应用程序).但对某些人来说,这可能有用 (5认同)
  • 我设法在一个非常庞大的应用程序上使用这种方式,我认为它也适用于一些复杂的应用程序 (3认同)

edw*_*win 33

我知道这个问题仍然得到了解答,我想传递一个信息,如何从没有dexjar的apk获取源代码.

Android apks一个在线反编译器

  1. 从本地机器上传apk
  2. 等一会儿
  3. 以zip格式下载源代码

我不知道这有多可靠.

@darkheir答案是做反编译apk的手动方式.它帮助我们理解Apk创建中的不同阶段.

获得源代码后,请按照接受的答案中提到的步骤操作

另一个在线Apk De-compiler @Andrew Rukin:http://www.javadecompilers.com/apk

仍然值得.向创作者致敬.

  • `但是现在我想知道如何重新编译java文件并将它们放回到jar文件中!`核心问题是对的吗?这不是回答它. (18认同)

Bev*_*vor 12

答案已经过时或不完整。这可能适用于不受保护的 apk(没有 Proguard),但现在没有人部署不受保护的 apk。我能够修改(我的)受到良好保护的 apk 的方式(Proguard,检查“黑客工具”的安全检查,检查应用程序是否使用调试模式重新打包的安全检查,...)是通过 apktool 作为其他人已经在这里提到过。但是没有人解释说,您必须再次签署该应用程序。

apktool d app.apk
//generates a folder with smali bytecode files. 

//Do something with it.

apktool b [folder name] -o modified.apk
//generates the modified apk.

//and then
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore modified.apk androiddebugkey
//signs the app the the debug key (the password is android)

//this apk can be installed on a device.
Run Code Online (Sandbox Code Playgroud)

在我的测试中,原始版本的 apk 没有日志记录。在我用 apktool 反编译后,我交换了一个完整的字节码文件,而没有通过带有日志记录的完整字节码文件进行记录,重新编译并对其进行签名,然后我就可以将它安装在我的设备上。之后,当我将应用程序连接到它时,我能够在 Android Studio 中看到日志。

在我看来,使用dex2jar和反编译JD-GUI仅有助于更好地理解类正在做什么,仅用于阅读目的。但是由于一切都经过了保护,我不确定您是否可以将这个半生不熟的 Java 代码重新编译为可用的 apk。如果是这样,请告诉我。我认为,唯一的方法是操作本示例中提到的字节码本身。

  • 很好的解决方案,但现在 jarsigner 不支持较新的 Android 签名方案。使用 https://github.com/patrickfav/uber-apk-signer 比 jarsigner 更好。 (2认同)

小智 9

  1. 首先从以下链接http://code.google.com/p/dex2jar/downloads/list下载dex2jar工具

  2. 解压缩它创建的dex2jar文件夹

  3. 现在你选择你的apk文件,并在更改扩展名后将其扩展名.apk更改为.zip它似乎是zip文件然后提取此zip文件找到classes.dex文件

  4. 现在选择classes.dex文件并将其放入dex2jar文件夹

  5. 现在打开cmd窗口并键入dex2jar文件夹的路径

  6. 现在输入命令dex2jar.bat classes.dex并按Enter键

  7. 现在打开dex2jar找到classes_dex2jar.jar文件的文件夹

  8. 接下来,从以下链接http://java.decompiler.free.fr/?q=jdgui下载java反编译工具

  9. 最后一步classes_dex2jar.jar在java反编译工具中打开文件,现在可以看到apk代码

  • 9,最后一步,在java反编译工具中打开classes_dex2jar.jar文件,现在可以看到apk代码,修改类文件后,如何从此处反向创建apk文件 (3认同)
  • @DarioDias 我认为可以 (2认同)
  • @loveisbug DarioDias询问如何,而不是是否可能 (2认同)

MBH*_*MBH 5

我知道这个问题已经得到解答,我不想在这里给出更好的答案。我只会分享我在这个主题上的经验。

一旦我丢失了我的代码并且我只有这个apk文件。我使用下面的工具对它进行了反编译,这让我很开心。

在这种情况下必须使用这些工具,否则是不道德的,甚至有时是非法的(窃取别人的努力)。所以请明智地使用它。

这些是我最喜欢的工具:

javadecompilers.com

要从 google play 获取 apk,您可以在 google 上搜索或查看这些网站:

在发布此答案之日,我测试了所有链接,它对我来说非常有用。

注意: Apk 反编译在代码保护的情况下无效。因为Proguard 会缩小和混淆代码并将类重命名为无意义的名称,这使得理解代码变得相当困难。

奖金:

使用 Proguard 的基本教程