新手礼包一元宝一件每人限购一次,定价本意是福利,结果被脚本注册的两千个小号搬空四千万金币等值的物资。限购被薅的复盘揭示了一个常识性漏洞:限购只按角色计数,而注册角色是零成本的。复盘按设备聚合、异常告警、存量回收三步治理。
限购计数从角色维度升级到设备维度:同一设备的购买次数合并计算,设备键来自登录时上报的设备指纹,注册环节就完成了归组。
local function checkLimit(actor, devKey)
local devBought = tonumber(getsysvar("LIM_DEV_" .. devKey) or "0")
if devBought >= 1 then
sendmsg(actor, 0, "该设备已购买过新手礼包")
return false
end
setsysvarex("LIM_DEV_" .. devKey, devBought + 1, 1)
return true
end
单日新增购买量超过 200 件即向风控组告警;确认套利的账号回收礼包并冻结商城功能,回收走邮件通知留痕。
local function alertBurst(cnt)
if cnt > 200 then
sendmail("#风控组", 936, "商城批量采购告警", "单日新增购买 " .. cnt .. " 件,疑似脚本行为", "")
end
end
local function confiscate(actor, cnt)
local p = class(actor)
p:takeitem("新手礼包", cnt)
sendmail("#" .. p:GetName(), 937, "礼包回收通知", "异常获得的 " .. cnt .. " 份礼包已回收", "")
end
回放脚本攻击样本:设备聚合后 2000 个小号被归并为 40 台设备全部拦截;正常玩家单人单设备购买零误伤;回收流水与损失账目逐笔核对。监控新手礼包的日购买量与设备聚集度,聚集度陡增就是新一轮薅取的信号。
设备指纹可以伪造,第一批拦截后脚本换了指纹特征,设备键叠加 IP 段与注册时长做三重聚合,单维聚合不再单独作为拦截依据。已流通到玩家市场的礼包没有全量回收,回收范围只覆盖可确认的脚本产物,误伤普通玩家的成本比损失本身更高。限购口径升级后没同步改商城界面的限购文案,玩家看到的是角色限购实际按设备拦截,文案两周后才更正。脚本注册的账号本身没有拦截,注册环节加了手机验证与注册间隔,从源头提高小号成本。风控规则上线没有灰度,全量生效当晚就是误伤高峰,风控规则一律先观察模式跑一周,这轮教训直接推动了灰度机制的建立。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 周五晚高峰副本掉线事故:三百支队伍的成员在副本里掉线后无法重连,只能等副本超时踢出,客服工单一夜积压九百…
实战应用:用在哪里 行会活动集中在晚上八点的攻城战,白天在线的成员没有参与感。行会运镖做成轻协作玩法:行会每周两趟集体运镖,…
实战应用:用在哪里 沙巴克城主每周可以打出两张政策牌影响全服:双倍经验日让全场经验翻倍、怪物狂暴日让野怪攻击提升三成、和平协…
实战应用:用在哪里 故障演练总演同一套拔线流程,队伍熟练了但新故障类型没覆盖。演练题库把历史故障转化成十个演练场景,每季度随…
实战应用:用在哪里 排行榜界面打开时开启定时刷新、关闭时忘了停,玩家关了界面推送还在后台跑。界面生命周期把打开、刷新、销毁三…
实战应用:用在哪里 沃玛教主被击杀后四小时原地重生,重生前一分钟全服预告,教主重生点位在窝点周围五格内随机偏移,蹲点守尸的策…