我们可以使用Android Studio中的Proguard
来混淆Android APK,它会混淆其中的java
个文件。
问题:我也想混淆存储在Assets文件夹中的文件。
解决方案:我们可以使用需要许可证的Dexguard。
有人可以指出任何免费/开源替代方案吗?
答案 0 :(得分:1)
简短回答:最好的选择是创建自定义加密系统。
在正常情况下,您可以运行gradle scrypt(在构建apk之前),使用仅存在于您计算机上的密钥对文件进行加密。
如果您的应用程序具有某种登录系统,只要您从登录中获得成功,就可以从同一登录响应中检索密钥并解密文件。
请记住,您应该在解密之前将文件传递到应用程序的内部存储中(,因为您无法直接在资源文件夹上修改文件的内容)。
如果您的应用程序不使用互联网,因此您无法通过服务获取加密/解密密钥,则可以将其存储在bytearray或随机命名字符串中。
在任何情况下都不会阻止应用程序破解并解密文件,但肯定会给试图破解它的任何人增加另一层难度。
答案 1 :(得分:1)
原则上,如果信息对应用程序的常规用户可见,则攻击.apk的任何人都必须可以看到该信息,并且.apk可以获得与普通用户具有相同权限的任何人。因此,如果您的应用适用于一般公众并且可以通过Google商店购买,那么任何人都可以阅读。混淆,使用本地密钥加密等......所有这些都会减慢攻击者的速度(甚至可以抵御弱攻击者),但原则上如果足够熟练的攻击者会投入足够的精力进行攻击,他就会破坏你放在那里的任何东西。 / p>
混淆只是阻止低级攻击者获取访问权。
(回答)那就是说,你自己用Java加载你的资产文件?
然后你可以用一些密钥对它们进行加密,这些密钥将在.java代码中进行硬编码+混淆,因此只有能够反汇编.dex文件并理解你的密钥的人才能解密你的资产(或者有其他方式) ,控制运行.apk的VM,等到你的应用程序加载并解密资产,然后通过以解密形式从VM转储它来攻击它们,如果解密代码真的很棘手且难以理解,这有时可能更容易)
对于任何体面的加密使用第三方库(随意将它与您自己的解决方案混合,但不要期望自己创建一些强大的密码方案,需要花费相当多的努力来创建任何相当强大的东西),实际上java和Android默认有几个“安全”提供程序,它们实现了通用的强密码方案。
但是,如果您不希望某些信息泄露,请不要将该信息上传到用户的设备,也不要将其显示给用户。
例如 - 这就是为什么电影业保护电影的努力是如此有趣......他们想要两者,这在原则上是不可能的,并且他们竭尽全力使其更难,这意味着人类浪费了相当多的钱和努力生产像端到端加密的HDMI播放这样的东西甚至电缆都要花钱,因为它不能成为简单的电缆。