V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
windmano

逆向了联通官方测速系统的前端代码,发现四重作弊机制,难怪永远"达标"

  •  
  •   windmano · 3 月 27 日 · 6054 次点击

    各位 V 友好,最近闲着没事逆向了某省联通的官方宽带测速平台(就是装维上门给你"测速达标"签字那个),结果越看越上头。

    分享一下发现,代码层面的东西,没有主观臆测。

    TL;DR

    联通测速系统的算法里埋了四个机制,叠加效果就是:不管你实际网速多少,测出来几乎必定"达标"。

    0x01 先说合理的部分

    公平起见,算法里有几个设计是业界通用的,没毛病:

    • 多线程并发( 6 个连接同时下载)—— Speedtest 也这么干,单连接跑不满高带宽
    • 预热丢弃(前 2 秒数据不算)—— TCP 慢启动,合理
    • 累计平均(总量÷总时间)—— 比瞬时采样更稳定

    这些没问题。问题在后面。

    0x02 校正因子:所有结果 ×1.04

    speed = downloadVal / elapsed * 1000 * 1.04   // 下载
    speed = uploadedSize / elapsed * 1.048         // 上传
    

    计算完实际速度后,下载乘 1.04 ,上传乘 1.048 。

    官方可能会说"补偿 TCP/IP 协议开销"。但 TCP header 20 bytes + IP header 20 bytes ,在 MTU 1500 的帧里占比约 2.7%。HTTP header 在持续流式传输大文件时占比可忽略。

    4~5% 的"校正"显然超出了协议开销的范畴。 而且方向只往上调,从不往下。

    0x03 数据修剪:只砍低的,高的全留

    测速过程中每 200ms 采样一次,20 秒下来大约 90 条有效记录。然后:

    records.sort((a, b) => a - b);
    records = records.slice(5 * minLostDataTime);  // minLostDataTime=3, 砍掉最低 15 条
    // 最高的呢?不动。
    

    任何一本统计学教材都会告诉你,处理异常值要双边修剪或者用中位数。只砍低不砍高,这不叫数据清洗,这叫 cherry-picking 。

    0x04 高位平均替换:波动大?用峰值覆盖

    这段逻辑比较阴间:

    topAvg = 取最高 10 条记录的平均值
    totalAvg = 全部记录的平均值
    
    if (totalAvg < topAvg * 0.96) {
        // "平均值不够高" → 全部替换为峰值附近的随机数
        records.forEach((val, i) => {
            records[i] = topAvg * random(0.99, 1.0);
        });
    }
    

    意思是:如果你的网速有波动(平均值低于峰值的 96%),那实际测量数据全部丢弃,替换为 峰值 × random(0.99, 1.0)

    现实中的网络环境哪有不波动的?所以这段代码大概率每次都会触发。效果就是:最终上报的数据全是接近峰值的假数据

    0x05 WiFi 补偿:没跑到?帮你补上

    这是最炸裂的一段。

    服务端下发了这么几个参数:

    参数 含义
    wifiLossRate 0.6 最多补偿签约带宽的 60%
    wifiMaxLossValue 600 单次最多加 600 Mb/s
    standardValue 0.9 低于签约 90% 就触发
    if (measured < bandwidth * 0.9 && measured > bandwidth * 0.1) {
        gap = ceil((bandwidth * 0.9 - measured) / bandwidth * 100);
        compensation = min(gap / 100, 0.6) * bandwidth;
        compensation = min(compensation, 600);
        speed += compensation * 1000 * 125;  // 直接加到速度上
    }
    

    来,算一笔账:

    签约 2000M ,实测 1200 Mb/s

    gap = ⌈(1800 - 1200) / 2000 × 100⌉ = 30

    compensation = min(0.3, 0.6) × 2000 = 600 Mb/s

    上报 = 1200 + 600 = 1800 Mb/s → 达标

    实际呢?只有 1200 。

    注意,补偿参数是服务端控制的,也就是说运营商可以随时调整这个"作弊力度"。想让达标率高一点?把 wifiLossRate 调大就行了。

    0x06 四重 buff 叠满

    层级 机制 效果
    Layer 1 ×1.04 校正因子 基础膨胀 4%
    Layer 2 只删低值 拉高均值
    Layer 3 峰值替换 消灭波动,锁定高位
    Layer 4 WiFi 补偿 +600M 兜底,不达标也给你补到达标

    这四层从下到上,覆盖了从"轻微美化"到"明目张胆造假"的完整光谱。你的宽带在这套系统面前,想不达标都难。

    0x07 一些额外发现

    • 测速参数全部由服务端动态下发,运营商可以远程调整"作弊力度",前端只是执行
    • 前端 JS 做了混淆,变量名全是 _0x585b('0x2c') 这种,但混淆程度不高,字符串表基本明文
    • 认证机制是 MD5("speedInternal-" + secret + timestamp) 然后 Base64 ,写死的密钥

    0x08 我的验证

    用 Python 复现了完整测速流程,保留合理部分(多线程、预热),去掉四个作弊机制。

    同一条 2000M 宽带:

    官方系统 去掉修正
    下行 "达标" ~1400 Mb/s
    上行 "达标" ~365 Mb/s

    1400/2000 = 70%,实际并不达标。但在官方系统里,WiFi 补偿一加,峰值一替换,妥妥的"达标"。

    最后

    我不反对运营商考虑 WiFi 衰减的因素。但正确的做法是在报告里注明"有线/无线"测试环境和修正说明,而不是在算法里偷偷加数据,给用户一份失真的报告,然后让装维拿着这份报告让你签"速率达标确认单"。

    校正因子可以商榷,但 WiFi 补偿和峰值替换就是纯粹的造假,没有任何技术合理性。

    用户买的是带宽,不是一份永远达标的测速报告。


    以上分析基于前端 JS 逆向,所有结论可从源码直接验证。代码已脱敏,有兴趣的同学可以自己抓包看看。

    技术讨论欢迎,键政免入。

    47 条回复    2026-04-03 09:14:59 +08:00
    lyz2754509784
        1
    lyz2754509784  
       3 月 27 日 via Android
    有没有逆向过江苏联通的测速网站 https://jsspeedtestwebv4.js165.com:8091/h5/broadband.html
    装维上门测速应该也是用的这个,也就是所谓的测速正常…目前江苏联通宽带只有这个网站和全球网测的江苏南京联通节点是可以正常测到合同标称的宽带的,其余所有网站/节点上行都只有 2-3m ,有的软件可能有 5m ,包括微信发文件类的实际使用也限制在 500kb/s 左右…更离谱的是 iPhone14pro 用这个网站能跑出物理设备上限的速度来
    windmano
        2
    windmano  
    OP
       3 月 27 日
    @lyz2754509784 每个地区的测试网址应该是隔离的,我看了一下你这个测速网址只有江苏的 IP 可以打开
    Cert
        3
    Cert  
       3 月 27 日 via Android
    太可怕了……

    所以我都是用

    https://h3.speed.cloudflare.com/

    这个测速站。虽然测出来结果不会很好看,但是至少真实。我们办宽带是为了访问内容,所以从 CDN 入口反馈速度会比较接近真实打开网页的情况。
    而国标的宽带标准,也只测到达运营商 BARS 的速度,其实非常的片面。
    Cert
        4
    Cert  
       3 月 27 日 via Android
    再为大家推荐一个 Fastly 的测速站,Fastly 也是国际知名的 CDN ,也是很多网站都在用。

    https://v6.fastly-debug.com/
    kanezeng
        5
    kanezeng  
       3 月 27 日
    倒是没有想过还能这么搞啊,不过一直都直接用 speedtest.net ,虽然只能连上海联通的测试点了,不过结果倒都是超标的,看来联通也是看地区,北京联通目前还行,不知道未来如何了。
    wdv2ly
        6
    wdv2ly  
       3 月 27 日
    符合联通一贯作风
    kkwa56188
        7
    kkwa56188  
       3 月 27 日
    触目惊心!
    不过一定有 v 友轻描淡写的说没什么, 并且找一些不痛不痛的理由.
    YGBlvcAK
        8
    YGBlvcAK  
       3 月 27 日 via Android
    全球网测有补偿吗?
    Aruforce
        9
    Aruforce  
       3 月 27 日 via Android
    是否可以主张不认同他们的测速软件?
    my2492
        10
    my2492  
       3 月 27 日   ❤️ 1
    作弊最很的还得华为花瓣测速,千兆口真能测出千兆,别人都是 930-940
    Vesc
        11
    Vesc  
       3 月 27 日
    畜生啊😡
    stinkytofux
        12
    stinkytofux  
       3 月 27 日
    运营商现在的限速太恶心了, 完全就是白名单机制.
    winterx
        13
    winterx  
       3 月 27 日
    我一般都是用中科大测速
    LxnChan
        14
    LxnChan  
       3 月 27 日   ❤️ 1
    你法我笑.jpg

    想不到都 2026 年了还有人在纠结这个,注意一下通信业务是国家专营,是寡头垄断行业。就算他明天说宽带测速能达到 20%就算达标你又能怎么样呢,不过是想体面一点罢了。
    qwvy2g
        15
    qwvy2g  
       3 月 27 日 via Android
    就这还有人说商宽补贴家宽,补贴同一个产品至少质量不能差太多吧,可是现在商宽和家宽差距大的和基本上就是两个产品。此外如果家宽想提升质量为什么是办理商宽,而不是提供一个价格稍高,但是质量和商宽一样的家宽,这才叫补贴。
    chqome
        16
    chqome  
       3 月 27 日
    有一个 boce.com/speed 也可以测速
    yinmin
        17
    yinmin  
       3 月 27 日 via iPhone
    测速网站测 500Mbps 以上基本都测不准。真正测速的方式是:多开几个测速网站同时测速把带宽拉满,然后到任务管理器里看网卡的流量值
    knightdf
        18
    knightdf  
       3 月 27 日
    火钳刘明
    fstab
        19
    fstab  
       3 月 27 日
    我记得我最早使用宽带的时候,好像是 09 年,联通 30 元 4M 单宽带,还是个小黑盒子,网线接入。
    到了 11 年,升级到了融合套餐 41 元,卡的通话和流量忽略不计,宽带 20M ,继续用着小黑盒子。

    然后 18 年成家后,刚好是竞争的高峰期,移动推出了 18 元、38 保底送宽带和 IPTV ,宽带 50M ,58 元好像是 100M 。
    电信 58-59 元保底融合,联通和电信差不多价格,也是保底融合,宽带 100M 。保底融合套餐基本能满足一家三口的需求。

    时间到了 20 年,三大运营商响应国家政策,不论资费、宽带低于 100M 的,免费升级到 100M ,
    那个时候,我的移动宽带从 50M ,免费升级到 100M ,上下行从 50M 对等变成 100M 对等。

    20 年过后,能看到宽带从最低的 100M ,变成了 300M ,但是资费并没有增加,而且因为竞争激烈,携号转网等原因,资费还有一些下降的情况。

    22 年左右,各地营业厅开始宣传 1000 兆宽带,资费有部分提升,但是提升也不明显,而且对于普通家庭用户的提升感知并不明显,导致高价值套餐并没有太多人去办理,只能通过哄骗的方式,比如免费体验几个月,但是随之带来的是投诉退费,转网,退网。然后又陷入了降价竞争的局面。

    直到 25 年之前,都一直陷入这个局面,25 年开始,移动、电信开始想办法追求利润,不对套餐进行过度打折做竞争,但是联通因为用户量少,还在通过套餐打折的形式来做竞争。

    26 年,竞合开始,现在三大运营商开始都不打折了。

    我能回忆的时间线大概就是这样子,历史的宽带价值来看,

    从政策角度:我觉得提速降费这个政策是真正意义上的落地。
    我的角度:从以前联通在市区医院内都出现无信号的情况,到现在乡村都能保持 4G 满信号,镇及以上能保持 5G 信号,说明运营商的基础建设中,也是投入了大量的人力物力,而且我是真正得到了实惠,现在的套餐比之前 09 年还要便宜,量大管饱,并且能满足一家五口,三代人的需求。
    从运营商角度:完成了国家交代的任务,但是舍弃了巨额利润,如果国企的利润是给国家的,所以相当于国家少赚钱了。

    矛盾点:
    用户:办理的宽带,我想怎么用为什么要受运营商管理和约束。
    运营商:这点钱,很难办啊。
    国资委:运营商赚钱能力越来越弱了,一群饭桶。
    fstab
        20
    fstab  
       3 月 27 日
    宽带测速,我推荐一个软件,电脑管家的宽带测速功能,比较准确。
    crc8
        21
    crc8  
       3 月 27 日
    稳中向好!
    zhangfeiwudi
        22
    zhangfeiwudi  
       3 月 27 日
    我的天呐,这也太恶心了吧,联通怎么这么畜生啊
    Soo0
        23
    Soo0  
       3 月 27 日
    常规操作?
    fstab
        24
    fstab  
       3 月 27 日
    @zhangfeiwudi #22 你还是太年轻,这算啥,你没见过更畜生的行为,
    这个最多算是服务没达标,为了达标作弊,只是损害用户的权益。

    像这些运营商的营业厅,外呼,还有线下地推骗中老人开用不上的高套餐(上了很多次新闻)、虚开用户权益的宽带卖给其他人(淘宝闲鱼上的部分单宽带)、携号转网故意拖着不给转(当地随便一个自有营业厅,都能听到用户的咆哮)、然后正常销户不给销,让欠费 3 个月自动停机,然后后面办卡又补缴滞纳金(办理业务的柜台都是这个说辞)等损害用户金钱上的利益相比,宽带不达标作弊都不算个事。
    fstab
        25
    fstab  
       3 月 27 日
    Layer 4 WiFi 补偿 +600M 兜底,不达标也给你补到达标。

    不知道楼主这么测试没。

    WiFi5 160mhz 2x2mimo 协商是 1733mbps ,理论最大下载速度 150MB/s ,
    肯定是不可能跑满 2000M 的吧,这种会给补偿嘛?
    zhangfeiwudi
        26
    zhangfeiwudi  
       3 月 27 日
    @fstab #24 这么一说好像确实,我用移动一个月话费 78 ,只能上调套餐 无法下降,这几家运营商吃相都很难看
    rulagiti
        27
    rulagiti  
       3 月 27 日
    哈哈哈哈哈哈,真聪明
    jiminjohn0402
        28
    jiminjohn0402  
       3 月 27 日
    都是 LD 企业,而且根本上也是程序员写的,没什么好说的,也什么都不敢说
    fstab
        29
    fstab  
       3 月 27 日
    @zhangfeiwudi #26
    我都觉得运营商现在之前的竞争,现在的竞合都搞得病态了,感觉根本不是正常市场激发出来的行为。
    这 TMD 的搞的和上班一样,想要涨工资就得跳槽,想要资费便宜,就得携转。
    slowman
        30
    slowman  
       3 月 27 日   ❤️ 5
    是你自己逆向的,还是 AI 逆向的?
    是你的结论,还是 AI 的结论?

    你确定全文没有 AI 幻觉?每个数字都是你确认过的?
    Actrace
        31
    Actrace  
       3 月 27 日
    目前发现就电信比较实诚,没有作弊。
    wy315700
        32
    wy315700  
       3 月 27 日
    @my2492
    但是华为花瓣测速真的能跑满,人家跨省晚高峰限速,这个不限速。
    ff521
        33
    ff521  
       3 月 27 日
    @zhangfeiwudi #22 没办法只能远离,比如润美,要不说不定哪里就恶心你一下,你还反抗不了
    sonnetbreeze
        34
    sonnetbreeze  
       3 月 27 日
    @kkwa56188 那一定是联通的忠实用户
    sonnetbreeze
        35
    sonnetbreeze  
       3 月 27 日
    @Actrace 电信除了资费高,没话说
    wuvvu
        36
    wuvvu  
       3 月 27 日
    @Actrace 电信的 https://10000.gd.cn 我用百兆网口能测出来 105Mbps ,也不合理吧
    doumeki
        37
    doumeki  
       3 月 28 日
    没懂,还能影响 windows 的监控速率吗?
    hackroad
        38
    hackroad  
       3 月 28 日
    @chqome 这家测速就是个笑话
    369908633
        39
    369908633  
       3 月 28 日 via Android
    @wuvvu 这个网站如果被标签连接数上限测速就会 0M ,记得截图投诉,多测速几次
    CKR
        40
    CKR  
       3 月 28 日
    @wuvvu 这个网站确实离谱,也是有做这些小动作,千兆宽带用千兆口的猫能跑出 1050Mbps 。电脑本地的流量监控看只有 116MB/S ,网站已经显示破千了。
    A1188
        41
    A1188  
       3 月 28 日 via Android
    电脑上测速目前推荐这个,还是很准的: https://dashabi.vip
    dream7758522
        42
    dream7758522  
       3 月 28 日 via Android
    前段时间中国电信 app 宽带测速,开飞行模式都能测速达标,我也是服了。
    Essaim
        43
    Essaim  
       3 月 30 日
    @wuvvu 咋说呢,不限速情况下大体时合理的,电信是会给冗余的,我 100M 上行的合约宽带,用 BT 下载时,不限速,最高上传跑到过 40MB/s 的速度,算上损耗之类的估计有 330Mbps 往上了,挺夸张的,而且不是峰值速率,是持续速率,大概有 5 分钟左右,实在不信可以用全球网测。
    wuvvu
        44
    wuvvu  
       3 月 31 日
    @Essaim 关键是我用的百兆网口,就算是有冗余,测速结果超出物理限制怎么也不合理呀
    jsq2627
        45
    jsq2627  
       15 天前
    补偿系数 1.04 ,勉强解释的话,这个数值可能是把以太网头和 pppoe 头算上了,(14+8+20+20)/1514 = 0.409 。如果考虑上 vlan tag (4 字节) 和帧间隙 (20 字节),这个系数还应该更大。
    jsq2627
        46
    jsq2627  
       15 天前
    wifi 补偿我觉得在我国国情下没毛病,能减少很多无理取闹的客户。但这个 90% 触发阈值值得商榷
    XXOO133
        47
    XXOO133  
       14 天前
    基于楼主的发现,如果真的和联通闹上法庭,是不是可以要求对他们的测速代码进行审计?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 163ms · UTC 18:13 · PVG 02:13 · LAX 11:13 · JFK 14:13
    ♥ Do have faith in what you're doing.