package main import ( "fmt" "os" "sort" "github.com/shadow1ng/fscan/common" "github.com/shadow1ng/fscan/core" "github.com/shadow1ng/fscan/plugins/base" // 引入本地插件以触发注册 _ "github.com/shadow1ng/fscan/plugins/local/fileinfo" // 已重构,可用 _ "github.com/shadow1ng/fscan/plugins/local/dcinfo" // 已重构,可用 _ "github.com/shadow1ng/fscan/plugins/local/minidump" // 已重构,可用 _ "github.com/shadow1ng/fscan/plugins/local/reverseshell" // 已重构,可用 _ "github.com/shadow1ng/fscan/plugins/local/socks5proxy" // 已重构,可用 _ "github.com/shadow1ng/fscan/plugins/local/avdetect" // 已重构,可用 _ "github.com/shadow1ng/fscan/plugins/local/forwardshell" // 新增,可用 // Linux持久化插件 _ "github.com/shadow1ng/fscan/plugins/local/ldpreload" // Linux LD_PRELOAD持久化 _ "github.com/shadow1ng/fscan/plugins/local/shellenv" // Linux Shell环境变量持久化 _ "github.com/shadow1ng/fscan/plugins/local/crontask" // Linux Cron计划任务持久化 _ "github.com/shadow1ng/fscan/plugins/local/systemdservice" // Linux Systemd服务持久化 // Windows持久化插件 _ "github.com/shadow1ng/fscan/plugins/local/winregistry" // Windows 注册表持久化 _ "github.com/shadow1ng/fscan/plugins/local/winstartup" // Windows 启动文件夹持久化 _ "github.com/shadow1ng/fscan/plugins/local/winschtask" // Windows 计划任务持久化 _ "github.com/shadow1ng/fscan/plugins/local/winservice" // Windows 服务持久化 _ "github.com/shadow1ng/fscan/plugins/local/winwmi" // Windows WMI事件订阅持久化 // 监控插件 _ "github.com/shadow1ng/fscan/plugins/local/keylogger" // 跨平台键盘记录 // 实用工具插件 _ "github.com/shadow1ng/fscan/plugins/local/downloader" // 跨平台文件下载 _ "github.com/shadow1ng/fscan/plugins/local/cleaner" // 跨平台系统痕迹清理 ) // initLocalPlugins 初始化本地插件列表 func initLocalPlugins() { var localPlugins []string // 获取所有注册的插件 allPlugins := base.GlobalPluginRegistry.GetAll() for _, pluginName := range allPlugins { metadata := base.GlobalPluginRegistry.GetMetadata(pluginName) if metadata != nil && metadata.Category == "local" { localPlugins = append(localPlugins, pluginName) } } // 排序以保持一致性 sort.Strings(localPlugins) // 设置全局变量 common.LocalPluginsList = localPlugins } func main() { // 初始化本地插件列表 initLocalPlugins() var Info common.HostInfo common.Flag(&Info) // 在flag解析后初始化logger,确保LogLevel参数生效 common.InitLogger() // 解析 CLI 参数 if err := common.Parse(&Info); err != nil { os.Exit(1) } // 初始化输出系统,如果失败则直接退出 if err := common.InitOutput(); err != nil { common.LogError(fmt.Sprintf("初始化输出系统失败: %v", err)) os.Exit(1) } defer common.CloseOutput() // 执行 CLI 扫描逻辑 core.RunScan(Info) }