谁偷偷删了你的微信?用Python分分钟揪出来( 二 )

接着,就可以使用 SQLCipher 依赖库来对微信数据库进行查询,我们需要为项目添加如下依赖,方便操作数据库 。
//我们需要对项目增加依赖implementation 'net.zetetic:android-database-sqlcipher:3.5.4@aar'利用上面得到的密码打开加密数据库,然后查询「rcontact」表获取微信通讯录内所有的好友的微信号、昵称、用户名等数据 。
/** * 连接数据库 * <p> * 常用库介绍:【rcontact】联系人表,【message】聊天消息表 * * @param dbFile */private void openWxDb(File dbFile, String db_pwd){    //所有联系人    List<Contact> contacts = new ArrayList<>();    SQLiteDatabase.loadLibs(this);    SQLiteDatabaseHook hook = new SQLiteDatabaseHook()    {        public void preKey(SQLiteDatabase database)        {        }        public void postKey(SQLiteDatabase database)        {             atabase.rawExecSQL("PRAGMA cipher_migrate;"); //兼容2.0的数据库        }    };    try    {        //打开数据库连接        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile, db_pwd, null, hook);         //查询所有联系人         //过滤掉本人、群聊、公众号、服务号等一些联系人         //verifyFlag != 0:公众号、服务号         //注意黑名单用户,我-设置-隐私-通讯录黑名单         Cursor c1 = db.rawQuery(                    "select * from rcontact where verifyFlag =0 and type not in (2,4,8,9,33,35,256,258,512,2051,32768,32770,32776,33024,65536,65792,98304) and username not like "%@app" and username not like "%@qqim" and username not like "%@chatroom" and encryptUsername!=""",                    null);         while (c1.moveToNext())         {             String userName = c1.getString(c1.getColumnIndex("username"));             String alias = c1.getString(c1.getColumnIndex("alias"));             String nickName = c1.getString(c1.getColumnIndex("nickname"));             int type = c1.getInt(c1.getColumnIndex("type"));             contacts.add(new Contact(userName, alias, nickName));          }          Log.d("xag", "微信通讯录中,联系人数目:" + contacts.size() + "个");          for (int i = 0; i < contacts.size(); i++)          {             Log.d("xag", contacts.get(i).getNickName());          }          c1.close();          db.close();    } catch (Exception e)    {          Log.e("xag", "读取数据库信息失败" + e.toString());          Toast.makeText(this, "读取微信通信录失败!", Toast.LENGTH_SHORT).show();    }    Toast.makeText(this, "读取微信通信录成功!", Toast.LENGTH_SHORT).show();}


推荐阅读