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

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

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

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

现在我的问题是:

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


当前回答

1.如何完全避免Android APK的反向工程?这可能吗?

那是不可能的

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

开发人员可以采取一些措施,例如使用ProGuard之类的工具来混淆他们的代码,但到目前为止,要完全阻止某人对应用程序进行反编译还是相当困难的。

这是一个非常棒的工具,可以增加“反转”代码的难度,同时缩小代码的占地面积。

集成ProGuard支持:ProGuard现在与SDK工具一起打包。开发人员现在可以将其代码作为发布构建的集成部分进行模糊处理。

3.有没有办法让黑客攻击变得更加困难甚至不可能?我还能做什么来保护APK文件中的源代码?

在研究期间,我了解了HoseDex2Jar。此工具将保护您的代码不被反编译,但似乎不可能完全保护您的。

一些有用的链接,你可以参考它们。

Proguard、Android和许可服务器保护Android LVL应用程序堆栈溢出问题:保护Android应用程序不受反向工程的影响真的不可能吗?堆栈溢出问题如何防止Android APK文件反向工程以保护代码?

其他回答

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

以下是一些可以尝试的方法:

使用混淆和ProGuard等工具。加密部分源代码和数据。在应用程序中使用专有的内置校验和来检测篡改。引入代码以避免在调试器中加载,也就是说,让应用程序能够检测调试器并退出/终止调试器。将身份验证分离为在线服务。使用应用程序多样性在验证设备之前,使用指纹技术,例如,来自不同子系统的设备的硬件签名。

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

100%避免Android APK的反向工程是不可能的,但您可以使用以下方法避免提取更多数据,如源代码、APK中的资产和资源:

使用ProGuard混淆应用程序代码使用使用C和C++的NDK将应用程序核心和安全部分代码放在.so文件中为了保护资源,不要将所有重要资源都包含在APK的资产文件夹中。在应用程序首次启动时下载这些资源。

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

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