<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://game.etao.net/w/index.php?action=history&amp;feed=atom&amp;title=%E5%9B%BE%E7%89%87%E5%88%86%E6%9E%90%E7%AE%80%E4%BB%8B</id>
	<title>图片分析简介 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://game.etao.net/w/index.php?action=history&amp;feed=atom&amp;title=%E5%9B%BE%E7%89%87%E5%88%86%E6%9E%90%E7%AE%80%E4%BB%8B"/>
	<link rel="alternate" type="text/html" href="https://game.etao.net/w/index.php?title=%E5%9B%BE%E7%89%87%E5%88%86%E6%9E%90%E7%AE%80%E4%BB%8B&amp;action=history"/>
	<updated>2026-05-06T08:12:48Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://game.etao.net/w/index.php?title=%E5%9B%BE%E7%89%87%E5%88%86%E6%9E%90%E7%AE%80%E4%BB%8B&amp;diff=246&amp;oldid=prev</id>
		<title>127.0.0.1：​创建页面，内容为“{{Ctf_Wiki}} = 图片分析简介 =  图像文件能够很好地包含黑客文化，因此 CTF 竞赛中经常会出现各种图像文件。  图像文件有多种复杂的格式，可以用于各种涉及到元数据、信息丢失和无损压缩、校验、隐写或可视化数据编码的分析解密，都是 Misc 中的一个很重要的出题方向。涉及到的知识点很多（包括基本的文件格式，常见的隐写手法及隐写用的软件）…”</title>
		<link rel="alternate" type="text/html" href="https://game.etao.net/w/index.php?title=%E5%9B%BE%E7%89%87%E5%88%86%E6%9E%90%E7%AE%80%E4%BB%8B&amp;diff=246&amp;oldid=prev"/>
		<updated>2023-07-03T03:45:55Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“{{Ctf_Wiki}} = 图片分析简介 =  图像文件能够很好地包含黑客文化，因此 CTF 竞赛中经常会出现各种图像文件。  图像文件有多种复杂的格式，可以用于各种涉及到元数据、信息丢失和无损压缩、校验、隐写或可视化数据编码的分析解密，都是 Misc 中的一个很重要的出题方向。涉及到的知识点很多（包括基本的文件格式，常见的隐写手法及隐写用的软件）…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Ctf_Wiki}}&lt;br /&gt;
= 图片分析简介 =&lt;br /&gt;
&lt;br /&gt;
图像文件能够很好地包含黑客文化，因此 CTF 竞赛中经常会出现各种图像文件。&lt;br /&gt;
&lt;br /&gt;
图像文件有多种复杂的格式，可以用于各种涉及到元数据、信息丢失和无损压缩、校验、隐写或可视化数据编码的分析解密，都是 Misc 中的一个很重要的出题方向。涉及到的知识点很多（包括基本的文件格式，常见的隐写手法及隐写用的软件），有的地方也需要去进行深入的理解。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;元数据metadata&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 元数据（Metadata） ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;元数据（Metadata），又称中介数据、中继数据，为描述数据的数据（Data about data），主要是描述数据属性（property）的信息，用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
元数据中隐藏信息在比赛中是最基本的一种手法，通常用来隐藏一些关键的 &amp;lt;code&amp;gt;Hint&amp;lt;/code&amp;gt; 信息或者是一些重要的如 &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; 等信息。&lt;br /&gt;
&lt;br /&gt;
这类元数据你可以 &amp;lt;code&amp;gt;右键 --&amp;amp;gt; 属性&amp;lt;/code&amp;gt; 去查看,也可以通过 &amp;lt;code&amp;gt;strings&amp;lt;/code&amp;gt; 命令去查看，一般来说，一些隐藏的信息（奇怪的字符串）常常出现在头部或者尾部。&lt;br /&gt;
&lt;br /&gt;
接下来介绍一个 &amp;lt;code&amp;gt;identify&amp;lt;/code&amp;gt; 命令，这个命令是用来获取一个或多个图像文件的格式和特性。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-format&amp;lt;/code&amp;gt; 用来指定显示的信息，灵活使用它的 &amp;lt;code&amp;gt;-format&amp;lt;/code&amp;gt; 参数可以给解题带来不少方便。[https://www.imagemagick.org/script/escape.php format各个参数具体意义]&lt;br /&gt;
&lt;br /&gt;
=== 例题 ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ctfs/write-ups-2017/tree/master/breakin-ctf-2017/misc/Mysterious-GIF Break In 2017 - Mysterious GIF]&lt;br /&gt;
&lt;br /&gt;
这题的一个难点是发现并提取 GIF 中的元数据，首先 &amp;lt;code&amp;gt;strings&amp;lt;/code&amp;gt; 是可以观察到异常点的。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;GIF89a&lt;br /&gt;
   !!!&amp;quot;&amp;quot;&amp;quot;###$$$%%%&amp;amp;&amp;amp;&amp;amp;&amp;#039;&amp;#039;&amp;#039;((()))***+++,,,---...///000111222333444555666777888999:::;;;&amp;lt;&amp;lt;&amp;lt;===&amp;gt;&amp;gt;&amp;gt;???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~&lt;br /&gt;
