我正在开发一个android应用程序,在这个应用程序assets
文件夹中包含一些密码和一些imp信息。
我想阻止黑客访问any resources, assets or source code from the APK file
,主要是assets resources
。
我怎样才能实现这个目标?
我发现并考虑以下解决方案,请让我更正并就此提出建议。
1) Put every data or files in assets folder in encrypted way.
在此解决方案中,当我需要使用此资产文件夹数据时,我需要在每次使应用程序运行缓慢时进行解密。
2) To secure resources, don't include all important resources in the assets folder with APK. Download these resources at the time of application first start up.
此解决方案也不适合我的应用程序,因为我想在脱机模式下使用我的应用程序,如果它将首次使用或第二次使用。
3) obfuscation would not protect assets folder data so we can not use that.
请提供您的建议和意见。
任何帮助都将不胜感激。
谢谢&此致
答案 0 :(得分:4)
在Android上进行逆向工程非常简单!你不能阻止这一点。 您不应该在APK中存储任何敏感信息,因为有人可以轻松找到它们。
如果要在用户设备上存储内容,则应使用非对称加密。
可以像对称加密密钥一样隐藏代码中的某些数据,但如果有人想要找到它,可以在几分钟内找到它。 (如果你把它放在资产文件夹中,几秒钟......)
EDIT 如果要在代码中放置对称加密密钥,请不要将其设置为:
String myKey = "myEncryptionKey";
byte[] key = myKey.getBytes();
因为反向工程师能够使用单个命令列出apk中的所有字符串...所以请使用以下内容:
StringBuilder sb = new StringBuilder();
sb.append(m);
sb.append(y);
...
byte[] key = sb.toString().getBytes();
或
byte[] key = Base64.decode("esfas09f8as90f8").getBytes();
答案 1 :(得分:2)
用户可以访问您在客户端设备上安装的任何数据。像Proguard这样的工具非常适合代码优化,并且可能会使代码的可读性略低,但是任何拥有APK的人都可以对应用程序进行反向工程并访问您在APK文件中包含的所有内容。
例如,您可以将敏感数据存储在资产文件夹中,攻击者可以轻松访问该文件夹,现在对此进行加密很好,但是您使用什么密钥对其进行加密?密钥存储在哪里?
还有一个名为DexGuard的工具可以加密字符串。然而,这尚未得到证实,只能减缓攻击者的速度。
总结从不在您的应用上存储敏感数据,它无法受到保护。
如果您想了解这是多么容易,请查看以下工具:
https://code.google.com/p/dex2jar/
&安培;