不知道你有没有经历过,想联系一位很长时间没有联系的朋友,发现对方很早之前已经把你删除了,而你还一无所知。linux
相信每一个人的微信通讯录里都存在一些「僵尸粉」,他们默默地躺在联系人列表中,你觉得对方仍是朋友,那就真是太年轻、太天真的;实际上,对方早就把从好友列表中删了,那如何来筛选出这群人呢?android
网上的很大量检测僵尸粉的工具,检测的时候会给微信通讯录内的每个好友发送一条检测信息,严重「打扰」到对方;另一部分软件在检测的时候,会植入一些代码病毒,暗箱操做显得很不安全。web
本篇文章的目的是自动化操做微信 App,经过「模拟给好友转帐」来筛选出全部的僵尸粉,并一键删除它们。算法
2spring
准 备 工 做sql
在开始编写脚本以前,须要作好以下准备工做数据库
一部 Root 后的 Android 手机或者模拟器,若是没有 Root 的设备,推荐使用网易 MuMu 模拟器安全
Android 开发环境、Android Studio微信
sqlcipher 图形化工具app
自动化工具:Python 虚拟环境下安装 pocoui
3
编 写 脚 本
整个操做分为 3 步骤,分别是破解微信数据库筛选出通讯录中的好友、模拟给好友转帐获得僵尸粉数据、删除全部僵尸粉。
第 1 步,咱们须要破解微信 App 的数据库。
ps:这里只是简单的说一下破解流程,想一键破解微信通讯录数据,能够跳过这一步,直接使用文末提供的 APK。
首先,咱们使用 Android Studio 新建一个项目,在项目初始化的时候,授予应用管理员权限以及修改微信目录的读写权限。
而后,获取微信数据库的密码。
微信数据库的密码是由设备的 imei 和微信的 uid 进过 md5 算法生成的。
接着,就可使用 SQLCipher 依赖库来对微信数据库进行查询,咱们须要为项目添加以下依赖,方便操做数据库。
利用上面获得的密码打开加密数据库,而后查询「rcontact」表获取微信通信录内全部的好友的微信号、昵称、用户名等数据。
须要注意的是,数据库中 rcontact 表的数据比较杂乱,除了正常的好友数据,黑名单好友、已删除好友、公众号、微信群等数据也包含在内,须要咱们经过 type 和 verifyFlag 字段进行筛选。
为了便于 Python 操做,最后将查询的好友数据写入到 csv 文件中。
第 2 步,咱们须要模拟给好友转帐,来判断这个好友关系是否正常。
首先,咱们须要初始化 Airtest,而后利用 adb 把第 1 步生成的数据从手机里导出到本地。
而后就是一系列自动化操做。
打开微信,遍历好友列表,拿到每个好友的微信号去搜索好友,跳转到好友的聊天界面。
接着尝试着给对方转帐,若是好友关系正常,就会跳出一个支付页面让输入密码。
若是是僵尸粉,应用会弹出一个警告对话框,提示你不是收款方好友,无法完成转帐的操做。
经过警告对话框是否存在,就能够判断好友关系是否正常。非正常的好友关系,包含:僵尸粉、对方帐号异常等。
最后,模拟点击手机的返回键,一直回退到微信主界面。
循环上面的操做,就能够判断出哪些是僵尸粉,哪些好友的帐号被限制,哪些是正常的好友关系。
第 3 步,删除上面获取到的僵尸粉列表。
拿到上面的僵尸粉数据列表,就能够利用上面的方式进行一系列自动化UI 操做,删除掉这些好友。
4
结 果 结 论
编译 Android 项目或者直接运行 APK 就能将微信通讯录的好友数据保存到项目文件目录下。
而后运行 Python 程序会遍历通信录好友数据,自动化去操做微信 App,接着将全部的僵尸粉写入到本地文件中,最后能够选择将这些僵尸粉所有删除掉。