ASIS Final - Simple crypto Write up
Đề:
Begining always needs an interesting challenge, we can assure you, this challenge is an interesting one to begin the CTF!
Ta nhận được 1 file flag.enc và 1 file simple.py
Sau 1 hồi quan sát ta thấy rằng mã hóa này có điểm yếu ở dòng
enc = xor_str(key * (len(flag) // len(key) + 1), flag).encode('hex')
Ta có thể phục lại được flag bằng cách check length() của file flag.enc là 25280
đặt phần ( len(flag) // len(key) + 1 ) = x
lúc này mã hóa sẽ thành
enc = x_str(key*x,flag).encode('hex')
-> ta có thể biết được độ dài của x vì function xor_str có điểm yếu là
if len(x) > len(y):
return ''.join([chr(ord(z) ^ ord(p)) for (z, p) in zip(x[:len(y)], y)])
else:
return ''.join([chr(ord(z) ^ ord(p)) for (z, p) in zip(x, y[:len(x)])])
Dễ dàng thấy độ dài của file = độ dài của file mã hóa / len( key.encode('hex') = 25280 / 40 = 632
ta đã có x
lúc này phục hồi bằng cách
flag = xor_str( key*x , flag.enc )
ta tìm được 1 file ảnh là flag
đây là Script mình viết để làm bài
Begining always needs an interesting challenge, we can assure you, this challenge is an interesting one to begin the CTF!
Ta nhận được 1 file flag.enc và 1 file simple.py
Sau 1 hồi quan sát ta thấy rằng mã hóa này có điểm yếu ở dòng
enc = xor_str(key * (len(flag) // len(key) + 1), flag).encode('hex')
Ta có thể phục lại được flag bằng cách check length() của file flag.enc là 25280
đặt phần ( len(flag) // len(key) + 1 ) = x
lúc này mã hóa sẽ thành
enc = x_str(key*x,flag).encode('hex')
-> ta có thể biết được độ dài của x vì function xor_str có điểm yếu là
if len(x) > len(y):
return ''.join([chr(ord(z) ^ ord(p)) for (z, p) in zip(x[:len(y)], y)])
else:
return ''.join([chr(ord(z) ^ ord(p)) for (z, p) in zip(x, y[:len(x)])])
Dễ dàng thấy độ dài của file = độ dài của file mã hóa / len( key.encode('hex') = 25280 / 40 = 632
ta đã có x
lúc này phục hồi bằng cách
flag = xor_str( key*x , flag.enc )
ta tìm được 1 file ảnh là flag
đây là Script mình viết để làm bài
Nhận xét
Đăng nhận xét