返回列表 发布新帖

零宽字符隐写工具(可以定制字并隐藏任何字)

2027 0
小K网牛逼 发表于 11 小时前 | 查看全部 阅读模式 <

马上注册,结交更多好友,享用更多功能,让你轻松玩转小K网。

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

×
零宽字符隐写工具(可以定制字并隐藏任何字)
我的需求介绍:为什么要有这个工具,因为之前我弄个RSA加密的激活码太长,怕用户看的麻烦,所以我只好做了个这个零宽工具,让客户有更好的体验
原理就是利用零宽字符(Zero Width Characters,如 \u200B)不可见的特性,将秘密信息二进制化后隐藏在普通文本(宿主文本)中。复制出来的文本看起来很正常,但粘贴到解密区就能看到隐藏内容。整个工具封装在一个 HTML 文件中,使用了 Tailwind CSS 做 UI,支持自动跟随系统的暗黑模式。

工具特点:
  • 纯本地运行:所有逻辑都在浏览器完成,不上传服务器,安全隐私。
  • 单文件:HTML/CSS/JS 合一,双击即用,方便部署或收藏。
  • UI 美观:适配移动端和桌面端,支持深色/浅色模式切换。
  • 一键复制:交互体验优化,支持一键复制加密结果。

使用场景:
  • 在公开论坛/群聊传递秘密信息。
  • 给文字添加“数字水印”。
  • 单纯觉得好玩,整蛊朋友(比如表面发一句“你好”,实际隐藏了“V我50”)。

目前测试情况 QQ全端支持,微信手机端不支持发送零宽,只接受和复制粘贴
源码:代码直接保存为 .html 文件,用浏览器打开即可
注意:该工具不是加密工具,只是将字变成了零宽大小,专业的零宽加密工具找风导的

零宽字符隐写工具(可以定制字并隐藏任何字)

