Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
goelp14
GitHub Repository: goelp14/easyctf-iv-problems
Path: blob/master/intro.re/grader.py
650 views
1
from io import StringIO
2
import string
3
4
template = """#!/usr/bin/env python3
5
import binascii
6
key = "{enckey}"
7
def mystery(s):
8
r = ""
9
for i, c in enumerate(s):
10
r += chr(ord(c) ^ ((i * ord(key[i % len(key)])) % 256))
11
return binascii.hexlify(bytes(r, "utf-8"))
12
"""
13
14
flag_prefix = "char_by_char"
15
16
17
def get_problem(random):
18
enckey = "".join([random.choice(string.ascii_letters) for i in range(8)])
19
salt = "".join([random.choice(string.hexdigits) for i in range(6)])
20
fmtflag = "{}_{}".format(flag_prefix, salt)
21
return enckey, fmtflag
22
23
24
def generate(random):
25
enckey, fmtflag = get_problem(random)
26
contents = template.format(enckey=enckey)
27
v = dict()
28
exec(contents, v, v)
29
enc = v["mystery"]("easyctf{%s}" % fmtflag).decode("utf-8")
30
return dict(files={
31
"mystery.py": StringIO(contents)
32
}, variables={
33
"enc": enc
34
})
35
36
37
def grade(random, key):
38
enckey, fmtflag = get_problem(random)
39
if(key.find(fmtflag) != -1):
40
return True, "Good job!"
41
return False, "Try again."
42
43