我想确保我的应用内容是安全的。我的应用程序中有一个加密数据库的密码,我只想弄清楚我的项目中是否有安全的地方无法通过逆向工程访问。
如果您能简短地解释一下逆向工程的工作原理,那就太好了。谭Q。
并且请不要发布到 ProGuard 的链接!
我想确保我的应用内容是安全的。我的应用程序中有一个加密数据库的密码,我只想弄清楚我的项目中是否有安全的地方无法通过逆向工程访问。
如果您能简短地解释一下逆向工程的工作原理,那就太好了。谭Q。
并且请不要发布到 ProGuard 的链接!
哈瓦,
如果您将密码作为静态字符串存储在应用程序中,则不安全。即使您使用 ProGuard,也很容易获得它。保护它的最好方法是根本不存储它。相反,如果可能,让您的应用程序将某种唯一标识符发送到验证用户的服务器(可能使用 LVL),然后服务器交回数据库密码或实际的数据库数据本身(存储在服务器上)。
如果这是不可能的,或者如果您无法访问自己的服务器,至少通过将字符串存储为 XOR 字符串或更好的方式以某种方式混淆字符串,请提出您自己的函数来混淆字符串. 永远不要在你的 java 代码中有一行看起来像password = "mypass";
在逆向工程中:您的 .apk 文件从 .apk 重命名为 .zip 文件,然后抽象 zip 文件并找到您的文件夹,
但是您无法找到项目的 .class 文件
其他人已经解释了逆向工程,所以我将解释你应该如何加密数据库。
您应该使用用户的凭据(用户名和密码或 PIN)作为密钥来加密数据库。当用户启动应用程序时,应提示他们输入凭据。密钥不应该是硬编码的。
这可以防止攻击者在没有凭据的情况下访问用户的数据。
如果您试图对包括用户在内的所有人隐藏数据,但让应用程序能够访问它,那么您必须将其存储在服务器上,并且只请求您愿意向用户显示的数据。