目 录CONTENT

文章目录

OpenVPN Access Server 2.13.1 破解人数限制(已更新到最新版)

Seven
2021-09-15 / 33 评论 / 24 点赞 / 21007 阅读 / 12259 字 / 正在检测是否收录...

OpenVPN Access Server 破解在线人数限制

由于 2.9.x 以上版本由于使用了 Python3 编写, 现已支持 2.13.x 版本~!
已经更新支持到最新版本:2.13.1
官方最新版离线安装包:

wget https://openvpn.net/downloads/openvpn-as-latest-CentOS7.x86_64.rpm

wget https://openvpn.net/downloads/openvpn-as-bundled-clients-latest.rpm

yum -y install openvpn-as-latest-CentOS7.x86_64.rpm

yum -y install openvpn-as-bundled-clients-latest.rpm

最新版的python支持需要3.8,我这里低版本没有进行测试。大家自己可以试试。

截止到我写这篇文字的时候最新的版本已经是 2.12.1, 我这也是采用的最新版 2.12.1.

实操阶段
主要操作的文件是一个名叫 pyovpn-2.0-pyx.x.egg 的文件,以我了解的情况来看,从 2.5.0 到 2.12.x 文件名一直都是这个,只是不同版本里面的内容不一样.
目录:/usr/local/openvpn_as/lib/python/
这个文件有点类似 Java 当中的 jar 库文件,也是一个 zip 压缩文件,里面包含了一些 Python 的字节码文件.
破解的原理大概是在 Python 中采用类似 Java 动态代理的技术,将原本读取用户属性的调用返回值拦截,修改用户限制数量再返回.
2.9.4 及以上是 /pyovpn/lic/uprop.pyc; 按照网上流行的破解方法,把这个文件解压出来并改名为uprop2.pyc, 然后新建一个 uprop.py 文件,内容如下:

2.9.4 及以上版本内容:

from pyovpn.lic import uprop2
old_figure = None
 
def new_figure(self, licdict):
      ret = old_figure(self, licdict)
      ret['concurrent_connections'] = 2048
      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.pyc:

python3 -O -m compileall uprop.py && mv __pycache__/uprop.*.pyc uprop.pyc

注意 uprop.cpython-37.opt-1.pyc 文件名会随着 python 版本变化而变化.
上面这一步有很多小伙伴可能不太会,百度一下,py文件注册库文件,其中引用的compileall,有很多教程。
现在我们得到了一个改文件名的文件uprop2.pyc, 和一个编译出来
的uprop.pyc; 把这两个文件压缩到 pyovpn-2.0-pyx.x.egg 的 /pyovpn/lic/ 目录下,然后去服务器替换目标文件,重启服务就 OK 了.

最新版本,简单破解方法。

我发现好多小伙伴上面这步一不会,我现在已经更新了脚本,最新版的2.12.2里面的加密文件已经变成了pyovpn-2.0-py3.8.egg
现在直接在终端输下面的命令完成破解,文件内的代码还是上面的代码不变。已经测试过了。

安装完openvpn_as后。继续下面的步骤完成破解:

cd #(这个只是切换目录到root,哪个目录都行,最好一个干净一点的。)
cp /usr/local/openvpn_as/lib/python/pyovpn-2.0-py3.8.egg{,.bak}
cp /usr/local/openvpn_as/lib/python/pyovpn-2.0-py3.8.egg .
unzip -q pyovpn-2.0-py3.8.egg 
cd ./pyovpn/lic/
mv uprop.pyc uprop2.pyc

vim uprop.py
(上面这一步结束,会打开一个新的文件,粘贴上面代码块的代码,保存文件。)

python3 -O -m compileall uprop.py && mv __pycache__/uprop.*.pyc uprop.pyc

cd ../../

zip -rq pyovpn-2.0-py3.8.egg ./pyovpn ./EGG-INFO ./common

