文章总结: 文中介绍了FRP内网穿透工具的魔改方案以提升红队行动隐蔽性。核心包括优化配置支持多协议与TLS加密压缩;修改msg.go混淆JSON字段名去除流量特征;调整TLS握手默认字节规避检测;并增加启动密码验证机制。这些改造有效规避了流量分析与识别,增强了代理工具的安全性与可用性。 综合评分: 89 文章分类: 红队,内网渗透,免杀,安全工具
红队工具魔改:FRP代理改造
原创
Hyyrent Hyyrent
0xSecurity
2026年1月31日 10:30 广东
使用方法
frpc.exe theshy(启动密码) my.toml
-d 参数可删除配置文件
配置文件参数优化
protocol: 支持tcp/kcp/websocket
websocket_domain: 新增参数,用于http请求里修改host字段。(如果是tcp/kcp则无需该参数)
tls_enable:开启tls加密,这样所有流量都是加密传输。
delete:新增参数,用于加载配置文件后自动删除配置文件。
http_proxy:用于仅http代理出网场景。
use_compression:开启数据压缩,减少带宽压力
transport.tls.disableCustomTLSFirstByte = true TLS不发送0x17
- ## 去除特征
修改 pkg\msg\msg.go
typeLoginstruct {
Version string `json:"O"`
Hostname string `json:"P"`
Os string `json:"Q"`
Arch string `json:"A"`
User string `json:"C"`
PrivilegeKeystring `json:"V"`
Timestamp int64 `json:"B"`
RunID string `json:"N"`
Metas map[string]string`json:"F"`
// Some global configures.N
PoolCountint`json:"OP"`
}
typeLoginRespstruct {
Versionstring`json:"MN"`
RunID string`json:"FC"`
Error string`json:"DC"`
}
TLS默认字节修改
从 v0.25.0 版本开始 FRPC 和 FRPS 之间支持通过 TLS 协议加密传输,为了端口复用,FRP 建立 TLS 连接的第一个字节为 0x17 ,有些流量识别程序识别到特定流量,可能会阻拦,故我们可以对其进行修改。
功能点在 pkg/util/net/tls.go 文件中修改
……
// var FRPTLSHeadByte = 0x17
// 修改为下方,可自定义其它
varFRPTLSHeadByte=0x33
funcCheckAndEnableTLSServerConnWithTimeout(
cnet.Conn, tlsConfig*tls.Config, tlsOnlybool, timeouttime.Duration,
) (outnet.Conn, isTLSbool, custombool, errerror) {
sc, r :=libnet.NewSharedConnSize(c, 2)
buf :=make([]byte, 1)
varnint
_=c.SetReadDeadline(time.Now().Add(timeout))
n, err=r.Read(buf)
_=c.SetReadDeadline(time.Time{})
iferr!=nil {
return
}
1.3
var (
srcAddr string
dstAddr string
srcPortStr string
dstPortStr string
srcPort int
dstPort int
)
if src != nil {
srcAddr, srcPortStr, _ = net.SplitHostPort(src.String())
srcPort, _ = strconv.Atoi(srcPortStr)
}
if dst != nil {
dstAddr, dstPortStr, _ = net.SplitHostPort(dst.String())
dstPort, _ = strconv.Atoi(dstPortStr)
}
带参数启动
cmd/client/sub/root.go
func Execute() {
if len(os.Args) == 1 {
fmt.Println(fmt.Sprintf("'%s' is not recognized as an internal or external command.", os.Args[0]))
os.Exit(0)
} else {
runStatus := false
// 判断参数是否正确
tmpSlice := []string{os.Args[0]}
for _, i := range os.Args[1:] {
tmp := md5.Sum([]byte(i))
result := hex.EncodeToString(tmp[:])
if result == "098f6bcd4621d373cade4e832627b4f6" { // 用于测试的MD5值
runStatus = true
} else {
tmpSlice = append(tmpSlice, i)
}
}
os.Args = tmpSlice
if runStatus {
if err := rootCmd.Execute(); err != nil {
os.Exit(1)
}
} else {
fmt.Println(fmt.Sprintf("'%s' is not recognized as an internal or external command.", os.Args[0]))
os.Exit(0)
}
}
}
效果实现
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:0xSecurity Hyyrent Hyyrent《红队工具魔改:FRP代理改造》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论