from __future__ import annotations import sqlite3 from dataclasses import dataclass from typing import Any from cracklab.server.services.methods import MethodService @dataclass(frozen=True) class StockMethod: method_id: str name: str description: str definition: dict[str, Any] | None STOCK_METHODS = ( StockMethod( method_id="mobile_oper_spb_plus_79", name="MobileOperSpb+79", description="Перебор мобильных номеров Санкт-Петербурга с префиксом +79.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": f"mask-{index:03d}", "attack_mode": 3, "mask": mask, } for index, mask in enumerate( ( "+791100?d?d?d?d?d", "+791101?d?d?d?d?d", "+791102?d?d?d?d?d", "+791103?d?d?d?d?d", "+791108?d?d?d?d?d", "+791109?d?d?d?d?d", "+791110?d?d?d?d?d", "+791111?d?d?d?d?d", "+791112?d?d?d?d?d", "+791117?d?d?d?d?d", "+791119?d?d?d?d?d", "+79811?d?d?d?d?d?d", "+79817?d?d?d?d?d?d", "+79818?d?d?d?d?d?d", "+79819?d?d?d?d?d?d", "+798986?d?d?d?d?d", "+798686?d?d?d?d?d", "+798687?d?d?d?d?d", "+798688?d?d?d?d?d", "+792118?d?d?d?d?d", "+792119?d?d?d?d?d", "+79213?d?d?d?d?d?d", "+79214?d?d?d?d?d?d", "+79215?d?d?d?d?d?d", "+79216?d?d?d?d?d?d", "+79217?d?d?d?d?d?d", "+79218?d?d?d?d?d?d", "+79219?d?d?d?d?d?d", "+793110?d?d?d?d?d", "+793111?d?d?d?d?d", "+793112?d?d?d?d?d", "+793113?d?d?d?d?d", "+79312?d?d?d?d?d?d", "+79313?d?d?d?d?d?d", "+79315?d?d?d?d?d?d", "+79319?d?d?d?d?d?d", "+79291?d?d?d?d?d?d", "+799923?d?d?d?d?d", "+799924?d?d?d?d?d", "+799925?d?d?d?d?d", "+7963241?d?d?d?d", "+7963242?d?d?d?d", "+7963243?d?d?d?d", "+7963244?d?d?d?d", "+7963245?d?d?d?d", "+7963246?d?d?d?d", "+7963247?d?d?d?d", "+7963248?d?d?d?d", "+7963249?d?d?d?d", "+796330?d?d?d?d?d", "+796331?d?d?d?d?d", "+796332?d?d?d?d?d", "+796334?d?d?d?d?d", "+79650?d?d?d?d?d?d", "+79651?d?d?d?d?d?d", "+79652?d?d?d?d?d?d", "+79653?d?d?d?d?d?d", "+79654?d?d?d?d?d?d", "+79655?d?d?d?d?d?d", "+79656?d?d?d?d?d?d", "+79657?d?d?d?d?d?d", "+79658?d?d?d?d?d?d", "+79659?d?d?d?d?d?d", "+790520?d?d?d?d?d", "+790521?d?d?d?d?d", "+790522?d?d?d?d?d", "+790523?d?d?d?d?d", "+790524?d?d?d?d?d", "+790525?d?d?d?d?d", "+790526?d?d?d?d?d", "+790527?d?d?d?d?d", "+790528?d?d?d?d?d", "+790624?d?d?d?d?d", "+790625?d?d?d?d?d", "+790626?d?d?d?d?d", "+790627?d?d?d?d?d", "+790958?d?d?d?d?d", "+790959?d?d?d?d?d", "+796023?d?d?d?d?d", "+796024?d?d?d?d?d", "+796025?d?d?d?d?d", "+796026?d?d?d?d?d", "+796027?d?d?d?d?d", "+796028?d?d?d?d?d", "+796434?d?d?d?d?d", "+79500?d?d?d?d?d?d", "+79502?d?d?d?d?d?d", "+79516?d?d?d?d?d?d", "+79517?d?d?d?d?d?d", "+79518?d?d?d?d?d?d", "+79522?d?d?d?d?d?d", "+79523?d?d?d?d?d?d", "+79531?d?d?d?d?d?d", "+79533?d?d?d?d?d?d", "+790433?d?d?d?d?d", "+790451?d?d?d?d?d", "+790455?d?d?d?d?d", "+790460?d?d?d?d?d", "+790461?d?d?d?d?d", "+790462?d?d?d?d?d", "+790463?d?d?d?d?d", "+790464?d?d?d?d?d", "+799100?d?d?d?d?d", "+799101?d?d?d?d?d", "+799102?d?d?d?d?d", "+790062?d?d?d?d?d", "+790063?d?d?d?d?d", "+790064?d?d?d?d?d", "+790065?d?d?d?d?d", "+799900?d?d?d?d?d", "+799901?d?d?d?d?d", "+799902?d?d?d?d?d", "+799903?d?d?d?d?d", "+799904?d?d?d?d?d", "+799909?d?d?d?d?d", "+79991?d?d?d?d?d?d", "+79992?d?d?d?d?d?d", "+799322?d?d?d?d?d", "+799343?d?d?d?d?d", "+799344?d?d?d?d?d", "+799555?d?d?d?d?d", "+799559?d?d?d?d?d", "+799560?d?d?d?d?d", "+799590?d?d?d?d?d", "+795840?d?d?d?d?d", "+795856?d?d?d?d?d", "+799511?d?d?d?d?d", "+799512?d?d?d?d?d", "+7999944?d?d?d?d", "+7999945?d?d?d?d", "+7999946?d?d?d?d", "+7999947?d?d?d?d", ), start=1, ) ], }, ), StockMethod( method_id="mobile_oper_spb_89", name="MobileOperSpb_89", description="Перебор мобильных номеров Санкт-Петербурга с префиксом 89.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": f"mask-{index:03d}", "attack_mode": 3, "mask": mask, } for index, mask in enumerate( ( "891100?d?d?d?d?d", "891101?d?d?d?d?d", "891102?d?d?d?d?d", "891103?d?d?d?d?d", "891108?d?d?d?d?d", "891109?d?d?d?d?d", "891110?d?d?d?d?d", "891111?d?d?d?d?d", "891112?d?d?d?d?d", "891117?d?d?d?d?d", "891119?d?d?d?d?d", "89811?d?d?d?d?d?d", "89817?d?d?d?d?d?d", "89818?d?d?d?d?d?d", "89819?d?d?d?d?d?d", "898986?d?d?d?d?d", "898686?d?d?d?d?d", "898687?d?d?d?d?d", "898688?d?d?d?d?d", "892118?d?d?d?d?d", "892119?d?d?d?d?d", "89213?d?d?d?d?d?d", "89214?d?d?d?d?d?d", "89215?d?d?d?d?d?d", "89216?d?d?d?d?d?d", "89217?d?d?d?d?d?d", "89218?d?d?d?d?d?d", "89219?d?d?d?d?d?d", "893110?d?d?d?d?d", "893111?d?d?d?d?d", "893112?d?d?d?d?d", "893113?d?d?d?d?d", "89312?d?d?d?d?d?d", "89313?d?d?d?d?d?d", "89315?d?d?d?d?d?d", "89319?d?d?d?d?d?d", "89291?d?d?d?d?d?d", "899923?d?d?d?d?d", "899924?d?d?d?d?d", "899925?d?d?d?d?d", "8963241?d?d?d?d", "8963242?d?d?d?d", "8963243?d?d?d?d", "8963244?d?d?d?d", "8963245?d?d?d?d", "8963246?d?d?d?d", "8963247?d?d?d?d", "8963248?d?d?d?d", "8963249?d?d?d?d", "896330?d?d?d?d?d", "896331?d?d?d?d?d", "896332?d?d?d?d?d", "896334?d?d?d?d?d", "89650?d?d?d?d?d?d", "89651?d?d?d?d?d?d", "89652?d?d?d?d?d?d", "89653?d?d?d?d?d?d", "89654?d?d?d?d?d?d", "89655?d?d?d?d?d?d", "89656?d?d?d?d?d?d", "89657?d?d?d?d?d?d", "89658?d?d?d?d?d?d", "89659?d?d?d?d?d?d", "890520?d?d?d?d?d", "890521?d?d?d?d?d", "890522?d?d?d?d?d", "890523?d?d?d?d?d", "890524?d?d?d?d?d", "890525?d?d?d?d?d", "890526?d?d?d?d?d", "890527?d?d?d?d?d", "890528?d?d?d?d?d", "890624?d?d?d?d?d", "890625?d?d?d?d?d", "890626?d?d?d?d?d", "890627?d?d?d?d?d", "890958?d?d?d?d?d", "890959?d?d?d?d?d", "896023?d?d?d?d?d", "896024?d?d?d?d?d", "896025?d?d?d?d?d", "896026?d?d?d?d?d", "896027?d?d?d?d?d", "896028?d?d?d?d?d", "896434?d?d?d?d?d", "89500?d?d?d?d?d?d", "89502?d?d?d?d?d?d", "89516?d?d?d?d?d?d", "89517?d?d?d?d?d?d", "89518?d?d?d?d?d?d", "89522?d?d?d?d?d?d", "89523?d?d?d?d?d?d", "89531?d?d?d?d?d?d", "89533?d?d?d?d?d?d", "890433?d?d?d?d?d", "890451?d?d?d?d?d", "890455?d?d?d?d?d", "890460?d?d?d?d?d", "890461?d?d?d?d?d", "890462?d?d?d?d?d", "890463?d?d?d?d?d", "890464?d?d?d?d?d", "899100?d?d?d?d?d", "899101?d?d?d?d?d", "899102?d?d?d?d?d", "890062?d?d?d?d?d", "890063?d?d?d?d?d", "890064?d?d?d?d?d", "890065?d?d?d?d?d", "899900?d?d?d?d?d", "899901?d?d?d?d?d", "899902?d?d?d?d?d", "899903?d?d?d?d?d", "899904?d?d?d?d?d", "899909?d?d?d?d?d", "89991?d?d?d?d?d?d", "89992?d?d?d?d?d?d", "899322?d?d?d?d?d", "899343?d?d?d?d?d", "899344?d?d?d?d?d", "899555?d?d?d?d?d", "899559?d?d?d?d?d", "899560?d?d?d?d?d", "899590?d?d?d?d?d", "895840?d?d?d?d?d", "895856?d?d?d?d?d", "899511?d?d?d?d?d", "899512?d?d?d?d?d", "8999944?d?d?d?d", "8999945?d?d?d?d", "8999946?d?d?d?d", "8999947?d?d?d?d", ), start=1, ) ], }, ), StockMethod( method_id="mobile_oper_spb_79", name="MobileOperSpb_79", description="Перебор мобильных номеров Санкт-Петербурга без знака +.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": f"mask-{index:03d}", "attack_mode": 3, "mask": mask, } for index, mask in enumerate( ( "791100?d?d?d?d?d", "791101?d?d?d?d?d", "791102?d?d?d?d?d", "791103?d?d?d?d?d", "791108?d?d?d?d?d", "791109?d?d?d?d?d", "791110?d?d?d?d?d", "791111?d?d?d?d?d", "791112?d?d?d?d?d", "791117?d?d?d?d?d", "791119?d?d?d?d?d", "79811?d?d?d?d?d?d", "79817?d?d?d?d?d?d", "79818?d?d?d?d?d?d", "79819?d?d?d?d?d?d", "798986?d?d?d?d?d", "798686?d?d?d?d?d", "798687?d?d?d?d?d", "798688?d?d?d?d?d", "792118?d?d?d?d?d", "792119?d?d?d?d?d", "79213?d?d?d?d?d?d", "79214?d?d?d?d?d?d", "79215?d?d?d?d?d?d", "79216?d?d?d?d?d?d", "79217?d?d?d?d?d?d", "79218?d?d?d?d?d?d", "79219?d?d?d?d?d?d", "793110?d?d?d?d?d", "793111?d?d?d?d?d", "793112?d?d?d?d?d", "793113?d?d?d?d?d", "79312?d?d?d?d?d?d", "79313?d?d?d?d?d?d", "79315?d?d?d?d?d?d", "79319?d?d?d?d?d?d", "79291?d?d?d?d?d?d", "799923?d?d?d?d?d", "799924?d?d?d?d?d", "799925?d?d?d?d?d", "7963241?d?d?d?d", "7963242?d?d?d?d", "7963243?d?d?d?d", "7963244?d?d?d?d", "7963245?d?d?d?d", "7963246?d?d?d?d", "7963247?d?d?d?d", "7963248?d?d?d?d", "7963249?d?d?d?d", "796330?d?d?d?d?d", "796331?d?d?d?d?d", "796332?d?d?d?d?d", "796334?d?d?d?d?d", "79650?d?d?d?d?d?d", "79651?d?d?d?d?d?d", "79652?d?d?d?d?d?d", "79653?d?d?d?d?d?d", "79654?d?d?d?d?d?d", "79655?d?d?d?d?d?d", "79656?d?d?d?d?d?d", "79657?d?d?d?d?d?d", "79658?d?d?d?d?d?d", "79659?d?d?d?d?d?d", "790520?d?d?d?d?d", "790521?d?d?d?d?d", "790522?d?d?d?d?d", "790523?d?d?d?d?d", "790524?d?d?d?d?d", "790525?d?d?d?d?d", "790526?d?d?d?d?d", "790527?d?d?d?d?d", "790528?d?d?d?d?d", "790624?d?d?d?d?d", "790625?d?d?d?d?d", "790626?d?d?d?d?d", "790627?d?d?d?d?d", "790958?d?d?d?d?d", "790959?d?d?d?d?d", "796023?d?d?d?d?d", "796024?d?d?d?d?d", "796025?d?d?d?d?d", "796026?d?d?d?d?d", "796027?d?d?d?d?d", "796028?d?d?d?d?d", "796434?d?d?d?d?d", "79500?d?d?d?d?d?d", "79502?d?d?d?d?d?d", "79516?d?d?d?d?d?d", "79517?d?d?d?d?d?d", "79518?d?d?d?d?d?d", "79522?d?d?d?d?d?d", "79523?d?d?d?d?d?d", "79531?d?d?d?d?d?d", "79533?d?d?d?d?d?d", "790433?d?d?d?d?d", "790451?d?d?d?d?d", "790455?d?d?d?d?d", "790460?d?d?d?d?d", "790461?d?d?d?d?d", "790462?d?d?d?d?d", "790463?d?d?d?d?d", "790464?d?d?d?d?d", "799100?d?d?d?d?d", "799101?d?d?d?d?d", "799102?d?d?d?d?d", "790062?d?d?d?d?d", "790063?d?d?d?d?d", "790064?d?d?d?d?d", "790065?d?d?d?d?d", "799900?d?d?d?d?d", "799901?d?d?d?d?d", "799902?d?d?d?d?d", "799903?d?d?d?d?d", "799904?d?d?d?d?d", "799909?d?d?d?d?d", "79991?d?d?d?d?d?d", "79992?d?d?d?d?d?d", "799322?d?d?d?d?d", "799343?d?d?d?d?d", "799344?d?d?d?d?d", "799555?d?d?d?d?d", "799559?d?d?d?d?d", "799560?d?d?d?d?d", "799590?d?d?d?d?d", "795840?d?d?d?d?d", "795856?d?d?d?d?d", "799511?d?d?d?d?d", "799512?d?d?d?d?d", "7999944?d?d?d?d", "7999945?d?d?d?d", "7999946?d?d?d?d", "7999947?d?d?d?d", ), start=1, ) ], }, ), StockMethod( method_id="mobile_oper_spb_9", name="MobileOperSpb_9", description="Перебор мобильных номеров Санкт-Петербурга без 7 и знака +.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": f"mask-{index:03d}", "attack_mode": 3, "mask": mask, } for index, mask in enumerate( ( "91100?d?d?d?d?d", "91101?d?d?d?d?d", "91102?d?d?d?d?d", "91103?d?d?d?d?d", "91108?d?d?d?d?d", "91109?d?d?d?d?d", "91110?d?d?d?d?d", "91111?d?d?d?d?d", "91112?d?d?d?d?d", "91117?d?d?d?d?d", "91119?d?d?d?d?d", "9811?d?d?d?d?d?d", "9817?d?d?d?d?d?d", "9818?d?d?d?d?d?d", "9819?d?d?d?d?d?d", "98986?d?d?d?d?d", "98686?d?d?d?d?d", "98687?d?d?d?d?d", "98688?d?d?d?d?d", "92118?d?d?d?d?d", "92119?d?d?d?d?d", "9213?d?d?d?d?d?d", "9214?d?d?d?d?d?d", "9215?d?d?d?d?d?d", "9216?d?d?d?d?d?d", "9217?d?d?d?d?d?d", "9218?d?d?d?d?d?d", "9219?d?d?d?d?d?d", "93110?d?d?d?d?d", "93111?d?d?d?d?d", "93112?d?d?d?d?d", "93113?d?d?d?d?d", "9312?d?d?d?d?d?d", "9313?d?d?d?d?d?d", "9315?d?d?d?d?d?d", "9319?d?d?d?d?d?d", "9291?d?d?d?d?d?d", "99923?d?d?d?d?d", "99924?d?d?d?d?d", "99925?d?d?d?d?d", "963241?d?d?d?d", "963242?d?d?d?d", "963243?d?d?d?d", "963244?d?d?d?d", "963245?d?d?d?d", "963246?d?d?d?d", "963247?d?d?d?d", "963248?d?d?d?d", "963249?d?d?d?d", "96330?d?d?d?d?d", "96331?d?d?d?d?d", "96332?d?d?d?d?d", "96334?d?d?d?d?d", "9650?d?d?d?d?d?d", "9651?d?d?d?d?d?d", "9652?d?d?d?d?d?d", "9653?d?d?d?d?d?d", "9654?d?d?d?d?d?d", "9655?d?d?d?d?d?d", "9656?d?d?d?d?d?d", "9657?d?d?d?d?d?d", "9658?d?d?d?d?d?d", "9659?d?d?d?d?d?d", "90520?d?d?d?d?d", "90521?d?d?d?d?d", "90522?d?d?d?d?d", "90523?d?d?d?d?d", "90524?d?d?d?d?d", "90525?d?d?d?d?d", "90526?d?d?d?d?d", "90527?d?d?d?d?d", "90528?d?d?d?d?d", "90624?d?d?d?d?d", "90625?d?d?d?d?d", "90626?d?d?d?d?d", "90627?d?d?d?d?d", "90958?d?d?d?d?d", "90959?d?d?d?d?d", "96023?d?d?d?d?d", "96024?d?d?d?d?d", "96025?d?d?d?d?d", "96026?d?d?d?d?d", "96027?d?d?d?d?d", "96028?d?d?d?d?d", "96434?d?d?d?d?d", "9500?d?d?d?d?d?d", "9502?d?d?d?d?d?d", "9516?d?d?d?d?d?d", "9517?d?d?d?d?d?d", "9518?d?d?d?d?d?d", "9522?d?d?d?d?d?d", "9523?d?d?d?d?d?d", "9531?d?d?d?d?d?d", "9533?d?d?d?d?d?d", "90433?d?d?d?d?d", "90451?d?d?d?d?d", "90455?d?d?d?d?d", "90460?d?d?d?d?d", "90461?d?d?d?d?d", "90462?d?d?d?d?d", "90463?d?d?d?d?d", "90464?d?d?d?d?d", "99100?d?d?d?d?d", "99101?d?d?d?d?d", "99102?d?d?d?d?d", "90062?d?d?d?d?d", "90063?d?d?d?d?d", "90064?d?d?d?d?d", "90065?d?d?d?d?d", "99900?d?d?d?d?d", "99901?d?d?d?d?d", "99902?d?d?d?d?d", "99903?d?d?d?d?d", "99904?d?d?d?d?d", "99909?d?d?d?d?d", "9991?d?d?d?d?d?d", "9992?d?d?d?d?d?d", "99322?d?d?d?d?d", "99343?d?d?d?d?d", "99344?d?d?d?d?d", "99555?d?d?d?d?d", "99559?d?d?d?d?d", "99560?d?d?d?d?d", "99590?d?d?d?d?d", "95840?d?d?d?d?d", "95856?d?d?d?d?d", "99511?d?d?d?d?d", "99512?d?d?d?d?d", "999944?d?d?d?d", "999945?d?d?d?d", "999946?d?d?d?d", "999947?d?d?d?d", ), start=1, ) ], }, ), StockMethod( method_id="mobile_oper_plus_79", name="MobileOper+79", description="Перебор мобильных номеров с префиксом +79.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": f"mask-{index:03d}", "attack_mode": 3, "mask": mask, } for index, mask in enumerate( ( "+7911?d?d?d?d?d?d?d", "+7904?d?d?d?d?d?d?d", "+7931?d?d?d?d?d?d?d", "+7921?d?d?d?d?d?d?d", "+7999?d?d?d?d?d?d?d", "+7905?d?d?d?d?d?d?d", "+7951?d?d?d?d?d?d?d", "+7952?d?d?d?d?d?d?d", "+7953?d?d?d?d?d?d?d", "+7901?d?d?d?d?d?d?d", "+7903?d?d?d?d?d?d?d", "+7950?d?d?d?d?d?d?d", "+7906?d?d?d?d?d?d?d", "+7909?d?d?d?d?d?d?d", "+7929?d?d?d?d?d?d?d", "+7960?d?d?d?d?d?d?d", "+7961?d?d?d?d?d?d?d", "+7962?d?d?d?d?d?d?d", "+7963?d?d?d?d?d?d?d", "+7965?d?d?d?d?d?d?d", "+7966?d?d?d?d?d?d?d", "+7981?d?d?d?d?d?d?d", ), start=1, ) ], }, ), StockMethod( method_id="mobile_oper_89", name="MobileOper_89", description="Перебор мобильных номеров с префиксом 89.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": f"mask-{index:03d}", "attack_mode": 3, "mask": mask, } for index, mask in enumerate( ( "8911?d?d?d?d?d?d?d", "8904?d?d?d?d?d?d?d", "8931?d?d?d?d?d?d?d", "8921?d?d?d?d?d?d?d", "8999?d?d?d?d?d?d?d", "8905?d?d?d?d?d?d?d", "8951?d?d?d?d?d?d?d", "8952?d?d?d?d?d?d?d", "8953?d?d?d?d?d?d?d", "8901?d?d?d?d?d?d?d", "8903?d?d?d?d?d?d?d", "8950?d?d?d?d?d?d?d", "8906?d?d?d?d?d?d?d", "8909?d?d?d?d?d?d?d", "8929?d?d?d?d?d?d?d", "8960?d?d?d?d?d?d?d", "8961?d?d?d?d?d?d?d", "8962?d?d?d?d?d?d?d", "8963?d?d?d?d?d?d?d", "8965?d?d?d?d?d?d?d", "8966?d?d?d?d?d?d?d", "8981?d?d?d?d?d?d?d", ), start=1, ) ], }, ), StockMethod( method_id="mobile_oper_79", name="MobileOper_79", description="Перебор мобильных номеров без знака +.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": f"mask-{index:03d}", "attack_mode": 3, "mask": mask, } for index, mask in enumerate( ( "7911?d?d?d?d?d?d?d", "7904?d?d?d?d?d?d?d", "7931?d?d?d?d?d?d?d", "7921?d?d?d?d?d?d?d", "7999?d?d?d?d?d?d?d", "7905?d?d?d?d?d?d?d", "7951?d?d?d?d?d?d?d", "7952?d?d?d?d?d?d?d", "7953?d?d?d?d?d?d?d", "7901?d?d?d?d?d?d?d", "7903?d?d?d?d?d?d?d", "7950?d?d?d?d?d?d?d", "7906?d?d?d?d?d?d?d", "7909?d?d?d?d?d?d?d", "7929?d?d?d?d?d?d?d", "7960?d?d?d?d?d?d?d", "7961?d?d?d?d?d?d?d", "7962?d?d?d?d?d?d?d", "7963?d?d?d?d?d?d?d", "7965?d?d?d?d?d?d?d", "7966?d?d?d?d?d?d?d", "7981?d?d?d?d?d?d?d", ), start=1, ) ], }, ), StockMethod( method_id="mobile_oper_9", name="MobileOper_9", description="Перебор мобильных номеров без 7 и знака +.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": f"mask-{index:03d}", "attack_mode": 3, "mask": mask, } for index, mask in enumerate( ( "911?d?d?d?d?d?d?d", "904?d?d?d?d?d?d?d", "931?d?d?d?d?d?d?d", "921?d?d?d?d?d?d?d", "999?d?d?d?d?d?d?d", "905?d?d?d?d?d?d?d", "951?d?d?d?d?d?d?d", "952?d?d?d?d?d?d?d", "953?d?d?d?d?d?d?d", "901?d?d?d?d?d?d?d", "903?d?d?d?d?d?d?d", "950?d?d?d?d?d?d?d", "906?d?d?d?d?d?d?d", "909?d?d?d?d?d?d?d", "929?d?d?d?d?d?d?d", "960?d?d?d?d?d?d?d", "961?d?d?d?d?d?d?d", "962?d?d?d?d?d?d?d", "963?d?d?d?d?d?d?d", "965?d?d?d?d?d?d?d", "966?d?d?d?d?d?d?d", "981?d?d?d?d?d?d?d", ), start=1, ) ], }, ), StockMethod( method_id="mask_8_digits", name="8-digital", description="Перебор восьмизначных числовых паролей.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": "mask-001", "attack_mode": 3, "mask": "?d?d?d?d?d?d?d?d", }, ], }, ), StockMethod( method_id="breachcompilation", name="BreachCompilation", description="Перебор по словарю BreachCompilation.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": "dictionary-001", "attack_mode": 0, "dictionary": { "resource": "wordlist:breachcompilation", }, }, ], }, ), StockMethod( method_id="insidepro_wpa", name="insidePRO_WPA", description="Перебор по словарю insidePRO_WPA.", definition={ "schema_version": 1, "hash_mode": 22000, "steps": [ { "step_id": "dictionary-001", "attack_mode": 0, "dictionary": { "resource": "wordlist:insidepro-wpa", }, }, ], }, ), ) class StockMethodSeeder: def __init__(self, conn: sqlite3.Connection) -> None: self._conn = conn self._methods = MethodService(conn) def seed(self) -> None: with self._conn: for stock_method in STOCK_METHODS: if stock_method.definition is None: continue existing_method = self._methods.get_method( stock_method.method_id ) if existing_method is None: self._methods.create_method( method_id=stock_method.method_id, name=stock_method.name, description=stock_method.description, ) else: if existing_method["name"] != stock_method.name: raise ValueError( "Stock method ID is already used with a " f"different name: {stock_method.method_id}" ) existing_version = self._methods.get_method_version( stock_method.method_id, 1, ) if existing_version is None: self._methods.create_method_version( method_id=stock_method.method_id, version=1, definition=stock_method.definition, ) elif existing_version["definition_json"] != ( self._canonical_json(stock_method.definition) ): raise ValueError( "Stock method version 1 already exists with " f"different definition: {stock_method.method_id}" ) @staticmethod def _canonical_json(definition: dict[str, Any]) -> str: import json return json.dumps( definition, ensure_ascii=False, separators=(",", ":"), sort_keys=True, )