自建授权服务器绕过RaySync限速

2019 年 1 月 17 日 · 共 1415 字

我不但什么都不会,还没钱买正版。

本文简单介绍了通过修改 RaySync 文件和搭建授权服务器来绕过免费授权 50M 限速的过程。

引子

事情起因于我需要把一个大小为 174G 的单文件传到国外的独立服务器上。

在历经两天的尝试中,rsync 中断了 20+ 次,Syncthing 速度不足 1kb/s,Aspera 过于高端完全看不懂怎么搭。故而转向国产替代品,发现了镭速这个可以加速文件传输的服务,号称可以将传输速度提升20倍,网上的软文不少,因此决定尝试一下。

当然最重要的是它提供了免费 3 个月限速 50M 的授权这个二维码是真人,不是公众号,扫完当时是懵的

开端

还真没虚假宣传,跑到了 40M,比起 rsync 和 Syncthing 不知道高到哪里去了。但作为一个程序猿,检查配置文件和日志是本能,然后就发现有机可乘。

proxy/license_config文件存储了授权信息。

{
        "lic_code":     "xxxxxxxxxxxxxxxxxxxx",
        "duration":     "3 Months",
        "max_bandwidth":        "50M",
        "activate_date":        "2019-01-01",
        "expire_date":  "2019-04-01",
        "low_bound_bandwidth":  "512",
        "product_id":   128
}

然而改了没用,会被直接覆盖掉。

config/manager.db里的t_server表里存放着服务器的配置信息,然而也改不了。

无奈之下,只能拿起 IDA 开始静态分析代码的逻辑。

发展

整个压缩包里共有四个可执行文件,分别是RaySyncLicenseRaySyncServerRaySync-Proxy-Serverstarter

本来对RaySyncLicense寄予厚望,折腾了两个小时之后发现里面只有离线激活的部分,但免费送的授权是需要联网激活的,白费功夫。唯一的收获大概是发现 RaySync 用的是 BitAnswer 的授权机制,但是官方只给了 API 的参考,并没有给源码,面对一堆形如 bit_answer7b43bbf4b03d11e599bd4c34888a5b28 的函数,实在是无从下手。

再次折腾了四个小时之后,终于认识到自己的水平还是太差,需要更多的信息才能进行下一步。

这时候我发现了proxy/license.log

高潮

proxy/license.log里面的信息过于丰富了,从中发现了很多有用的点:

  1. g_srv_url存放着授权服务器的域名
  2. 服务器返回格式是 json,以及返回的所有内容
  3. 打 log 的地方有YyAuthenticationManage.c字符串

有了这些信息,寻找的速度大大加快。仅仅半小时不到,我就确定了关键函数在于RaySync-Proxy-Serverinit_license

果不其然,授权服务器就是在这里设置的。

授权服务器地址

汇编语句

二进制

直接改成自己的域名就是了。

自己的域名

然后在 DNS 提供商那里加子域名,Nginx 增加一个配置文件这些就不详细说了。

然而lm_check_server_key函数要验证服务器传回来的 Key 和本地计算的 Key 是否一致,跟进去看看源码。

原来就是把max_bandwidthdurationserver_dateactivate_dateexpire_datepRdm拼成字符串,然后 MD5 一下就完了。但这个pRdm是啥?

翻翻前面的源码,原来是发送请求的时间,而且还附加在请求内容里了。

好办,随手用 Gin 写了一个程序,把 POST 的内容打印出来,发现是rdm_key这个参数。

至此完工,对 POST 请求获取rdm_key然后计算srv_key,返回一个 json 就行了。

返回的 json

结尾

返回值瞎写就好了。

结果

这家的产品效果还算不错,有能力者还是支持正版吧。

然而从我本地往服务器的带宽只有一开始能突发到 100M,后面还是稳在 40M 左右,估计是没救了

这软件的启动脚本会把自己写到rc.local里面实现开机自启,执行完停止脚本才会移除,颇有国产毒瘤的风范

面向企业的产品,个人就算真的想买,价格估计也承受不了

修改完的成品和源码不会放出来的,思路给了,想用就自己实现