ni5arga/deanonymizer
GitHub: ni5arga/deanonymizer
deanonymizer是一款用于识别和揭示个人身份信息的开源工具。
Stars: 253 | Forks: 83
# deanonymizer
deanonymizer 是一个用于防御性 OSINT 暴露测量的命令行系统。它通过聚合弱信号、评分身份假设和发出与证据相关的修复指南来估计来自公共 Reddit 和 Hacker News 语料库(现在也支持网页、GitHub 和 StackOverflow)的重识别风险。
## 研究基础
设计遵循以下讨论的推理设置:
- [arXiv:2602.16800](https://arxiv.org/abs/2602.16800)
操作前提:孤立时看似非识别性的低熵披露可能在跨帖和跨平台融合下变得可识别。
## 形式目标
给定主题句柄集 H 和公共工件集 D,生成包含以下内容的危险报告 R:
- 与身份相关的特征提取
- 有证据支持的链接声明
- 校准后的置信标签
- 优先的缓解措施
## 威胁模型
- 观察者模型:只有访问公开可用文本和元数据的被动对手
- 数据边界:无私有 API、凭证访问或隐藏数据集
- 攻击原语:通过特征组合进行概率实体链接
- 安全目标:最小化来自公共痕迹的可归因身份表面
## 流程
1. 获取
- 来自 [Arctic Shift API]( | stdout | 将输出写入文件
- --i-am-authorized | false | 跳过脚本运行的交互式授权提示
## 安装
```
npm install
```
### LLM 后端
分析阶段在以下三个可互换的后端之一上运行,自动从环境中选择(使用 `--provider` 覆盖):
**Anthropic(本地,默认值,当仅设置此密钥时)**
```
export ANTHROPIC_API_KEY=sk-ant-...
# default model is the fast claude-haiku-4-5
# optional: export ANTHROPIC_MODEL=claude-sonnet-4-6 # slower, higher quality
```
**任何兼容 OpenAI 的端点** — OpenAI、Google Gemini、Ollama、Groq、Together 等。将 `OPENAI_BASE_URL` 指向提供商的 Chat Completions 界面:
```
# OpenAI
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o-mini
# Google Gemini (OpenAI-compatible endpoint)
export OPENAI_API_KEY=...your-gemini-key...
export OPENAI_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/
export OPENAI_MODEL=gemini-2.0-flash
# Ollama (local, no key required)
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3
```
**Claude Code CLI(无需 API 密钥)** — 通过 `claude -p` 将分析通过现有的 [Claude Code](https://claude.com/claude-code) 会话路由,因此不需要 `ANTHROPIC_API_KEY`。明确选择它:
```
npm run audit -- my_reddit_handle --provider claude-code
# optional: pin the model or point at a non-default CLI binary
export CLAUDE_CODE_MODEL=claude-sonnet-4-6
export CLAUDE_CODE_BIN=/path/to/claude
```
与本地 Anthropic SDK 路径的权衡:没有提示缓存,没有 `max_tokens` 控制,并且每次调用启动较慢(CLI 冷启动),因此它是可选的而不是自动检测。JSON-repair 后备方案涵盖了缺乏 `response_format: json_object` 等效物的不足。
选择顺序:`--provider` 标志 → `LLM_PROVIDER` 环境变量 → 自动检测(`OPENAI_*` / `--base-url` → openai;`ANTHROPIC_API_KEY` → anthropic)。`claude-code` 永远不会自动检测 — 通过 `--provider claude-code` 或 `LLM_PROVIDER=claude-code` 请求它。现有的仅 Anthropic 设置保持不变。本地 Anthropic 提示缓存在 Anthropic 路径上保留;OpenAI 路径在支持的情况下请求 `response_format: json_object` 并仍然为忽略它的端点运行 JSON-repair 后备方案。
## 使用
```
# Reddit only
npm run audit -- my_reddit_handle
# Reddit + Hacker News
npm run audit -- my_reddit_handle --hn my_hn_handle
# Hacker News only
npm run audit -- --hn my_hn_handle
# GitHub only (also follows the linked website + sub-pages)
npm run audit -- --github my_gh_handle
# Stack Overflow only (accepts numeric user_id or profile URL)
npm run audit -- --so 1234567
# All four platforms at once — cross-platform handle correlation is the
# strongest signal the analyzer can flag
npm run audit -- my_reddit_handle --hn my_hn_handle --github my_gh_handle --so 1234567
# Audit through the Claude Code CLI (no API key needed)
npm run audit -- my_reddit_handle --provider claude-code
# JSON output
npm run audit -- my_reddit_handle --json -o report.json
# Strict proof validation
npm run audit -- my_reddit_handle --require-external-proof
# Faster wall-clock analysis (parallel chunk workers)
npm run audit -- my_reddit_handle --concurrency 3
# Run against a local Ollama model
npm run audit -- my_reddit_handle --base-url http://localhost:11434/v1 --model llama3
# Force a specific provider/model for one run
npm run audit -- my_reddit_handle --provider openai --model gpt-4o-mini
```
## CLI 选项
| 标志 | 默认值 | 描述 |
|------|---------|-------------|
| [reddit-username] / --reddit | none | 要审计的 Reddit 用户(接受 u/name) |
| --hn | none | 要审计的 Hacker News 用户 |
| --github | none | 要审计的 GitHub 用户(使用公共 REST API;设置 `GITHUB_TOKEN` 以提高速率限制) |
| --so | none | 要审计的 Stack Overflow 用户(数字用户 ID 或个人资料 URL) |
| -n, --max | 300 | 每个平台获取的最大项目数 |
| --max-chars | 120000 | 最大分析转录预算 |
| --concurrency | all (≤8) | 并行处理的块工作线程数 |
| --provider | auto-detect | LLM 提供商:`anthropic`、`openai` 或 `claude-code` |
| --base-url | none | 兼容 OpenAI 的基本 URL(Gemini/Ollama/Groq/…);意味着 `openai` |
| --model | provider default | 覆盖模型名称 |
| --json | false | 输出 JSON 而不是文本报告 |
| --require-external-proof | false | 如果不存在证明 URL,则失败 |
| -o, --out | stdout | 将输出写入文件 |
| --i-am-authorized | false | 跳过脚本运行的交互式授权提示 |
## 可重复性和校准
- 将 -n 增加以扩展检索深度
- 将 --max-chars 增加以减少上下文截断
- 锁定模型(ANTHROPIC_MODEL / OPENAI_MODEL / CLAUDE_CODE_MODEL / --model)以控制推理后端方差
- 存储 JSON 输出以进行时间差分和回归分析
## 构建
```
npm run build
```
## 持续集成
`.github/workflows/ci.yml` 中的 GitHub Actions 工作流程在针对 `main` 的每次推送和拉取请求上运行 `npm run lint`、`npm run format:check`、`tsc --noEmit`、`npm test` 和 `npm run build`,跨 Node 20 / 22 / 24 矩阵。
## 局限性
- 发现是概率性的,不应被视为身份证明
- 召回率受源完整性截断约束的限制
- 文体学可分离性取决于人口和领域
- 置信度校准取决于证据密度和工件质量
- GitHub 的公共事件源大约限制在最后 90 天的 300 个事件,因此只有您提供 `GITHUB_TOKEN` 并直接遍历存储库(尚未实现)时,才会拾取仅出现在旧历史中的提交作者电子邮件
- 网站链接跟踪器是单跳的,具有同源子页面扩展;JavaScript 渲染的 SPAs(Next.js 客户端渲染、Notion 导出等)返回的大部分是空体,因为在流程中没有无头浏览器
- `@users.noreply.github.com` 地址被直接标识符提取器过滤掉,因为它们是隐私保护默认值,而不是泄露
标签:Apex, API, BSD, ESC4, Hacker News, MITM代理, OSINT, Petitpotam, Reddit, Stack Overflow, 匿名破解, 数据挖掘, 数据融合, 文本分析, 机器学习, 特征提取, 缓解措施, 网络安全, 置信度标签, 自动化攻击, 证据链接, 身份识别, 逆向工具, 隐私保护