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

如果有人将.apk扩展名更改为.zip,那么他们可以将其解压缩并轻松访问应用程序的所有资源和资产,并且可以使用dex2jar和Java反编译器访问源代码。对Android APK文件进行反向工程非常容易-有关更多详细信息,请参阅堆栈溢出问题从APK文件到项目的反向工程。

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

然而,Android组件的名称保持不变,一些代码(如应用程序中使用的关键值)保持不变。根据Proguard文档,该工具无法混淆Manifest文件中提到的组件。

现在我的问题是:

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


当前回答

我建议您查看“保护软件应用程序免受攻击”。这是一项商业服务,但我朋友的公司使用了它,他们很高兴使用它。

其他回答

这里的主要问题是,dex文件是否可以反编译,答案是它们可以“有点”。有像dedexer和smali这样的拆装器。

正确配置的ProGuard会使代码变得模糊。DexGuard是ProGuard的商业扩展版本,它可能会有更多帮助。然而,您的代码仍然可以转换为smali,具有逆向工程经验的开发人员将能够从smali中了解您正在做什么。

也许选择一个好的许可证,并以最好的方式通过法律强制执行。

在Android中,源代码和资源的100%安全是不可能的。但是,你可以让逆向工程师有点困难。您可以在以下链接中找到有关此的更多详细信息:

访问安全保存常量值以及针对应用程序开发人员的移动应用程序安全最佳实践。

无法完全避免APK文件的反向工程。为了保护应用程序资产和资源,可以使用加密。

加密将使其在不解密的情况下更难使用。选择一些强大的加密算法将使破解更加困难。在主逻辑中添加一些欺骗代码,使其更难破解。如果你能用任何一种母语编写你的关键逻辑,那么反编译肯定会更加困难。使用任何第三方安全框架,如Quixxi

我建议您查看“保护软件应用程序免受攻击”。这是一项商业服务,但我朋友的公司使用了它,他们很高兴使用它。

当他们在手机上安装该应用程序时,他们可以完全访问该应用程序的内存。因此,如果你想防止它被黑客入侵,你可以尝试将其制作成这样,你就不能通过使用调试器直接获取静态内存地址。如果有地方可以写并且有限制,那么它们可能会发生堆栈缓冲区溢出。所以在他们写东西的时候尽量做到这一点,如果你必须有一个限制,如果他们发送的字符数超过了限制,如果(input>limit)则忽略,这样他们就不能把汇编代码放在那里。