mv ./pyovpn-2.0-py3.8.egg /usr/local/openvpn_as/lib/python/pyovpn-2.0-py3.8.egg

systemctl restart openvpnas

到这里已经完成了,进去快乐的玩耍吧!我就不再放最新版的破解文件了,大家自己去破,如果有不懂的,可以留言给我。

对原理感兴趣的可以使用 python-uncompyle6 反编译原本的 uprop 字节码文件。举个例子:

# 安装 uncompyle6
pip install uncompyle6
# 反编译 uprop.pyc, 成功之后就会在当前目录得到一个文件 uprop.py
uncompyle6 -o ./ uprop.pyc
我这也贴一个我反编译的源文件:

# uncompyle6 version 3.7.4
# Python bytecode 3.7 (3394)
# Decompiled from: Python 3.7.11 (default, Aug 17 2021, 16:15:07) 
# [GCC 10.2.1 20210110]
# Embedded file name: build/bdist.linux-x86_64/egg/pyovpn/lic/uprop.py
# Compiled at: 2021-08-17 12:27:35
# Size of source mod 2**32: 3315 bytes
from pyovpn.util.date import YYYYMMDD
from pyovpn.util.error import Passthru
from pyovpn.lic.prop import LicenseProperties
from pyovpn.util.env import get_env_debug
from pyovpn.pki.sign import rsa_verify_complex
from pyovpn.aws.info import AWSInfo
DEBUG = get_env_debug('DEBUG_UPROP')

class UsageProperties(object):

    def figure(self, licdict):
        proplist = set(('concurrent_connections', ))
        good = set()
        ret = None
        if licdict:
            for key, props in list(licdict.items()):
                if 'quota_properties' not in props:
                    print('License Manager: key %s is missing usage properties' % key)
                    continue
                proplist.update(props['quota_properties'].split(','))
                good.add(key)

        for prop in proplist:
            v_agg = 0
            v_nonagg = 0
            if licdict:
                for key, props in list(licdict.items()):
                    if key in good and prop in props:
                        try:
                            nonagg = int(props[prop])
                        except:
                            raise Passthru('license property %s (%s)' % (prop, props.get(prop).__repr__()))

                        v_nonagg = max(v_nonagg, nonagg)
                        prop_agg = '%s_aggregated' % prop
                        agg = 0
                        if prop_agg in props:
                            try:
                                agg = int(props[prop_agg])
                            except:
                                raise Passthru('aggregated license property %s (%s)' % (
                                 prop_agg, props.get(prop_agg).__repr__()))

                            v_agg += agg
                        if DEBUG:
                            print('PROP=%s KEY=%s agg=%d(%d) nonagg=%d(%d)' % (
                             prop, key, agg, v_agg, nonagg, v_nonagg))

            apc = self._apc()
            v_agg += apc
            if ret == None:
                ret = {}
            ret[prop] = max(v_agg + v_nonagg, bool('v_agg') + bool('v_nonagg'))
            ret['apc'] = bool(apc)
            if DEBUG:
                print("ret['%s'] = v_agg(%d) + v_nonagg(%d)" % (prop, v_agg, v_nonagg))

        return ret

    def _apc(self):
        try:
            pcs = AWSInfo.get_product_code()
            if pcs:
                return pcs['snoitcennoCtnerrucnoc'[::-1]]
        except:
            if DEBUG:
                print(Passthru('UsageProperties._apc'))

        return 0

    @staticmethod
    def _expired(today, props):
        if 'expiry_date' in props:
            exp = YYYYMMDD.validate(props['expiry_date'])
            return today > exp
        return False


class UsagePropertiesValidate(object):
    proplist = ('concurrent_connections', 'client_certificates')

    def validate(self, usage_properties):
        lp = LicenseProperties(usage_properties)
        lp.aggregated_post()
        lp['quota_properties'] = ','.join([p for p in self.proplist if p in lp])
        return lp

结果
image.png

