是否可以反编译Android .apk文件?


86

用户能否将我的应用程序的apk文件转换回实际的代码?如果他们这样做-有什么办法可以防止这种情况?


1
有几种反编译APK的方法。我只是更频繁,最强大的APKTool。用它修改apk文件非常容易。
Taranfx

我在这里写了一篇博客文章:codexplo.wordpress.com/2012/03/15/…但同样,混淆的代码也很难...
rokonoid 2012年


Answers:


80

首先,apk文件只是修改后的jar文件。因此,真正的问题是它们是否可以反编译其中的dex文件。答案是这样的。已经有反汇编程序,例如dedexersmali。您可以期望它们只会变得更好,并且理论上最终应该可以反编译为实际的Java源代码(至少有时是这样)。请参阅前面的问题,将DEX反编译为Java源代码

您应该记住的是,混淆永远不会起作用。选择一个好的许可证,并尽力通过法律来执行它。不要用不可靠的技术措施浪费时间。


45
永不说永不。迷惑不会阻止坚定的贼,但会减慢速度或阻止其他许多人。使用Proguard进行处理是对代码进行混淆的一种简单而可靠的方法,此外,它还会优化代码。而且它包含在Android SDK中,因此得到了Google的认可。
巴里·弗鲁特曼

3
混淆无疑是有效的,但您必须更清楚地定义目标是什么。显然,使源代码真正安全的唯一方法就是永远不要让任何人访问它,服务器或客户端。请注意,Proguard不适用于在XML文件中具有引用的类。您需要利用手动混淆来解决此问题。
MattC 2012年

35

可以反编译APK文件。但是,如果代码被混淆,可能很难理解。

ApkTool来查看APK文件中的资源

  • 提取AndroidManifest.xml以及res文件夹中的所有内容(布局xml文件,图像,用于webview的html等)。
  • 命令: apktool.bat d sampleApp.apk
  • 注意:您可以使用7-zip之类的zip实用程序来实现此目的。但是,它还会提取所有.class文件的.smali文件。

使用dex2jar

  • 从.apk文件生成.jar文件,我们需要JD-GUI从该.jar中查看源代码。
  • 命令: dex2jar sampleApp.apk

使用JD-GUI反编译.jar

  • 反编译.class文件(对于android应用,则进行混淆处理;对于其他.jar文件,则获得可读的原始代码)。即,我们从应用程序中获取了.java。

apktool不会吐出Java源文件!只有smali
IgorGanapolsky

1
正如我在答案中已经说过的,apktool从.apk创建.jar,我们必须使用类似JD-GUI的工具来反编译.jar以获得.java源文件。
gtiwari333

1
你freakin'救了我的命!多么棒的帖子!由于SSD发生故障,我丢失了最后两天的代码(遗憾的是,我没有提交git)。但是,我确实有apk,现在我有了我的消息源,请注意,有点不同,但是消息源!
farcrats'Aug

3

我还可能会补充说,如今可以在线反编译Android应用程序,而无需任何软件!

这里有两个选项供您选择:


decompileandroid.com处于离线状态(当您上传apk时,您将无法再次下载它)并且javadecompilers.com/apk将我的apk放置了很长时间。我脱机,然后在线,仍然在排队。我清除了所有浏览历史记录,现在第二次上传的apk处于排队状态。
iOSAndroidWindowsMo​​bileAppsDev 2016年


0

有时,在使用dex2jar/时apktool,您会遇到代码破损的情况,尤其是在循环中。为避免这种情况,请使用jadx,它将dalvik字节码反编译成Java源代码,而无需像创建那样先创建.jar/.class文件dex2jar(我认为apktool使用dex2jar)。它也是开源的并且正在积极开发中。它甚至具有GUI,适用于GUI狂热者。尝试一下!


0

用户能否将我的应用程序的apk文件转换回实际的代码?

是。

人们可以使用各种工具来:

  • 分析:您的apk
  • 解码/破解您的apk
    • FDex2倾倒了dex文件
      • 然后dex2jar用于转换为jar
        • 然后jadx用于转换为java源代码

如果他们这样做-有什么办法可以防止这种情况?

是。几种(可以组合)的方式来防止(一定程度上)这种情况:

  • 低级:代码混淆
    • 使用Android ProGuard
  • 高级:使用android强化方案

更多细节可以参考我的中文教程:安卓应用的安全和破解


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.