keygen
Category: Reverse Engineering
80 points
Can you get the flag from the given file.
file: keygen.py
keygen.py
def checkends(password):
end_status = 0
if password[:6] == "SHELL{":
end_status = 1
if password[28] == "}":
end_status = 1
return end_status
def checkmiddle1(password):
middle1_status = 0
if password[27] == "1" and password[17] == "4" and password[8] == "n" and password[23] == "y" and password[10] == "0":
middle1_status = 1
if password[11] == "n" and password[12] == "z" and password[13] == "a" and password[21] == "g" and password[15] == "u":
middle1_status = 1
if password[16] == "r"and password[7] == "3" :
middle1_status = 1
return middle1_status
def checkmiddle2(password):
middle2_status = 0
if password[18] == "_" and password[25] == "5" and password[20] == "4" and password[14] == "k" and password[22] == "3" and password[9] == "b" and password[24] == "0":
middle2_status = 1
if password[19] == "k" and password[26] == "h" and password[6] == "s" :
middle2_status = 1
return middle2_status
# driver code
a = input("enter your flag:")
if checkends(a) == 1 and checkmiddle1(a) == 1 and checkmiddle2(a) == 1:
print("congrats thats the flag.")
else:
print("Wrong flag.")
Solution
I’ve took the given code and changed it as below to get the flag.
password = [i for i in "SHELL{"] + ['' for i in range(23)]
password[28] = "}"
password[27] = "1"
password[17] = "4"
password[8] = "n"
password[23] = "y"
password[10] = "0"
password[11] = "n"
password[12] = "z"
password[13] = "a"
password[21] = "g"
password[15] = "u"
password[16] = "r"
password[7] = "3"
password[18] = "_"
password[25] = "5"
password[20] = "4"
password[14] = "k"
password[22] = "3"
password[9] = "b"
password[24] = "0"
password[19] = "k"
password[26] = "h"
password[6] = "s"
print(''.join(password))
Output:
SHELL{s3nb0nzakur4_k4g3y05h1}
Flag
SHELL{s3nb0nzakur4_k4g3y05h1}