seccon-ctf-2014-Misc-reverse-it(强大的命令行工具)

题目给了个文件,拿去file查看类型,不是个什么特殊文件。

root@kali:/mnt/hgfs/共享文件夹# file Reverseit 
Reverseit: data

使用binwalk查看一下,也没有什么隐藏文件。

root@kali:/mnt/hgfs/共享文件夹# binwalk Reverseit 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------

这就有点奇怪了,这个题是要搞什么?
放到010editor里面看一下,也看不出什么文件头什么的,但是仔细看看,发现有点猫腻:
文件头的部分是9D FF,反过来就是FFD9,是jpg文件的文件尾啊。
再看看文件尾部
seccon-ctf-2014-Misc-reverse-it(强大的命令行工具)_第1张图片
hex从后往前看是FF D8 FF,正好也是jpg的文件头啊,文件名是Reverse-it,看来我们需要对文件内容进行反转。
下面两个脚本都是拿大佬的,我怎么这么菜。。。。。。。

(python2运行)
首先是内容反转:

import sys
 
def swap_nibbles(byte):
  return ((byte<<4) | (byte>>4)) & 0xff
 
i=open(sys.argv[1], 'rb')
o=open(sys.argv[1] + '.rev', 'wb')
o.write(''.join(map(chr, map(swap_nibbles, map(ord, i.read()[::-1])))))
i.close()
o.close()

拿到一个图片:
在这里插入图片描述
同样是个反着的图片,直接读看也能读出来,大佬这里也给了一个脚本:

import sys
from PIL import Image
 
i = Image.open(sys.argv[1])
o = Image.new(i.mode, i.size)
idata, odata = i.load(), o.load()
 
for y in range(i.size[1]):
  for x in range(i.size[0]):
    odata[x, y] = idata[i.size[0]-x-1, y]
 
o.save(sys.argv[1] + '.jpg')

拿到图片:
在这里插入图片描述
以上是使用python脚本的解决方法,会写python脚本真的是强大,代码能力太重要了。
但是同时,一些好用的工具也能给我们提供很多的便利,下面给出本题的命令行工具解决方法:

xxd -p Reverseit | tr -d '\n' | rev | xxd -r -p > reversed   //功能相当于第一个脚本,把文件内容进行反转,得到的图片也一样

convert -flop reversed reversed.jpg     //功能相当于第二个脚本,对图片进行镜像反转

可见这些工具有多么强大,好好学习吧。

你可能感兴趣的:(赛题复现,CTF学习)