平台:
http://www.moctf.com/challenges
由于我自己是个萌新,所以一方面写下来记住,一方面写给更加萌新的萌新,哈哈哈
这里少两题:百变flag、奇怪的01
参考一个博主的:
https://blog.csdn.net/weixin_34050389/article/details/88208331
图片另存为本地,用WInhex打开,拖到最下面:
moctf{e4sy_1ma9e_m1sc}
Winhex一下发现最后面有个flag.txt
其实感觉像这样的图片题上来没什么思路一般属性一下或者用Winhex看一看总会发现一点东西,无非隐写那些事
没什么说的,binwalk一下,foremost一下:
在这里我发现一件事,不知道是不是bug,有些Zip压缩包在Windows下打不开提示要密码,但是把文件放到kali下提,出来是没问题的,也可能是我的错觉?正规思路应该是用Winhex将伪加密的09改为00,另存为解压得到flag。
可以看到二维码的黑白反过来了,这里将黑白翻转的方法很多:
1、PS中在上方菜单栏,点击“图像”进入调整选择反向即可,或者快捷键“Ctrl+i”
由于本人没有PS并且很懒,所以没图
2、用Stegsolve打开,向后翻一下就会发现黑白反过来了
扫描图中二维码,可以得到flag:
moctf{qr_code_1s_1n_1t}
当然这里方法也很多
可以用手机扫,也可以用网上的屏幕二维码识别工具:
这是一个跳得非常快的GIF,但是很尴尬运气好的时候直接截图截到了。。。
(我不会告诉你其实这也是一个sao套路的。。。)
正解:
图片另存为,网上搜“在线GIF分解”,上传图片,分解:
或者用Stegsolve工具打开GIF,往后翻就可以了:
直接运行一下代码就出来了:
把包下下来,用wireshark打开:
用tcp筛选然后追踪流后没有发现flag:
将0改为1后发现flag:
爆破题,根据题目提示密码的前6位是meimei
用工具Advanced Archive Password Recovery进行爆破:
由于不知道后面有多少位,只能一次一次试,试到四位的时候出来了:
得到flag
moctf{Y0u_@re_A_g00d_man}
哇,直接出flag了,好简单:
解压得到一个图片和一个压缩包,图片估计是隐写,得到压缩包的密码
emmmm。。。感觉套路都差不多,上Winhex、binwalk、foremost三连看看
好吧,事实上并不好使。。。。看来要变成四连了:用stegsolve中LSB隐写分析一下
保存文件保存为bin。。。
png的头文件八个字节为
89 50 4E 47 0D 0A 1A 0A
将多余的删掉,另存为得到一张图片
def encryption(str, n):
cipher = []
for i in range(len(str)):
if str[i].islower():
if ord(str[i]) < 123-n:
c = chr(ord(str[i]) + n)
cipher.append(c)
else:
c = chr(ord(str[i]) + n - 26)
cipher.append(c)
elif str[i].isupper():
if ord(str[i]) < 91-n:
c = chr(ord(str[i]) + n)
cipher.append(c)
else:
c = chr(ord(str[i]) + n - 26)
cipher.append(c)
else:
c = str[i]
cipher.append(c)
cipherstr = ('').join(cipher)
return cipherstr
#获得用户输入的明文
#此代码只对字母进行转换
print("请输入字符串:")
plaintext = input()
#下面这句中的数字要自己改完再运行,位移多少位就写多少,可以为负数(负数相当于解密)
ciphertext = encryption(plaintext, 7)
print(ciphertext)
在这里再提供一个所有字母数字符号的(小萌新表示还是荡的,但是已经不记得作者了。。。):
#import os
#-*-coding:utf-8-*-
#============================================================================
# 凯撒密码(caesar)是最早的代换密码,对称密码的一种,本代码是字母数字符号统统转
# 算法:将每个字母用字母表中它之后的第k个字母(称作位移值)替代
#============================================================================
def encryption():
str_raw = input("请输入明文:")
k = int(input("请输入位移值:"))
#输入的时候位移值其实也可以为负数,但是为了理解方便不用负数,将负数变成解密选项
str_change = str_raw.lower()
str_list = list(str_change)
str_list_encry = str_list
i = 0
while i < len(str_list):
if ord(str_list[i]) < 123-k:
str_list_encry[i] = chr(ord(str_list[i]) + k)
else:
str_list_encry[i] = chr(ord(str_list[i]) + k - 26)
i = i+1
print ("加密结果为:"+"".join(str_list_encry))
def decryption():
str_raw = input("请输入密文:")
k = int(input("请输入位移值:"))
str_change = str_raw.lower()
str_list = list(str_change)
str_list_decry = str_list
i = 0
while i < len(str_list):
if ord(str_list[i]) >= 97+k:
str_list_decry[i] = chr(ord(str_list[i]) - k)
else:
str_list_decry[i] = chr(ord(str_list[i]) + 26 - k)
i = i+1
print ("解密结果为:"+"".join(str_list_decry))
while True:
print (u"1. 加密")
print (u"2. 解密")
choice = input("请选择:")
if choice == "1":
encryption()
elif choice == "2":
decryption()
else:
print (u"您的输入有误!")
解密后得到
m_omc7t_f8{rAor43h_eyr0?u}
看着格式就不对,栅栏一下得到:
哇,终于出来了,好感动。。。
官方题没有了,好像崩溃了?后期补
发现要密码,但是没有任何关于密码的提示,试一下伪加密,Winhex修改一下:
另存为,打开得到图片
但是不知道密码,所以还是要一步步来,修改高度
得到:moctf{Int3resting_piXe1}
要密码,伪加密,WInhex修改,要修改两处
解压,得到password.txt和flag.zip,压缩包要密码,那应该就隐藏在txt中了,sublime看一下:
#-*- coding:utf-8 -*-
from PIL import Image
#这里可能需要通过pip install PIL命令安装Python的PIL库,强烈建议直接kali:自带库,而且安装库也方便
import re
x = 150 #x坐标 通过对txt里的行数进行整数分解
y = 150 #y坐标 x*y = 行数
#猜测的行数要改好,不要漏了
im = Image.new("RGB",(x,y))#创建图片
file = open('misc100.txt') #打开rbg值文件
#通过一个个rgb点生成图片
for i in range(0,x):
for j in range(0,y):
line = file.readline()#获取一行
rgb = line.split(",")#分离rgb
im.putpixel((i,j),(int(rgb[0]),int(rgb[1]),int(rgb[2])))#rgb转化为像素
im.show()
若pip install PIL命令不好用的话,推荐一篇参考
Python安装PIL库的参考:https://www.cnblogs.com/sharon123/p/6873865.html
现在的力量不足,等升级了再来补上