如何使用C#向Chrome的Cookies文件插入新记录

4

我已经找到了Chrome的cookie文件,并使用SQLiteBrowser打开它并查找了cookies表的结构。

虽然cookies值是加密的,但我仍然找到了一些方法来解密它,并成功地从该文件中读取了cookies。

我还注意到,cookies表的creation_utc字段使用自1601年1月1日以来的时间计数。

我想说的是,我已经做了一些工作,已经知道了Chrome cookie文件的结构。

但问题是,当我想使用C#的System.data.sqlite向该文件插入新记录时,我的程序无法插入此记录,并进入了一些类似死锁的状态。我注意到这种情况是由executeNoQuery方法没有返回造成的!!!

相同的SQL语法在我的测试SQLite文件中运行良好,所以我猜测问题是由Chrome cookie文件本身引起的。

有人能帮帮我吗?谢谢!

以下是我尝试设置cookie的代码:

        private static bool SetCookie_Chrome(string strHost, string strField, string value,DateTime expiresDate)
    {
        bool fRtn = false;
        string strPath, strDb;


        strPath = GetChromeCookiePath();
        //strPath= GetTestCookiePath();
        if (string.Empty == strPath) // Nope, perhaps another browser
            return false;

        try
        {
            strDb = "Data Source=" + strPath + ";pooling=false";

            SQLiteConnection conn = new SQLiteConnection(strDb);

            SQLiteCommand cmd = conn.CreateCommand();

            Byte[] encryptedValue=getEncryptedValue(value);

            cmd.CommandText = "INSERT INTO `cookies`(`creation_utc`,`host_key`,`name`,`value`,`path`,`expires_utc`,`secure`,`httponly`,`last_access_utc`,`has_expires`,`persistent`,`priority`,`encrypted_value`) "+
                "VALUES ("+TimeUtil.get_creation_utc()+",'"+strHost+"','"+strField+"','','/',"+
                TimeUtil.get_specific_utc(expiresDate.Year,expiresDate.Month,expiresDate.Day,expiresDate.Hour,expiresDate.Minute,expiresDate.Second)+
                ",0,0," + TimeUtil.get_creation_utc() + ",1,1,1,@evalue);";
            cmd.Parameters.Add("@evalue", System.Data.DbType.Binary).Value = encryptedValue;
            conn.Open();
            int rtV=cmd.ExecuteNonQuery();
            conn.Close();
            fRtn = true;
        }


        catch (Exception e)
        {
            fRtn = false;
        }
        return fRtn;
    }

听起来像是权限问题。使用 try/catch 看看你得到的确切异常是什么,并在此处发布它。 - Xaqron
@Xaqron,事实是没有任何异常!当我在vs2012中逐步调试时,当我执行以下代码行:int rtV=cmd.ExecuteNonQuery()时,该函数就是不返回!程序就停在那里等待。 - Rong.Du
@Xaqron 关于权限问题,我检查了Chrome的Cookie文件权限,它允许我进行修改。此外,当我在Windows中以管理员身份运行程序时,问题仍然存在。我尝试将文件复制到另一个文件夹,但也不起作用。 - Rong.Du
@Xaqron 我已经解决了这个问题。出现这种情况的原因是我有另一个连接到同一个 SQL 文件处于活动状态,就像文件锁的工作原理一样,它只是在你读取一些脏值时锁定文件。 - Rong.Du
3
@RongDu,该如何加密数值?你能够发帖分享一下你的getEncryptedValue(value)方法吗?谢谢。 - Maarty
1个回答

5
如果有人想修改Chrome的cookie文件,可以参考我上面发布的代码。实际上,这段代码是正确的,我遇到问题的原因引自上面的评论:
“出现这种情况的原因是我有另一个连接到同一SQL文件的活动,就像文件锁一样,它只是锁定文件以防止读取一些脏值。”
希望这个问题能帮助其他人。

当表被锁定时,您如何插入记录? - user3423149

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接