今天學弟問了乙個ctf題,是關於二進位制字元檔案轉二進位制檔案的問題。
自己用了乙個struct庫解出來了,**是這樣的:
import struct
f = open("num.txt","r")
fout = open("res.txt","ab+")
data = f.read()
for i in range(0,len(data),16):
try:
ds = struct.pack("c",chr(int(data[i:i+8],2)))
fout.write(ds)
ds = struct.pack("c",chr(int(data[i+8:i+16],2)))
fout.seek(i) #轉換位元組序
fout.write(ds)
fout.seek(i + 16)
except exception:
pass
fout.close()
f.close()
上面的python指令碼執行結果會輸出乙個zip檔案,解壓後得到一張,圖里藏著乙個base64編碼,兩次解碼後得到flag:
為啥這個jpg檔案裡面有地方可以寫這種東西。。用010套了個jpg模板,結果如下:
查了乙個dalao的部落格,發現這個欄位是用來填充說明欄位的(看說明這個圖生成的時候用的是ps:)):
好的,認為這題圓滿解決,沒想到隊裡的菊苣一行**解決了問題。。。。。。又學到了新姿勢orz
python -c "print format(int(open('num.txt').read(),2),'x').decode('hex')" > 1.zip
這裡用了乙個decode函式,將乙個16進製制字串轉換為16進製制數,重定向輸出到zip檔案中。
查了一下decode函式,發現decode還可以解碼字串為這些編碼:
以及另乙個菊苣給出的不寫**解法:
首先將二進位制字串檔案ctrl + c一下,之後開啟010editor:
就出現了壓縮包。。。
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
十二進位制轉二進位制 2018
1 逐個輸出對應的十進位制,用空格隔開 高位到地位 10 2 輸出對應的十進位制數 10 3 轉為二進位制,用4個位元組表示 10 例如 輸入a2 輸出 10 2 12200000000 00000000 00000000 01111010 思路 1 利用transfer char ch 將單個字元...
二進位制檔案
本質上是文字檔案是把檔案資訊先轉化成以字元編碼的ascii碼,再儲存ascii的二進位制 而二進位制檔案是直接把檔案資訊編碼成二進位制儲存。因此在讀取的時候要考慮記憶體中二進位制 應該怎麼樣解釋。二進位制檔案的讀取是是要告訴元素的型別 編碼方式 文字檔案則預設為char型別。文字檔案是一種特殊的二進...