我不但什么都不会,还没钱买正版。
本文简单介绍了通过修改 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 开始静态分析代码的逻辑。
发展
整个压缩包里共有四个可执行文件,分别是RaySyncLicense
、RaySyncServer
、RaySync-Proxy-Server
和starter
。
本来对RaySyncLicense
寄予厚望,折腾了两个小时之后发现里面只有离线激活的部分,但免费送的授权是需要联网激活的,白费功夫。唯一的收获大概是发现 RaySync 用的是 BitAnswer 的授权机制,但是官方只给了 API 的参考,并没有给源码,面对一堆形如 bit_answer7b43bbf4b03d11e599bd4c34888a5b28
的函数,实在是无从下手。
再次折腾了四个小时之后,终于认识到自己的水平还是太差,需要更多的信息才能进行下一步。
这时候我发现了proxy/license.log
。
高潮
proxy/license.log
里面的信息过于丰富了,从中发现了很多有用的点:
g_srv_url
存放着授权服务器的域名- 服务器返回格式是 json,以及返回的所有内容
- 打 log 的地方有
YyAuthenticationManage.c
字符串
有了这些信息,寻找的速度大大加快。仅仅半小时不到,我就确定了关键函数在于RaySync-Proxy-Server
的init_license
。
果不其然,授权服务器就是在这里设置的。
直接改成自己的域名就是了。
然后在 DNS 提供商那里加子域名,Nginx 增加一个配置文件这些就不详细说了。
然而lm_check_server_key
函数要验证服务器传回来的 Key 和本地计算的 Key 是否一致,跟进去看看源码。
原来就是把max_bandwidth
、duration
、server_date
、activate_date
、expire_date
和pRdm
拼成字符串,然后 MD5 一下就完了。但这个pRdm
是啥?
翻翻前面的源码,原来是发送请求的时间,而且还附加在请求内容里了。
好办,随手用 Gin 写了一个程序,把 POST 的内容打印出来,发现是rdm_key
这个参数。
至此完工,对 POST 请求获取rdm_key
然后计算srv_key
,返回一个 json 就行了。
结尾
返回值瞎写就好了。
这家的产品效果还算不错,有能力者还是支持正版吧。
然而从我本地往服务器的带宽只有一开始能突发到 100M,后面还是稳在 40M 左右,估计是没救了
这软件的启动脚本会把自己写到rc.local
里面实现开机自启,执行完停止脚本才会移除,颇有国产毒瘤的风范
面向企业的产品,个人就算真的想买,价格估计也承受不了
修改完的成品和源码不会放出来的,思路给了,想用就自己实现