Minecraft finalmask#6210
Conversation
|
|
啊?这个以前讨论过吗 |
|
怎么这东西也学reality弄个pubkey和shortid啊 一个密钥不就行了?安全性给上层 |
|
哎全是AI写的 |
|
@Exclude0122 是伪装成mc协议还是真的放在mc协议里传输 |
https://t.me/projectXtls/1473 ,这个是真的 MC 协议的话需要改名 XMC, 依稀记得以前看到过一个项目是真的 MC 协议, |
开启加密前完全遵守 mc 协议进行握手+密钥协商,开启加密有后就直接开始转发了。不过自己实现的 mc 协议肯定和原版有区别, |
加密包也要符合 MC 协议规范啊不然 header-custom 的 |
加密也符合 MC 协议规范,用的是握手阶阶段协商出来的密钥 |
|
原版mc不是填个地址端口就能进去了 |
会因为 shortid 不对被踢 |
|
我本来还想写一个 fallback,如果 shortid 不对就转发到真 mc 服务器。不过 finalmask 这一层好像不能接管连接, |
|
fallback 是 server 管的吧, |
|
mc 是 rsa 1024 bits + AES/CFB8,并不可靠 😅 |
我的意思是这个pubkey原版mc游戏(至少客户端UI)不存在 为什么这里还要填个这东西 一个鉴权用的字符串不就行了 |
客户端 pin 服务端公钥,防止 MITM |
|
我觉得用字符串或者hex派生出来就够了 没必要像reality那样严格分开公私钥 数据要安全上面就用tls或者vlessenc |
|
看群里的讨论 https://t.me/projectXray/4991727 貌似 MC 这加密也就是 SS 的水平, |
https://pkg.go.dev/crypto/rsa#GenerateKey go 不支持生成确定性的 RSA 私钥 我要不把 private key 和 sha256 改成可选项,如果不填就随机生成一个。如果用户不在意 MITM 可以不填。 |
|
把 short id 也改成可选项,不填就不认证客户端 |
RSA密钥本质就是两个大素数 标准库生成方法复制出来用扩展欧几里得算法或者别的什么求个逆出来就是整个私钥了 AI两分钟就弄好了 |
客户端也填同样的密码,用同样的算法生成 RSA 密钥,来防止 MITM 吗 |
|
差不多 |
|
short id 还要留着吗 |
|
去了吧 一个鉴权密码就好 主要是方便用 |
|
总结一下
是这样吗 |
|
服务端用密码生成 privateKey 就是了 客户端也能算出来能做跟那个sha256一样的校验结果 shortid丢掉 服务端客户端都只要这个一个一模一样的参数 |
这是 mc 协议里明文发的 可以填域名 |
|
@Exclude0122 rebase |
b167850 to
25c5336
Compare
好了 |
|
|
|
|
|
比如如果以后要出个 mod、需要 Xray 代码配合的话,也是直接加到 XMC, |
|
改成 xmc 了 |
|
@Exclude0122 不要只改配置,文件夹和代码里也要改, |
06e0344 to
59168a8
Compare
|
都改成 是真 mc 协议,原版客户端可以 ping,也可以进服(开启加密后会被踢) xmc.webm |
|
|
|
|
|
|
|
可以加回落,但是估计要改 xmc 外面 finalmask 的代码
|
|
|

听说最近国内中专机上了检测设备,Shadowsocks 用不了了。HTTP/TLS 有备案问题,更是用不了。所以我写了个 Minecraft Finalmask。国内机开个 MC 服,跑图流量大一点很合理吧 😁。
配置
客户端
服务端
协议
C->S Handshake
2如果 Intent 是
1则进入 Ping 模式,服务端户会响应客户端的 Ping 请求。C->S Login Start
Dream,可配置S->C Encryption Request
trueC->S Encryption Response
Verify Token + password。因为有 PKCS#1 v1.5 padding,所以在此处拼接 password 不会导致密文长度超过原版。服务端在成功接收
Encryption Response数据包后,将立即开启 AES/CFB8 加密。服务端会检测 password 是否正确,如果正确则握手成功,进入转发模式;否则返回原版拒绝理由
multiplayer.disconnect.authservers_down,并踢掉客户端。客户端会使用 password 生成出同样的 RSA public key,防止 MITM 攻击。