xray去掉config参数 配置文件固化编译在程序内部 修改ConfigLoader函数
需求
现在流行一波白嫖容器。有些容器提供方不支持xray,所以如果检测到是xray就会封停。
我们猜测,也许会检测启动时的参数 -config。
如果我们不使用 -config 参数,程序会从 stdin: 读取配置文件。
那么我们把配置文件写死在源码中,把程序原来要从 stdin: 读配置文件的,变成加载源码中写死的配置文件。
分析
运行xray时,提示要从stdin:读取配置文件
在源码中搜索 "stdin:",经过一番阅读理解,读取配置文件的代码位于
编辑这个文件,将ConfigLoader函数改为:
io.ReadAll 用法参考: https://pkg.go.dev/io/ioutil#ReadAll
这里使用反引号的字符串,因为是带有双引号的,有换行的字符串。
语法参考:https://gfw.go101.org/article/basic-types-and-value-literals.html
比如,我随便找一个最简单的配置文件
https://github.com/XTLS/Xray-examples/blob/main/VLESS-TCP/config_server.json
修改源码
nano main/confloader/external/external.go
ConfigLoader函数修改为:
func ConfigLoader(arg string) (out io.Reader, err error) {
var data []byte
switch {
case strings.HasPrefix(arg, "http://"), strings.HasPrefix(arg, "https://"):
data, err = FetchHTTPContent(arg)
case arg == "stdin:":
// data, err = io.ReadAll(os.Stdin)
strConfig := strings.NewReader(`{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"listen": "127.0.0.1",
"port": 1234,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "216e42c6-698b-4ff4-9e75-80323f20e376",
"level": 0,
"email": "love@example.com"
}
],
"decryption": "none",
"fallbacks": [
{
"dest": 8001
}
]
},
"streamSettings": {
"network": "tcp"
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
}
]
}`)
data, err = io.ReadAll(strConfig)
default:
data, err = os.ReadFile(arg)
}
if err != nil {
return
}
out = bytes.NewBuffer(data)
return
}编译
go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main
运行
./xray
可以看到不需要我们输入配置,xray已经跑起来了。
查看端口,xray监听的就是1234端口。
======
后记
不知道怎么编译 xray 的参考此篇
下载xray v1.7.2代码 修改并编译 hash变得不一样



