Enhanced ROT13 ( Crypto )
Challenge: enhanced rot13
Code given by question:
lowercase_offset = ord("m")
uppercase_offset = ord("M")
alphabet = "abcdefghijklmnopqrxtuvwxyz"
## flag example is not the flag
Flag_example = "qrrqnururqwrbtapqrnqatqqru"
def b16(plain):
enc = ""
for a in plain:
binary = "{0:08b}".format(ord(a))
enc += alphabet[int(binary[4:], 2)]
enc += alphabet[int(binary[:4], 2)]
return enc
def ROT13(b16):
result = ""
for i in b16:
c = ord(i)
if c >= ord('a') and c <= ord('z'):
if c > lowercase_offset:
c -= 13
else:
c += 13
elif c >= ord('A') and c <= ord('Z'):
if c > uppercase_offset:
c -= 13
else:
c += 13
result += chr(c)
return result
flag=Flag_example
b16 = b16(flag)
print("Flag: LNC2022{"+ROT13(b16)+ "}" )
Analysis:
ROT13 can easily be reversed by ROT13-ing it again. But what about reversing b16?
As we can see, each char in enc is made out of alphabet[num] ; where num is the converted binary to denary from an 8-bit binary ( in the order [4:] then [:4] )
Thus, by understanding this code, we can easily create a code to reverse whatever has been done to our flag.
x1 = (ROT13("qrrqnururqwrbtapqrnqatqqru"))
output = ""
lst = []
for i in range(len(x1)):
temp = alphabet.index(x1[i])
lst.append( "{0:04b}".format(temp))
for i in range(1,len(lst),2):
output += lst[i] + lst[i-1] + " "
print(output)
Here, output prints out the flag in binary form, we can just put it in a bin-text converter and get our flag from there :)
Last updated