<div class="._5ce-wx-style" style="font-size:16px;">
<div class="rich_media_content" id="js_content">
<p><strong>0x01 </strong><strong>前言</strong></p>
<p>这是2020年的第一场的ctf比赛,它已经结束两天,虽然好多大学生们都在准备着期末考试,但这个比赛的热度还有持续着呢,由于网络上关于这个比赛的题解,几乎很少或者不太详细,我就整理了一份详细的题解,没有全部记录,舍去了简单题的记录!并且本文中还夹有一些做题技巧,希望帮到大家!</p>
<h1><strong><span style="font-weight:bold;">0x02 Crypto1</span></strong><strong><span style="font-weight:bold;"></span></strong></h1>
<p>下载得到 encode.py,fflag.png,fflag_e.png,flag_e.flag 四个文件</p>
<p><img alt="06114bcc579628c48d5ad1ac1c9e4b07.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-20f0adde9940b1b8827d8ee364d1fb18.png"></p>
<p>我们看下加密脚本encode.py 的内容:</p>
<pre class="blockcode"><code>from itertools import *from key import keyki= cycle(key)fr1 = open("flag.png","rb")fr2 = open("fflag.png","rb")fw1 = open("flag_e.png","wb")fw2 = open("fflag_e.png","wb")for now in fr1: for nowByte in now: newByte = nowByte ^ ord(next(ki)) fw1.write(bytes([newByte]))fr1.close()fw1.close()for now in fr2: for nowByte in now: newByte = nowByte ^ ord(next(ki)) fw2.write(bytes([newByte]))fr2.close()fw2.close()</code></pre>
<p>我们简单分析下加密脚本encode.py:</p>
<p>flag.png的每个字节与迭代器 ki[]中数据循环进行 亦或运算 得到 flag_e.flag fflag.png的每个字节与迭代器 ki[]中数据循环进行 亦或运算 得到fflag_e.png 两个图片的 加密算法 是一样的</p>
<p>思路很明确:要得到 flag.png:</p>
<p>现在我们知道 fflag_e.png 和 fflag.png ,所以我们可以反推出 迭代器 ki[] 中的数据。然后 我们再通过 ki[] 和 flag_e.flag 反推出 flag.png </p>
<p>迭代器 ki[]中数据 = fflag.png的每个字节 与fflag_e.png的每个字节 循环进行 亦或运算 flag.png的每个字节 = 迭代器 ki[]中数据 与 flag_e.flag的每个字节 循环进行 亦或运算</p>
<p>我们可以参考它给的 加密脚本encode.py 来写 出解密脚本decode1.py</p>
<pre class="blockcode"><code>#coding:utf8fflag= open("fflag.png","rb")fflag_e= open("fflag_e.png","rb")fflag_zijie=[]fflag_e_zijie=[]ki=[]for now in fflag: for nowByte in now: fflag_zijie.append(nowByte)#print fflag_zijieprint len(fflag_zijie)#5165for now in fflag_e: for nowByte in now: fflag_e_zijie.append(nowByte)# print fflag_e_zijieprint len(fflag_e_zijie)#5165for i in range(len(fflag_zijie)): ki.append(ord(fflag_zijie[i])^ord(fflag_e_zijie[i]))#print ki#[65, 108, 105, 116, 97, 95, 105, 115, 95, 115, 111, 95, 99, 117, 116, 101] 循环重复print len(ki)#5165fflag.close()fflag_e.close()flag= open("flag.png","wb")flag_e= open("flag_e.png","rb")flag_e_zijie=[]for now in flag_e: for nowByte in now:# 通过迭代器逐行访问 flag_e_zijie.append(nowByte)# 通过迭代器逐字符处理# print flag_e_zijie # 即我们可以得到密钥 key_0=[65,108,105,116,97,95,105,115,95,115,111,95,99,117,116,101]key_0=[65,108,105,116,97,95,105,115,95,115,111,95,99,117,116,101]key=''for i in range(len(key_0)): key+=chr(key_0[i])print key;#Alita_is_so_cute</code></pre>
<p>现在我们得到了密钥 key="Alita_is_so_cute",通过它生成迭代器 ki,进而反推出 flag.png</p>
<pre class="blockcode"><code>#coding:utf8from itertools import *flag= open("flag.png","wb")flag_e= open("flag_e.png","rb")flag_e_zijie=[]key="Alita_is_so_cute"ki=cycle(key)for now in flag_e: for newByte in now: newByte=ord(newByte)^ord(next(ki)) flag.write(bytes(chr(newByte)))flag.close()flag_e.close()</code></pre>
<p>运行,即可得到解密后的flag.png 图片 ,查看图片即可</p>
<p><img alt="b5941136f822eac33877cab901172b47.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-848aec67a024d099fd8be8f8ab520f73.png"></p>
<p>实验学习:CTF-Crypto练习:http://www.hetianlab.com/cour.do?w=1&c=C172.19.104.182015011915525400001</p>
<p>Crypto是CTF竞赛中的主要题型之一,主要考查密码学相关知识点,CTF-Crypto系列实验覆盖了替换密码、RSA、AES等加密算法,以及中间人攻击、中间相遇攻击等知识点。</p>
<p><strong>0x03 </strong><strong>扫雷 mine</strong></p>
<p>我们下载后 得到一个 扫雷游戏的 mine.exe 游戏,打开后</p>
<p><img alt="0892936b0d180b45936175cad80eeb3a.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-5db1da138b38079f8c6d2503bd72d371.png"></p>
<p>我刚看到这题,蒙了,我的天哪,扫雷啊!这怎么逆向,后来发现不过如此!</p>
<p>首先,这个 |
|