MCPcopy Index your code
hub / github.com/Goqi/Erfrp

github.com/Goqi/Erfrp @v0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1 ↗ · + Follow
1,758 symbols 5,974 edges 142 files 148 documented · 8%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Erfrp-frp二开-免杀与隐藏

本项目是frp的二开项目。frp是fatedier开发的一款优秀的反向代理工具,可以将本地服务器暴露在互联网上。但原程序对攻击队而言并不优雅,希望本项目可以为攻击队贡献一个完美的FRP二开项目!作者:0e0w

本项目创建于2022年4月18日,最近的更新时间为2022年11月18日。

01-项目结构修改

本项目基于frp-0.45.0。对项目结构进行了调整,调整后的项目结构如下:

│  frpc.go
│  frps.go
├─cmd
│  ├─frpc
│  │      http.go
│  │      https.go
│  │      reload.go
│  │      root.go
│  │      status.go
│  │      stcp.go
│  │      sudp.go
│  │      tcp.go
│  │      tcpmux.go
│  │      udp.go
│  │      verify.go
│  │      xtcp.go
│  │      
│  └─frps
│          root.go
│          verify.go
│          
├─pkg
│  ├─assets
│  │  │  assets.go
│  │  │  
│  │  ├─frpc
│  │  │  │  embed.go
│  │  │  └─static
│  │  │          
│  │  └─frps
│  │      │  embed.go
│  │      └─static
│  │              
│  ├─auth
│  │      auth.go
│  │      oidc.go
│  │      token.go
│  │      
│  ├─client
│  │  │  admin.go
│  │  │  admin_api.go
│  │  │  control.go
│  │  │  service.go
│  │  │  visitor.go
│  │  │  visitor_manager.go
│  │  │  
│  │  ├─event
│  │  │      event.go
│  │  │      
│  │  ├─health
│  │  │      health.go
│  │  │      
│  │  └─proxy
│  │          proxy.go
│  │          proxy_manager.go
│  │          proxy_wrapper.go
│  │      
│  ├─config
│  │      client.go
│  │      client_test.go
│  │      DefaultiniBytefrpc.go
│  │      DefaultiniBytefrps.go
│  │      parse.go
│  │      proxy.go
│  │      proxy_test.go
│  │      README.md
│  │      server.go
│  │      server_test.go
│  │      types.go
│  │      types_test.go
│  │      utils.go
│  │      value.go
│  │      visitor.go
│  │      visitor_test.go
│  │      
│  ├─consts
│  │      consts.go
│  │      
│  ├─dscrypto
│  │      aes.go
│  │      des.go
│  │      md5.go
│  │      rsa.go
│  │      rsa_private_key.pem
│  │      rsa_public_key.pem
│  │      sha1.go
│  │      var.go
│  │      
│  ├─errors
│  │      errors.go
│  │      
│  ├─metrics
│  │  │  metrics.go
│  │  │  
│  │  ├─aggregate
│  │  │      server.go
│  │  │      
│  │  ├─mem
│  │  │      server.go
│  │  │      types.go
│  │  │      
│  │  └─prometheus
│  │          server.go
│  │          
│  ├─msg
│  │      ctl.go
│  │      msg.go
│  │      
│  ├─nathole
│  │      nathole.go
│  │      
│  ├─plugin
│  │  ├─client
│  │  │      http2https.go
│  │  │      https2http.go
│  │  │      https2https.go
│  │  │      http_proxy.go
│  │  │      plugin.go
│  │  │      socks5.go
│  │  │      static_file.go
│  │  │      unix_domain_socket.go
│  │  │      
│  │  └─server
│  │          http.go
│  │          manager.go
│  │          plugin.go
│  │          tracer.go
│  │          types.go
│  │          
│  ├─proto
│  │  └─udp
│  │          udp.go
│  │          udp_test.go
│  │          
│  ├─server
│  │  │  control.go
│  │  │  dashboard.go
│  │  │  dashboard_api.go
│  │  │  service.go
│  │  │  
│  │  ├─controller
│  │  │      resource.go
│  │  │      
│  │  ├─group
│  │  │      group.go
│  │  │      http.go
│  │  │      tcp.go
│  │  │      tcpmux.go
│  │  │      
│  │  ├─metrics
│  │  │      metrics.go
│  │  │      
│  │  ├─ports
│  │  │      ports.go
│  │  │      
│  │  ├─proxy
│  │  │      http.go
│  │  │      https.go
│  │  │      proxy.go
│  │  │      stcp.go
│  │  │      sudp.go
│  │  │      tcp.go
│  │  │      tcpmux.go
│  │  │      udp.go
│  │  │      xtcp.go
│  │  │      
│  │  └─visitor
│  │          visitor.go
│  │          
│  ├─transport
│  │      tls.go
│  │      
│  ├─util
│  │  ├─limit
│  │  │      reader.go
│  │  │      writer.go
│  │  │      
│  │  ├─log
│  │  │      log.go
│  │  │      
│  │  ├─metric
│  │  │      counter.go
│  │  │      counter_test.go
│  │  │      date_counter.go
│  │  │      date_counter_test.go
│  │  │      metrics.go
│  │  │      
│  │  ├─net
│  │  │      conn.go
│  │  │      dial.go
│  │  │      http.go
│  │  │      kcp.go
│  │  │      listener.go
│  │  │      tls.go
│  │  │      udp.go
│  │  │      websocket.go
│  │  │      
│  │  ├─tcpmux
│  │  │      httpconnect.go
│  │  │      
│  │  ├─util
│  │  │      http.go
│  │  │      util.go
│  │  │      util_test.go
│  │  │      
│  │  ├─version
│  │  │      version.go
│  │  │      version_test.go
│  │  │      
│  │  ├─vhost
│  │  │      http.go
│  │  │      https.go
│  │  │      https_test.go
│  │  │      resource.go
│  │  │      router.go
│  │  │      vhost.go
│  │  │      
│  │  └─xlog
│  │          ctx.go
│  │          xlog.go
│  │          
│  └─web
│      ├─frpc
│      │  └─src            
│      └─frps
│          └─src

