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的.可以省略,没有影响