- Авторских стратегий в рантайме: 22 (ALT, ALT10, ALT11, ALT12, ALT13, ALT2, ALT3, ALT4, ALT5, ALT6, ALT7, ALT8, ALT9, Default, EXP, FAKE TLS AUTO, FAKE TLS AUTO ALT, FAKE TLS AUTO ALT2, FAKE TLS AUTO ALT3, SIMPLE FAKE, SIMPLE FAKE ALT, SIMPLE FAKE ALT2)
- Баз для мутаций выбрано: 5 (ALT, ALT3, ALT9, SIMPLE FAKE, FAKE TLS AUTO)
- Сгенерировано кандидатов: 60 (бюджет 60, seed 12345)
| Ручка | Значений | Значения |
|---|---|---|
method |
4 | multisplit, multidisorder, fake,multisplit, fake,multidisorder |
pos |
6 | 1, 2, 3, host+1, midsld, sniext+2 |
seqovl |
5 | 1, 336, 568, 652, 681 |
repeats |
5 | 2, 4, 6, 8, 11 |
fooling |
5 | ``, badseq, `badsum`, `md5sig`, `datanoack` |
blob |
3 | tls_clienthello_www_google_com.bin, tls_clienthello_4pda_to.bin, tls_clienthello_max_ru.bin |
urepeats |
5 | 2, 4, 6, 8, 11 |
ufake |
3 | quic_initial_dbankcloud_ru.bin, quic_initial_www_google_com.bin, stun.bin |
- Одномерных мутаций (координатный проход): 36
- Полное пространство TCP-комбинаций: 9000, с голосовыми: 135000
- За один прогон проверяется 60 кандидатов = 0.04% от пространства
Кандидатов, побайтово совпавших с авторской стратегией: 5 из 60
Кандидат 3==ALT(deepsearch(base=ALT))Кандидат 15==ALT3(deepsearch(base=ALT3))Кандидат 27==ALT9(deepsearch(base=ALT9))Кандидат 39==SIMPLE FAKE(deepsearch(base=SIMPLE FAKE))Кандидат 51==FAKE TLS AUTO(deepsearch(base=FAKE TLS AUTO))
Кандидатов, идентичных собственной базе (мутация «в себя»): 5
| Ручка | Кандидатов с изменением |
|---|---|
repeats |
49 |
urepeats |
49 |
ufake |
35 |
method |
30 |
pos |
30 |
seqovl |
30 |
fooling |
30 |
blob |
30 |
Значения ручек, которые генератор НЕ умеет ставить, но они есть у авторских баз:
| Ручка | Есть в апстриме, нет в генераторе |
|---|---|
method |
не покрыто: ['fake', 'fake,fakedsplit', 'fake,hostfakesplit', 'hostfakesplit', 'syndata', 'syndata,multidisorder']; наши лишние: ['multidisorder'] |
pos |
не покрыто: ['1,midsld', '2,sniext+1']; наши лишние: ['3', 'host+1', 'midsld', 'sniext+2'] |
seqovl |
не покрыто: ['480', '664', '679']; наши лишние: ['1', '336'] |
repeats |
не покрыто: ['10', '12', '14', '3', '5', '7']; наши лишние: ['2'] |
fooling |
не покрыто: ['ts', 'ts,md5sig']; наши лишние: ['', 'badsum', 'datanoack', 'md5sig'] |
blob |
не покрыто: ['{BIN}/stun2.bin']; наши лишние: — |
- Различных структур (каркасов) среди кандидатов: 15
- Структур, унаследованных от баз: 5
- Новых структур, которых нет ни у одной базы: 10
- Структур у всех авторских стратегий: 20
- Наши каркасы ⊆ авторские: False
Авторские стратегии, до которых генератор дотягивается за ≤3 изменения от базы:
| Апстрим | Ближайшая база | Изменений |
|---|
- .bin, на которые ссылаются авторские стратегии: 10
- .bin в bin/: 12; отсутствующих: 0
- Блобы, которые генератор умеет подставлять: 6 (все — авторские файлы)
- Все наши каркасы используют авторские списки (
{LISTS}/list-general.txtи др.) и авторские порты/фильтры: False
Проверка на пустом рантайме (нет runtime/strategies.json):
load_strategies() -> FileNotFoundError (strategies.py:121)
pick_bases(None) -> падает на load_strategies() ещё до выбора баз
generate_candidates([], 120) -> 0 кандидатов, исключения нет
app._run_deep -> load_strategies()[0] -> FileNotFoundError / IndexError
В приложении это уйдёт в onError: Ошибка глубокого поиска: .... Своего стартового
набора стратегий, независимого от апстрима, у FreeConnect нет.
- Кандидаты, байт-в-байт равные своей базе: 5 из 60 (при бюджете приложения 120 — 20).
repeatsиurepeatsпишут один и тот же ключ--dpi-desync-repeats; в случайных комбинациях в голосовой секции побеждает последний в словаре (repeats), поэтому голосовой repeats совпадает с TCP в 10 из 60 кандидатов — независимого варьирования голоса нет.- Для 4 из 5 баз ручки
pos/seqovl/blobне мутируют существующий параметр, а добавляют новый приём в стратегию, где его не было.
freeconnect/app.py:1646: def start_deep_search(self) -> None:freeconnect/app.py:1771: results = deepsearch.deep_search(- Бюджет в реальном вызове — 120 кандидатов,
min_all=5; база — текущая стратегия → лучшая рабочая →ALT→ первая встроенная (app.py:1729-1733).
| Изменено ручек | Кандидатов | Что это |
|---|---|---|
| 0 | 5 | кандидат == база, пустая трата прогона |
| 1 | 35 | осмысленная одномерная проба |
| 2 | 20 | случайная комбинация |
| 6 | 2 | случайная комбинация — 6 ручек сразу, «шум» |
| 7 | 4 | случайная комбинация — 7 ручек сразу, «шум» |
| 8 | 54 | случайная комбинация — 8 ручек сразу, «шум» |
Итого: одномерных проб — 35 из 120 (29%), комбинаций с 5+ ручками сразу — 60 (50%), пустых (== база) — 5.
Всего ручек у генератора: 8 (6 TCP + 2 голосовые).
Код (deepsearch.generate_candidates): per_base = max(6, budget // len(bases)), из них
rand_quota = max(2, per_base // 2) уходит под случайные комбинации, остальное — под
координатный проход по ручкам. При бюджете приложения 120 и 5 базах это per_base = 24,
coord_quota = 12, хотя полный координатный проход требует 36 проб на базу.
Порядок словаря ручек: urepeats, ufake, method, pos, seqovl, repeats, fooling, blob.
Первые 12 проб покрывают голос и method/pos/seqovl, а ручки repeats, fooling и
blob в координатном проходе не проверяются вообще — только внутри случайных комбинаций,
где они меняются одновременно со всеми остальными.