问候所有habrachitateli。 自从我
向希望解决我的CTF的人提出建议以来,已经过去了三个星期,我认为是时候发布任务分析了。 根据我自己的经验,我知道在这样的情况下花了很多时间来完成一项任务,但是却找不到解决方案,因此我发布了任务分析报告,这是一种耻辱。 解决方案分为多个步骤,并隐藏在扰流器下,因此在执行任何步骤后,您都可以尝试自己解决问题,克服困难。
XT_CTF_01XT_TASK_101第一步打开档案并查看长文件夹名称。 最后一个文件夹包含文件,但没有密码,其内容不可用。
我们写出文件夹的名称:
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
2346ad27d7568ba9896f1b7da6b5991251debdf2
e3cbba8883fe746c6e35783c9404b4bc0c7ee9eb
bef21e9bfcf9fab0a5aebd46a735efe5434da96b
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
我们将这些序列导入Google,并迅速从以下单词中找出这是sha1:
password
hash
1000
letters
a
综上所述,我们假设密码是1000个字母“ a”的哈希。 如果将sha1用作单词,那么我们将在这里尝试-291e9a6c66994949b57ba5e650361e98fc36b1ba。 我们提取文件,确保密码正确。
第二步检查文件显示它们都是按照大致的原则组成的:xt格式的名称+数字,几行的内容,其中第一个是几个字母,第二个是十六进制字符序列。 考虑十六进制序列是没有意思的,因为它们每个包含79个字符(文件xt121785230414240585522142219912(其中有58个字符除外))-这些绝对不是哈希,也不是编码的东西。
由于到处都是相同的,并且只有一个文件较少,因此可以假定必须组合所有十六进制序列,而较小的部分只是最后一部分。 仍然需要了解顺序。 可以使用名称,但不会产生任何有趣的结果,但是如果您注意文件的第一行,则还可以通过使用注视来找到样式。
在这里,我将说明一些行:he,li,n,o,ne,mg,si,ca,cu,zn,br,kr,ag ...
当它们靠近时,更容易识别其中的化学元素。 我们打开周期表并将十六进制序列收集到一个文件中(总共有53个文件,这是带有i符号的最后一部分的编号,它对应于Yod的53个元素)。
结果是带有绿色矩形的PNG文件。
第三步元数据不太可能以清晰的形式包含在文件中,因为我们看到了十六进制表示形式中的所有字节。 因此,我们将处理图像本身。 您可能会注意到(当然不是用眼睛,而是用工具)实际使用了多种颜色。 我们将使用填充并查看下一步指南。