零宽字符隐写工具(可以定制字并隐藏任何字)

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Zero Text - 零宽文本加密</title>
  7.     <!-- 引入 Tailwind CSS (CDN) -->
  8.     <script src="https://cdn.tailwindcss.com"></script>
  9.     <!-- 配置 Tailwind 主题 -->
  10.     <script>
  11.         tailwind.config = {
  12.             darkMode: 'class',
  13.             theme: {
  14.                 extend: {
  15.                     colors: {
  16.                         primary: '#3b82f6', // blue-500
  17.                         primaryHover: '#2563eb', // blue-600
  18.                         darkBg: '#0f172a', // slate-900
  19.                         darkCard: '#1e293b', // slate-800
  20.                     },
  21.                     boxShadow: {
  22.                         'glow': '0 0 15px rgba(59, 130, 246, 0.5)',
  23.                     }
  24.                 }
  25.             }
  26.         }
  27.     </script>
  28.     <style>
  29.         /* 自定义滚动条样式 */
  30.         ::-webkit-scrollbar {
  31.             width: 8px;
  32.             height: 8px;
  33.         }
  34.         ::-webkit-scrollbar-track {
  35.             background: transparent;
  36.         }
  37.         ::-webkit-scrollbar-thumb {
  38.             background: #cbd5e1;
  39.             border-radius: 4px;
  40.         }
  41.         .dark ::-webkit-scrollbar-thumb {
  42.             background: #475569;
  43.         }
  44.         ::-webkit-scrollbar-thumb:hover {
  45.             background: #94a3b8;
  46.         }
  47.         /* 动画过渡 */
  48.         .transition-all-300 {
  49.             transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  50.         }
  51.         /* 文本域聚焦样式 */
  52.         .input-group:focus-within label {
  53.             color: #3b82f6;
  54.         }
  55.     </style>
  56. </head>
  57. <body class="min-h-screen bg-gray-100 dark:bg-darkBg text-slate-800 dark:text-slate-200 transition-colors duration-300 flex flex-col items-center py-8 px-4 font-sans">
  58.     <!-- 顶部标题栏 -->
  59.     <header class="w-full max-w-5xl flex justify-between items-center mb-8">
  60.         <div class="flex items-center gap-3">
  61.             <div class="bg-blue-600 p-2 rounded-lg shadow-lg text-white">
  62.                 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg>
  63.             </div>
  64.             <div>
  65.                 <h1 class="text-2xl font-bold tracking-tight text-slate-900 dark:text-white">Zero Text</h1>
  66.                 <p class="text-xs text-slate-500 dark:text-slate-400">零宽字符隐写工具</p>
  67.             </div>
  68.         </div>
  69.         <div class="flex items-center gap-4">
  70.             <!-- GitHub Link -->
  71.             <a href="https://www.52pojie.cn/" target="_blank" class="p-2 rounded-full hover:bg-gray-200 dark:hover:bg-slate-700 transition-colors text-slate-600 dark:text-slate-400" title="View on GitHub">
  72.                 <svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
  73.             </a>
  74.             <!-- Theme Toggle -->
  75.             <button id="themeToggle" class="p-2 rounded-full hover:bg-gray-200 dark:hover:bg-slate-700 transition-colors text-slate-600 dark:text-slate-400">
  76.                 <svg id="iconSun" class="hidden w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path></svg>
  77.                 <svg id="iconMoon" class="block w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path></svg>
  78.             </button>
  79.         </div>
  80.     </header>
  81.     <!-- 主容器 -->
  82.     <main class="w-full max-w-5xl grid grid-cols-1 md:grid-cols-2 gap-8">
  83.         <!-- 左侧:加密卡片 -->
  84.         <section class="bg-white dark:bg-darkCard rounded-2xl shadow-xl overflow-hidden border border-gray-200 dark:border-slate-700 flex flex-col h-full transition-all-300 hover:shadow-2xl">
  85.             <div class="bg-gradient-to-r from-blue-500 to-blue-600 p-4">
  86.                 <h2 class="text-white font-semibold flex items-center gap-2">
  87.                     <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4"></path></svg>
  88.                     加密 / 隐藏信息
  89.                 </h2>
  90.             </div>
  91.             <div class="p-6 flex flex-col gap-5 flex-1">
  92.                 <!-- 宿主文本 -->
  93.                 <div class="input-group">
  94.                     <label class="block text-sm font-medium text-slate-600 dark:text-slate-400 mb-1.5 transition-colors">
  95.                         1. 宿主文本(表面显示的内容)
  96.                     </label>
  97.                     <textarea id="carrierText" class="w-full h-24 p-3 rounded-lg border border-gray-300 dark:border-slate-600 bg-gray-50 dark:bg-slate-900/50 focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all resize-none text-sm" placeholder="例如:今天天气真不错,要不要一起去喝咖啡?"></textarea>
  98.                 </div>
  99.                 <!-- 秘密文本 -->
  100.                 <div class="input-group">
  101.                     <label class="block text-sm font-medium text-slate-600 dark:text-slate-400 mb-1.5 transition-colors">
  102.                         2. 秘密文本(要隐藏的内容)
  103.                     </label>
  104.                     <textarea id="secretText" class="w-full h-24 p-3 rounded-lg border border-gray-300 dark:border-slate-600 bg-gray-50 dark:bg-slate-900/50 focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-all resize-none text-sm" placeholder="例如:你好鸭"></textarea>
  105.                 </div>
  106.                 <!-- 按钮区 -->
  107.                 <button id="encryptBtn" class="w-full py-3 bg-blue-600 hover:bg-blue-700 text-white font-semibold rounded-xl shadow-lg shadow-blue-500/30 transition-all active:scale-[0.98] flex items-center justify-center gap-2 group">
  108.                     <span class="group-hover:scale-110 transition-transform">🔒</span>
  109.                     生成加密文本
  110.                 </button>
  111.                 <!-- 结果区 -->
  112.                 <div class="relative mt-2">
  113.                     <label class="block text-xs font-semibold uppercase text-slate-400 dark:text-slate-500 mb-1 tracking-wider">
  114.                         加密结果
  115.                     </label>
  116.                     <div class="relative group">
  117.                         <div id="encryptResult" class="w-full h-28 p-3 pr-12 rounded-lg border-2 border-dashed border-gray-300 dark:border-slate-600 bg-gray-50 dark:bg-slate-900/50 text-sm text-slate-500 dark:text-slate-400 break-all overflow-y-auto font-mono transition-colors group-hover:border-blue-300 dark:group-hover:border-slate-500">
  118.                             (等待生成...)
  119.                         </div>
  120.                         <!-- 复制按钮 (悬浮) -->
  121.                         <button id="copyEncryptBtn" disabled class="absolute top-2 right-2 p-2 bg-white dark:bg-slate-700 border border-gray-200 dark:border-slate-600 rounded-md shadow-sm text-slate-500 hover:text-blue-600 hover:border-blue-200 dark:hover:text-blue-400 transition-all disabled:opacity-50 disabled:cursor-not-allowed group-hover:opacity-100" title="复制结果">
  122.                             <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>
  123.                         </button>
  124.                     </div>
  125.                 </div>
  126.             </div>
  127.         </section>
  128.         <!-- 右侧:解密卡片 -->
  129.         <section class="bg-white dark:bg-darkCard rounded-2xl shadow-xl overflow-hidden border border-gray-200 dark:border-slate-700 flex flex-col h-full transition-all-300 hover:shadow-2xl">
  130.             <div class="bg-gradient-to-r from-emerald-500 to-emerald-600 p-4">
  131.                 <h2 class="text-white font-semibold flex items-center gap-2">
  132.                     <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 9.9-1"></path></svg>
  133.                     解密 / 提取信息
  134.                 </h2>
  135.             </div>
  136.             <div class="p-6 flex flex-col gap-5 flex-1">
  137.                 <!-- 解密输入 -->
  138.                 <div class="input-group">
  139.                     <label class="block text-sm font-medium text-slate-600 dark:text-slate-400 mb-1.5 transition-colors">
  140.                         粘贴包含零宽字符的文本
  141.                     </label>
  142.                     <textarea id="decodeInput" class="w-full h-[220px] p-3 rounded-lg border border-gray-300 dark:border-slate-600 bg-gray-50 dark:bg-slate-900/50 focus:ring-2 focus:ring-emerald-500 focus:border-transparent outline-none transition-all resize-none text-sm" placeholder="在此处粘贴..."></textarea>
  143.                 </div>
  144.                 <!-- 按钮区 -->
  145.                 <button id="decryptBtn" class="w-full py-3 bg-emerald-600 hover:bg-emerald-700 text-white font-semibold rounded-xl shadow-lg shadow-emerald-500/30 transition-all active:scale-[0.98] flex items-center justify-center gap-2 group">
  146.                     <span class="group-hover:scale-110 transition-transform">🔓</span>
  147.                     解密提取内容
  148.                 </button>
  149.                 <!-- 结果区 -->
  150.                 <div class="relative mt-2 flex-1 flex flex-col">
  151.                     <label class="block text-xs font-semibold uppercase text-slate-400 dark:text-slate-500 mb-1 tracking-wider">
  152.                         还原结果
  153.                     </label>
  154.                     <div class="relative group flex-1">
  155.                         <div id="decryptResult" class="w-full h-full min-h-[112px] p-3 pr-12 rounded-lg border-2 border-dashed border-gray-300 dark:border-slate-600 bg-gray-50 dark:bg-slate-900/50 text-sm text-slate-500 dark:text-slate-400 break-all overflow-y-auto font-mono transition-colors group-hover:border-emerald-300 dark:group-hover:border-slate-500">
  156.                             (等待解密...)
  157.                         </div>
  158.                          <!-- 复制按钮 (悬浮) -->
  159.                          <button id="copyDecryptBtn" disabled class="absolute top-2 right-2 p-2 bg-white dark:bg-slate-700 border border-gray-200 dark:border-slate-600 rounded-md shadow-sm text-slate-500 hover:text-emerald-600 hover:border-emerald-200 dark:hover:text-emerald-400 transition-all disabled:opacity-50 disabled:cursor-not-allowed group-hover:opacity-100" title="复制结果">
  160.                             <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>
  161.                         </button>
  162.                     </div>
  163.                 </div>
  164.             </div>
  165.         </section>
  166.     </main>
  167.     <footer class="mt-8 text-center text-xs text-slate-400 dark:text-slate-500">
  168.         <p>🔒 所有加密/解密均在本地浏览器完成,不会上传数据</p>
  169.     </footer>
  170.     <!-- JavaScript 逻辑 -->
  171.     <script>
  172.         // ==========================================
  173.         // 核心加密解密逻辑 (保持不变)
  174.         // ==========================================
  175.         const ZWC = { 0: '\u200B', 1: '\u200C' };
  176.         function textToBinary(text) {
  177.             const utf8 = new TextEncoder().encode(text);
  178.             return Array.from(utf8)
  179.                 .map((b) => b.toString(2).padStart(8, '0'))
  180.                 .join('');
  181.         }
  182.         function binaryToText(bin) {
  183.             const bytesMatch = bin.match(/.{8}/g);
  184.             if (!bytesMatch) return '';
  185.             const bytes = bytesMatch.map((b) => parseInt(b, 2));
  186.             return new TextDecoder().decode(new Uint8Array(bytes));
  187.         }
  188.         function binaryToZWC(bin) {
  189.             return bin.split('').map((b) => ZWC[Number(b)]).join('');
  190.         }
  191.         function zwcToBinary(zwcText) {
  192.             return [...zwcText]
  193.                 .map((c) => (c === '\u200B' ? '0' : c === '\u200C' ? '1' : ''))
  194.                 .join('');
  195.         }
  196.         function insertZWCIntoCarrier(carrier, zwc) {
  197.             if (!carrier) carrier = " ";
  198.             const mid = Math.floor(carrier.length / 2);
  199.             return carrier.slice(0, mid) + zwc + carrier.slice(mid);
  200.         }
  201.         // ==========================================
  202.         // DOM 操作
  203.         // ==========================================
  204.         document.addEventListener('DOMContentLoaded', () => {
  205.             const carrierInput = document.getElementById('carrierText');
  206.             const secretInput = document.getElementById('secretText');
  207.             const encryptBtn = document.getElementById('encryptBtn');
  208.             const encryptResultDiv = document.getElementById('encryptResult');
  209.             const copyEncryptBtn = document.getElementById('copyEncryptBtn');
  210.             const decodeInput = document.getElementById('decodeInput');
  211.             const decryptBtn = document.getElementById('decryptBtn');
  212.             const decryptResultDiv = document.getElementById('decryptResult');
  213.             const copyDecryptBtn = document.getElementById('copyDecryptBtn');
  214.             const themeToggle = document.getElementById('themeToggle');
  215.             const iconSun = document.getElementById('iconSun');
  216.             const iconMoon = document.getElementById('iconMoon');
  217.             let encryptedValue = '';
  218.             let decryptedValue = '';
  219.             // 辅助函数:更新结果框状态
  220.             function updateResultBox(element, text, isPlaceholder = false) {
  221.                 element.innerText = text;
  222.                 if (isPlaceholder) {
  223.                     element.classList.add('text-slate-500', 'dark:text-slate-400');
  224.                     element.classList.remove('text-slate-800', 'dark:text-slate-200');
  225.                 } else {
  226.                     element.classList.remove('text-slate-500', 'dark:text-slate-400');
  227.                     element.classList.add('text-slate-800', 'dark:text-slate-200');
  228.                 }
  229.             }
  230.             // --- 加密 ---
  231.             encryptBtn.addEventListener('click', () => {
  232.                 const secret = secretInput.value;
  233.                 const carrier = carrierInput.value;
  234.                 if (!secret) {
  235.                     // 简单的震动反馈或边框红色提示
  236.                     secretInput.classList.add('ring-2', 'ring-red-500');
  237.                     setTimeout(() => secretInput.classList.remove('ring-2', 'ring-red-500'), 500);
  238.                     return;
  239.                 }
  240.                 try {
  241.                     const binary = textToBinary(secret);
  242.                     const zwcText = binaryToZWC(binary);
  243.                     const final = insertZWCIntoCarrier(carrier || 'Processing...', zwcText);
  244.                     encryptedValue = final;
  245.                     updateResultBox(encryptResultDiv, final);
  246.                     copyEncryptBtn.disabled = false;
  247.                     // 视觉反馈:稍微闪烁一下结果框
  248.                     encryptResultDiv.classList.add('bg-blue-50', 'dark:bg-blue-900/20');
  249.                     setTimeout(() => encryptResultDiv.classList.remove('bg-blue-50', 'dark:bg-blue-900/20'), 300);
  250.                 } catch (e) {
  251.                     console.error(e);
  252.                     alert('加密失败');
  253.                 }
  254.             });
  255.             // --- 解密 ---
  256.             decryptBtn.addEventListener('click', () => {
  257.                 const input = decodeInput.value;
  258.                 if (!input) return;
  259.                 try {
  260.                     const zwcChars = [...input]
  261.                         .filter((c) => c === '\u200B' || c === '\u200C')
  262.                         .join('');
  263.                     if (!zwcChars) {
  264.                         updateResultBox(decryptResultDiv, "⚠️ 未检测到隐藏信息", true);
  265.                         decryptedValue = "";
  266.                         copyDecryptBtn.disabled = true;
  267.                         return;
  268.                     }
  269.                     const binary = zwcToBinary(zwcChars);
  270.                     const text = binaryToText(binary);
  271.                     decryptedValue = text;
  272.                     updateResultBox(decryptResultDiv, text);
  273.                     copyDecryptBtn.disabled = false;
  274.                     // 视觉反馈
  275.                     decryptResultDiv.classList.add('bg-emerald-50', 'dark:bg-emerald-900/20');
  276.                     setTimeout(() => decryptResultDiv.classList.remove('bg-emerald-50', 'dark:bg-emerald-900/20'), 300);
  277.                 } catch (e) {
  278.                     console.error(e);
  279.                     updateResultBox(decryptResultDiv, "❌ 解密失败:数据损坏", true);
  280.                 }
  281.             });
  282.             // --- 复制 ---
  283.             async function copyToClipboard(text, btnElement) {
  284.                 if (!text) return;
  285.                 try {
  286.                     await navigator.clipboard.writeText(text);
  287.                     const originalIcon = btnElement.innerHTML;
  288.                     // 切换为打钩图标
  289.                     btnElement.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-green-500"><polyline points="20 6 9 17 4 12"></polyline></svg>`;
  290.                     setTimeout(() => {
  291.                         btnElement.innerHTML = originalIcon;
  292.                     }, 1500);
  293.                 } catch (err) {
  294.                     alert('复制失败');
  295.                 }
  296.             }
  297.             copyEncryptBtn.addEventListener('click', () => {
  298.                 copyToClipboard(encryptedValue, copyEncryptBtn);
  299.             });
  300.             copyDecryptBtn.addEventListener('click', () => {
  301.                 copyToClipboard(decryptedValue, copyDecryptBtn);
  302.             });
  303.             // --- 深色模式 ---
  304.             function updateThemeIcon(isDark) {
  305.                 if (isDark) {
  306.                     iconSun.classList.remove('hidden');
  307.                     iconMoon.classList.add('hidden');
  308.                 } else {
  309.                     iconSun.classList.add('hidden');
  310.                     iconMoon.classList.remove('hidden');
  311.                 }
  312.             }
  313.             function initTheme() {
  314.                 const stored = localStorage.getItem('theme');
  315.                 const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
  316.                 if (stored === 'dark' || (!stored && prefersDark)) {
  317.                     document.documentElement.classList.add('dark');
  318.                     updateThemeIcon(true);
  319.                 } else {
  320.                     document.documentElement.classList.remove('dark');
  321.                     updateThemeIcon(false);
  322.                 }
  323.             }
  324.             themeToggle.addEventListener('click', () => {
  325.                 const isDark = document.documentElement.classList.toggle('dark');
  326.                 localStorage.setItem('theme', isDark ? 'dark' : 'light');
  327.                 updateThemeIcon(isDark);
  328.             });
  329.             initTheme();
  330.         });
  331.     </script>
  332. </body>
  333. </html>
复制代码


回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

您需要 登录 后才可以回复,轻松玩转社区,没有帐号?立即注册
快速回复
关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表