1

我想确保我的应用内容是安全的。我的应用程序中有一个加密数据库的密码,我只想弄清楚我的项目中是否有安全的地方无法通过逆向工程访问。

如果您能简短地解释一下逆向工程的工作原理,那就太好了。谭Q。

并且请不要发布到 ProGuard 的链接!

4

5 回答 5

4

任何硬编码的值都可以通过对您的应用程序进行逆向工程来查看。

这包括密码、网址等。

为了对安卓应用程序进行逆向工程,请继续执行以下步骤:

1- 将您应用的 APK 文件重命名为 ZIP(例如 myapp.apk -> myapp.zip)

2- 打开 zip 文件并检索classes.dex文件。

3- 使用dex2jar从 classes.dex 中获取 jar 文件

4- 使用jd-gui打开 jar 文件并查看您的原始代码。

于 2012-08-01T08:11:03.743 回答
1

哈瓦,

如果您将密码作为静态字符串存储在应用程序中,则不安全。即使您使用 ProGuard,也很容易获得它。保护它的最好方法是根本不存储它。相反,如果可能,让您的应用程序将某种唯一标识符发送到验证用户的服务器(可能使用 LVL),然后服务器交回数据库密码或实际的数据库数据本身(存储在服务器上)。

如果这是不可能的,或者如果您无法访问自己的服务器,至少通过将字符串存储为 XOR 字符串或更好的方式以某种方式混淆字符串,请提出您自己的函数来混淆字符串. 永远不要在你的 java 代码中有一行看起来像password = "mypass";

于 2012-08-01T08:09:06.217 回答
0

在逆向工程中:您的 .apk 文件从 .apk 重命名为 .zip 文件,然后抽象 zip 文件并找到您的文件夹,

但是您无法找到项目的 .class 文件

于 2012-08-01T08:09:51.817 回答
0

逆向工程更多的是通过仔细分析应用程序的行为方面来重新创建知识产权。关于安全问题,我认为你应该更关心社会工程

于 2012-08-01T08:10:11.063 回答
0

其他人已经解释了逆向工程,所以我将解释你应该如何加密数据库。

您应该使用用户的凭据(用户名和密码或 PIN)作为密钥来加密数据库。当用户启动应用程序时,应提示他们输入凭据。密钥不应该是硬编码的。

这可以防止攻击者在没有凭据的情况下访问用户的数据。

如果您试图对包括用户在内的所有人隐藏数据,但让应用程序能够访问它,那么您必须将其存储在服务器上,并且只请求您愿意向用户显示的数据。

于 2012-08-01T12:42:28.030 回答