BUUCTF:[MRCTF2020]不眠之夜

题目

安装

用到两个工具:montage和gaps,

montage的作用是把乱序图片先按拼图的总大小拼成一张图

gaps的作用是将一张图按指定的size切割并尝试将其拼好

gaps安装

linux下拼图工具gaps安装教程 - 简书 (jianshu.com)

montage安装

apt-get install graphicsmagick-imagemagick-compat

 

解题代码

注意要删掉一张没用的损坏图片

法一:

montage  -tile 10x12 -geometry 400x200+0+0 *jpg flag.jpg
gaps --image=flag.jpg --generations=40 --population=120 --size=200

法二:

montage *.jpg -tile 10x12 -resize 4000x2400 -geometry +0+0 out.jpg #把图片碎片合成一个图片
gaps --image=out.jpg --generations=90 --population=120 --size=200 #还原原图片

亲测拼图碎片的大小越大,最后解出来的图片越精准。(但是图片如果太大的话,gaps进程会被kill掉,所以合理的大就行了)

参数说明:

*.jpg指目标为目录下所有的jpg格式图片

-geometry +0+0的用处是让图片之间没有间隙

resize后是最终合成图片的长x宽

tile后是从左往右张数x从上往下张数

size如何确定?

这道题的图片有一个特点,那就是长是宽的两倍,所以我们可以将一张子图片视为两张拼图(每张拼图是正方形的)

于是有,拼图的宽度,也就是size为600/12=50

过程遇到的挫折:

虚拟机传文件问题

文件夹被压大小问题

网上错误代码误导问题

等等

关于montage的语法/传参问题

montage  -tile 10x12 -resize 200x100 *.jpg -geometry +0+0 out.jpg

当*.jpg在resize前面传入后,它接下来读到行和列对应的图片数就可以进行转换。至于重新设大小之类的等转完再说。

当*.jpg在resize后传入时,它会对指定的图片进行重新设定大小后再拼接。

*.jpg的.可以省略,没有影响

posted @ 2022-07-24 03:04  yodel  阅读(779)  评论(0编辑  收藏  举报