第4步我们对sha1所有文件名进行哈希处理,并按照上一步中的顺序排列它们。
696e7400b8a8c7da1c52e63550ddfdf8ae03be73
206d6100f4eb7c768890e8502db2bdeb81718301
696e2800f1c5c0df7676667ffca16856e808f9dd
297b69008e0d05b67df33c751da3c6f17a3fdb9d
6e742000bf96cea16e609731aa7397ac2b9f7b15
613d3400d2fedbf43ad7c43d678382d2ef83dde8
36303900b909f396c69c6d47ccb623cc83d5e2ea
313132007f6fdde9d3abad5545f44b2d2661b0be
3b696e0002582f22cab7aeaf730680b87780279a
74206200267e505a621cf264e303d3df63222fa7
3d343600ac031f166103b5319a273a867d5247ae
36393700d9e521b0e0d488b47fde51e5f5f9650d
37323b00bdf3caa241b2936f0355ad89e420389c
696e7400a1f9f8e62cd64c8e25d852e433bda80c
20633d009932d3b69b7a74296c7b75894bcddbc1
373639000ca31548a80fe28adf263bbe89f03069
33393400f56920f247d4d66798bb2c54e3db668c
373b6900222283ee79a5e7e3e79d55d4b159ffb1
6e742000fac60ac1f78aa90201e98b30a9c4adbc
643d3700b55bc0dda8bd748983716018b29fbd6f
38323300176db95a8aa4aaf1770346c353fd4753
32313400644e234a3899bd84e9f7d61a12bfecab
3b696e00654b4b7d8fb3b022777c6346342eba91
742065009720d2693f833788e69a6641e8de22f6
3d363800b1e40956ec8ca6a64013c8a651eff0f7
3435340008b5419f5139553c85b605009e3fb343
38393b004e5d66b6980c7cf14dc9bf0acf09e444
696e7400e648ffad4cde46b4d845f1ffad075da5
20663d00b9bdab8cb8721581f5aa8a2c2522d9de
3334330054fb4abaf144e818ec1199b7b4ffec47
34353900378490c3ba53a356327af1bbb2d2c8b0
313b69008803024e711baf3695402d3a13e0c905
6e7420006434f491ab51a923995a3daf56a65f5e
673d3800c5198ae1565cc5744d23ac492f6d2506
3231380000217a2c380bf9c9a6e122b1c01e90ea
373339003ef4f423f0d9c54ea5d8fbe4d8bf518c
3b70720073caad02c9cba60debf81f72c0ac23ad
696e7400d9ddb857a7608947aae60ed6d054c039
6628220061a3a81dcc20ce43903a18cea28b77db
2573250065285f647ed3e22a9233974ac24509a1
73257300678138427cc07ee072c987583db2fc5e
25732500d183d5303ed6bda0606eb5e4ccc1e7c8
73257300c5e9d7bfdb76b5fee122fe57bc8aa81a
25735c003675c4f732d95ae6a0d9bcc6769f94ca
6e222c0088503423d1f56148bbf2573a6e2e0518
26612c007c8d1d6b90d252fa7b2084bd8695a8f9
26622c00ec96a4edbdeb286484af38395a3fc928
26632c004a1db36cdef743283e6bc853b6995555
26642c00dd66db502138413e272deb2da78d4f57
26652c00bb1785b4e41444da4230b602f1860557
26662c00e739c24f55c0899b8eae2a948622c7d7
26672900f4b4843d0056571d293bec879cd1968f
3b7d20006750ebb44ffd784dc8afdd5b0f76816a
如果您用笔做所有事情,那么很快您会发现4个字节始终为零,在它的左边是一些打印字符。 我们只留下它们,收集在一行中。
我们得到以下行:
int main(){int a=4609112;int b=4669772;int c=7693947;int d=7823214;int e=6845489;int f=3434591;int g=8218739;printf("%s%s%s%s%s%s%s\n",&a,&b,&c,&d,&e,&f,&g);}
我们在C中运行此代码,结果得到一个标志。 我们验证哈希以再次确认-是的,这是所需的标志。
XT_TASK_102第一步打开档案,立即以十六进制查看文件名。 文件内容不可用,因为需要密码。 让我们开始扭曲名称。
除了扩展名为64F00000(更短)的文件外,所有名称的长度均相同。 通常,扩展名是奇怪的,非典型的。 但是,很容易注意到所有文件的扩展名长度都不同,从1到7。扩展名最长的文件名最短。 逻辑上假设您需要根据文件扩展名的长度组合所有十六进制序列。
由于前两个字节(0x37 0x7a-7z),我们将字节序列分开保存,这是一个7z归档文件。
第二步第二个归档文件再次受到密码保护,但是这次我们的文件名短而内容小。 存档查看器最好显示文件元数据,即它们的校验和。
尽管crc的搜索效果很差,但您仍然可以检查所有序列,并发现在crc 90c1667d的要求下,仍然有“四个”的原型。 或仅将三个字节的序列粗暴化为最短的文件。 任何一种方法都导致文件内容易于安装的事实-它们是英文数字“一个”,“两个”,“三个”,“四个”,“五个”和“六个”。 除了按此顺序加入文件名外,我们别无选择。 我们得到VVNFIENSQzMy。 我们检查第一个档案的密码-适合。
第三步观察求解器(甚至在输入密码之前)可能会注意到存档文件中的crc32具有相当特定的形式,即0xC0DExxxx。 CTF中没有此类匹配项。
文件本身是带有文本的PNG图像。 由于在每个步骤中我们都考虑了crc32,因此值得继续这样做。 在检查了图像中的第一个文本(例如,qnGyaQBc)之后,很明显我们在正确的轨道上,因为crc32为0xc0de0831。 我们从剩余的所有内容中考虑crc,并将其收集在一个堆中。
图片的CRC:
0xc0de094e
0xc0de054e
0xc0de0d7d
0xc0de0343
0xc0de0b52
0xc0de0734
0xc0de0154
来自文本的CRC:
0xc0de0831
0xc0de0430
0xc0de0c35
0xc0de027b
0xc0de0a33
0xc0de0654
0xc0de0058
我们删除了一般部分,从两个字节的第一个字节的值开始,从0x00到0x0d。 看起来是序列号。 我们收集,我们收到一个标志。 我们检查sha1并另外确保一切正确。
XT_QUEST_103清单1给定一个数字序列。 我们只需从卡中取出带有指示数字的字符,从头开始编号并跳过换行符即可。 编写此动作的脚本很有意义-将需要多次。
答案: awES0me_sTart
list2很多数字。 文件名表明您需要知道数字5。我们不仅计算5位数,而且还计算从0到7的所有数字。我们得到的顺序为:135、95、61、27、58、57、85、190。我们得到了答案。
答案: b1g_sTEp
清单3我们看到一个带有多项式的图片。 我们根据建议的文件名将n从0替换为9,得到一个序列,该序列叠加在卡上时会给出答案。
答: coOl2math!
清单4奇怪的文件名和奇怪的内容。 如果您搜索fdhvdu,那么在不相关的结果中,您可以找到一个指示,表明由凯撒密码编码的这个凯撒单词是3个字母字符的移位。 解码内容后,我们看到罗马数字。 我认为很清楚如何处理数字序列。
答案: dOinG_w3ll
清单5任务的内容从字面意义上说出需要做什么。 散列文件,我们得到20个字节,这可以解释为卡的数字序列。
答案: exceLlenT_impECc4ble
视觉1我们将任务文本叠加在地图文本上,此外,我们将其按字面意义“叠加”。
答: fa5t!一
视觉2问题的文本中有840个零和一。 由于主题是视觉的,因此我们试图获得一些视觉上的表现。 如果将文本分成5行,每行168个字符,则可以看到导致答案的顺序。