本文是基于2.9.4版本,但是我测试2.11.3同样适用。

-----------------------------------------------------<<

最新版2.12.2开始不再使用下面的方便包。我直接删除了。
image

下面附2.10.3及以上版本密码重置教程,这个和以前不一样,有默认密码了。

重置默认 openvpn 帐户管理权限

注意:如果您当前没有使用最新版本的 Access Server 2.10.3,我们建议您阅读旧版本的说明。

管理帐户,默认称为openvpn,可以是操作系统中的引导帐户,也可以是 Access Server 本身的内部本地身份验证系统中的管理帐户。我们建议使用本地帐户,这是自 Access Server 2.10 版以来的默认帐户。

这些是常见的管理用户登录问题:

您丢失了用户名和/或密码。
该帐户与已失效的外部身份验证系统相关联。
该帐户上设置了拒绝登录标志。
有 MFA 要求,您丢失了密钥。
该帐户在多次登录失败后(暂时)被锁定。
您可以在 Access Server 的命令行上以 root 用户身份执行以下命令,以创建或重置用户名为openvpn的本地管理员帐户。它考虑了上述所有情况,并应为您提供一个本地openvpn管理帐户,您可以使用该帐户登录到 Admin Web UI。

使用指定密码创建/重置openvpn管理本地帐户:

cd /usr/local/openvpn_as/scripts 
./sacli --user "openvpn" --key "prop_superuser" --value "true" UserPropPut 
./sacli --user "openvpn" --key "user_auth_type" --value " local" UserPropPut 
./sacli --user "openvpn" --new_pass=<PASSWORD> SetLocalPassword 
./sacli start

如果帐户需要,请禁用拒绝登录标志并重置 MFA:

./sacli --user "openvpn" --key "prop_deny" --value "false" UserPropPut 
./sacli --user "openvpn" --key "prop_google_auth" UserPropDel 
./sacli --user "openvpn" --lock 0 GoogleAuthRegen 
./sacli start

重置密码锁定策略以防万一它被触发:

./sacli --key "vpn.server.lockout_policy.reset_time" --value "1" ConfigPut 
./sacli start 
sleep 2 
./sacli --key "vpn.server.lockout_policy.reset_time" ConfigDel 
./sacli start

尝试使用openvpn和您指定的密码再次登录到 Admin Web UI 。
关于单用户多并发登陆的问题,我在WEB页面打开了多会话,但是没有用,我在官方看到的方案,但是没有成功,以下是官方回复:

配置数据库中每个用户多个会话设置的实际配置参数是“vpn.server.duplicate_cn”。您可以在命令行上以 root 用户身份手动设置它;

/usr/local/openvpn_as/scripts/sacli --key "vpn.server.duplicate_cn" --value "true" ConfigPut
/usr/local/openvpn_as/scripts/sacli start

可以用false关闭,true开启它在。如果你删除它,它会变成默认值,我相信这是真的;

/usr/local/openvpn_as/scripts/sacli --key "vpn.server.duplicate_cn" ConfigDel
/usr/local/openvpn_as/scripts/sacli start

引用
https://www.starduster.me/2019/12/19/talk-about-egg-file-and-hacking-ovpnas/
https://www.daehub.com/archives/5894.html
https://owlhowto.com/how-to-install-openvpn-access-server-on-linux/
本文章提到的内容只允许做个人学习研究之用,不得用于商业用途!否则后果自负! 若资金允许,请购买正版,谢谢!

贴个ubuntu22.03的最新服务端,上面的方法可行。

https://oskr.cn/upload/2024/02/openvpn-as-bundled-clients-29.deb

https://oskr.cn/upload/2024/02/openvpn-as_2.13.1-d8cdeb9c-Ubuntu22_amd64.deb

安装包下载:
openvpn-as-2.10.3_c47a813c-CentOS7.x86_64.rpm
openvpn-as-bundled-clients-25.rpm

24

评论区