Merge branch 'master' of github.com:failedxyz/easyctf
This commit is contained in:
commit
8baed14e1c
7 changed files with 67 additions and 0 deletions
1
listen-closely/description.md
Normal file
1
listen-closely/description.md
Normal file
|
@ -0,0 +1 @@
|
|||
We intercepted a secret message, but we can't tell what it's saying. Maybe you can help? [super secret message](${listenclosely_wav})?
|
4
listen-closely/grader.py
Normal file
4
listen-closely/grader.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
def grade(autogen, key):
|
||||
if key.find("CAN_YOU_EVEN_HEAR_ME_YET") != -1:
|
||||
return True, "Correct!"
|
||||
return False, "Nope!"
|
BIN
listen-closely/listenclosely.wav
Normal file
BIN
listen-closely/listenclosely.wav
Normal file
Binary file not shown.
9
listen-closely/problem.yml
Normal file
9
listen-closely/problem.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
author: GenericNickname
|
||||
title: Listen Closely
|
||||
hint: 1, 16, 8000
|
||||
category: Crytpography
|
||||
autogen: false
|
||||
programming: false
|
||||
value: 50
|
||||
files:
|
||||
- listenclosely.wav
|
1
rsa2/description.md
Normal file
1
rsa2/description.md
Normal file
|
@ -0,0 +1 @@
|
|||
Some more RSA! This time, there's no P and Q... [this](${ciphertext_txt}).
|
48
rsa2/grader.py
Normal file
48
rsa2/grader.py
Normal file
|
@ -0,0 +1,48 @@
|
|||
from cStringIO import StringIO
|
||||
|
||||
flag = "l0w_n"
|
||||
|
||||
def modx(base,exp,mod):
|
||||
r = 1;
|
||||
while (exp > 0):
|
||||
if (exp % 2 == 1):
|
||||
r = (r * base) % mod
|
||||
base = (base * base) % mod
|
||||
exp = exp/2
|
||||
return r
|
||||
|
||||
def probprime(s):
|
||||
if s%2==0:
|
||||
s += 1
|
||||
smolprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
|
||||
while len(set([modx(i,s-1,s) for i in smolprimes])) != 1 or modx(2,s-1,s) != 1:
|
||||
s+=2
|
||||
return(s)
|
||||
|
||||
def get_problem(random):
|
||||
# add Probable Prime function later
|
||||
p = probprime(random.randint(10**20,9*10**20))
|
||||
q = probprime(random.randint(10**20,9*10**20))
|
||||
e = 3
|
||||
salt = "".join([random.choice("0123456789abcdef") for i in range(4)])
|
||||
return (p, q, e, salt)
|
||||
|
||||
def generate_ciphertext(random):
|
||||
p, q, e, salt = get_problem(random)
|
||||
encoded = int(("flag{%s_%s}" % (flag, salt)).encode('hex'),16)
|
||||
ciphertext = 'n: '+str(p*q)+'\n'
|
||||
ciphertext += 'e: '+str(e)+'\n'
|
||||
ciphertext += 'c: '+str(pow(encoded, e, p*q))+'\n'
|
||||
|
||||
return StringIO(ciphertext)
|
||||
|
||||
def generate(random):
|
||||
return dict(files={
|
||||
"ciphertext_rsa2.txt": generate_ciphertext
|
||||
})
|
||||
|
||||
def grade(random, key):
|
||||
n, salt = get_problem(random)
|
||||
if key.find("%s_%s" % (flag, salt)) >= 0:
|
||||
return True, "Correct!"
|
||||
return False, "Nope."
|
4
rsa2/problem.yml
Normal file
4
rsa2/problem.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
title: RSA 2
|
||||
value: 35
|
||||
author: neptunia
|
||||
autogen: true
|
Loading…
Reference in a new issue