【问题标题】:Prevent decompiling android apk防止反编译android apk
【发布时间】:2014-02-07 13:58:06
【问题描述】:

我正在为 android 和 ios 创建一个应用程序,我已经知道理论上可以反编译一个 android 应用程序。该应用程序包含我不希望用户访问的敏感信息,因为该应用程序与网络服务器交互。如果用户获得了对源代码中某些可用信息的访问权限,他们可能会向我的 Web 服务器发送垃圾请求。

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

谢谢

【问题讨论】:

标签: android security


【解决方案1】:

[更新]

**

当您使用 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 中。您还可以 configure 为您可能拥有的不同产品口味混淆哪些部分。

**

[旧但相关的信息]

Proguard 是一个可以帮助您混淆代码的工具。这是您的 android 工具的一部分,您只需要激活它。 This 链接和 this 将进一步提供帮助。

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

  1. 例如,使用反射访问类/方法需要您使代码保持完整。如果 proguard 对其进行了混淆,您有时可能会遇到 ClassNotFoundException。

  2. 如果您有在 AndroidManifest/ 布局文件中被访问的类,您应该防止 proguard 混淆它们。

这可以通过添加来完成

-keep public class <MyPackage.MyClass> 

到你的 proguard.cfg。

**

虽然 Proguard 使静态分析更加困难,但 DexGuard 可以防止静态和动态分析。 DexGuard 专门用于 android 应用程序,仅在商业上可用,而 Proguard 是开源的,用于任何 java 字节码混淆/优化。

【讨论】:

  • AFAIK Proguard 基本上会重命名方法和代码的其他部分,因此很难阅读,但它不会阻止任何人反编译您的应用程序。
  • @Siddharth N 我想在有人尝试反编译 apk 时隐藏我的所有活动名称
【解决方案2】:

你不能阻止反编译android apk,你只能增加反编译的难度,proguard是最好的选择。

【讨论】:

  • 如果您想让反编译应用程序变得困难,Proguard 远非最佳选择。存在大量保护知识产权的包装商。例子可以是 Ijiami、apkprotect、Bangcle 等。这些打包器有反逆向、反调试、反 vm 等。但是它们是商业工具。他们利用运行时解密和重要功能的解包,这使得反编译任何东西都非常困难,除非你有解包等方面的经验。
【解决方案3】:

DexGuard 提供比 ProGuard 更好的安全性,但它不是免费的:https://www.saikoa.com/dexguard

DexGuard 甚至可以混淆字符串常量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    相关资源
    最近更新 更多