首页 文章

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

提问于
浏览
54

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

  • 我可以使用dex2jar或apktool对它进行反编译,它工作得很好

  • 从jar文件中我可以获取java源码(使用jd-gui)

  • 然后我可以修改java文件

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

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

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

9 回答

  • -2

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

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

  • 36

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

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

    • 用Dex2jar我获得了Jar .

    • 使用jd-gui我将我的Jar转换回Java文件 .

    • 使用apktool我得到了android清单和ressources文件

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

    • 创建项目时,我将所有资源和清单替换为我使用apktool获取的资源

    • 我将我从jar中提取的java文件粘贴到src中(尊重包)

    • 我用我需要的东西修改这些文件

    • 一切都在编译!

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

  • -5

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

    an online decompiler for android apks

    • 从本地机器上传apk

    • 等一下

    • 以zip格式下载源代码

    我不知道这有多可靠 .

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

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

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

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

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

    • 解压缩它创建的文件 dex2jar 文件夹

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

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

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

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

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

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

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

  • 30

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

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

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

    这些是我最喜欢的工具:

    javadecompilers.com

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

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

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

    Bonus:

    Basic tutorial of Using Proguard

  • -1

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

    • 使用apktool反编译

    • apktool将为每个具有相同名称的java文件生成smali(汇编版本的dex)文件 .

    • smali是人类可以理解的,在相关文件中进行更改,使用相同的apktool重新编译( apktool b Nw.apk <Folder Containing Modified Files>

  • 1

    这是一种方式:

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

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

    简单方法:使用在线APK Decompiler

  • 2

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

    使用apk grail下载应用程序

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

  • -3

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

相关问题