文章有误,不必看了

文章有误,不必看了

文章有误,不必看了

文章有误,不必看了

文章有误,不必看了

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

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

效果如下:

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

其实说起来思路也简略,便是一路排除各种文件夹,最终定位到微信寄存信息地点的文件夹,只支持PC 不过还是有一些小的知识点的

获取Pc用户名

便是这个C:\Users

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

首要从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)
        );
      });

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

  • 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}`);
  1. 首要运用运用fs.readdirSync()办法同步地读取指定途径folderPath下的文件和文件夹列表
  2. 然后过滤掉不是文件夹和不可能是用户途径的途径
  3. 最终回来完好途径

获取微信名

到上一步回来途径中文件夹里不包括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)