我正在开发Android 的付款处理应用程序,我想阻止黑客访问APK文件中的任何资源,资源或源代码。
如果有人将.apk扩展名更改为.zip,那么他们可以将其解压缩就轻松访问所有应用程序的资源和资产,并使用dex2jar和Java反编译器,也可以访问源代码。这是一个非常简单的反向工程Android APK文件
我已经使用了Android SDK提供的Proguard工具。当我使用签名的密钥库和Proguard对生成的APK文件进行反向工程时,我得到了混淆的代码。但是,Android组件的名称保持不变,某些代码(如应用程序中使用的键值)保持不变。根据Proguard文档,该工具不能混淆清单文件中提到的组件。
现在我的问题是:
在计算的历史中,从来没有人可能在向攻击者提供工作副本时防止对软件进行逆向工程。而且,大多数情况下,这是不可能的。
据了解,有一个明显的解决办法:不要把你的秘密给你的攻击者。虽然您无法保护APK的内容,但是您可以保护的是您不分发的任何内容。通常这是服务器端软件,用于激活,支付,规则执行和其他多汁的代码。您可以通过不在 APK中分发这些资源来保护有价值的资产。相反,建立一个响应来自你的应用程序请求的服务器,“使用”资产(不管这可能意味着什么),然后将结果发送回应用程序。如果这种模式不适用于您所考虑的资产,那么您可能需要重新考虑您的策略。
此外,如果您的主要目标是防止应用程序盗版:甚至不打扰。你们已经在这个问题上花费了更多的时间和金钱,而不是任何反盗版措施可能会希望拯救你的东西。解决这个问题的投资回报如此之低,甚至连想都没有意义。
1.如何完全避免Android APK的逆向工程?这可能吗?
AFAIK,完全避免逆向工程没有任何窍门。
无论你对代码做什么,潜在的攻击者都可以以任何可能的方式改变它。你基本上不能保护你的应用程序不被修改。而且你放在那里的任何保护都可以禁用/删除。
2.我如何保护所有应用程序的资源,资源和源代码,使黑客无法以任何方式破解APK文件?
你可以做不同的技巧,使黑客更难。例如,使用混淆(如果它是Java代码)。这通常会显着减缓逆向工程。
3.是否有办法使黑客更加困难甚至不可能?我还能做些什么来保护我的APK文件中的源代码?
正如大家所说,也许你知道,没有100%的安全。但是,Google已经建立起来的Android平台是ProGuard。如果您可以选择包含共享库,那么您可以在C ++中包含所需的代码来验证文件大小,集成等。如果您需要在每个构建中将外部本机库添加到APK的库文件夹,则可以使用它由下面的建议。
将库放在默认为项目文件夹中的“libs”的本机库路径中。如果您为“armeabi”目标构建本机代码,则将其放在libs / armeabi下。如果它是用armeabi-v7a构建的,那么把它放在 libs / armeabi-v7a下。
<project>/libs/armeabi/libstuff.so