作者 | 星安果
来源 | AirPython(ID:AirPython)
01 目标场景
不知道你有没有经历过,想联系一位很长时间没有联系的朋友,发现对方很早以前已经把你删除了,而你还一无所知。 相信每个人的微信通信录里都存在一些「 僵尸粉 」,他们默默地躺在联系人列表中,你以为对方还是朋友,那就真是太年轻、太天真的;实际上,对方早就把从好友列表中删了,那如何来筛选出这群人呢? 网上的很大量检测僵尸粉的工具,检测的时候会给微信通信录内的每一个好友发送一条检测信息,严重「 打扰 」到对方; 另外一部分软件在检测的时候,会植入一些代码病毒,暗箱操作显得很不安全。 本篇文章的目的是自动化操作微信 App,通过「 模拟给好友转账 」来筛选出所有的僵尸粉,并一键删除它们。 02 准备工作 在开始编写脚本之前,需要做好如下准备工作一部 Root 后的 Android 手机或者模拟器,如果没有 Root 的设备,推荐使用网易 MuMu 模拟器
Android 开发环境、Android Studio
sqlcipher 图形化工具
自动化工具:Python 虚拟环境下安装 pocoui
03 编写脚本
整个操作分为 3 步骤,分别是破解微信数据库筛选出通信录中的好友、模拟给好友转账得到僵尸粉数据、删除所有僵尸粉。 第 1 步,我们需要破解微信 App 的数据库。 ps: 这里只是简单的说一下破解流程,想一键破解微信通信录数据,可以跳过这一步,直接使用文末提供的 APK。 首先,我们使用 Android Studio 新建一个项目,在项目初始化的时候,授予应用管理员权限以及修改微信目录的读写权限。 然后,获取微信数据库的密码。 微信数据库的密码是由设备的 imei 和微信的 uid 进过 md5 算法生成的。 接着,就可以使用 SQLCipher 依赖库来对微信数据库进行查询,我们需要为项目添加如下依赖,方便操作数据库。 利用上面得到的密码打开加密数据库,然后查询「 rcontact 」表获取微信通讯录内所有的好友的微信号、昵称、用户名等数据。 需要注意的是,数据库中 rcontact 表的数据比较杂乱,除了正常的好友数据,黑名单好友、已删除好友、公众号、微信群等数据也包含在内,需要我们通过 type 和 verifyFlag 字段进行筛选。 为了便于 Python 操作,最后将查询的好友数据写入到 csv 文件中。 第 2 步,我们需要模拟给好友转账,来判断这个好友关系是否正常。 首先,我们需要初始化 Airtest,然后利用 adb 把第 1 步生成的数据从手机里导出到本地。 然后就是一系列自动化操作。 打开微信,遍历好友列表,拿到每一个好友的微信号去搜索好友,跳转到好友的聊天界面。 接着尝试着给对方转账,如果好友关系正常,就会跳出一个支付页面让输入密码。 如果是僵尸粉,应用会弹出一个警告对话框,提示你不是收款方好友,没法完成转账的操作。 通过警告对话框是否存在,就可以判断好友关系是否正常。 非正常的好友关系,包含:僵尸粉、对方账号异常等。 最后,模拟点击手机的返回键,一直回退到微信主界面。循环上面的操作,就可以判断出哪些是僵尸粉,哪些好友的账号被限制,哪些是正常的好友关系。
第 3 步,删除上面获取到的僵尸粉列表。
拿到上面的僵尸粉数据列表,就可以利用上面的方式进行一系列自动化UI 操作,删除掉这些好友。
04 结果结论编译 Android 项目或者直接运行 APK 就能将微信通信录的好友数据保存到项目文件目录下。
然后运行 Python 程序会遍历通讯录好友数据,自动化去操作微信 App,接着将所有的僵尸粉写入到本地文件中,最后可以选择将这些僵尸粉全部删除掉。
我已经将全部源码上传到后台上,关注公众号后回复「 僵尸粉 」即可获得,文中的 APK 可以直接回复「 730 」获取下载链接。
如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。
(*本文为 Python大本营转载文章,转载请联系原作者)
社群福利
扫码添加小助手,回复:大会,加入2019 AI开发者大会福利群,每周一、三、五更新技术福利,还有不定期的抽奖活动~
◆
AI 开发者大会精彩提前看
◆
2019 AI开发者大会重磅嘉宾更新:阿里、华为、Google Brain、Amazon、微软中国、百度、京东、小米、快手、科大讯飞、商汤、旷视、图森、云知声、思必驰...“硬核AI技术大会,一年参加一次就够了”。扫码查看更多嘉宾和大会信息。
推荐阅读:
干货 | 20个Python教程,掌握时间序列的特征分析(附代码)
吐血整理!140种Python标准库、第三方库和外部工具都有了
用Python分析“标题党”文章
Python传奇:30年崛起之路
干货 | Python后台开发的高并发场景优化解决方案
阿里巴巴杨群:高并发场景下Python的性能挑战
你点的每个“在看”,我都认真当成了喜欢