0x01
https://github.com/uknowsec/frpModify
https://www.anquanke.com/post/id/231685 frp改造二
https://www.anquanke.com/post/id/231424 frp改造一
https://xie.infoq.cn/article/d6e190ea22c428a4e21b4f0d0 Frp 流量隐匿对抗排查
https://www.cnblogs.com/N0r4h/p/15848541.html frp魔改记录
Erfrp比较方便,基于frp-0.45.0,增加了远程配置加载,修改了流量特征,开启默认的tls,还有配置文件删除。
erfrp这个作者有点奇怪,他新加了aes加密ip,但为什么要在这里这样写,这样的话,就相当于如果通过默认配置或者本地或远程加载配置里的ip都只能是明文不能是加密后的,如果配置文件的ip加密了,就读取程序里的加密ip。
解密配置文件ip
pkg/config/server.go:292

替换成:
net.JoinHostPort(dscrypto.AesDecrypt(svr.cfg.ServerAddr, dscrypto.AESKey), strconv.Itoa(svr.cfg.ServerPort))
删除配置文件
cmd/frpc/root.go:236 删除配置文件不会检查存不存在

替换,执行--delini参数时候运行默认配置并自动删除:
if delEnable == true {
if _, errFileExist := os.Stat("frpc.ini"); errFileExist == nil {
err := os.Remove(cfgFile)
if err != nil {
return err
}
}else{
os.Remove(cfgFile)
}
}
修改默认配置文件
#修改默认配置文件,为了方便自己使用
pkg/config/DefaultiniBytefrpc.go
pkg/config/DefaultiniBytefrps.go

不自动生成配置文件
cmd/frpc/root.go
# 直接删掉或者注释,这样就可以只允许远程加载
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)
}
编译ip加密函数
pkg/dscrypto/main/main.go 修改

$#: cd /Erfrp-main/pkg/dscrypto/main
$#: go build main.go
$#: CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o amd64.exe main.go
$#: ./main x.x.x.x.
macOs直接交叉编译即可,windows执行里面的build.bat即可编译各个环境
0x02
tips:
frpc --delini //运行默认配置并删除配置文件
frpc -c http://www.xx.com/xxx.xx //远程加载
frpc reload -c ./frpc.ini //动态加载配置文件,通常会在 10 秒内完成代理的更新
0x03
Linux amd64编译后的有10M以上,使用upx可压缩到4M左右
brew install upx
upx --ultra-brute frpc
Comments NOTHING