一个用于绕过杀软加载fscan的加载器
- 使用CGO技术将fscan项目编译成dll,并链接反射式加载静态库
- loader动态获取所需API,寻找dll的反射式加载入口,完成fscan的加载
-
确保已安装MSVC、GCC(MinGW64)、Go环境
-
拉取fscan项目
git clone https://github.com/shadow1ng/fscan.git
-
将fscan项目的main.go替换为以下内容
package main /* #cgo LDFLAGS: -L${SRCDIR}/lib -lreflective void DllInit(); */ import "C" import ( "fmt" "os" "github.com/shadow1ng/fscan/Common" "github.com/shadow1ng/fscan/Core" ) //export DllRegisterServer func DllRegisterServer() {} func init() { C.DllInit() //注册接受退出信号的回调函数 Common.InitLogger() var Info Common.HostInfo Common.Flag(&Info) 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() Core.Scan(Info) } func main() {}
-
在fscan项目下的/Common/Flag.go的Flag函数(58行)中添加以下代码
//加载器参数兼容 flag.Bool("fl", false, "从文件中加载fscan(默认model.bin)") flag.Bool("ul", false, "从URL中加载fscan") flag.Bool("xk", false, "设置加载fscan的xor密钥")
-
将本项目的lib目录拷贝到fscan项目下,执行命令生成libreflective.a文件
gcc -O0 -c -o libreflective.a reflective.c
-
在fscan项目下执行命令生成fscan.dll文件,将fscan.dll的第3、4、5、6字节内容都修改为 0x90
go build -buildmode=c-shared -ldflags="-w -s" -o fscan.dll
-
使用Visual Studio打开FscanLoader项目,选择x64架构,一键编译即可
其余参数和fscan一致
- 使用gcc编译静态库时一定要加 -O0 参数关闭编译器优化
- go build 命令务必添加 -ldflags="-w -s"参数来缩小dll的体积
- 仅在x86_64环境上测试,如需其他环境,请自行编译和验证
https://mp.weixin.qq.com/s/b0mphQG-nny0X087JsjsKQ
https://github.com/shadow1ng/fscan
(1) 本项目仅用于网络安全技术的学习研究。旨在提高安全开发能力,研发新的攻防技术。
(2) 若执意要将本项目用于渗透测试等安全业务,需先确保已获得足够的法律授权,在符合网络安全法的条件下进行。
(3) 本项目由个人独立开发,暂未做全面的软件测试,请使用者在虚拟环境中测试本项目功能。
(4) 本项目完全开源,请勿将本项目用于任何商业用途。
(5) 若使用者在使用本项目的过程中存在任何违法行为或造成任何不良影响,需使用者自行承担责任,与项目作者无关。