02-项目功能修改

  • [x] 程序运行判断是否存在frpc.ini或frps.ini文件,不存在则自动创建。

``` // 自动生成frpc.ini和frps.ini func init() { frpcini := "frpc.ini" if , errFileExist := os.Stat(frpcini); errFileExist != nil { f, err := os.Create(frpcini) if err != nil { os.Exit(1) } , err = f.Write(config.DefaultiniBytefrpc) }

} ```

  • [ ] 全部的参数都从ini文件获取?or 全部的参数都写到go文件中?#Todo

  • [ ] 加入命令执行模块#Todo

03-静态特征修改

  • [ ] 去除日志打印相关内容#Todo
  • [ ] 去除FRP相关的字段内容#Todo

04-流量特征修改

  • [x] 0x17特征修改
  • [x] 默认开启TLS

05-敏感信息隐藏

// 删除配置文件 // 程序运行时添加--delini命令 if delEnable == true { err := os.Remove(cfgFile) if err != nil { return err } }

``` func GetRenderedConfFromFile(path string) (out []byte, err error) { var b []byte rawUrl := path if strings.Contains(rawUrl, "http") { log.Info("Remote load ini file") response, _err1 := http.Get(path) if _err1 != nil { return } defer response.Body.Close() body, _err := io.ReadAll(response.Body) if _err != nil { return } httpContent := string(body) var content = []byte(httpContent) out, err = RenderContent(content) return

} else {
    log.Info("Local load ini file")
    b, err = os.ReadFile(path)
    if err != nil {
        return
    }
    localContent := string(b)
    var content = []byte(localContent)
    out, err = RenderContent(content)
    return
}

} ```

``` package dscrypto

// 对服务器IP进行隐藏需要修改此处的AESKey和AESencryptCode。 // 同时需要对frpc.ini中的server_addr进行修改,修改成AESencryptCode。 // server_addr支持正常的ip和加密之后的ip,2种形式。 var ( VpsIP = "192.168.1.22" AESKey = "9d9d14b5f6650726afe17e1af4052632" //Erfrp AESencryptCode = "J6X+PfMnVldSaM1tpjaNKw==" //AESencryptCode = "2HrQDAPV5JgjckfYkO9u4g==" ) ```

06-参考项目资源

  • frp代码分析报告
  • https://github.com/atsud0/frp-modify
  • https://github.com/OrangeWatermelon/frp_cmd
  • https://github.com/baibaicloud/frp
  • https://github.com/seventeenman/Forest
  • https://github.com/XiaoMingXD/SakuraFrp
  • https://github.com/uknowsec/frpModify
  • https://github.com/NS-Sp4ce/Frp_modify
  • https://github.com/g0h3aler/frp-owner
  • https://www.nctry.com/2358.html
  • https://www.anquanke.com/post/id/231424
  • https://www.anquanke.com/post/id/231685
  • https://cn-sec.com/archives/1369447.html
  • https://blog.csdn.net/weixin_38989540/article/details/105924886
  • https://blog.csdn.net/Workers77/article/details/124802570

Extension points exported contracts — how you extend this code

Visitor (Interface)
Visitor is used for forward traffics from local port tot remote service. [22 implementers]
pkg/client/visitor.go
ServerMetrics (Interface)
(no doc) [4 implementers]
pkg/server/metrics/metrics.go
CounterMetric (Interface)
CounterMetric represents a single numerical value that only ever goes up. [2 implementers]
pkg/util/metric/metrics.go
CreatorFn (FuncType)
params has prefix "plugin_"
pkg/plugin/client/plugin.go
Setter (Interface)
(no doc) [2 implementers]
pkg/auth/auth.go
Collector (Interface)
(no doc) [1 implementers]
pkg/metrics/mem/types.go
ProxyConf (Interface)
(no doc)
pkg/config/proxy.go
Proxy (Interface)
Proxy defines how to handle work connections for different proxy type.
pkg/client/proxy/proxy.go

Core symbols most depended-on inside this repo

n
called by 2560
pkg/assets/frps/static/vendor.js
o
called by 724
pkg/assets/frpc/static/vendor.js
i
called by 484
pkg/assets/frps/static/vendor.js
o
called by 477
pkg/assets/frps/static/vendor.js
r
called by 303
pkg/assets/frps/static/vendor.js
n
called by 235
pkg/assets/frpc/static/vendor.js
a
called by 223
pkg/assets/frps/static/vendor.js
l
called by 191
pkg/assets/frps/static/vendor.js

Shape

Function 980
Method 551
Struct 177
Interface 18
Class 16
FuncType 10
TypeAlias 6

Languages

Go56%
TypeScript44%

Modules by API surface

pkg/assets/frps/static/vendor.js368 symbols
pkg/assets/frpc/static/vendor.js368 symbols
pkg/config/proxy.go85 symbols
pkg/client/proxy/proxy.go40 symbols
pkg/server/proxy/proxy.go27 symbols
pkg/util/net/conn.go25 symbols
pkg/config/visitor.go25 symbols
pkg/server/dashboard_api.go22 symbols
pkg/web/frps/src/utils/proxy.js21 symbols
pkg/util/vhost/vhost.go21 symbols
pkg/util/vhost/http.go21 symbols
pkg/client/visitor.go21 symbols

For agents

$ claude mcp add Erfrp \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact