【问题标题】:How do I secure my Database sqlite in the Assets Folder (by Ciphering)?如何保护资产文件夹中的数据库 sqlite(通过加密)?
【发布时间】:2012-03-05 07:57:46
【问题描述】:

我有过逆向工程的经验,并且人们可以在 android 中流畅地访问您的数据库。 我想知道有什么方法可以在创建时仅加密我的数据库(不混淆整个 apk),然后在运行时我会使用我的数据库。

我对数据库的了解较少,因此任何建议都可以保护我在资产文件夹中的数据库。

【问题讨论】:

    标签: android sqlite sqlcipher


    【解决方案1】:

    你当然可以。使用SQL Cipher

    使用时,请使用info.guardianproject.database.sqlcipher.SQLiteDatabase,而不是使用传统的android.database.sqlite.SQLiteDatabase。欲了解更多信息,请查看this question

    【讨论】:

    • 请注意,您很可能还必须将解密密钥存储在您的 APK 中,这样别人找到它并不难。
    【解决方案2】:

    您无法保护应用程序中包含的信息。这是不可能的。

    1. 攻击者可以反转您的所有代码。

    2. 攻击者可以反混淆您的所有代码。

    3. 可以使用存储在应用程序上的密钥对预加载的加密数据库文件进行解密。

    尤其是这样的代码:

    String dbPath = this.getDatabasePath("Encrypted.db").getPath();
    
            SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath,
                    **DATABASEKEY**, null);
    

    SQLCipher 并非旨在保护用户数据免受攻击者的侵害,而是用于保护用户数据免受其他应用程序的侵害。

    你的努力会稍微减慢攻击者的速度。

    如果您想在 App 上存储敏感数据,请不要将其存储在 App 或数据目录中。将您的应用设计为与服务器通信,尽管这会带来一大堆其他事情需要考虑(Web 应用安全)。

    【讨论】:

      【解决方案3】:

      也许对您存储在表中而不是整个表中的字符串进行加密会更可行。例如存储密码的hash,而不是直接存储它们..

      【讨论】:

        【解决方案4】:

        你看过Proguard吗?

        ProGuard 工具通过以下方式缩小、优化和混淆您的代码 删除未使用的代码并重命名类、字段和方法 语义模糊的名称。结果是一个较小的 .apk 文件 这更难以逆向工程。因为 ProGuard 使 您的应用程序更难进行逆向工程

        更多关于proguard的信息。

        【讨论】:

        • 你的意思是我的 Drawable 也会被加密吗?我的意思是它是否也会减小 Raw 文件和 Drawable 文件的大小?
        猜你喜欢
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 1970-01-01
        相关资源
        最近更新 更多