android - 如何避免 APK 文件的逆向工程

标签 android security proguard reverse-engineering

我正在为 Android 开发一个支付处理应用程序,我想防止黑客从 APK 访问任何资源、 Assets 或源代码文件。

如果有人将 .apk 扩展名更改为 .zip,那么他们可以将其解压缩并轻松访问所有应用程序的资源和 Assets ,并使用 dex2jar和一个Java反编译器,他们还可以访问源代码。对 Android APK 文件进行逆向工程非常容易 - 有关详细信息,请参阅 Stack Overflow 问题 Reverse engineering from an APK file to a project .

我使用了 Android SDK 提供的 Proguard 工具。当我对使用签名 keystore 和 Proguard 生成的 APK 文件进行反向工程时,我得到了混淆代码。

但是,Android 组件的名称保持不变,并且一些代码(例如应用中使用的键值对)保持不变。根据 Proguard 文档,该工具不能混淆 Manifest 文件中提到的组件。

现在我的问题是:

  1. 如何完全防止对 Android APK 进行逆向工程?这可能吗?
  2. 如何保护应用的所有资源、 Assets 和源代码,使黑客无法以任何方式破解 APK 文件?
  3. 有没有办法让黑客攻击变得更加困难甚至不可能?我还能做些什么来保护我的 APK 文件中的源代码?

最佳答案

 1. How can I completely avoid reverse engineering of an Android APK? Is this possible?

AFAIK,没有任何技巧可以完全避免逆向工程。

@inazaruk 也说得非常好:无论你对代码做什么,潜在的攻击者都能够以她或他认为可行的任何方式对其进行更改。您基本上无法保护您的应用程序不被修改。您在那里放置的任何保护都可以被禁用/删除。

 2. How can I protect all the app's resources, assets and source code so that hackers can't hack the APK file in any way?

不过,您可以使用不同的技巧来提高黑客攻击的难度。例如,使用混淆(如果是 Java 代码)。这通常会显着减慢逆向工程的速度。

 3. Is there a way to make hacking more tough or even impossible? What more can I do to protect the source code in my APK file?

正如大家所说,并且您可能知道,没有 100% 的安全性。但谷歌内置的 Android 的起点是 ProGuard。如果您可以选择包含共享库,您可以在 C++ 中包含所需的代码以验证文件大小、集成、 等如果您需要在每次构建时将外部原生库添加到 APK 的库文件夹中, 那么您可以按照以下建议使用它。

将库放在默认为“libs”的 native 库路径中 你的项目文件夹。如果您为 'armeabi' 目标构建了 native 代码,则将其放入 在 libs/armeabi 下。如果它是使用 armeabi-v7a 构建的,则将其放在 libs/armeabi-v7a。

<project>/libs/armeabi/libstuff.so

关于android - 如何避免 APK 文件的逆向工程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13854425/

相关文章:

.net - 如何在Azure中正确存储连接字符串?

Android Proguard - 如何保持仅从 XML 布局引用的 onClick 处理程序

android - 是否可以本地化 Facebook 登录权限消息?

android - 尝试将 Firebase 与 AndroidX 一起使用会产生错误 : Failed resolution of: Landroid/support/v4/util/ArrayMap;

android - 如何在c#中加密文件并在android和IOS上解密

wcf - 为什么在使用 .Net WCF 等 Web 服务时禁止 DTD 更安全?

security - HDFS 组权限问题,集群与 Kerberos + AD 集成

java - 如何针对 new Object { } 构造设置 proguard 设置?

android - Gradle : DSL element 'useProguard' is obsolete and will be removed soon

java - 设置 TextView 的文本时出现 NullPointerException