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

问题描述 投票:57回答:9

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

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

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

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

我的应用程序是一个基本的Hello World,没有混淆。

java android decompiling recompile
9个回答
37
投票

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

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

  • 用Dex2jar我获得了Jar。
  • 使用jd-gui我将我的Jar转换回Java文件。
  • 使用apktool我得到了android清单和ressources文件
  • 在Eclipse中,我使用与旧项目相同的设置创建一个新项目(检查清单文件中的所有信息)
  • 创建项目时,我将所有资源和清单替换为我使用apktool获取的资源和清单
  • 我将我从jar中提取的java文件粘贴到src中(尊重包)
  • 我用我需要的东西修改这些文件
  • 一切都在编译!

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


33
投票

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

an online decompiler for android apks

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

我不知道这有多可靠。

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

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

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

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


8
投票
  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. 最后一步在java反编译工具中打开文件classes_dex2jar.jar现在你可以看到apk代码

2
投票

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

一旦我丢失了我的代码,我只有apk文件。我使用下面的工具反编译它,它使我的一天。

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

这些是我最喜欢的工具:

javadecompilers.com

并从谷歌播放获取apk你可以谷歌或查看这些网站:

在发布此答案的日期,我测试了所有链接,它对我来说非常适合。

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

奖金:

Basic tutorial of Using Proguard


1
投票

dex2jar与jd-gui会给出所有的java源文件,但它们并不完全相同。它们几乎是等效的.class文件(不是100%)。因此,如果您想更改apk文件的代码:

  • 使用apktool反编译
  • apktool将为每个具有相同名称的java文件生成smali(汇编版本的dex)文件。
  • smali是人类可以理解的,在相关文件中进行更改,使用相同的apktool重新编译(apktool b Nw.apk <Folder Containing Modified Files>

-2
投票

这是一种方式:

  1. 使用apktool解码: $ apktool d -f {apkfile} -o {output folder}
  2. 接下来,使用JADX(在github.com/skylot/jadx) $ jadx -d {output folder} {apkfile}

2个工具提取和反编译器到同一输出文件夹。

Easy way: Using Online APK Decompiler


-2
投票

我知道这个问题仍然得到了回答,我并不想在这里变得聪明。我只想分享关于这个主题的另一种方法。

使用apk grail下载应用程序

APK Grail提供应用程序的免费zip文件。


-3
投票

使用luckypatcher并删除您的许可证验证,而不是您必须签署apk。使用WINRAR替换修改后的源代码而不反编译apk。


-6
投票

应该将文件扩展名从.apk更改为.zip。然后提取文件,修改它们然后将它们压缩到.zip并记住将扩展名重命名为.apk

为此,我们甚至不必使用任何计算机。我更喜欢ES文件浏览器,它也可以帮助查看和编辑源代码。

© www.soinside.com 2019 - 2024. All rights reserved.