从0开始学CTF[MISC篇]
Bugku 蜘蛛侠【MISC】
大家好,作为一个CTF方面的小白,以后我也希望每做一次题目就和大家分享分享自己的解题过程
今天我们要讲的是:
首先看题:
尝试点一点会发现需要密码,然后我们会发现在右边有这样一些奇怪的东西,我也不认识,不认识咋办,直接复制上网看看就可以了
得到规律了,那么这就是数字4 4 1 10 6 9 9 8 10 1
不过别着急,我们会发现下面还有几个单词:capital_num
其实就是大写单词的意思,那么我们转换一下就可以了
得到:肆肆壹拾陆玖玖捌拾壹
就可以得到密码了,输入密码就可以得到py文件和两张照片,我们先观察一下Py代码
import os
data_jpg = open('key.jpg','wb')
def jpg_encode():
with open('file.jpg','rb') as handle:
size = os.path.getsize('file.jpg')
print(size)
i = 0
while i<size:
bytedata = handle.read(1)
process_data = data_encode(bytedata)
data_write(process_data)
i = i + 1
def data_encode(bytedata):
data = int.from_bytes(bytedata,byteorder='big')
if (data % 2 == 0):
data = (data + 1) ^ 128
else:
data = (data - 1) ^ 128
data = bytes([data])
return data
def data_write(process_data):
data_jpg.write(process_data)
if __name__ == '__main__':
jpg_encode()
data_jpg.close()
好吧,我老实承认对于python库里的一些函数我不是很了解,因为我不是很习惯用Py,作者还给我们留下了一张字条
哦哦,那我大概懂了,逆向解码嘛,解码就是一个返回的过程,既然代码都给我们了我们就简易修改一下将key.jpg和file.jpg互换,还有bytedata和data换一换就可以了,然后我们就可以得到这样的代码,我随意修改了一下函数名那里问题不大
import os
data_jpg = open('file.jpg', 'wb')
def jpg_code():
with open('key.jpg', 'rb') as handle:
size = os.path.getsize('key.jpg')
print(size)
i = 0
while i < size:
bytedata = handle.read(1)
process_data = data_decode(bytedata)
data_write(process_data)
i += 1
def data_code(data):
bytedata = int.from_bytes(data, byteorder="big")
if bytedata % 2 == 0:
bytedata = (bytedata + 1) ^ 128
else:
bytedata = (bytedata - 1) ^ 128
data = bytes([bytedata])
return data
def data_write(process_data):
data_jpg.write(process_data)
if __name__ == '__main__':
jpg_code()
data_jpg.close()
将文件夹里的key放在和py同一个文件夹里就可以得到一个新的jpg
用常见的方法打开file
一堆乱码,我们随意翻找一下发现了最后有几个颜色不一样的,大胆猜测就是这些,我们再解码一下尝试一下
base的我一个一个尝试到最后发现是base92,得到:
好熟悉,哦哦这个我以前还用到过这个工具,嘿嘿还好没删除
然后我们打开flag.jpg嘛,因为毕竟作者给它命名叫flag肯定是有他的道理的,前面的jpg我们都用过了,应该就是这个了
最后就可以得到啦,输入Bugku就可以了
嘿嘿,你学废了嘛~