from pwn import *
import time
printable = "?_qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%^&*(){},./<~\\"
host = ('xo.fword.wtf', 5554)
def getnum(string):
while True:
try:
p = remote(*host)
break
except socket.gaierror:
time.sleep(1)
#p = process("./task")
p.recvline()
p.sendline(string)
ans = int(p.recvline())
p.close()
return ans
flag = ''
i = len(flag)
while '}' not in flag:
pad = '`'*i
for char in printable:
totry = pad + char
print(totry)
if getnum(totry) == i:
flag += char
print(f"Flag: {flag}")
break
else:
print(flag)
quit()
i += 1a = "aaFho_i_aC2b_abfc8edFw!kolae_ngbom_r__f_9T525eg__ihedd}{pmertt"
b = "sUHoQmijkF23xd4568LEABgMCcNpqtuOPVWDhabT1Gyz0KefRSYZr79IJlvwXn"
a = list(a)
b = list(b)
c = list("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
o = ""
for i in range(len(a)):
d = b.index(c[i])
o += a[d]
print(o)import angr
import claripy #the solver engine
proj = angr.Project("./welcome", auto_load_libs=False)
sym_arg_size = 0x10 #Length in Bytes because we will multiply with 8 later
inp = [claripy.BVS('flag_%d' % i, 8 ) for i in range(sym_arg_size)]
flag = claripy.Concat(*inp + [claripy.BVV(b'\n')])
state = proj.factory.full_init_state(args=["./welcome"], stdin=flag)
for byte in inp:
state.solver.add(byte >= ord('0'))
state.solver.add(byte <= ord('9'))
simgr = proj.factory.simulation_manager(state)
good = 0x400000 + 0x12b2
bad = [0x400000 + 0x1669, 0x400000 + 0x167b]
simgr.use_technique(angr.exploration_techniques.DFS())
simgr.explore(find=good)
found = simgr.found[0]
print(found.solver.eval(flag, cast_to=bytes))The solved input is 1755121917194838def mess(msg):
enc=""
for i in msg:
enc+=chr((ord(i)+ord(i))%256)
return enc
printable = string.printable
def demess(msg):
# Byte by byte bruteforce
dec = ""
for i in range(len(msg)):
for char in printable:
if mess(char) == msg[i]:
dec += char
break
else:
dec += "-"
return decmatrix[0,0] matrix[0,1] matrix[0,2] matrix[1,0] .... ----- matrix2[0,0] .....import string
def mess(msg):
enc=""
for i in msg:
enc+=chr((ord(i)+ord(i))%256)
return enc
printable = string.printable
def demess(msg):
# Byte by byte bruteforce
dec = ""
for i in range(len(msg)):
for char in printable:
if mess(char) == msg[i]:
dec += char
break
else:
dec += "-"
return dec
import random
import numpy as np
key=np.matrix("1 2 3;0 1 4;5 6 0")
def recur_fibo(n):
if n<=1:
return 1
else:
return recur_fibo(n-1)+recur_fibo(n-2)
def messig_up(message,key):
parts=""
while len(message)!=0:
to_work_with=message[:9]
first_one=np.zeros((3,3))
k=0
for i in range(3):
for j in range(3):
first_one[i][j]=ord(to_work_with[k])
k+=1
finish=np.transpose(np.matmul(first_one,key))
for i in range(3):
for j in range(3):
parts=parts + str(finish[i,j])+ " "
parts+="-----"
message=message[9:]
return parts
def encode(n):
i=1
fib=recur_fibo(i)
t_f=[]
while fib<n:
t_f.append(fib)
i+=1
fib=recur_fibo(i)
_sum=0
a_f=[]
for i in range(len(t_f)-1,-1,-1):
if _sum==n:
break
if _sum+t_f[i]<=n:
a_f.append(t_f[i])
_sum+=t_f[i]
exis=[]
for i in t_f:
if i in a_f:
exis.append(1)
else:
exis.append(0)
return t_f,exis
encmap = []
for i in range(2500):
encmap.append(encode(i))
stuff = open("output.txt").readlines()
data = []
for line in stuff:
data.append(eval(line))
nums = []
for piece in data:
nums.append(encmap.index(piece))
print(nums)
invkey = np.linalg.inv(key)
dec = ""
for i in range(0,len(nums),9):
split = nums[i:i+9]
goodmat = np.array([split[j:j+3] for j in range(0,9,3)])
goodmat = np.transpose(goodmat)
matr = np.matmul(goodmat,invkey)
print(matr)
for x in range(3):
for y in range(3):
dec += chr(round(matr[x,y]))
print(len(dec))
print(demess(dec).encode())