文件下載地址 https://www.lanzoui.com/i98c7zg
打開后是一張圖片,在kali中使用foremost命令分離出一張圖片和一個壓縮包
用010打開圖片,在圖片的末尾發現一串字符
Sk5DVlM2Mk1NRjVIU1gyTk1GWEgyQ1E9Cg==
先base64解密,在base32解密得到
KEY{Lazy_Man}
打開壓縮包發現提示
GEZDGNBVGYFA====
base32解密后得到密碼
123456
打開txt里面的內容,是一堆數字。且3078重復出現。轉為16進制就得到3078是0x
那么使用腳本,進行批量轉換。得到一堆0x 0x的文本。
又發現字符串0x37 0x7a,發現37 7a 是7z壓縮包的文件頭。
那么思路來了:批量刪除0x,轉換為7z文件。
先上批量刪除0x的代碼
import re def read_file(filepath): with open(filepath) as fp: content=fp.read(); return content number = read_file('thienc.txt') result = [] result.append(re.findall(r'.{2}', number)) result = result[0] strings =''
for i in result: y = bytearray.fromhex(i) z = str(y) z= re.findall("b'(.*?)'",z)[0] strings += z b= strings.split('0x') strings=''
for i in b: if len(i) ==1: i= '0' + i strings +=i with open('te.txt', 'w') as f: f.write(strings)
將得到的te.txt文本中的內容以16進制復制到010中打開並保存為1.7z
打開發現需要密碼,那么之前得到的密碼就有了用處
KEY{Lazy_Man}
輸入密碼得到一大串內容,結尾發現==,一次base64解密后還有=
猜想有多次的base解密
直接上代碼
import base64 import re def read_file(filepath): with open(filepath) as fp: content=fp.read(); return content url = read_file('secenc.txt') #url1= re.findall("b'(.*?)'",url) #url=url1[0]
url = base64.b64decode(url) print(url) with open('test1.txt', 'w') as f: f.write(str(url))
第一次解密需要將
#url1= re.findall("b'(.*?)'",url) #url=url1[0]
注釋掉,因為一開始的密文是沒有 ‘,而運行腳本后有了
第二次運行腳本代碼如下
import base64 import re def read_file(filepath): with open(filepath) as fp: content=fp.read(); return content url = read_file('test1.txt') url1= re.findall("b'(.*?)'",url) url=url1[0] url = base64.b32decode(url) print(url) with open('test2.txt', 'w') as f: f.write(str(url))
以此反復進行base32,base64解密。
最終經過16次的混合解密得到 test16.txt
使用記事本的替換功能,把 \n替換成空格
在線brain fuck/Ook!解密
先 Ook! to Text
然后再 Brainfuck to Text,得出flag
flag
flag{Welc0me_tO_cTf_3how!}