題目分析
拿到題目以后題目是一個長條狀gif
那么這個題大概率就是分離gif的每一幀然后拼接形成圖片得到flag
解題步驟
有了思路以后,步驟也很清晰。就是兩步。第一步,分離gif,第二步,拼接gif
- 步驟
1.分離gif
好多方法都可以分離gif,這里使用python分離一下,上代碼:
#分離gif.py
from
PIL
import
Image
savepath
=
"F:\ctf文件\\D-R0s1\\"
#保存路徑
im
=
Image
.
open
(
'F:\ctf文件\\1.gif'
)
#從文件加載圖像
try
:
im
.
save
(
savepath
+
'{:d}.png'
.
format
(
im
.
tell
(
)
)
)
#讀取每一幀
while
True
:
im
.
seek
(
im
.
tell
(
)
+
1
)
#在不同幀之間移動
im
.
save
(
savepath
+
'{:d}.png'
.
format
(
im
.
tell
(
)
)
)
#保存文件
except
:
pass
分離出來發現有兩百多個圖像
2.使用python將這兩百多個圖像拼接起來,上代碼:
#拼接圖像.py
from
PIL
import
Image
path
=
"F:\\ctf文件\\D-R0s1\\"
save_path
=
'F:\\ctf文件\\'
im
=
Image
.
new
(
'RGBA'
,
(
2
*
201
,
600
)
)
#創建新照片
imagefile
=
[
]
#存儲所有的圖像的名稱
width
=
0
for
i
in
range
(
0
,
201
)
:
imagefile
.
append
(
Image
.
open
(
path
+
str
(
i
)
+
'.png'
)
)
#遍歷,將圖像名稱存入imagfile
for
image
in
imagefile
:
im
.
paste
(
image
,
(
width
,
0
,
2
+
width
,
600
)
)
#將圖片張貼到另一張圖片上
width
=
width
+
2
im
.
save
(
save_path
+
'D-R0s1.png'
)
im
.
show
(
)
題目解題腳本分析
拼接圖像.py
- 第一部分
im
=
Image
.
new
(
'RGBA'
,
(
2
*
201
,
600
)
)
#創建新照片
- 第二部分
imagefile
=
[
]
#存儲所有的圖像的名稱
width
=
0
for
i
in
range
(
0
,
201
)
:
imagefile
.
append
(
Image
.
open
(
path
+
str
(
i
)
+
'.png'
)
)
#遍歷,將圖像名稱存入imagfile
在文件目錄下遍歷圖像并將圖像名稱存入inagefile中
- 第三部分
for
image
in
imagefile
:
im
.
paste
(
image
,
(
width
,
0
,
2
+
width
,
600
)
)
#將圖片張貼到另一張圖片上
width
=
width
+
2
此處需要特別重要的是im.paste()中的值,(width,0,2+width,600)這是圖像的一組坐標值。相當于(x1,y1,x2,y2),對應坐標圖為:
這樣一來這個坐標值就很容易理解了(width,0,2+width,600)
寬度就是2每次加2這樣疊加起來,高度就是0-600。圖片原始屬性的高度。
這樣就實現了循環粘貼的目的。
總結
切實提高自己的編碼能力,讓程序代替搬磚。
關于python腳本處理圖片隱寫可以參考一下yanzm師傅在i春秋的文章。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
