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

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

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

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

现在我的问题是:

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


当前回答

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

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

其他回答

此处同意@Muhammad Saqib:https://stackoverflow.com/a/46183706/2496464

@Mumair提供了良好的开始步骤:https://stackoverflow.com/a/35411378/474330

假设您分发到用户设备的所有内容都属于用户,这总是安全的。简单明了。你也许可以使用最新的工具和程序来加密你的知识产权,但没有办法阻止一个有决心的人“研究”你的系统。即使目前的技术可能会让他们很难获得不需要的访问权限,明天,甚至下一个小时,可能会有一些简单的方法!

因此,方程式如下:

说到钱,我们总是认为客户是不可信的。

即使在游戏内经济这么简单的情况下。(尤其是在游戏中!那里有更多“老练”的用户,漏洞在几秒钟内就扩散了!)

我们如何保持安全?

大多数(如果不是全部)关键处理系统(当然还有数据库)都位于服务器端。客户端和服务器之间存在加密通信、验证等。这就是瘦客户端的概念。

基本上这是不可能的。这永远不可能。然而,这是有希望的。你可以使用混淆器来实现,这样一些常见的攻击就更难执行了,包括:

重命名方法/类(因此在反编译器中,您可以获得像.a这样的类型)使控制流混乱(因此在反编译器中,代码很难阅读)加密字符串和可能的资源

我肯定还有其他的,但这是主要的。我在一家名为PreEmptive Solutions的公司工作,负责.NET混淆器。他们还有一个适用于Android的Java混淆器,一个叫做DashO的混淆器。

不过,困惑总是有代价的。值得注意的是,性能通常更差,通常需要一些额外的时间来发布。然而,如果你的知识产权对你来说非常重要,那么它通常是值得的。

否则,你唯一的选择就是让你的Android应用程序直接传递到一个承载你应用程序所有真实逻辑的服务器。这有其自身的问题,因为这意味着用户必须连接到Internet才能使用您的应用程序。

此外,不仅仅是Android有这个问题。这是每个应用商店的问题。这只是获取程序包文件有多困难的问题(例如,我不相信在iPhone上很容易,但仍然有可能)。

可信平台模块(TPM)芯片不应该为您管理受保护的代码吗?

它们在个人电脑(尤其是苹果电脑)上越来越常见,并且可能已经存在于今天的智能手机芯片中。不幸的是,目前还没有任何OS API可以使用它。希望有一天,Android会增加对此的支持。这也是清洁内容DRM(Google正在为WebM开发)的关键。

基本上,有五种方法可以保护APK文件:

隔离Java程序,加密类文件,转换为本地代码,代码混淆联机加密

我建议你使用在线加密,因为它既安全又方便。你不必花太多时间来实现这一点。

如APK Protect。这是APK的在线加密网站。它提供Java代码和C++代码保护,以实现反调试和反编译效果。操作过程简单易行。

我如何保护应用程序的所有资源、资产和源代码,使黑客无法以任何方式破解APK文件?

APK文件受SHA-1算法保护。您可以在APK的META-INF文件夹中看到一些文件。如果您提取任何APK文件并更改其内容并再次压缩,当您在Android机器上运行新的APK文件时,它将无法工作,因为SHA-1哈希永远不会匹配。