mirror of
https://github.com/shadow1ng/fscan.git
synced 2025-09-14 14:06:44 +08:00

- 在main.go中添加initLocalPlugins函数,从插件注册表动态获取本地插件列表 - 修改Common/Flag.go使用动态插件列表进行验证 - 消除硬编码插件名称,支持自动发现新插件 - 插件列表按字母顺序排序,保持一致性 - 修复循环导入问题 - 添加cleaner插件自毁脚本到.gitignore - 创建完整的参数说明文档
88 lines
3.0 KiB
Go
88 lines
3.0 KiB
Go
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)
|
||
}
|