38b5bf095a514f2dbb64618f7e084d0941016fc5
ctf/IERAE CTF 2024 writeup.md
... | ... | @@ -62,6 +62,24 @@ curl "192.0.2.1:3000/search?user=http%3A%2F%2F192.0.2.2%3000" |
62 | 62 | |
63 | 63 | ## derangement |
64 | 64 | |
65 | +`magic_word`に含まれる文字は |
|
66 | + |
|
67 | +```python |
|
68 | +LENGTH = 15 |
|
69 | +CHAR_SET = string.ascii_letters + string.digits + string.punctuation |
|
70 | + |
|
71 | +def generate_magic_word(length=LENGTH, char_set=CHAR_SET): |
|
72 | + return ''.join(random.sample(char_set, length)) |
|
73 | +``` |
|
74 | + |
|
75 | +によって生成されるため、 |
|
76 | + |
|
77 | +- `ascii_letters`: 52文字 |
|
78 | +- `digits`: 10文字 |
|
79 | +- `punctuation`: 32文字 |
|
80 | + |
|
81 | +の計94文字が候補になる。 |
|
82 | + |
|
65 | 83 | ```python |
66 | 84 | def is_derangement(perm, original): |
67 | 85 | return all(p != o for p, o in zip(perm, original)) |
... | ... | @@ -69,6 +87,10 @@ def is_derangement(perm, original): |
69 | 87 | によって、`deranged`のi文字目と`magic_word`のi文字目と一致しない。 |
70 | 88 | つまり、`deranged`に1度でも出現した文字は除外することができる。 |
71 | 89 | |
90 | +299回まで試行出来るので、299回の試行によって93文字を除外できればOK。 |
|
91 | + |
|
92 | +ここで、 |
|
93 | + |
|
72 | 94 | - `candidate_char_set`: ヒント文字列で出現した全ての文字の集合 |
73 | 95 | - `appeared_char_set_dict[i]`: ヒント文字列のi文字目に出現した全ての文字の集合 |
74 | 96 |