Xorathrust
Overview
-
Overall difficulty for me (From 1-10 stars): ★☆☆☆☆☆☆☆☆☆
-
Challenge static score: 25
Backgrond
In the challenge’s description, we can download an attachment. Let’s download it:
┌[root♥siunam]-(~/ctf/KnightCTF-2023/Cryptography/Xorathrust)-[2023.01.21|18:21:12(HKT)]
└> mv /home/nam/Downloads/Xorathrust-20230121T102216Z-001.zip .
┌[root♥siunam]-(~/ctf/KnightCTF-2023/Cryptography/Xorathrust)-[2023.01.21|18:22:29(HKT)]
└> unzip Xorathrust-20230121T102216Z-001.zip
Archive: Xorathrust-20230121T102216Z-001.zip
inflating: Xorathrust/flag.enc.txt
inflating: Xorathrust/encrypt.py
┌[root♥siunam]-(~/ctf/KnightCTF-2023/Cryptography/Xorathrust)-[2023.01.21|18:22:40(HKT)]
└> cd Xorathrust
Find the flag
flag.enc.txt
:
┌[root♥siunam]-(~/ctf/KnightCTF-2023/Cryptography/Xorathrust/Xorathrust)-[2023.01.21|18:24:46(HKT)]
└> xxd flag.enc.txt
00000000: 2d25 3220 1d0c 1353 1239 5239 0452 530f -%2 ...S.9R9.RS.
00000010: 0539 1e56 141b .9.V..
encrypt.py
:
def main():
flag_enc = ""
with open("flag.txt", "r") as infile:
flag = infile.read()
flag = list(flag)
for each in flag:
each = chr(ord(each) ^ 0x66)
flag_enc += each
with open("flag.enc", "w") as outfile:
outfile.write(flag_enc)
if __name__ == "__main__":
main()
As you can see, the original flag.txt
is being XOR’ed, and every characters of flag.txt
is XOR’ed by hex 66
.
Armed with above information, we can reverse it by XOR’ing hex 66
:
#!/usr/bin/env python3
XORedflag = ''
with open('flag.enc.txt', 'rb') as file:
flag = file.read()
flag = list(flag)
for character in flag:
XORedflag += chr(character ^ 0x66)
print(XORedflag)
┌[root♥siunam]-(~/ctf/KnightCTF-2023/Cryptography/Xorathrust/Xorathrust)-[2023.01.21|18:30:30(HKT)]
└> python3 solve.py
KCTF{ju5t_4_b45ic_x0r}
Found the flag!
- Flag:
KCTF{ju5t_4_b45ic_x0r}
Conclusion
What we’ve learned:
- Decrypting XOR’ed File