安全工具篇Go魔改二开Fscan扫描FRP代理特征消除新增扩展打乱HASH

📅 发布时间:2026/7/10 20:49:15 👁️ 浏览次数:
安全工具篇Go魔改二开Fscan扫描FRP代理特征消除新增扩展打乱HASH
免杀对抗——第一百六十五天安全工具篇Go魔改二开Fscan扫描FRP代理特征消除新增扩展打乱HASH安全工具 - Goland-FRP魔改二开特征消除FRP是一种快速的反向代理允许你将位于NAT或防火墙后的本地服务器暴露在互联网上。目前它支持TCP和UDP以及HTTP和HTTPS协议使请求可以通过域名转发到内部服务也是内网常用的内网穿透工具。下载地址https://github.com/fatedier/frp同样这玩意下载下就全部被杀所以我们还是需要魔改把源码拖到本地然后通过make进行编译这里因为Kali上自带make所以尽量是放到Kali上编译make-f Makefile.cross-compiles但是这种直接编译的还是没啥用因为这个frp是流量转发工具所以除了对一些特征进行更改之外还需要对流量特征进行更改比如在pkg/msg/msg.go文件中把传输的数据特征改掉然后在pkg/util/net/tls.go文件中将FRPTLSHeadByte改掉版本特征也可以改掉在pkg/util/version/version.go文件中这样改动之后对免杀有一定的效果在这个基础上也可以进行加壳、加保护、加签名、降低熵值等等操作当然这个只是治标不治本的方法一些较强的杀软或者是EDR设备还是过不了因此还是需要更深层的改动但这里我们也不深入改了有兴趣的可以根据这篇文章自己下去尝试【神兵利器】手把手教你魔改frp安全工具 - Goland-FScan魔改二开特征消除工具混淆fscan是一款内网综合扫描工具方便一键自动化、全方位漏扫扫描体积小、扫描快、功能多因此在内网扫描当中非常受欢迎。下载地址Releases · shadow1ng/fscan但是这个工具已经是被杀毒软件杀得不要不要的所以我们需要对其进行免杀处理和之前一样我们可以从如下方面入手对EXE成品加签名、加壳、加保护、降低熵值等等转换为二进制/dll文件通过Loader加载调用对源码重新编译修改源码逻辑重新写一个新的工具那我们这里就从简单到难首先看看重新编译的效果这个的主要目的就是改变文件的哈希值将文件源代码下载下来之后用goland打开记得关杀毒执行如下命令编译go build -ldflags-s -w-trimpath main.go但是自己编译出来的目前也是直接被杀因此我们可以更进一步通过DLL加载调用加载器代码如下#includestdio.h#includewindows.hintmain(){HMODULE hDLL;hDLLLoadLibrary(fscan.dll);if(hDLL!NULL){// 定义函数指针类型typedefvoid(*FunctionType)();// 为每个导出函数创建一个函数指针FunctionType DllCanUnloadNow(FunctionType)GetProcAddress(hDLL,DllCanUnloadNow);FunctionType DllGetClassObject(FunctionType)GetProcAddress(hDLL,DllGetClassObject);FunctionType DllRegisterServer(FunctionType)GetProcAddress(hDLL,DllRegisterServer);FunctionType DllUnregisterServer(FunctionType)GetProcAddress(hDLL,DllUnregisterServer);// 调用每个函数如果函数指针非空if(DllCanUnloadNow)DllCanUnloadNow();if(DllGetClassObject)DllGetClassObject();if(DllRegisterServer)DllRegisterServer();if(DllUnregisterServer)DllUnregisterServer();// 卸载 DLL FreeLibrary(hDLL);printf(All functions executed successfully.\n);}else{printf(Failed to load DLL.\n);}return0;}go启动代码如下packagemainimportCimport(fmttimegithub.com/wjlin0/fscan/Pluginsgithub.com/wjlin0/fscan/common)//export DllCanUnloadNowfuncDllCanUnloadNow(){}//export DllGetClassObjectfuncDllGetClassObject(){}//export DllRegisterServerfuncDllRegisterServer(){}//export DllUnregisterServerfuncDllUnregisterServer(){}funcinit(){start:time.Now()varInfo common.HostInfo common.Flag(Info)common.Parse(Info)Plugins.Scan(Info)t:time.Now().Sub(start)fmt.Printf([*] 扫描结束,耗时: %s\n,t)}funcmain(){}然后通过如下命令分别编译加载器和启动代码gcc -o fscan_loader.exe main.c go build -buildmodec-shared -o fscan.dll main.go运行fscan_loader.exe就可以调用fscan工具了这个可以过火绒、DF但是卡巴过不了然后这里引用的库是github.com/wjlin0/fscan/Plugins这个不是官方的库如果引用官方的库可能就会杀这里如果要用最新版可以直接fork到自己的仓库然后改一下依赖即可新增PoC在fscan中是有一些常见Web PoC扫描的在/WebScan/pocs目录下如果我们想引入一些最新的漏洞PoC可以自己新增这里就不再演示了怎么编写yml的PoC之前的课程也讲到过写完之后重新打包即可go build -buildmodec-shared -o fscan.dll ./main.go对于其他的非Web模块的漏洞可以在/Plugins目录下新增其他的插件或者漏洞扫描模块比如这里我们新增一个zookeeper未授权连接的探测功能首先在该目录下创建ZookeeperConn.go文件packagePluginsimport(fmtstringstimegithub.com/samuel/go-zookeeper/zkgithub.com/shadow1ng/fscan/Common)funcZookeeperScan(info*Common.HostInfo)error{// Trim inputsinfo.Hoststrings.TrimSpace(info.Host)info.Portsstrings.TrimSpace(info.Ports)varaddresses[]stringifinfo.Ports{// default zookeeper portaddressesappend(addresses,fmt.Sprintf(%s:%d,info.Host,2181))}elseifstrings.Contains(info.Ports,,){ports:strings.Split(info.Ports,,)for_,port:rangeports{p:strings.TrimSpace(port)ifp{continue}addressesappend(addresses,fmt.Sprintf(%s:%s,info.Host,p))}}else{addressesappend(addresses,fmt.Sprintf(%s:%s,info.Host,info.Ports))}conn,err:ZookeeperConn(addresses,time.Duration(Common.Timeout)*time.Second)iferr!nil{errlog:fmt.Sprintf([-] Zookeeper %v:%v connect failed, %v,info.Host,info.Ports,err)Common.LogError(errlog)returnerr}deferconn.Close()// 检查根节点是否存在作为未授权访问的判断依据exists,_,err:conn.Exists(/)iferr!nil{errlog:fmt.Sprintf([-] Zookeeper %v:%v check unauthorized failed, %v,info.Host,info.Ports,err)Common.LogError(errlog)returnerr}ifexists{result:fmt.Sprintf([] Zookeeper %v:%v unauthorized,info.Host,info.Ports)Common.LogSuccess(result)_Common.SaveResult(Common.ScanResult{Time:time.Now(),Type:Common.VULN,Target:fmt.Sprintf(%s:%s,info.Host,info.Ports),Status:vulnerable,Details:map[string]interface{}{service:zookeeper,vulnerability:unauthorized-access},})}returnnil}funcZookeeperConn(addresses[]string,timeout time.Duration)(*zk.Conn,error){conn,_,err:zk.Connect(addresses,timeout)iferr!nil{returnnil,fmt.Errorf(connect to Zookeeper failed: %v,err)}returnconn,nil}如果是旧版按小迪的流程注册插件即可如果是新版只需要在/Core/Registry.go文件中添加如下代码即可Common.RegisterPlugin(zookeeperconn,Common.ScanPlugin{Name:ZookeeperConn,Ports:[]int{2181},ScanFunc:Plugins.ZookeeperScan,Types:[]string{Common.PluginTypeService},})因为是测试未授权所有不需要在/Core/Config.go中添加暴力破解的账户以及密码然后我们在/Common/Ports.go文件的var MainPorts里面加入2181端口运行如下命令进行扫描探测fscan.exe -hIP可以看到这里能够成功发现了zookeeper的未授权访问漏洞所以我们如果想增加一些服务漏洞扫描或者其他插件功能就可以在这里自行添加