RansomLook 是一款用于监控勒索软件组织与市场并提取其受害者的工具。
/doc请注意,强烈推荐使用 Ubuntu 24.04。
你需要安装 poetry 2.1.0。
curl -sSL https://install.python-poetry.org | python3 -
Valkey:Valkey 是一个开源(BSD)高性能键/值数据存储,支持缓存、消息队列等多种工作负载,并可作为主数据库。Valkey 既可以作为独立守护进程运行,也可以在集群中运行,并提供复制和高可用性选项。
注意:Valkey 应从源码安装,且仓库必须与你将要克隆 RansomLook 的目录相同。
为了编译和测试 Valkey,你需要一些软件包:
sudo apt-get update
sudo apt install build-essential tcl
git clone https://github.com/valkey-io/valkey
cd valkey
git checkout 8.0
make
# Optionally, you can run the tests:
make test
cd ..
按常规操作:
git clone https://github.com/RansomLook/RansomLook.git
此时,你应该位于包含 valkey 和 RansomLook 的目录中。
运行 ls valkey RansomLook 确认情况。如果看到 No such file or directory,则说明其中一个缺失,你需要修复安装。
目录树必须如下所示:
.
├── valkey => compiled valkey
└── RansomLook => not installed RansomLook yet
sudo apt install python3-dev
sudo apt install libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libxkbcommon0 libxdamage1 libgbm1 libpango-1.0-0 libcairo2 libatspi2.0-0 libxcomposite1 libxfixes3 libxrandr2 libasound2 libwayland-client0
sudo apt install libgtk-3-0 libpangocairo-1.0-0 libcairo-gobject2 libgdk-pixbuf2.0-0 libx11-xcb1 libxcursor1
sudo apt install tor ffmpeg
在你克隆 RansomLook 的目录中运行:
cd RansomLook # if you're not already in the directory
poetry install
初始化 .env 文件:
echo RANSOMLOOK_HOME="`pwd`" >> .env
获取 Web 依赖(css、font、js)
poetry run tools/3rdparty.py
poetry run tools/generate_sri.py
请注意,这些依赖受版本限制,因为使用了 子资源完整性(SRI)(在 website/web/sri.txt 中设置)。
复制配置文件:
cp config/generic.json.sample config/generic.json
并根据你的需要对其进行配置。
运行以下命令以获取所需的 JavaScript 依赖并运行 RansomLook。
poetry run update --yes
使用默认配置,你可以通过 http://0.0.0.0:8000 访问 Web 界面。
poetry run start # Start backend (Valkey) + website
poetry run stop # Stop website + backend
poetry run shutdown # Graceful shutdown of all services
poetry run start_website # Start only the web interface (Gunicorn)
poetry run run_backend # Start only the Valkey backend
poetry run update --yes # System update, fetch deps, integrity checks
使用默认配置,Web 界面可通过 http://127.0.0.1:8000 访问。
这些任务应通过 cron 进行调度(建议每 2 小时执行一次)。
# Make sure Tor is running first
sudo systemctl enable --now tor
poetry run scrape # Scrape all group/market sites (DB 0 + 3)
poetry run parse # Run all parsers to extract posts from scraped data
poetry run screen # Take screenshots of group sites via Lacus/Playwright
poetry run notify # Send email notifications for new posts
poetry run notifyleak # Send email notifications for new leaks
poetry run breach # Scrape leak-lookup.com for new data breaches (DB 4)
poetry run cryptocur # Sync cryptocurrency addresses from ransomwhe.re (DB 7)
poetry run update_crypto_tx # Fetch/update transactions via Breadcrumbs One API (DB 7)
poetry run rf # Fetch Recorded Future channel data (DB 10)
poetry run notes # Import/update ransom notes from ThreatLabz repo (DB 11)
poetry run torrent # Fetch torrent information from ransomware groups
poetry run torrent-health # Scan BitTorrent swarms for each tracked magnet (DB 13)
poetry run torrent-health-backfill # Rescan torrents missing name / trackers (longer DHT window)
poetry run torrent-tracker-scrape # BEP-48 / BEP-15 tracker scrape (HTTP onion via Tor, HTTP clearnet, UDP)
poetry run torrent-webseed-check # HEAD every BEP-19 webseed URL, mark online/offline
poetry run enrich-ips # Enrich observed peer IPs via CIRCL (cached 7 days)
poetry run torrent-health 不带参数时遵循自适应调度
(活跃/死亡/冻结间隔),并扫描所有到期项。若要绕过
调度并强制扫描:
poetry run torrent-health --only <infohash> # one specific swarm
poetry run torrent-health --group "clop torrents" # every torrent of a group
poetry run torrent-health --group clop --group akira # multiple groups at once
poetry run torrent-health --magnet "magnet:?xt=urn:btih:…" # ad-hoc magnet (not stored against any group)
poetry run torrent-health --scan-duration 120 # longer DHT observation window
当组在常规 DLS 流水线之外发布泄露(Telegram
发布、私有镜像、论坛帖子)时,手动将 magnet 或 .torrent 文件
附加到该组,以便 swarm 健康流水线能获取它:
poetry run tools/add_group_torrent.py --group clop --magnet "magnet:?xt=urn:btih:…"
poetry run tools/add_group_torrent.py --group akira --torrent /path/leak.torrent
poetry run tools/add_group_torrent.py --group clop --from-file magnets.txt
poetry run tools/add_group_torrent.py --remove <infohash>
手动附加的 torrent 会与帖子关联的 torrent 合并,并在 下次 cron 运行时被扫描。
通过裸 magnet(无 ws=、最简 tr=)添加的 torrent 依赖
libtorrent 的 ut_metadata 扩展(BEP 9)从愿意提供数据的对等方获取 info dict。
在默认 45 秒扫描窗口内,此过程通常无法完成,
导致元数据行最终只有对等方,而没有名称/大小/文件/
tracker。torrent-health-backfill 会枚举这些不完整的行,并
使用更长的窗口(默认 300 秒)重新扫描它们:
poetry run torrent-health-backfill # live-peer torrents, missing name/trackers
poetry run torrent-health-backfill --dry-run # preview what would be scanned
poetry run torrent-health-backfill --scan-duration 600 # stubborn swarms
poetry run torrent-health-backfill --max 50 # cap per run
poetry run torrent-health-backfill --include-files # also fill missing file lists
poetry run torrent-health-backfill --all # include dead swarms too (rarely useful)
可以按需运行或由每日 cron 运行——候选列表会在 每次运行时重新计算,因此已填充的行会自动跳过。
两种互补的被动探测方式,无需运行完整的 libtorrent 扫描——非常适合每日刷新每个 swarm 的情报:
# BEP-48 (HTTP) + BEP-15 (UDP) scrape — gives seeders / leechers / downloaded-all-time
poetry run torrent-tracker-scrape # onion HTTP only (default)
poetry run torrent-tracker-scrape --clearnet-too # adds clearnet HTTP + UDP
poetry run torrent-tracker-scrape --limit 5 -v # sanity probe
# BEP-19 webseed HEAD check — green/red dot per mirror on the detail page
poetry run torrent-webseed-check # full pass, threaded
poetry run torrent-webseed-check --workers 32 -v # faster, noisier
poetry run torrent-webseed-check --onion-only # skip clearnet mirrors
结果会持久化在 torrent 详情页(/torrent-health/<ih>)上:
一个专门的 KPI 横幅用于显示 tracker 数据,以及每个
webseed URL 旁边的绿/红点。
示例 crontab(crontab -e):
# Core pipeline: scrape → parse → screenshot (every 2 hours)
0 */2 * * * cd /path/to/RansomLook && poetry run scrape && poetry run parse && poetry run screen
# Notifications (daily morning recap)
0 8 * * * cd /path/to/RansomLook && poetry run notify && poetry run notifyleak
# Data enrichment (daily)
0 4 * * * cd /path/to/RansomLook && poetry run breach
0 5 * * * cd /path/to/RansomLook && poetry run cryptocur && poetry run update_crypto_tx
0 6 * * * cd /path/to/RansomLook && poetry run rf && poetry run notes
# Torrent swarm health (every 6 hours, adaptive per-swarm)
0 */6 * * * cd /path/to/RansomLook && flock -n /tmp/rl-torrent.lock poetry run torrent-health
# Tracker scrape — single pass covering onion HTTP, clearnet HTTP, UDP (every 3 hours)
0 */3 * * * cd /path/to/RansomLook && poetry run torrent-tracker-scrape --clearnet-too
# Webseed liveness — green/red dot map of mirror infrastructure (every 6 hours)
30 */6 * * * cd /path/to/RansomLook && poetry run torrent-webseed-check
# Daily metadata backfill — rescan torrents still missing name / trackers
0 1 * * * cd /path/to/RansomLook && poetry run torrent-health-backfill
# CIRCL IP enrichment (daily, keeps the admin page instant)
30 3 * * * cd /path/to/RansomLook && flock -n /tmp/rl-enrich.lock poetry run enrich-ips
我们建议使用管理 GUI,但你也可以使用 CLI:
poetry run add GROUPNAME URLTOCHECK DATABASE-NUMBER
DATABASE-NUMBER:0 表示勒索软件组,3 表示市场/论坛RansomLook/parsers/ 中存在解析器,则组名必须与 .py 文件名匹配tools/)# Import all databases (0=Groups, 2=Posts, 3=Markets, 4=Leaks, 5=Actors, 10=RF)
poetry run tools/import_from_instance.py --api-key "YOUR_API_KEY"
# Or use an environment variable
export RANSOMLOOK_API_KEY="YOUR_API_KEY"
poetry run tools/import_from_instance.py
# Custom instance + specific databases only
poetry run tools/import_from_instance.py --url https://my-instance/api --api-key "KEY" --db 0 2 5
需要 API 密钥(在远程实例的 Admin > API Keys 中生成一个)。
poetry run tools/malpedia.py # Enrich group metadata with Malpedia descriptions
poetry run tools/import_groups.py # Seed DB from data/groups.json + data/markets.json
poetry run tools/getpreviousscreen.py # Retrieve archived screenshots
poetry run tools/validate_config_files.py # Validate config/generic.json structure
poetry run tools/3rdparty.py # Download third-party JS/CSS (Plotly, etc.)
poetry run tools/generate_sri.py # Regenerate SRI hashes for static assets
python3 tools/crypto_export.py # Export crypto addresses to CSV
python3 tools/crypto_export.py --chain bitcoin -o btc.csv # Bitcoin only
python3 tools/cryptostats.py # Display per-group crypto address/tx counts
poetry run tools/seed_actors.py # Populate sample threat actors for testing
poetry run tools/seed_alert_keywords.py # Populate sample alert keywords for testing
poetry run tools/seed_audit_logs.py # Populate sample audit log entries for testing
RansomLook 提供一个 REST API,交互式 Swagger 文档位于 /doc。
大多数读取端点都是公开的。export 端点需要通过 Authorization 头传递 API 密钥。
API 密钥通过 Web 界面在 Admin > API Keys 中管理。
批量数据库导出,用于重新导入或离线分析:
GET /api/export/<db>
Authorization: YOUR_API_KEY
私有条目会自动从组(0)、市场(3)和行为者(5)中过滤掉。
Copyright (C) 2022-2026 Fafner [_KeyZee_]
Copyright (C) 2022-2026 Alexandre Dulaunoy
Copyright (C) 2023-2026 Tammy Harper
Copyright (C) 2026 Katya Kandratovich
Copyright (C) 2022-2026 CERT-AG - CERT AG
本程序是自由软件:你可以重新分发和/或修改 它,前提是遵守自由软件基金会发布的 GNU Affero 通用公共许可证的条款, 无论是许可证版本 3,还是 (由你选择)任何更高版本。
本程序的分发是希望它有用, 但没有任何保证;甚至没有适销性或特定用途适用性的 默示保证。有关更多详情,请参阅 GNU Affero 通用公共许可证。
你应该已随本程序收到一份 GNU Affero 通用公共许可证的副本。 如果没有,请参阅 https://www.gnu.org/licenses/。
ransomlook.io 提供的所有内容——包括网站、API 响应和数据集——均根据 知识共享署名 4.0 国际(CC BY 4.0)许可证提供。
你可以出于任何目的(包括商业目的)自由共享和改编这些材料,前提是给出适当的署名。
| 命名空间 | 基础路径 | 描述 |
|---|
| Stats | /api/stats, /api/hot, /api/search, /api/health, /api/compare | 平台统计、热门组、跨实体搜索、镜像健康、并排比较 |
| GenericAPI | /api/ | 组、市场、帖子、最近/最后/周期查询、导出 |
| Actors | /api/actors/ | 威胁行为者档案、关系(组、论坛、对等方)、通缉状态 |
| Crypto | /api/crypto/ | 加密货币组、按区块链划分的钱包、交易、统计、近期交易 |
| Notes | /api/notes/ | 按组的勒索信、近期勒索信、勒索信详情 |
| Leaks | /api/leaks/ | 数据泄露记录 |
| RecordedFuture | /api/rf/ | Recorded Future 频道数据 |
| DB |
|---|
| 内容 |
|---|
| 0 | 组(勒索软件组元数据和位置) |
| 2 | 帖子(所有组中的受害者帖子) |
| 3 | 市场(市场/论坛元数据和位置) |
| 4 | 泄露(数据泄露记录) |
| 5 | 行为者(威胁行为者档案和关系) |
| 10 | Recorded Future(RF 频道数据) |