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

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

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

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

现在我的问题是:

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


当前回答

只是上面已经很好的答案的补充。

我知道的另一个技巧是将有价值的代码存储为Java库。然后将该库设置为Android项目。与C.so文件一样好,但Android Lib可以。

这样,这些存储在Android库中的宝贵代码在反编译后将不可见。

其他回答

Android 7.0中的APK签名方案v2(Nougat)

PackageManager类现在支持使用APK签名方案v2验证应用程序。APK签名方案v2是一个完整的文件签名方案,通过检测对APK文件的任何未经授权的更改,显著提高了验证速度并加强了完整性保证。

为了保持向后兼容性,APK必须在使用v2签名方案签名之前使用v1签名方案(JAR签名方案)签名。使用v2签名方案,如果在使用v2方案签名后使用附加证书对APK进行签名,则验证失败。

APK签名方案v2支持稍后将在N开发者预览版中提供。

http://developer.android.com/preview/api-overview.html#apk_signature_v2

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

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

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

不可能的

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

不可能的

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

可能会更难,但事实上,对于普通用户来说,这将更难,因为他们只是在谷歌上搜索黑客指南。如果有人真的想入侵你的应用程序,它迟早会被入侵。

作为一个在支付平台(包括一个移动支付应用程序(MyCheck))上广泛工作的人,我想说,您需要将这种行为委托给服务器。移动应用程序中不应存储或硬编码支付处理器的用户名或密码(以其为准)。这是您最不希望看到的,因为即使您混淆了代码,也可以理解源代码。

此外,您不应在应用程序上存储信用卡或支付令牌。一切都应该再次委托给您构建的服务。这也会让你以后更容易遵守PCI标准,信用卡公司也不会像对待我们那样,让你喘不过气来。

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

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