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