Wxh16144/obfuscated-digit-font

GitHub: Wxh16144/obfuscated-digit-font

一个通过生成字形映射混淆字体来防止数字数据被爬虫直接抓取的工具,支持命令行与Node.js模块两种使用方式。

Stars: 0 | Forks: 0

# digit-font 这是一个用于生成混淆数字字体(主要用于防爬虫/防数据抓取),并支持对数字字符串进行编码和解码的工具。通过配置映射规则,它可以将标准的数字(0-9)映射到其他字形上,从而在页面上显示正确的视觉效果,但在 HTML 源码或复制时得到的是混淆后的错误数据。 ## ✨ 特性 - **生成混淆字体**:根据配置规则,从原字体中提取并重排数字字形,生成全新的混淆字体(支持 `.ttf`、`.otf` 等)。 - **编码 / 解码**:提供将真实数字转换为混淆字符串(供页面渲染),以及将混淆字符串还原为真实数字的功能。 - **本地预览服务**:内置 Web 服务器,可快速在浏览器中预览生成的混淆字体和本地方案映射效果。 - **双重形态**:既可以作为 CLI 命令行工具独立运行,也可以作为 Node.js 模块集成在前端构建或后端服务中。 ## 💻 CLI(命令行工具)使用指南 通过命令行可以快速生成字体、测试数据编解码以及启动预览服务。 ### 安装 你可以全局安装它以便随时使用: npm install -g digit-font ### 基本指令 本工具提供 `obf-digit` 和 `digit-font` 两个命令(指代完全相同)。 obf-digit [options] [command] ### 可用命令 - `gen` 或 `generate`:读取配置并依据基础字体生成混淆后的新字体文件。 - `preview`:启动本地 Web 服务器,快速预览已经生成好的混淆字体与映射效果。 - `encode `:使用当前加载的数字映射配置,对输入的十进制文本进行编码。 - `decode `:使用当前加载的数字映射配置,对遭混淆的文本进行解码。 ### 可选参数 - `-c, --config `:指定配置文件路径(默认查找当前或相关目录的 .obf-digit.cfg)。 - `-i, --input `:输入的基础目标字体文件(例如 .ttf, .otf)。会覆盖配置里的设置。 - `-o, --output `:输出的混淆字体文件路径。会覆盖配置里的设置。 - `--preview`:在执行 `gen` 生成字体成功后,自动一并启动预览服务器。 - `-p, --port `:预览服务器运行的指定端口号(默认:`12337`)。 - `-h, --help`:显示帮助信息。 - `-v, --version`:显示当前版本号。 ### 配置文件示例 (.obf-digit.cfg) 工具默认执行时会自动在当前目录层级寻找配置文件,使用标准 INI 格式: [general] # 基础模板字体路径。可以直接写本地文件,或者工具内置自带的字体(例如 Roboto-Regular.ttf) input = BirthdayDigits.ttf # 生成的混淆字体输出路径 output = ./my-font.ttf [numbermap] # 解码映射规则 (看到的字形 = 实际底层存储的字符) # 例如:当此处为 0=9 时,用户视觉上看到的是 "9",底层字符其实是 "0" 0=9 1=6 2=2 3=7 4=3 5=8 6=1 7=5 8=4 9=0 [preview] enable = true port = 12337 ### 命令行常用用例 **1. 一键生成混淆字体并启动预览:** obf-digit gen --preview **2. 借助一份自定义配置文件对金额进行混淆编码:** obf-digit encode "123" -c ./my-custom.cfg ## 🛠 Node.js API 使用指南 你可以将本工具直接引入你的 Node 项目或构建流水线(如 Webpack / Vite 插件内)来动态处理字体生成或对数据实施动态加密。 ### 局部安装 npm install digit-font # 或者 yarn add digit-font pnpm add digit-font ### 引入和使用 import { generateObfuscatedFont, encodeDigits, decodeDigits, loadConfig } from 'digit-font'; ### API 详述 #### 1. `loadConfig(configPath?: string)` 加载并解析本地配置。系统会自动将 `decode` 映射表进行反转,为你生出匹配的 `encode` 表。此举保证数据的双向转换不含糊。 **示例:** const config = loadConfig('./.obf-digit.cfg'); // 查看解码映射字典 console.log(config.numberMap.decode); // { '0': '9', '1': '6', '2': '2', ... } // 查看编码映射字典 (由系统自动反推生成) console.log(config.numberMap.encode); // { '9': '0', '6': '1', '2': '2', ... } #### 2. `generateObfuscatedFont(inputPath: string, outputPath: string, map: NumberMap)` 根据上述生成的 `NumberMap` 规则表和提供的字体底包,生成一份打乱映射后新的混淆字体。 **示例:** import path from 'path'; // 手动撰写映射表结构 const customMap = { decode: { '0': '9', '1': '2', '2': '1' }, // 用户敲下了 "1",实际看到视觉形变成了 "2" 的字样 encode: { '9': '0', '2': '1', '1': '2' } }; const inputFont = path.resolve(__dirname, 'Roboto.ttf'); const outputFont = path.resolve(__dirname, 'ObfuscatedRoboto.ttf'); try { generateObfuscatedFont(inputFont, outputFont, customMap); console.log('✅ 混淆字体生成完毕!'); } catch (error) { console.error('❌ 生成失败:', error); } #### 3. `encodeDigits(input: string | number, map: NumberMap)` 用于后端接口吐出数据之前进行处理:将真实的数字字符串转换为符合当前字体映射的混淆字符。 **示例:** const realData = "120"; // 这是系统内部的真实价格数据 // 把它转换为混淆版(由生成的混淆字体去配合显示视觉上依旧是 120 的效果) const encodedText = encodeDigits(realData, config.numberMap); console.log(encodedText); #### 4. `decodeDigits(input: string | number, map: NumberMap)` 把从前台被混淆的数据(例如被爬虫强行复制粘贴抓回来的乱码数据),通过同一套规则正确解码还原为真实对应的数字字符体系。 **示例:** const scrapedData = "629"; // 爬虫直接复制拿到的错误源码内容 // 一键还原真实面貌 const actualValue = decodeDigits(scrapedData, config.numberMap); console.log(actualValue); ## 📄 License协议 基于 MIT License 许可开源。
标签:DNS枚举, GNU通用公共许可证, MITM代理, Node.js, OpenType, ProjectDiscovery, TTF字体处理, 内容防护, 前端安全, 反数据抓取, 字体混淆, 字形映射, 数字字体生成, 数据保护, 数据混淆, 文档结构分析, 编码解码, 网络安全工具, 网页防复制, 自动化攻击, 自动化攻击, 防爬虫