二進位制字元檔案轉二進位制的3種姿勢

2021-08-03 10:55:09 字數 1063 閱讀 4737

今天學弟問了乙個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型別。文字檔案是一種特殊的二進...