70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
import asyncio
|
|
#import time
|
|
import random as rnd
|
|
import websockets
|
|
import json
|
|
|
|
flag='ctf{1_l0v3_4774ck_0n_7174n}'
|
|
|
|
async def game(ws,path):
|
|
if('train' in path):
|
|
train=True
|
|
else:
|
|
train=False
|
|
if train:
|
|
state=[3,5,7]
|
|
else:
|
|
state=[rnd.randint(1,300) for i in range(300)]
|
|
|
|
await ws.recv()
|
|
|
|
await ws.send(json.dumps({'state':state}))
|
|
|
|
while(state!=[0]*len(state)):
|
|
try:
|
|
data = json.loads(await ws.recv())
|
|
index=data['index']
|
|
value=data['value']
|
|
if(state[index]<value or value<1):
|
|
0/0
|
|
state[index]-=value
|
|
except Exception as e:
|
|
await ws.send(json.dumps({'msg':'not valid request'}))
|
|
return
|
|
|
|
if(state==[0]*len(state)):
|
|
if(train):
|
|
await ws.send(json.dumps({'msg':'Вы победили. Теперь победите в финальной битве'}))
|
|
else:
|
|
await ws.send(json.dumps({'msg':flag}))
|
|
return
|
|
|
|
x=0
|
|
for i in state:
|
|
x^=i
|
|
mask=x
|
|
while(mask&(mask-1)):
|
|
mask=mask&(mask-1)
|
|
if(x==0):
|
|
for i in range(len(state)):
|
|
if(state[i]!=0):
|
|
index=i
|
|
value=rnd.randint(1,state[i])
|
|
break
|
|
else:
|
|
for i in range(len(state)):
|
|
if(mask&state[i]):
|
|
index=i
|
|
value=state[i]-(state[i]^x)
|
|
state[index]-=value
|
|
await ws.send(json.dumps({'index':index,'value':value}))
|
|
|
|
|
|
|
|
start_server = websockets.serve(game, "0.0.0.0", 8000)
|
|
|
|
asyncio.get_event_loop().run_until_complete(start_server)
|
|
|
|
asyncio.get_event_loop().run_forever()
|
|
|