Update 'tasks/sasaaageyooo/readme.md'
This commit is contained in:
parent
1e111f0bab
commit
fadf4f8c39
1 changed files with 44 additions and 1 deletions
|
@ -7,4 +7,47 @@
|
||||||
|
|
||||||
Игра, которая дана на веб страничке называется ним (можно было найти это в поисковике). В интернете много статей по тому, как выигрывать в неё. Стратегия заключается в следующем: нужно чтобы после каждого твоего хода побитовый xor (побитовое исключающее или) количества элементов в кучках было равно 0.
|
Игра, которая дана на веб страничке называется ним (можно было найти это в поисковике). В интернете много статей по тому, как выигрывать в неё. Стратегия заключается в следующем: нужно чтобы после каждого твоего хода побитовый xor (побитовое исключающее или) количества элементов в кучках было равно 0.
|
||||||
|
|
||||||
Давайте напишем код:
|
Заметим, что всё взаимодействие с сервером происходит через WebSockets (можно увидеть в javascript страницы), тогда, давайте общаться с сервером напрямую, не через браузер (аналогичный код можно написать и в браузере конечно)
|
||||||
|
|
||||||
|
Давайте напишем код, который будет обращаться к серверу и играть с ним по вышеуказанной стратегии:
|
||||||
|
```python
|
||||||
|
import websocket
|
||||||
|
import ssl
|
||||||
|
import json
|
||||||
|
|
||||||
|
ws = websocket.WebSocket(sslopt={"cert_reqs": ssl.CERT_NONE})
|
||||||
|
ws.connect("wss://sdbjkas_sasaaageyooo.ctf.sch9.ru/get-flag")
|
||||||
|
ws.send("init")
|
||||||
|
|
||||||
|
data = json.loads(ws.recv())["state"]
|
||||||
|
|
||||||
|
def xor(d):
|
||||||
|
x = 0
|
||||||
|
for v in d: x ^= v
|
||||||
|
return x
|
||||||
|
|
||||||
|
while sum(data) > 0:
|
||||||
|
x = xor(data)
|
||||||
|
|
||||||
|
print("XOR =", x)
|
||||||
|
print("SUM =", sum(data))
|
||||||
|
|
||||||
|
for i, v in enumerate(data):
|
||||||
|
if v ^ x <= v:
|
||||||
|
v = v - (v ^ x)
|
||||||
|
break
|
||||||
|
|
||||||
|
ws.send(json.dumps({"index": i, "value": v}))
|
||||||
|
print("->", {"index": i, "value": v})
|
||||||
|
data[i] -= v
|
||||||
|
|
||||||
|
recv = json.loads(ws.recv())
|
||||||
|
print("<-", recv)
|
||||||
|
if "msg" in recv.keys(): break
|
||||||
|
i = recv['index']
|
||||||
|
v = recv['value']
|
||||||
|
data[i] -= v
|
||||||
|
```
|
||||||
|
(за код спасибо @quforos)
|
||||||
|
|
||||||
|
Запускаем и через приблизительно минуту нам выдаётся флаг.
|
Loading…
Reference in a new issue