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

不知道你有没有经历过,想联系一位很长时间没有联系的朋友,发现对方很早以前已经把你删除了,你还一无所知 。
相信每个人的微信通信录里都存在一些「僵尸粉」,他们默默地躺在联系人列表中,你以为对方还是朋友,那就真是太年轻、太天真的;实际上,对方早就把从好友列表中删了,那如何来筛选出这群人呢?

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

文章插图
 
这里要注意:不管你是刚学Python还是想找python高薪工作,记住:项目开发经验永远是核心,如果你没有python入门到高级实战视频教程,可以关注我,后台私信我 ‘py’ 自动获取最新python教程资料!还有老司机解答哦!
网上的很大量检测僵尸粉的工具,检测的时候会给微信通信录内的每一个好友发送一条检测信息,严重「打扰」到对方;另外一部分软件在检测的时候,会植入一些代码病毒,暗箱操作显得很不安全 。
谁偷偷删了你的微信?用Python分分钟揪出来

文章插图
 
本篇文章的目的是自动化操作微信 App,通过「模拟给好友转账」来筛选出所有的僵尸粉,并一键删除它们 。
2、准 备 工 作
在开始编写脚本之前,需要做好如下准备工作
  • 一部 Root 后的 Android 手机或者模拟器,如果没有 Root 的设备,推荐使用网易 MuMu 模拟器
  • Android 开发环境、Android Studio
  • sqlcipher 图形化工具
  • 自动化工具:Python 虚拟环境下安装 pocoui
3、编 写 脚 本
整个操作分为 3 步骤,分别是破解微信数据库筛选出通信录中的好友、模拟给好友转账得到僵尸粉数据、删除所有僵尸粉 。
第 1 步,我们需要破解微信 App 的数据库 。
ps:这里只是简单的说一下破解流程,想一键破解微信通信录数据,可以跳过这一步,直接使用文末提供的 APK 。
首先,我们使用 Android Studio 新建一个项目,在项目初始化的时候,授予应用管理员权限以及修改微信目录的读写权限 。
//微信 App 的目录public static final String WX_ROOT_PATH = "/data/data/com.tencent.mm/";/** * 执行linux指令 * * @param paramString*/public static void execRootCmd(String paramString){    try    {        Process localProcess = Runtime.getRuntime().exec("su");        Object localObject = localProcess.getOutputStream();        DataOutputStream localDataOutputStream = new DataOutputStream((OutputStream) localObject);        String str = String.valueOf(paramString);        localObject = str + "";        localDataOutputStream.writeBytes((String) localObject);        localDataOutputStream.flush();        localDataOutputStream.writeBytes("exit");        localDataOutputStream.flush();        localProcess.waitFor();        localObject = localProcess.exitValue();    } catch (Exception localException)    {        localException.printStackTrace();    }}//获取权限RootUtils.execRootCmd("chmod 777 -R " + WX_ROOT_PATH);然后,获取微信数据库的密码 。
微信数据库的密码是由设备的 imei 和微信的 uid 进过 md5 算法生成的 。
/** * 根据imei和uin生成的md5码,获取数据库的密码(去前七位的小写字母) * * @param imei * @param uin * @return */public static String getDbPassword(String imei, String uin){    if (TextUtils.isEmpty(imei) || TextUtils.isEmpty(uin))    {        Log.d("xag", "初始化数据库密码失败:imei或uid为空");        return "密码错误";     }     String md5 = MD5Utils.md5(imei + uin);     assert md5 != null;     return md5.substring(0, 7).toLowerCase();}


推荐阅读