繁体   English   中英

在Android APK中混淆资产

[英]Obfuscate Assets in Android APK

我们可以在Android Studio中使用Proguard来混淆android APK,它会混淆其中的java文件。

问题 :我也想混淆存储在Assets文件夹中的文件。

解决方案 :我们可以使用需要许可证的Dexguard。

有人可以指出任何免费/开源替代方案吗?

简短回答 :最好的选择是创建自定义加密系统。

在正常情况下,您可以运行gradle scrypt(在构建apk之前),使用仅存在于您的计算机上的密钥加密文件。

如果您的应用程序具有某种登录系统,则只要您从登录中获得成功,就可以从同一登录响应中检索密钥并解密文件。

请记住,在解密之前应将文件传递到应用程序的内部存储中( 因为您无法直接在assets文件夹中修改文件的内容 )。

如果您的应用程序不使用Internet,因此您无法通过服务获取加密/解密密钥,则可以将其存储在bytearray或随机命名字符串中。

在任何情况下都不会阻止应用程序被破解并且文件被解密,但肯定会给试图破解它的任何人增加另一层难度。

原则上,如果应用程序的常规用户可以看到该信息,则攻击.apk的任何人都可以看到该信息,而.apk可以获得具有与普通用户相同权限的任何人。 因此,如果您的应用适用于一般公众并且可以通过Google商店购买,那么任何人都可以阅读。 混淆,使用本地密钥加密等......所有这些都会减慢攻击者的速度(甚至抵御弱攻击者),但原则上如果足够熟练的攻击者会投入足够的精力进行攻击,他就会打破你放在那里的任何东西。

混淆只是阻止低级别攻击者获取访问权限。


回答 )那就是说,你自己用Java加载你的资产文件?

然后你可以用一些密钥对它们进行加密,这些密钥将在.java代码中进行硬编码+混淆,因此只有能够反汇编.dex文件并理解你的密钥的人才能解密你的资产(或者以其他方式控制你的资产)在运行你的.apk的VM上,等到你的应用程序加载并解密资产,然后通过以解密形式从VM转储它来攻击它们,如果解密代码真的很棘手且难以理解,这有时可能更容易。

对于任何体面的加密使用第三方库(随意与你自己的解决方案混合,但不要期望自己创建一些强大的密码方案,需要花费相当多的努力来创建任何相当强大的东西),实际上java和Android默认情况下,有几个“安全”提供程序实现了通用的强密码方案。

但是,如果您不希望某些信息泄露,则永远不要将该信息上传到用户的设备,也不要将其显示给用户。


例如 - 这就是为什么电影业保护电影的努力是如此有趣......他们想要两者,原则上是不可能的,并且他们竭尽全力使其更难,这意味着人类浪费了相当多的钱和努力生产像端到端加密的HDMI播放,甚至电缆都要花钱,因为它不能成为简单的电缆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM