ssr和ss链接解码(decode)
关于
我们所熟知的翻墙工具Shadowsocksr和Shadowocks都有可以直接通过链接导入节点配置的功能。那么它们到底是怎么从ssr或者ss链接的一堆乱码中提取出节点信息的呢?
原理
实际上无论是ssr或者ss链接都是,经过多次[Base64](https://zh.wikipedia.org/wiki/Base64 ’Base64‘)编码方式进行加密的,这种加密方式无法起到真正的加密的效果,正所谓防君子不防小人。
由于Base64解码后含有+、/等url敏感字符所以在针对url的Base64编码中,会将/改为_,将+改为-。Base64所解码的字符个数必须是4的倍数,不足四的倍数的需要在字符末尾添加#补全为4的倍数。
ssr 的编码方式就是采用针对url的Base64编码(UrlBase64Encode)的,在解码过程中我发现,ssr加密前的格式是
server:server_port:protocol:method:obfs:password/?obfsparam=obfs_param&protoparam=protocol_param&remarks=remarks&group=group
其中password及之后的obfs_param等参数都需要进一步的解码的,并且obfs_param及之后的参数在不同的节点中可能是非必须的。
测试
本次测试采用逗比根据地分享的免费帐号。测试工具采用开源中国在线工具。链接如下:
ssr://NDUuNjIuMjM4LjE0Nzo1NjA1OmF1dGhfc2hhMV92NDpjaGFjaGEyMDp0bHMxLjJfdGlja2V0X2F1dGg6Wkc5MVlpNXBieTl6YzNwb1puZ3ZLalUyTURVLz9yZW1hcmtzPTVweXM1WVdONkxTNTZMU201WS0zNXAybDZJZXFPbVJ2ZFdJdWFXOHZjM042YUdaNEx3
去除ssr://前缀之后,解码结果如下
45.62.238.147:5605:auth_sha1_v4:chacha20:tls1.2_ticket_auth:ZG91Yi5pby9zc3poZngvKjU2MDU/?remarks=5pys5YWN6LS56LSm5Y-35p2l6IeqOmRvdWIuaW8vc3N6aGZ4Lw

这里不包含混淆参数和协议参数等,我们只需要对password和remarks进行单独解码:


其中我们可以注意到remarks这一项中包含一个-,我们需要将它改成+才能解码成功。
想法
在linux环境下使用python 版本ssr翻越长城的方式是十分不方便的,我们还是得必须自己将节点配置添加到json文件中,有没有可能像windows、ios等其他客户端一样通过ssr链接导入节点配置呢。
在下一节中我们将使用python来实现这个代码。
7 October 2018