<?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=%E8%BF%B7%E5%AE%AB%E9%97%AE%E9%A2%98</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=%E8%BF%B7%E5%AE%AB%E9%97%AE%E9%A2%98"/>
	<link rel="alternate" type="text/html" href="https://game.etao.net/w/index.php?title=%E8%BF%B7%E5%AE%AB%E9%97%AE%E9%A2%98&amp;action=history"/>
	<updated>2026-05-05T20:02:51Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://game.etao.net/w/index.php?title=%E8%BF%B7%E5%AE%AB%E9%97%AE%E9%A2%98&amp;diff=236&amp;oldid=prev</id>
		<title>127.0.0.1：​/* Volga Quals CTF 2014: Reverse 100 */</title>
		<link rel="alternate" type="text/html" href="https://game.etao.net/w/index.php?title=%E8%BF%B7%E5%AE%AB%E9%97%AE%E9%A2%98&amp;diff=236&amp;oldid=prev"/>
		<updated>2023-07-02T08:20:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Volga Quals CTF 2014: Reverse 100&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年7月2日 (日) 16:20的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l56&quot;&gt;第56行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第56行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;RDDRRRRRRRRRRRRRRRRRRDDDDDDDDDDRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRUUUUUULLLLLLLLLDDRRRRRRDDLLLLLLLLLLLLLUURRRUUUUURRRRRRRRRRRRRRRRRRRRRRRRRRDDDDDDDDDDDDDDDRRRRRRRRRRRRRRRRUUUUUUUUUUUUULLLLLLLUUUURRRRRRRRRRRRDDDDDDDDDDDDDDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLUUUURRRRRRRRRRRRRRRRRRRRRDRRRRRRRRRRRRRRUUULLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDRRRRRUUURRRRDDDDDLLLLLLLLLDDDDRRRRRRRRRRUUURRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRDDDDDDRRRRRRRRRRRRRRRRRRRRRRRRRRRR&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;RDDRRRRRRRRRRRRRRRRRRDDDDDDDDDDRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRUUUUUULLLLLLLLLDDRRRRRRDDLLLLLLLLLLLLLUURRRUUUUURRRRRRRRRRRRRRRRRRRRRRRRRRDDDDDDDDDDDDDDDRRRRRRRRRRRRRRRRUUUUUUUUUUUUULLLLLLLUUUURRRRRRRRRRRRDDDDDDDDDDDDDDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLUUUURRRRRRRRRRRRRRRRRRRRRDRRRRRRRRRRRRRRUUULLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDRRRRRUUURRRRDDDDDLLLLLLLLLDDDDRRRRRRRRRRUUURRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRDDDDDDRRRRRRRRRRRRRRRRRRRRRRRRRRRR&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 参考链接 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 参考链接 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>127.0.0.1</name></author>
	</entry>
	<entry>
		<id>https://game.etao.net/w/index.php?title=%E8%BF%B7%E5%AE%AB%E9%97%AE%E9%A2%98&amp;diff=235&amp;oldid=prev</id>
		<title>127.0.0.1：​创建页面，内容为“{{Ctf_Wiki}} = 迷宫问题 =  迷宫问题有以下特点:  * 在内存中布置一张&amp;quot;地图&amp;quot; * 将用户输入限制在少数几个字符范围内. * 一般只有一个迷宫入口和一个迷宫出口  布置的地图可以由可显字符(比如&lt;code&gt;#&lt;/code&gt;和&lt;code&gt;*&lt;/code&gt;)组合而成(这非常明显, 查看字符串基本就知道这是个迷宫题了.), 也可以单纯用不可显的十六进制值进行表示. 可以将地图直接组成一…”</title>
		<link rel="alternate" type="text/html" href="https://game.etao.net/w/index.php?title=%E8%BF%B7%E5%AE%AB%E9%97%AE%E9%A2%98&amp;diff=235&amp;oldid=prev"/>
		<updated>2023-07-02T08:19:41Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“{{Ctf_Wiki}} = 迷宫问题 =  迷宫问题有以下特点:  * 在内存中布置一张&amp;quot;地图&amp;quot; * 将用户输入限制在少数几个字符范围内. * 一般只有一个迷宫入口和一个迷宫出口  布置的地图可以由可显字符(比如&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;)组合而成(这非常明显, 查看字符串基本就知道这是个迷宫题了.), 也可以单纯用不可显的十六进制值进行表示. 可以将地图直接组成一…”&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;
迷宫问题有以下特点:&lt;br /&gt;
&lt;br /&gt;
* 在内存中布置一张&amp;amp;quot;地图&amp;amp;quot;&lt;br /&gt;
* 将用户输入限制在少数几个字符范围内.&lt;br /&gt;
* 一般只有一个迷宫入口和一个迷宫出口&lt;br /&gt;
&lt;br /&gt;
布置的地图可以由可显字符(比如&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;)组合而成(这非常明显, 查看字符串基本就知道这是个迷宫题了.), 也可以单纯用不可显的十六进制值进行表示. 可以将地图直接组成一条非常长的字符串, 或是一行一行分开布置. 如果是一行一行分开布置的话, 因为迷宫一般都会比较大, 所以用于按行(注意, 布置并非按顺序布置, 每行都对应一个具体的行号, 你需要确定行号才能还原迷宫地图)布置迷宫的函数会明显重复多次.&lt;br /&gt;
&lt;br /&gt;
而被限制的字符通常会是一些方便记忆的组合(不是也没办法), 比如&amp;lt;code&amp;gt;w/s/a/d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h/j/k/l&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;l/r/u/d&amp;lt;/code&amp;gt;这样的类似组合. 当然各个键具体的操作需要经过分析判断(像那种只用一条字符串表示迷宫的, 就可以用&amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;键表示向右移动&amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;个字符这样). 对于二维的地图, 一般作者都会设置一个&amp;lt;code&amp;gt;X坐标&amp;lt;/code&amp;gt;和一个&amp;lt;code&amp;gt;Y坐标&amp;lt;/code&amp;gt;用于保存当前位置. 我们也可以根据这个特点来入手分析.&lt;br /&gt;
&lt;br /&gt;
一般情况下, 迷宫是只有1个入口和1个出口, 像入口在最左上角&amp;lt;code&amp;gt;(0, 0)&amp;lt;/code&amp;gt;位置, 而出口在最右下角&amp;lt;code&amp;gt;(max_X, max_Y)&amp;lt;/code&amp;gt;处. 但也有可能是出口在迷宫的正中心, 用一个&amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;字符表示等等. 解答迷宫题的条件也是需要根据具体情况判断的.&lt;br /&gt;
&lt;br /&gt;
当然迷宫的走法可能不止1条, 也有情况是有多条走法, 但是要求某一个走法比如说代价最小. 那么这就可以变相为一个算法问题.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;volga-quals-ctf-2014-reverse-100&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Volga Quals CTF 2014: Reverse 100 ==&lt;br /&gt;
&lt;br /&gt;
接下来我们以这道题进行示例, 这是一道简单的迷宫题. 该题对地图按行乱序布置, 使用的字符是&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
对应的&amp;lt;code&amp;gt;crackme&amp;lt;/code&amp;gt;可以点击此处下载: [https://github.com/ctf-wiki/ctf-challenges/blob/master/reverse/maze/2014_volga_quals/rev100 rev100]&lt;br /&gt;
&lt;br /&gt;
对应的&amp;lt;code&amp;gt;idb&amp;lt;/code&amp;gt;可以点击此处下载: [https://github.com/ctf-wiki/ctf-challenges/blob/master/reverse/maze/2014_volga_quals/rev100.i64 rev100.i64]&lt;br /&gt;
&lt;br /&gt;
[[File:./figure/setmaze.png|setmaze.png]]&lt;br /&gt;
&lt;br /&gt;
我们可以到&amp;lt;code&amp;gt;.rodata&amp;lt;/code&amp;gt;段用光标选择所有的地图字符串, 按下&amp;lt;code&amp;gt;shift+E&amp;lt;/code&amp;gt;提取所有的地图数据.&lt;br /&gt;
&lt;br /&gt;
[[File:./figure/extract_maze.png|extract_maze.png]]&lt;br /&gt;
&lt;br /&gt;
但是目前提取到的地图字符串, 从上往下并非是按顺序的, 因此我们需要回到IDA生成的伪C代码, 获取行号并重新排序组合起来.&lt;br /&gt;
&lt;br /&gt;
最后得到的完整地图如下:&lt;br /&gt;
&lt;br /&gt;
对应的&amp;lt;code&amp;gt;迷宫地图文件&amp;lt;/code&amp;gt;可以点击此处下载: [https://github.com/ctf-wiki/ctf-challenges/blob/master/reverse/maze/2014_volga_quals/maze_array.txt maze_array.txt]&lt;br /&gt;
&lt;br /&gt;
[[File:./figure/maze_origin.png|maze_origin.png]]&lt;br /&gt;
&lt;br /&gt;
再来看迷宫移动所需要的字符:&lt;br /&gt;
&lt;br /&gt;
[[File:./figure/choice.png|choice.png]]&lt;br /&gt;
&lt;br /&gt;
这里我们知道, 可以使用的字符有&amp;lt;code&amp;gt;L/R/U/D&amp;lt;/code&amp;gt;, 分别对应于&amp;lt;code&amp;gt;左/右/上/下&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
再往下看&lt;br /&gt;
&lt;br /&gt;
[[File:./figure/check.png|check.png]]&lt;br /&gt;
&lt;br /&gt;
通过调试是可以知道, 这里其实是每次在用户输入&amp;lt;code&amp;gt;L/R/U/D&amp;lt;/code&amp;gt;后, 先打印一次你的输入, 然后打印对应的&amp;lt;code&amp;gt;X/Y坐标&amp;lt;/code&amp;gt;. 而最后的判定成功的条件, 就是当&amp;lt;code&amp;gt;pos_x == 89 &amp;amp;amp;&amp;amp;amp; pos_y == 28&amp;lt;/code&amp;gt;. 那么我们就可以根据上述信息, 获得走出迷宫的路径.&lt;br /&gt;
&lt;br /&gt;
[[File:./figure/maze.jpg|maze.jpg]]&lt;br /&gt;
&lt;br /&gt;
最后得到的迷宫路径就是&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;RDDRRRRRRRRRRRRRRRRRRDDDDDDDDDDRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRUUUUUULLLLLLLLLDDRRRRRRDDLLLLLLLLLLLLLUURRRUUUUURRRRRRRRRRRRRRRRRRRRRRRRRRDDDDDDDDDDDDDDDRRRRRRRRRRRRRRRRUUUUUUUUUUUUULLLLLLLUUUURRRRRRRRRRRRDDDDDDDDDDDDDDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLUUUURRRRRRRRRRRRRRRRRRRRRDRRRRRRRRRRRRRRUUULLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDRRRRRUUURRRRDDDDDLLLLLLLLLDDDDRRRRRRRRRRUUURRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRDDDDDDRRRRRRRRRRRRRRRRRRRRRRRRRRRR&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 参考链接 ==&lt;br /&gt;
&lt;br /&gt;
* [&amp;lt;nowiki/&amp;gt;[https://singularityctf.blogspot.com/2014/03/volgactf-quals-2014-writeup-reverse-100.html VolgaCTF Quals 2014 writeup - Reverse-100]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Reverse_Overview]]&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>
	</entry>
</feed>