題目是這個樣子的:
code.txt的內容是這樣:
有點嚇人木?233333
其實解密之后是這樣的:
找到一點安慰沒?
好了,廢話不多說。講解一下思路吧。
我們知道base64加密是屬於可逆加密的。簡單點說,就是前后可以互逆。依據某種算法可以計算得出。
那么破解方法呢,就是直接用對應算法破解咯。那么話說到這里不是廢話嗎?
不要着急,我們來看題。
加密的部分是那個for循環里邊的東西。
隨機從base16,base32,base64中選擇一種加密。然后進行10輪。
既然是隨機的,那么問題來了,到底應該每輪是哪種加密呢?
你問我?我怎么知道!!!不是說了喪心病狂嘛!!!
但是呢,python在手嘛,不用怕咯。
我們考慮到兩個循環的,第一個是
1 for i in range(10): 2 for k in num: 3 try: 4 flag_content = result[k](flag_content) 5 if flag_content: 6 break 7 else: 8 continue 9 except: 10 pass
這里需要解釋的地方是循環控制?如果解密成功那個跳過這次,繼續下一輪。否則呢繼續來唄。
很簡單吧。
接着呢。把函數寫出來。這里我直接把題目中的拿來了。23333
所以最后的代碼是這樣的。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 5 from base64 import * 6 7 result = { 8 '16':lambda x :b16decode(x), 9 '32':lambda x :b32decode(x), 10 '64':lambda x :b64decode(x), 11 } 12 13 flag = open('code.txt','r') 14 flag_content = flag.read() 15 # print flag_content 16 17 num = ('16','32','64') 18 19 for i in range(10): 20 for k in num: 21 try: 22 flag_content = result[k](flag_content) 23 if flag_content: 24 break 25 else: 26 continue 27 except: 28 pass 29 30 with open("final_flag.txt","wb") as final_flag: 31 final_flag.write(flag_content)
這里重在和大家分享這種方法。如果大家有更好的方案。請在下方留言。