【发布时间】:2012-07-30 02:19:45
【问题描述】:
我想确保我的应用内容是安全的。我的应用程序中有一个加密数据库的密码,我只是想弄清楚我的项目中是否存在无法通过逆向工程访问的安全位置。
如果您能简短地解释一下逆向工程的工作原理,那就太好了。谢谢。
请不要发布到 ProGuard 的链接!
【问题讨论】:
标签: android security reverse-engineering
我想确保我的应用内容是安全的。我的应用程序中有一个加密数据库的密码,我只是想弄清楚我的项目中是否存在无法通过逆向工程访问的安全位置。
如果您能简短地解释一下逆向工程的工作原理,那就太好了。谢谢。
请不要发布到 ProGuard 的链接!
【问题讨论】:
标签: android security reverse-engineering
【讨论】:
dex2jar.bat classes.dex。这将生成 .jar 文件
哈瓦,
如果您将密码作为静态字符串存储在应用中,则它不是安全的。即使您使用 ProGuard,也很容易获得它。保护它的最好方法是根本不存储它。相反,如果可能,让您的应用程序将某种唯一标识符发送到验证用户的服务器(可能使用 LVL),然后服务器交回数据库密码或实际的数据库数据本身(存储在服务器上)。
如果这是不可能的,或者如果您无法访问您自己的服务器,至少可以通过将字符串存储为异或字符串或更好的方式以某种方式混淆字符串,请提出您自己的函数来混淆字符串。永远不要在你的 java 代码中有一行看起来像 password = "mypass";
【讨论】:
在逆向工程中:您的 .apk 文件从 .apk 重命名为 .zip 文件,然后抽象 zip 文件并找到您的文件夹,
但您无法找到项目的 .class 文件
【讨论】:
Reverse engineering 更多的是通过仔细分析应用程序的行为方面来重新创建知识产权。关于安全问题,我认为social engineering应该是你更关心的问题
【讨论】:
其他人已经解释了逆向工程,所以我将解释你应该如何加密数据库。
您应该使用用户的凭据(用户名和密码或 PIN)作为密钥来加密数据库。当用户启动应用程序时,应提示他们输入凭据。密钥不应被硬编码。
这可以防止攻击者在没有凭据的情况下访问用户的数据。
如果您试图对包括用户在内的所有人隐藏数据,但让应用程序能够访问它,那么您必须将其存储在服务器上,并且只请求您愿意显示给用户。
【讨论】: