盗号与诈骗得手的金币需要洗白:一串账号互相倒手,每笔都看似正常交易,合在一起是资金流向的回环。环路检测把交易流水建成有向图,图里找环,环就是洗钱链路。
-- 交易流水建图:源->目标 的金额累计
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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 玩家客户端闪退,开发者却毫不知情——这是没有崩溃上报的常态。Lua 层的错误自动收集:每个报错打包成事件…
实战应用:用在哪里 玩家举报外挂与骗子,客服处理的难点不是判断而是取证:说了什么、什么时间、有没有交易记录。举报取证链把玩家…
实战应用:用在哪里 老玩家的邮箱里躺着上千封邮件,列表控件如果真的创建一千个条目,滚动直接掉到个位数帧率。列表虚拟化只创建可…
实战应用:用在哪里 天赋树给满级玩家继续投入的理由:攻击系、防御系、通用系三条支线各 20 层,加点消耗天赋点,洗点返还点数…
实战应用:用在哪里 一把攻击上限 28 的修罗挂进拍卖行,起拍 800 万,两个行会的土豪从晚上八点掐到十一点。三小时的拉锯…
实战应用:用在哪里 邮件的正文是文本,附件是资产:一把裁决放在附件里,附件的数据安全等级必须对标装备本体。附件与正文分离存储…