73 lines
1.8 KiB
Markdown
73 lines
1.8 KiB
Markdown
## Difficulty
|
|
50/100
|
|
|
|
## Category
|
|
Programming
|
|
|
|
## How To Solve
|
|
Each of the 'friends' will give you harder and harder mathematical
|
|
puzzles to solve. Everytime you solve one you get to know a new friend.
|
|
Their names are always the first letter of the flag and then something
|
|
random. This is obvious because if you print them out the first couple
|
|
of friends are called I, G, C, T, F which spells IGCTF. The flag is
|
|
then the first names of all friends back to back `IGCTFBR0M4NCE`.
|
|
|
|
To solve these math puzzles, you need to write a program because they
|
|
have to be solved within 10 seconds. You can use a python module to do
|
|
it afaik, but I wrote a dead simple script that uses eval and some
|
|
string replacements.
|
|
|
|
|
|
```python
|
|
from pwn import *
|
|
import time
|
|
|
|
def sin(exp): return math.sin(math.radians(eval(str(exp))))
|
|
def cos(exp): return math.cos(math.radians(eval(str(exp))))
|
|
def sqrt(exp): return math.sqrt(eval(str(exp)))
|
|
|
|
def solve(expression):
|
|
newexpr = ''
|
|
for i, c in enumerate(expression):
|
|
if c == '|' and expression[i-5:].startswith('sqrt'):
|
|
newexpr += "abs("
|
|
elif c == '|':
|
|
newexpr += ')'
|
|
else:
|
|
newexpr += c
|
|
|
|
#print(newexpr)
|
|
return str(eval(newexpr))
|
|
|
|
conn = remote('localhost', 3005)
|
|
#conn = process(['python3', './friend-generator.py'])
|
|
|
|
time.sleep(0.1)
|
|
print(conn.recv())
|
|
conn.send('yes\n'.encode())
|
|
time.sleep(0.1)
|
|
|
|
names = []
|
|
|
|
while True:
|
|
data = conn.recv().decode()
|
|
try:
|
|
name = data[data.index('name'):].split('\n')[0][8:].split(',')[0]
|
|
expression = data[data.index('first: '):].split('\n')[1]
|
|
except ValueError:
|
|
print(data)
|
|
exit(0)
|
|
solution = solve(expression)
|
|
#print(f"= {solution}")
|
|
print(name)
|
|
names.append(name)
|
|
conn.send((solution + "\n").encode())
|
|
time.sleep(0.1)
|
|
|
|
```
|
|
|
|
## Hints
|
|
n/a
|
|
|
|
## Flag
|
|
IGCTFBR0M4NCE |