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

2023年 8月 13日 76.7k 0

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

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

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

效果如下:

image.png

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

获取Pc用户名

就是这个C:Users

image.png

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

 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)
        );
      });

image.png

  • stats.isDirectory():判断给定路径是否是一个目录,即判断是否为文件夹。
  • !file.startsWith('.'):排除以点开头的文件或文件夹,通常是隐藏文件或文件夹。
  • !excludedFolders.includes(file):排除excludedFolders数组中包含的文件夹名称。

确定WeChat Files的路径

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

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;
  }
}

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

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

WeChat Files
     |-weixin1
     |-weixin2
     |-common
     |--

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

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

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

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

    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;
    }
    

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

    获取聊天记录的文件

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

    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)

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论