欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

andriod开发如何获取安卓QQ中的好友信息

程序员文章站 2022-06-17 15:14:31
下面是恢复QQ好友的记录。本人使用的android手机。准备部分:第一步,获取手机 root 权限,并使用adb shell 导出 data/data/com.tencent.monileqq/databases/ 路径下的数据库。第二步,找到该数据库下你自己QQ号码.db文件,容易知道,该文件是sqlite 数据库。第三步,使用sqliteman 观察数据库的内容,发现内容为乱码。因sqlite数据库无加密功能,则可推得QQ利用软件将其中的内容加密。第四步,面向谷歌编程,证实了微信和QQ使用的是...

下面是恢复QQ好友的记录。本人使用的android手机。

准备部分:

第一步,获取手机 root 权限,并使用adb shell 导出 data/data/com.tencent.monileqq/databases/ 路径下的数据库。

第二步,找到该数据库下你自己QQ号码.db文件,容易知道,该文件是sqlite 数据库。

第三步,使用sqliteman 观察数据库的内容,发现内容为乱码。因sqlite数据库无加密功能,则可推得QQ利用软件将其中的内容加密。

第四步,面向谷歌编程,证实了微信和QQ使用的是sqlite数据库,并使用手机的IMEI码作为密钥,采用XOR加密,即异或加密其中的数据。

第五步,分析数据库的表,易知 friends表为好友关系数据,但并不清楚其中各键值含义,需要解密。

编程部分:

// 代码水平不高,100行左右用了4个小时,太丢人。

第一步,连接数据库,参考msdn [Microsoft.Data.Sqlite 概述]https://docs.microsoft.com/zh-cn/dotnet/standard/data/sqlite/?tabs=visual-studio

第二步,原计划解密所有表中的数据,利用的是select name from sqlite_master可以得到该数据库中所有表的表头,但无意义。(注:sqlite 数据库中sqlite_master 表存储了该数据库的所有表的名称)。

第三步,编写异或加密解密代码。参考了此处:https://www.programmingalgorithms.com/algorithm/xor-encryption/

简而言之,异或加密是将要加密的数据分块,并和密钥按位做异或运算运算,之后将其存储至数据库中。因为密钥是已知的,只需要将加密后的密文再和密钥做异或运算,就能够还原数据,该算法不涉及复杂的运算,开销不大,在保证速度的同时能够兼顾安全性,在手机这种移动平台比较适用。

第四步,利用sql语句获取数据库的内容,并解密数据,在解密数据之前,需使用isdbnull 判断所读出这一行的数据是否是空,因为SqlDataReader.getstring()方法无法读取空数据,须特别注意。因手机是双卡手机,有两个IMEI,尝试使用循环,两个IMEI都能够获得数据。

尾声,在读取完qq号,昵称和备注后,发现其有一个groupid的键值,观察表发现存在group表,并在其中存在group friend count,高度怀疑其为分组,尝试使用order by 进行排列,结果证明猜测正确。

本文地址:https://blog.csdn.net/xianyu199901/article/details/107724896

相关标签: 安卓