題目資訊
Hey, hey can you find my secret.
UPDATE 10:13 Eastern: the flag is whatever is in sys.argv[2]
解法
題目給了加密方法跟加密過後的密文
cipher.py:
encrypted:
分析一下cipher.py,可知:
找出 flag 跟 key 的長度
先找 flag 跟 key 的長度可以確定兩者在 plaintext 位置。
因為 plaintext 裡有 key ,又是用 key 做 xor 加密,所以在 ciphertext 必定有一段全 xor 起來會是 0 !
原理:
如此就能寫個 script 來找 key length 了。由於 md5 的部分不重要,所以可以先拿掉,再來對 ciphertext 從後面往前一直做 xor ,直到 xor 為 0。
解得
flag length = 38
key length = 67
解出 key
直接拿題目解出長度的情形來說明:
因此只要給定一個 key[0]
,全部跑完就能得到完整 key 了,又 flag 開頭應該是 'flag{'
,所以可以由 ciphertext[0] ^ ord('f')
得到 key[0]
。
解完 key 再對 ciphertext 做一次 xor 就可以了解得 flag 了!
解答 script
完整的script如下:
解得
key: A quart jar of oil mixed with zinc oxide makes a very bright paint|
flag: flag{sti11_us3_da_x0r_for_my_s3cratz}|