防止反编译安卓apk

25

我正在为Android和iOS创建一个应用程序,我知道理论上可以反编译Android应用程序。该应用程序包含敏感信息,我不希望用户访问,因为该应用程序与Web服务器进行交互。如果用户获得源代码中的某些信息,则可能会使用请求向我的Web服务器发送垃圾邮件。

如果假定源代码可访问,是否有任何方法来验证应用程序和服务器之间的连接,或者是否有任何方法来混淆我的代码以防止恶意用户向我的Web服务器发送垃圾邮件。

谢谢


1
看看这篇文章。它以某种方式提供了一种良好的方法,在请求服务器时提高一些安全性。https://medium.com/@rezabigdeli6/how-to-send-a-semi-secure-request-to-a-server-in-android-359b11b4e873#.q83vstxvk - Reza Bigdeli
3个回答

21

[更新]

**

当您使用Android gradle插件版本> 3.4.0构建应用程序时,插件选择R8来优化和混淆代码。现在可以在proguard-rules.pro或proguard-app.conf文件中配置规则。指示从混淆中排除什么的规则类似于之前使用的proguard.cfg中的规则。
您可以像这样在build.gradle中导入proguard文件:
buildTypes{
  ...
  release{
      proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt'),
                'proguard-rules.pro'
  }
}

R8会收集所有已经存在的proguard规则文件,只要它们被包含在build.gradle中。你也可以配置不同产品风格的混淆部分。

**

[旧但相关信息]

Proguard 是一个工具,可以帮助您混淆您的代码。这是您的Android工具的一部分,您只需要激活它。此链接此链接将有所帮助。

Proguard的默认配置(在proguard.cfg中)足以充分混淆您的代码。但是,当您有动态访问的方法/类时,您可能需要调整proguard配置。

例如,使用反射访问类/方法需要代码保持完整。如果proguard混淆它,有时可能会遇到ClassNotFoundException。
如果您的类在AndroidManifest/Layout文件中被访问,应该防止proguard对它们进行混淆。
可以通过添加...来实现此操作。
-keep public class <MyPackage.MyClass> 

添加到您的proguard.cfg文件中。

**

虽然Proguard使静态分析更加困难,但DexGuard可以保护免受静态和动态分析的影响。DexGuard专门针对Android应用程序,并且仅商业可用,而Proguard是开源的,适用于任何Java字节码混淆/优化。


5
据我所知,Proguard主要是重命名方法和代码的其他部分,因此很难阅读,但它并不能防止任何人反编译您的应用程序。 - Srneczek
@Siddharth N 我想在有人尝试反编译apk时隐藏所有活动名称。 - Arbaz.in

12

你无法防止反编译Android应用程序,你只能增加反编译的难度,而Proguard是最好的选择。


如果您想使应用程序难以反编译,Proguard并不是最佳选择。存在许多保护知识产权的打包工具,例如Ijiami、apkprotect、Bangcle等。这些打包工具具有反向、反调试、反虚拟机等功能。它们是商业工具,利用运行时解密和重要功能的解包,使得除非您有解包经验等,否则很难对任何内容进行反编译。 - Mal Ball

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接