挖井

类库大魔王的挖井日记

挖一口属于自己的井


SSR混淆协议Go版移植手记(四)

代码几天前就写完了,就是调试不通,昨天晚上偶然在github上看到从libev版分离出来的obfsplugin,都打算用CGO集成到avege去算了,今天上午甚至把编译、链接错误全都改完了,后来想想CGO还是不太好。

后来在看代码时,无意间发现一个问题,得益于我之前把每个字节都应该放什么内容全写在注释里了,突然发现在一个crc32的结果填充到[]byte时居然只用到后2个字节,而原本是需要全部4字节的!修正了这个问题后,代码就能往下跑了,之后是在校验adler32时,发现总是把最后4个字节的预期校验值也一起计算了,所以总是校验失败。修正后,auth_sha1_v4就能基本正常地跑起来了!

auth_aes128_md5auth_aes128_sha1用的同一套代码实现,只是在计算hmac时一个用的是MD5算法,另一个用的是SHA1算法,也是几处低级错误。

  • 几处uint16/uint32[]byte时大端小端弄错了;
  • 计算aes128-cbc加密用的key,要用统一的方法把原始密码字符串转成16字节长的key;
  • 有些数据,比如connection ID是每个远程服务器有一份的,当时这个概念没搞对,写成每个连接有一份了;
  • 预先分配了内存空间,得到解密后数据时却是添加到末尾;

现在总算都调通了,至少使用命令curl --socks5 127.0.0.1:1080 -vv api.twitter.com都能得到正确的结果了。但是可能在返回大量数据时仍然存在点问题,需要再仔细审查一下代码。这样就算是把SSR的混淆和协议都移植过来了。

之后的计划是支持UDP、IPv6,再是集成tun2socks的实现。

本文地址:

https://minidump.info/blog/2017/01/port-ssr-to-ss-go-4/

上一篇

新年好

又是新的一年,看2016年1月1日做的计划,除了翻墙网关卖出一份外,其他的全都没有付诸实践,执行实在太差了。注册了公司,但是除了每个月交钱记账养着它,便没有任何进账,打算抽空把它注销掉,总共花费掉1万多,真是头痛。之前是想着要在手机app开通微信支付和支付宝支付来收钱,所以才注册了公司,但后来...…

Life 全文阅读
下一篇

Raspbian上安装使用华为E8372

今天还在树莓派上试了一下之前买的华为E8372这块4G无线路由器。树莓派上运行的系统是Raspbian,直接把E8372插到USB上是没什么反应的,用lsusb是能看到有东西:Bus 001 Device 012: ID 12d1:1f01 Huawei Technologies Co., L...…

embed 全文阅读