4d494945767749424144414e42676b71686b6947397730424151454641415343424b6b776767536c41674541416f4942415144644d4e624c3571565769435172&lt;br /&gt;
NETSCAPE2.0&lt;br /&gt;
ImageMagick&lt;br /&gt;
...&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
这里的一串16进制其实是藏在 GIF 的元数据区&lt;br /&gt;
&lt;br /&gt;
接下来就是提取，你可以选择 Python，但是利用 &amp;lt;code&amp;gt;identify&amp;lt;/code&amp;gt; 显得更加便捷&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;root in ~/Desktop/tmp λ identify -format &amp;quot;%s %c \n&amp;quot; Question.gif&lt;br /&gt;
0 4d494945767749424144414e42676b71686b6947397730424151454641415343424b6b776767536c41674541416f4942415144644d4e624c3571565769435172&lt;br /&gt;
1 5832773639712f377933536849507565707478664177525162524f72653330633655772f6f4b3877655a547834346d30414c6f75685634364b63514a6b687271&lt;br /&gt;
...&lt;br /&gt;
24 484b7735432b667741586c4649746d30396145565458772b787a4c4a623253723667415450574d35715661756278667362356d58482f77443969434c684a536f&lt;br /&gt;
25 724b3052485a6b745062457335797444737142486435504646773d3d&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
其他过程这里不在叙述，可参考链接中的 Writeup&lt;br /&gt;
&lt;br /&gt;
== 像素值转化 ==&lt;br /&gt;
&lt;br /&gt;
看看这个文件里的数据，你能想到什么？&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;255,255,255,255,255...........&amp;lt;/pre&amp;gt;&lt;br /&gt;
是一串 RGB 值，尝试着将他转化为图片&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;from PIL import Image&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
x = 307 #x坐标  通过对txt里的行数进行整数分解&lt;br /&gt;
y = 311 #y坐标  x*y = 行数&lt;br /&gt;
&lt;br /&gt;
rgb1 = [****]&lt;br /&gt;
print len(rgb1)/3&lt;br /&gt;
m=0&lt;br /&gt;
for i in xrange(0,x):&lt;br /&gt;
    for j in xrange(0,y):&lt;br /&gt;
&lt;br /&gt;
        line = rgb1[(3*m):(3*(m+1))]#获取一行&lt;br /&gt;
        m+=1&lt;br /&gt;
        rgb = line&lt;br /&gt;
&lt;br /&gt;
        im.putpixel((i,j),(int(rgb[0]),int(rgb[1]),int(rgb[2])))#rgb转化为像素&lt;br /&gt;
im.show()&lt;br /&gt;
im.save(&amp;quot;flag.png&amp;quot;)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
而如果反过来的话，从一张图片提取 RGB 值，再对 RGB 值去进行一些对比，从而得到最终的 flag。&lt;br /&gt;
&lt;br /&gt;
这类题目大部分都是一些像素块组成的图片，如下图&lt;br /&gt;
&lt;br /&gt;
[[File:./figure/brainfun.png]]&lt;br /&gt;
&lt;br /&gt;
相关题目:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ctfs/write-ups-2016/tree/master/csaw-ctf-2016-quals/forensics/brainfun-50 CSAW-2016-quals:Forensic/Barinfun]&lt;br /&gt;
* [https://github.com/ctfs/write-ups-2017/tree/master/breakin-ctf-2017/misc/A-dance-partner breakin-ctf-2017:A-dance-partner]&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>
	</entry>
</feed>