дарк-форумы + cookie-проход CF + opt_in радара в обходе
Some checks failed
ci / test (3.10) (push) Has been cancelled
ci / test (3.11) (push) Has been cancelled
ci / test (3.12) (push) Has been cancelled

- omni/sources_dark.py: cracked.st, nulledbb, forum.tuts4you — реально отдают темы без логина
- tools/cf_cookies.py: Camoufox снимает cookies с JS-челленджей в data/cookies.json (вне git)
- config: cookies.json подхватывается автоматически
- feeds: include_contains матчится по полному href (showthread.php?tid= не резался по path)
- sources_abuse/abuse_sources: A(extra=...) + tuts4you на html_listing (/topic/)
- sources: _gen_sources() = китайские + дарк наборы
- README: ключи/радар/китайцы/дарк
This commit is contained in:
ENI
2026-10-26 23:39:47 +03:00
parent 2320acf3c5
commit 2b9f4e1d88
8 changed files with 239 additions and 18 deletions

View File

@@ -5,9 +5,10 @@
"""
def A(name, category, kind, url, adapter, tags=(), limit=20):
def A(name, category, kind, url, adapter, tags=(), limit=20, extra=None):
return {"name": name, "category": category, "kind": kind, "url": url,
"adapter": adapter, "tags": tuple(tags), "limit": limit, "detail": False, "extra": {}}
"adapter": adapter, "tags": tuple(tags), "limit": limit,
"detail": False, "extra": dict(extra or {})}
ABUSE = [
@@ -61,8 +62,10 @@ ABUSE = [
A("ab_carder_su", "abuse", "html", "https://carder.su/", "html_listing", ('abuse', 'abuse'), limit=20),
A("ab_procarders_com", "abuse", "html", "https://procarders.com/", "html_listing", ('abuse', 'abuse'), limit=20),
A("ab_darkpro_net", "abuse", "html", "https://darkpro.net/", "html_listing", ('abuse', 'abuse'), limit=20),
A("ab_tuts4you_com", "abuse", "html", "https://tuts4you.com/", "xenforo_latest", ('abuse', 'abuse'), limit=20),
A("ab_forum_tuts4you_com", "abuse", "html", "https://forum.tuts4you.com/", "xenforo_latest", ('abuse', 'abuse'), limit=20),
A("ab_tuts4you_com", "abuse", "html", "https://tuts4you.com/", "html_listing", ('abuse', 'abuse'), limit=20,
extra={"include_contains": ["/topic/"]}),
A("ab_forum_tuts4you_com", "abuse", "html", "https://forum.tuts4you.com/", "html_listing", ('abuse', 'abuse'), limit=20,
extra={"include_contains": ["/topic/"]}),
A("ab_forum_exetools_com", "abuse", "html", "https://forum.exetools.com/", "html_listing", ('abuse', 'abuse'), limit=20),
A("ab_tlgrm_eu", "abuse", "html", "https://tlgrm.eu/channels", "html_listing", ('abuse', 'abuse'), limit=20),
A("ab_telemetr_me", "abuse", "html", "https://telemetr.me/channels", "html_listing", ('abuse', 'abuse'), limit=20),

View File

@@ -69,6 +69,15 @@ def load():
except Exception:
pass
CONFIG = cfg
# cookies, снятые браузером (tools/cf_cookies.py) — файл вне git
ck_file = DATA / "cookies.json"
if ck_file.exists():
try:
extra = json.loads(ck_file.read_text(encoding="utf-8"))
if isinstance(extra, dict):
cfg["cookies"] = {**extra, **(cfg.get("cookies") or {})}
except Exception:
pass
raw = os.environ.get("OMNI_COOKIES") or ""
if raw:
try:

View File

@@ -432,7 +432,7 @@ def _html_listing(src, limit):
continue
if inc and not any(path.startswith(p) for p in inc):
continue
if inc_c and not any(c in path for c in inc_c):
if inc_c and not any(c in href for c in inc_c):
continue
if href in seen:
continue

View File

@@ -245,18 +245,19 @@ def radar_sources():
return rows
def _cn_sources():
"""Китайские/азиатские источники из сгенерированного omni/sources_cn.py."""
try:
from .sources_cn import CN
except Exception:
return []
def _gen_sources():
"""Сгенерированные наборы: китайские (sources_cn) + дарк-форумы (sources_dark)."""
out = []
for d in CN:
for mod, attr in (("sources_cn", "CN"), ("sources_dark", "DARK")):
try:
out.append(Source(**d))
rows = getattr(__import__("omni." + mod, fromlist=[attr]), attr)
except Exception:
continue
for d in rows:
try:
out.append(Source(**d))
except Exception:
continue
return out
@@ -271,7 +272,7 @@ def all_sources():
("name", "category", "kind", "url", "adapter", "tags", "limit", "detail", "extra")}
extra.append(Source(**d))
seen, out = set(), []
for s in SOURCES + _cn_sources() + extra + radar_sources():
for s in SOURCES + _gen_sources() + extra + radar_sources():
key = (s.url or "").rstrip("/").lower()
if key and key in seen:
continue

View File

@@ -5,9 +5,9 @@
"""
def A(name, category, kind, url, adapter, tags=(), limit=20):
def A(name, category, kind, url, adapter, tags=(), limit=20, extra=None):
return {"name": name, "category": category, "kind": kind, "url": url,
"adapter": adapter, "tags": tuple(tags), "limit": limit, "detail": False, "extra": {}}
"adapter": adapter, "tags": tuple(tags), "limit": limit, "detail": False, "extra": dict(extra or {})}
ABUSE_LIVE = [
@@ -18,8 +18,10 @@ ABUSE_LIVE = [
A("ab_blackhatworld_com", "abuse", "html", "https://www.blackhatworld.com/seo/up-to-date-list-of-specialized-software-for-telegram.1642970/", "xenforo_latest", ('abuse', 'abuse'), limit=20),
A("ab_cracked_io", "abuse", "html", "https://cracked.io/", "xenforo_latest", ('abuse', 'abuse'), limit=20),
A("ab_t_me", "abuse", "html", "https://t.me/s/Abuz_ai_soft", "tg_web", ('abuse', 'abuse'), limit=20),
A("ab_tuts4you_com", "abuse", "html", "https://tuts4you.com/", "xenforo_latest", ('abuse', 'abuse'), limit=20),
A("ab_forum_tuts4you_com", "abuse", "html", "https://forum.tuts4you.com/", "xenforo_latest", ('abuse', 'abuse'), limit=20),
A("ab_tuts4you_com", "abuse", "html", "https://tuts4you.com/", "html_listing", ('abuse', 'abuse'), limit=20,
extra={"include_contains": ["/topic/"]}),
A("ab_forum_tuts4you_com", "abuse", "html", "https://forum.tuts4you.com/", "html_listing", ('abuse', 'abuse'), limit=20,
extra={"include_contains": ["/topic/"]}),
A("ab_nodeloc_com", "abuse", "json", "https://www.nodeloc.com/latest.json", "discourse", ('abuse', 'abuse'), limit=20),
A("ab_v2ex_com", "abuse", "json", "https://www.v2ex.com/api/topics/hot.json", "generic_json", ('abuse', 'abuse'), limit=20),
A("ab_hostloc_com", "abuse", "rss", "https://hostloc.com/forum.php?mod=rss", "rss", ('abuse', 'abuse'), limit=20),

37
omni/sources_dark.py Normal file
View File

@@ -0,0 +1,37 @@
"""Дарк/крэк-форумы, реально отдающие контент без логина.
Проверено живыми запросами: cracked.st (переехал с cracked.io), nulledbb.com,
forum.tuts4you.com (реверс/крэкинг). Закрыты JS-челленджем без cookie:
exploit.in, xss.is, blackhatworld, hackforums, patched.to, darkforums.st.
Подключается в реестр omni через sources.all_sources().
"""
DARK = [
{"name": "dk_cracked_st", "category": "forum", "kind": "site",
"url": "https://cracked.st/", "adapter": "html_listing",
"tags": ("dark", "leaks", "abuse"), "limit": 25,
"extra": {"include_contains": ["showthread.php?tid="]}},
{"name": "dk_nulledbb", "category": "forum", "kind": "site",
"url": "https://nulledbb.com/", "adapter": "html_listing",
"tags": ("dark", "leaks", "abuse"), "limit": 25,
"extra": {"include_contains": ["showthread.php?tid="]}},
{"name": "dk_tuts4you", "category": "forum", "kind": "site",
"url": "https://forum.tuts4you.com/", "adapter": "html_listing",
"tags": ("dark", "reverse", "abuse"), "limit": 25,
"extra": {"include_contains": ["/topic/"]}},
{"name": "dk_leaksx", "category": "forum", "kind": "site",
"url": "https://leak.sx/", "adapter": "html_listing",
"tags": ("dark", "leaks", "abuse"), "limit": 20,
"extra": {}},
]
# Домены, которые открываются только с живой cookie (cf_clearance / сессия).
# Их можно поднять: python tools/cf_cookies.py <host> -> data/cookies.json
NEED_COOKIE = [
"exploit.in", "xss.is", "www.blackhatworld.com", "hackforums.net",
"patched.to", "darkforums.st",
]