后记:
由于 2.9.x 以上版本由于使用了Python3
编写,生成的库文件格式已变化,本补丁无法处理,本补丁目前最高支持 2.8.8 版本!
实测支持2.5.x
至2.11.x
版本.
前言
前阵子就因为setup 普通的openvpn就感到很麻烦,就发现到OpenVPN Access Server 可以很方便的setup,但又限制只可以两个connection
在网上博览群文之后发现流行的爆破补丁都是针对 2.5.0
版本的,直接拿来用肯定是不行的,经过分析发现 OpenVPN Access Server
的作者对盗版这个事情并不是很在意,从 2.5.0
到 2.11.x
, 对于授权这款的代码基本是没改过的,所以在结合网络上面其他人的博文搞了一番并且成功了之后,特别在这里记录一下.
过程
环境准备
OpenVPN Access Server
是使用 Python
编写的,需要并且限制了 Python Runtime
的版本,两者必须匹配!
在 OpenVPN Access Server 2.9.0
以前,Python Runtime
的版本是 Python 2.8
, 但是在 OpenVPN Access Server 2.9.0
及之后的版本,Python Runtime
的版本变成了 Python 3.x
, 并且随着 OpenVPN Access Server
更新迭代,Python Runtime
的版本也需要同步变化。比如 OpenVPN Access Server 2.11.0
已经需要 Python 3.10.x
的版本了.
实操阶段
- 主要操作的文件是一个名叫
pyovpn-2.0-pyx.x.egg
的文件,以我了解的情况来看,从2.5.0
到2.11.x
文件名一直都是这个,只是不同版本里面的内容不一样. - 这个文件有点类似
Java
当中的jar
库文件,也是一个zip
压缩文件,里面包含了一些Python
的字节码文件. - 破解的原理大概是在
Python
中采用类似Java
动态代理的技术,将原本读取用户属性的调用返回值拦截,修改用户限制数量再返回.
2.9.0
以下版本破解的目标文件是 /pyovpn/lic/uprop.pyo
, 2.9.0
及以上是 /pyovpn/lic/uprop.pyc
;
按照网上流行的破解方法,把这个文件解压出来并改名为 uprop2.pyo
或 uprop2.pyc
, 然后新建一个 uprop.py
文件,内容如下 (注意区分版本):
2.9.0
以下版本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import uprop2 old_figure = None def new_figure(self, licdict): ret = old_figure(self, licdict) ret[‘concurrent_connections’] = 1024 return ret for x in dir(uprop2): if x[:2] == ‘__’: continue if x == ‘UsageProperties’: exec(‘old_figure = uprop2.UsageProperties.figure’) exec(‘uprop2.UsageProperties.figure = new_figure’) exec(‘%s = uprop2.%s’ % (x, x)) |
2.9.0
及以上版本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from pyovpn.lic import uprop2 old_figure = None def new_figure(self, licdict): ret = old_figure(self, licdict) ret[‘concurrent_connections’] = 1024 return ret for x in dir(uprop2): if x[:2] == ‘__’: continue if x == ‘UsageProperties’: exec(‘old_figure = uprop2.UsageProperties.figure’) exec(‘uprop2.UsageProperties.figure = new_figure’) exec(‘%s = uprop2.%s’ % (x, x)) |
再将上面的 uprop.py
编译为库文件 uprop.pyo
或 uprop.pyc
:
1 2 3 4 | # <2.9.0 python2 -O -m compileall uprop.py # >=2.9.0 python3 -O -m compileall uprop.py && mv __pycache__/uprop.*.pyc uprop.pyc |
注意
uprop.*.pyc
文件名会随着python
版本变化而变化.
现在我们得到了一个改文件名的文件 uprop2.pyo
或 uprop2.pyc
, 和一个编译出来的 uprop.pyo
或 uprop.pyc
;
把这两个文件压缩到 pyovpn-2.0-pyx.x.egg
的 /pyovpn/lic/
目录下,然后去服务器替换目标文件,重启服务就 OK 了.
下载pyovpn-2.0-py3.10.egg
如果你不想搞上面的那么多步骤,我这里附上已经处理好的 pyovpn-2.0-py3.10.egg 提供下载
实测支持: Ubuntu 22.04 x86
Leave a Reply