红队工具魔改:FRP代理改造

admin 2026-01-31 23:47:12 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文中介绍了FRP内网穿透工具的魔改方案以提升红队行动隐蔽性。核心包括优化配置支持多协议与TLS加密压缩;修改msg.go混淆JSON字段名去除流量特征;调整TLS握手默认字节规避检测;并增加启动密码验证机制。这些改造有效规避了流量分析与识别,增强了代理工具的安全性与可用性。 综合评分: 89 文章分类: 红队,内网渗透,免杀,安全工具


cover_image

红队工具魔改: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代理改造》

评论:0   参与:  0