FRP编译并去除流量特征

环境准备

配置Go编译环境

1.下载go依赖包

$ wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz

2.安装并配置环境变量

$ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz

$ vi /etc/profile
##在末尾添加
export GOROOT=/usr/local/go
export GOPATH=/home/work/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin:GOBIN

$ source /etc/profile

3.检查go版本号

$ go version
go version go1.19.5 linux/amd64

编译FRP

1.下载源码包
从https://github.com/fatedier/frp下载最新版本,并上传到服务器。当前最新版本为0.46.1,所以本次编译以此版本为准。

2.解压源码包

$ unzip frp-0.46.1.zip
$ cd frp-0.46.1

3.修改流量特征

消息JSON特征

$ vi pkg/msg/msg.go
……
type Login struct {
	Version      string            `json:"version,omitempty"`
	Hostname     string            `json:"hostname,omitempty"`
	Os           string            `json:"os,omitempty"`
	Arch         string            `json:"arch,omitempty"`
	User         string            `json:"user,omitempty"`
	PrivilegeKey string            `json:"privilege_key,omitempty"`
	Timestamp    int64             `json:"timestamp,omitempty"`
	RunID        string            `json:"run_id,omitempty"`
	Metas        map[string]string `json:"metas,omitempty"`

	// Some global configures.
	PoolCount int `json:"pool_count,omitempty"`
}
……
#将json后面双引号的中内容修改为其他字符串,比如如下所示:
type Login struct {
        Version      string            `json:"vy"`
        Hostname     string            `json:"hy"`
        Os           string            `json:"oty"`
        Arch         string            `json:"aty"`
        User         string            `json:"uty"`
        PrivilegeKey string            `json:"pty"`
        Timestamp    int64             `json:"tmpty"`
        RunID        string            `json:"rpty"`
        Metas        map[string]string `json:"mty"`

        // Some global configures.
        PoolCount int `json:"poy"`
}

#修改完成后保存文件

TLS连接特征

$ vi pkg/util/net/tls.go
//var FRPTLSHeadByte = 0x17
//修改为
var FRPTLSHeadByte = 0x88
func CheckAndEnableTLSServerConnWithTimeout(
	c net.Conn, tlsConfig *tls.Config, tlsOnly bool, timeout time.Duration,
) (out net.Conn, isTLS bool, custom bool, err error) {
	//sc, r := gnet.NewSharedConnSize(c, 2)
	//buf := make([]byte, 1)
	//修改为
	sc, r := gnet.NewSharedConnSize(c, 4)
	buf := make([]byte, 3)
	var n int
	_ = c.SetReadDeadline(time.Now().Add(timeout))
	n, err = r.Read(buf)
	_ = c.SetReadDeadline(time.Time{})
	if err != nil {
		return
	}

	switch {
	//case n == 1 && int(buf[0]) == FRPTLSHeadByte:
	//修改为
	case n == 3 && int(buf[0]) == FRPTLSHeadByte:
		out = tls.Server(c, tlsConfig)
		isTLS = true
		custom = true
	case n == 1 && int(buf[0]) == 0x16:
		out = tls.Server(sc, tlsConfig)
		isTLS = true
	default:
		if tlsOnly {
			err = fmt.Errorf("non-TLS connection received on a TlsOnly server")
			return
		}
		out = sc
	}
	return
}
#修改完成后保存

# vi pkg/util/net/dial.go
func DialHookCustomTLSHeadByte(enableTLS bool, disableCustomTLSHeadByte bool) libdial.AfterHookFunc {
        return func(ctx context.Context, c net.Conn, addr string) (context.Context, net.Conn, error) {
                if enableTLS && !disableCustomTLSHeadByte {
                        //_, err := c.Write([]byte{byte(FRPTLSHeadByte)})
                        //修改为
                        _, err := c.Write([]byte{byte(FRPTLSHeadByte), byte(0x61), byte(0x63)})
                        if err != nil {
                                return nil, nil, err
                        }
                }
                return ctx, c, nil
        }
}

4.编译

$ make -f Makefile.cross-compiles

至此,手动修改源码特征后编译完成,可以根据部署系统需要在release目录下找到对应操作系统的版本。

参考:
https://www.cnblogs.com/N0r4h/p/15848541.html
https://www.talaxy.site/lets-use-frp/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Wireshark抓取frp流量时,可以通过分析数据包来获取有关frp的信息。根据引用\[2\]的描述,可以使用Wireshark抓取frpc和frps的连接数据包。在这些数据包中,可以观察到经典的TCP三次握手过程,并且从第六个数据包中可以找到frpc和frps使用的私有协议的认证信息。通过查看数据包的长度,可以初步判断其中是否包含frp的认证数据。此外,引用\[3\]提到,通过查看frp流量中的数据包,可以发现大量的TCP数据包和ack回应数据包,其中可能包含执行的命令和响应内容。通过对数据包的内容进行安全检测,可以进行相应的防御措施。因此,通过使用Wireshark抓取frp流量,可以获取有关frp的认证信息和执行的命令内容。 #### 引用[.reference_title] - *1* *2* [抓住黑客-爆破frp](https://blog.csdn.net/Gamma_lab/article/details/122911009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [内网穿透从搭建到溯源(内网隧道搭建、绕过、隧道流量分析、日志分析、隧道防护)](https://blog.csdn.net/u012206617/article/details/114012822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值