答案:
go_fUrth6r 视觉3文件名非常直接地告诉我们有关多米诺骨牌的信息。 我们尝试连接六角关节并获得两个链条。 一个是圆形的,没有意思,第二个可以看作是一张卡的数字序列。 结果是答案或答案的反序。
答案: heRoic_effOr7s
视觉4我们给了十六进制数,其中明显有许多位单元。 我们用计算器翻译数字,然后再次按字面意思“强加”。 位零标记所需的字符。 我们从上到下,从左到右阅读符号。
答: ih8BiTs!
视觉5文件名再次提示。 “ B3s23”是游戏寿命的配置名称。 我们使用一些在线模拟器,输入初始位置,等待五步,然后读取行中活细胞的数量(您需要做的只是告诉文件名)。
答案: jUsT_9ood
编1在问题的文本中,我们看到了诸如二维图灵机之类的东西,只需要做。
答案: k1l0_Byte
编2该任务显式提供了Brainfuck的代码,但是如果您在模拟器上运行它,程序将显示一条消息,说明该任务与Brainfuck无关。 是的,您只需要计算每行中的字符数并将其应用于地图即可。
答: l1kEl1On!
编3再次动脑,但这一次结论与我们一致。 卡所需的顺序位于内存中。
答案: moRe_1nfO2me
编4然后干了。 我们启动,程序向我们显示一条消息,提示您没有密码。 内存中也没有有趣的东西。 必须了解代码。
该代码由三行组成。 第一个设置一些值,第二个也设置,第三个设置在屏幕上显示内存状态。
我们删除第二行,运行并获得卡的顺序。
答案: nO_baRr13rs
编5最后的任务。 再次使用Brainfuck代码。 我们看到一个指示,我们需要从映射的某些行和代码中计算一些函数。 我们运行代码,这在内存中留下了一个提示,即所需的功能是对base64进行解码。 我们检查地图上的线,如果从base64解码将发生什么情况。 突然,KysrWz4rPis8PC1d字符串在+++ [> +> + <<-]中解码。 我们使用此附加代码运行代码,并查看在地图的每一行中嵌入所有字符的指令。 结果将是最后一个密码。
答案: ofF1ci4l!
仅此而已。 对于所有与会人员-谢谢,如果您有任何疑问,请在评论中提问。