2024年最全谁偷偷删了你的微信?别慌!Python 帮你都揪出来了

{

Log.d(“xag”, “初始化数据库密码失败:imei或uid为空”);

return “密码错误”;

}

String md5 = MD5Utils.md5(imei + uin);

assert md5 != null;

return md5.substring(0, 7).toLowerCase();

}

接着,就可以使用 SQLCipher 依赖库来对微信数据库进行查询,我们需要为项目 添加 如下依赖,方便操作数据库。

//我们需要对项目增加依赖

implementation ‘net.zetetic:android-database-sqlcipher:3.5.4@aar’

利用上面得到的密码打开加密数据库,然后查询 「 rcontact 」 表 获取微信通讯录内所 有的好友的微信号、昵称、用户名等数据。

/**

  • 连接数据库

  • 常用库介绍:【rcontact】联系人表,【message】聊天消息表

  • @param dbFile

*/

private void openWxDb(File dbFile, String db_pwd)

{

//所有联系人

List 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();

}

需要注意的是,数据库中 rcontact 表的数据比较杂乱,除了正常的好友数据,黑名单好友、已删除好友、公众号、微信群等数据也包含在内,需要我们通过 type 和 verifyFlag 字段进行筛选。

谁偷偷删了你的微信?别慌!Python 帮你都揪出来了

为了便于 Python 操作,最后将查询的好友数据写入到 csv 文件中。

/***

  • 写入数据到csv中

  • @param output_path

  • @param contacts

*/

public static void writeCsvFile(String output_path, List contacts)

{

try

{

File file = new File(output_path);

//删除之前保存的文件

if (file.exists())

{

file.delete();

}

BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));

// 添加头部名称

bw.write(“userName” + “,” + “alias” + “,” + “nickName”);

bw.newLine();

for (int i = 0; i < contacts.size(); i++)

{

bw.write(contacts.get(i).getUserName() + “,” + contacts.get(i).getAlias() + “,” + contacts.get(i).getNickName());

bw.newLine();

}

bw.close();

} catch (IOException e)

{

e.printStackTrace();

}

}

第 2 步,我们需要模拟给好友转账,来判断这个好友关系是否正常。

首先,我们需要初始化 Airtest,然后利用 adb 把第 1 步生成的数据从手机里导出到本地。

def __init_airtest(self):

“”"

初始化Airtest

:return:

“”"

device_1 = Android(‘822QEDTL225T7’)

device_1 = Android(‘emulator-5554’)

connect_device(“android:///”)

self.poco = AndroidUiautomationPoco(device_1, screenshot_each_action=False)

auto_setup(file)

def export_wx_db_from_phone(target_path):

“”"

从手机中导出通信录数据

:param target_path:

:return:

“”"

微信通信录数据

wx_db_source_path = “/data/data/com.xingag.crack_wx/wx_data.csv”

导出到本地

os.popen(‘adb pull %s %s’ % (wx_db_source_path, target_path))

然后就是一系列自动化操作。

打开微信,遍历好友列表,拿到每一个好友的微信号去搜索好友,跳转到好友的聊天界面。

def __to_friend_chat_page(self, weixin_id):

“”"

点击到一个好友的聊天界面

:param weixin_id:

:param weixin_name:

:return:

“”"

1、点击搜索

element_search = self.__wait_for_element_exists(self.id_search)

element_search.click()

print(‘点击搜索’)

2、搜索框

element_search_input = self.__wait_for_element_exists(self.id_search_input)

element_search_input.set_text(weixin_id)

3、搜索列表

element_search_result_list = self.__wait_for_element_exists(self.id_search_result_list)

3.1 是否存在对应的联系人,如果存在就在第一个子View布局下

注意:可能出现最常用的聊天列表,这里需要进行判断

index_tips = 0

for index, element_search_result in enumerate(element_search_result_list.children()):

联系人的Tips

if element_search_result_list.children()[0].offspring(self.id_contact_tips).exists():

if element_search_result.offspring(text=self.text_contact_tips).exists():

index_tips = index

break

4、点击第一个联系人进入聊天界面

element_search_result_list.children()[index_tips + 1].click()

接着尝试着给对方转账,如果好友关系正常,就会跳出一个支付页面让输入密码。

def __judge_is_friend(self, weixin_id, weixin_name):

“”"

判断是不是微信好友

:param weixin_id: 微信号

:return:

“”"

尝试给好友转账,设置一个小额度,以防止刷脸直接支付了

如果对方是你的好友,接下来会让你输入密码,关掉页面就行了

如果对方不是你的好友,会提示不是你的好友,不能继续操作了

5、点击好友界面的+按钮

self.poco(self.id_chat_more_button).click()

6、点击转账按钮

self.poco(self.id_chat_more_container).offspring(text=self.text_chat_transfer_account_text).click()

7、输入金额

self.poco(self.id_transfer_account_input).set_text(self.money)

8、点击转账按钮

self.poco(self.id_transfer_account_container).offspring(text=self.text_chat_transfer_account_text).click()

如果是僵尸粉,应用会弹出一个警告对话框,提示你不是收款方好友,没法完成转账的操作。

谁偷偷删了你的微信?别慌!Python 帮你都揪出来了

通过警告对话框是否存在,就可以判断好友关系是否正常。 非正常的好友关系,包含:僵尸粉、对方账号异常等。

10.弹出警告对话框

弹出好友关系不正常

if element_transfer_account_result_button:

提示内容

ransfer_account_result_tips = self.poco(self.id_transfer_account_result_tips).get_text()

if self.text_friend_no_tips in transfer_account_result_tips:

print(‘注意!%s已经把你拉黑了!!!’ % weixin_name)

self.friend_black_list.append({

‘id’: weixin_id,

‘nickName’: weixin_name

})

write_to_file(self.path_black_list, ‘id:%s,nickName:%s’ % (weixin_id, weixin_name))

elif self.text_friend_limit_tips in transfer_account_result_tips:

print(‘%s账号收到限制!!!’ % weixin_name)

write_to_file(self.path_account_limit, ‘id:%s,nickName:%s’ % (weixin_id, weixin_name))

elif self.text_friend_is_norm in transfer_account_result_tips:

print(‘%s好友关系不正常!!!’ % weixin_name)

write_to_file(self.path_relationship_unnormal, ‘id:%s,nickName:%s’ % (weixin_id, weixin_name))

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值