摘要
原文链接:s2、s2r解析过程
本文主要目的是想介绍 s2://xxx 及 s2r://xxx 这种链接是怎么生成的与及如何手动解析成对应的ip、端口、密码、加密方式等。下面详细介绍链接解析过程。
编码方式
s2://… 及 s2r://… 这样的链接都是经过 url_safe Base64 编码生成的,就是先通过标准的 Base64 编码,然后再把编码内容中的 + 和 / 分别替换为 – 和 _ 这两个字符,而解码的时候要进行反向替换。
s2链接
在 Base64 编码之前,s2链接的格式是这样的:
s2://method:password@server:port
也就是说,一般我们见到的链接就是 s2://Base64编码字段 ,其中 method:password@server:port 这部分被进行了 Base64 编码 。
所以,假设有这样的一个 s2 链接:
s2://Y2hhY2hhMjA6ZG91Yi5pby9zc3poZngvKmRvdWIuYmlkL3NzemhmeC8qMjk4N0A2NC4xMzcuMjI5LjE1NDoyOTg3
那么以下的这部分字符串就是经过 Base64 编码生成的:
Y2hhY2hhMjA6ZG91Yi5pby9zc3poZngvKmRvdWIuYmlkL3NzemhmeC8qMjk4N0A2NC4xMzcuMjI5LjE1NDoyOTg3
那么如何解码? 在解码前,如果字符串中有包含 – 和 _ 的字符,要先分别替换为 + 和 / , 然后再通过 base64_decode 解码就行了。
网上有很多 base64 编码解码工具,以这个为例 base64编码/base64解码
因为上面的那个字符串没有 – 和 _ 这两种字符,所以复制整段字符串到文本框:
然后点击base64解码即可:
上面的字符串,解析出来就是(相对应的就是加密方法、密码、ip、端口):
chacha20:doub.io/sszhfx/*doub.bid/sszhfx/*2987@64.137.229.154:2987
即:
method:chacha20
password:doub.io/sszhfx/*doub.bid/sszhfx/*2987
server:64.137.229.154
port:2987
s2r链接
在 Base64 编码之前,ssr 链接的格式是这样的:
s2r://server:port:protocol:method:obfs:password_base64/?params_base64
上面的链接的不同之处在于 password_base64 和 params_base64 。
顾名思义,password_base64 就是密码被 base64编码 后的字符串,而 params_base64 则是协议参数、混淆参数、备注及Group对应的参数值被 base64编码 后拼接而成的字符串。
即 params_base64为这些字段的拼接:
obfsparam=obfsparam_base64&protoparam=protoparam_base64&remarks=remarks_base64&group=group_base64
那么,假设现在有这样一个 s2r 链接:
s2r://NjQuMTM3LjIwMS4yNDY6Mjk4NzphdXRoX3NoYTFfdjQ6Y2hhY2hhMjA6dGxzMS4yX3RpY2tldF9hdXRoOlpHOTFZaTVwYnk5emMzcG9abmd2S21SdmRXSXVZbWxrTDNOemVtaG1lQzhxTWprNE53Lz9yZW1hcmtzPTVweXM2TFNtNVktMzVwMmw2SWVxT21SdmRXSXVhVzh2YzNONmFHWjRMLW1Wbk9XRGotV2ZuLVdRalRwa2IzVmlMbUpwWkM5emMzcG9abmd2
那么该部分就是被 base64 编码生成的:
NjQuMTM3LjIwMS4yNDY6Mjk4NzphdXRoX3NoYTFfdjQ6Y2hhY2hhMjA6dGxzMS4yX3RpY2tldF9hdXRoOlpHOTFZaTVwYnk5emMzcG9abmd2S21SdmRXSXVZbWxrTDNOemVtaG1lQzhxTWprNE53Lz9yZW1hcmtzPTVweXM2TFNtNVktMzVwMmw2SWVxT21SdmRXSXVhVzh2YzNONmFHWjRMLW1Wbk9XRGotV2ZuLVdRalRwa2IzVmlMbUpwWkM5emMzcG9abmd2
首先检查字符该字符串是否包 – 和 _ 的字符,上面的字符串没有包含这两个字符,那么把所有内容复制到文本框进行解码:
解码后:
解码后的字符串如下:
64.137.201.246:2987:auth_sha1_v4:chacha20:tls1.2_ticket_auth:ZG91Yi5pby9zc3poZngvKmRvdWIuYmlkL3NzemhmeC8qMjk4Nw/?remarks=5pys6LSm5Y-35p2l6IeqOmRvdWIuaW8vc3N6aGZ4L-mVnOWDj-Wfn-WQjTpkb3ViLmJpZC9zc3poZngv
然后再把最后 password_base64/?params_base64 这些字符串提出来分别解码:
ZG91Yi5pby9zc3poZngvKmRvdWIuYmlkL3NzemhmeC8qMjk4Nw/?remarks=5pys6LSm5Y-35p2l6IeqOmRvdWIuaW8vc3N6aGZ4L-mVnOWDj-Wfn-WQjTpkb3ViLmJpZC9zc3poZngv
解码 password_base64 :
ZG91Yi5pby9zc3poZngvKmRvdWIuYmlkL3NzemhmeC8qMjk4Nw
然后解码 params_base64,因为该字段只包含 remarks ,说明其余参数都为空 ,base64_remarks 字符串如下:
5pys6LSm5Y-35p2l6IeqOmRvdWIuaW8vc3N6aGZ4L-mVnOWDj-Wfn-WQjTpkb3ViLmJpZC9zc3poZngv
上面的字符串包含 – ,所以在解码前要把 – 这个字符通通替换为 + 字符,替换后:
5pys6LSm5Y+35p2l6IeqOmRvdWIuaW8vc3N6aGZ4L+mVnOWDj+Wfn+WQjTpkb3ViLmJpZC9zc3poZngv
然后对该字符串进行解码:
至此,s2r链接解析完成。