盗号与诈骗得手的金币需要洗白:一串账号互相倒手,每笔都看似正常交易,合在一起是资金流向的回环。环路检测把交易流水建成有向图,图里找环,环就是洗钱链路。
-- 交易流水建图:源->目标 的金额累计
function FlowGraph.build(day)
local g = {}
for _, row in ipairs(TradeLog.load(day)) do
local key = row.from .. ">" .. row.to
g[key] = (g[key] or 0) + row.amount
end
return g
end
一天的交易流水压缩成边表:转账方向做边、金额做权重。图 的规模与交易量线性相关,中型服务器一天的边数在数千级别,环检测的算力代价可控。
-- 递归回溯找环:起点回到起点即成环
function FlowGraph.findCycle(g, start, node, path, depth)
if depth > 6 then return nil end
for key, amount in pairs(g) do
local from, to = key:match("^(.+%)>(.+)$")
if from == node then
if to == start and amount > 100000 then
return path
end
local found = FlowGraph.findCycle(g, start, to, path .. ">" .. to, depth + 1)
if found then return found end
end
end
return nil
end
从每个大额转出节点做递归回溯搜索,六步以内回到起点即构成资金环路,环上单边金额超过 10 万才值得关注。找到的环进入人工复核:环上的账号是否有正常的游戏行为、转账的间隔是否规律、环内账号的注册时间是否集中。确认的洗钱链整环冻结,资金退回被害账号,环外的正常玩家不受波及。
环路检测的告警按周复核,确认率与误报率的比值是算法迭代的依据。
环检测的层数曾经设到十层,把正常的多方交易网也圈成了环,层数回到六层加金额门槛后精确度回升。冻结操作的粒度曾经是整账号,误伤过正常做生意的大商人,改为冻结可疑交易的资金部分,账户的其他功能不受影响。
流水的脱敏导出给风控分析用,明文只在服务端流转。环路告警的处置时效要求 24 小时内给出结论,洗钱的资金在每小时的流逝都是受害者的损失。检测模型按季度迭代,工作室的洗钱手法在进化,图算法的特征也在进化。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 沙巴克的荣誉不只有城主:护城使者、功勋元老、攻城先锋,一套头衔体系把攻城战的参与者分成清晰的荣誉层级。头…
实战应用:用在哪里 私聊是骚扰的高发区:广告号群发、情感纠缠、代充推销。私聊的防护是双闸设计:频率的闸(频控)管节奏,关系的…
实战应用:用在哪里 VIP 等级变化时,头顶徽章、属性面板加成、特权列表三处界面要同时刷新。分散刷新的写法容易漏一处,事件驱…
实战应用:用在哪里 行会基金的每一笔进出都要两本账:基金余额的当前值是一本,捐献支出的流水是另一本。余额回答"现在有多少",…
实战应用:用在哪里 pullpay 是服务端主动发起的充值接口:游戏内触发支付流程(拉起收银台、生成订单),配合订单标记实现…
实战应用:用在哪里 某周五晚八点的沙巴克攻城战,开战 10 分钟内在线人数从 1800 掉到 1400——不是玩家流失,是网…