标题一、解码和编码
- base64解密和加密及其隐写
(1)base64编码后面常带有等号,且编码中会出现大小写字母,数字,还有加号和斜杠。我常用下面的网站进行解码和编码:
https://the-x.cn/zh-cn/encodings/Ba删掉我se64.aspx
同时也能保存为文件,十分方便
(2)base64隐写
可用python代码(借用【精选】[MISC]Base64隐写_Weird0_的博客-CSDN博客的代码)
def b64ord(char):
if char in 'abcdefghijklmnopqrstuvwxyz':
return ord(char) - 71
elif char in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
return ord(char) - 65
elif char in '0123456789':
return ord(char) + 4
elif char == '+':
return 62
elif char == '/':
return 63
else: return
with open('flag.txt', 'r') as f:
ostr = f.read()
info = ''
flag = ''
count = 0
for i in ostr:
if i == '\n':
count += 1
ostr = ostr.splitlines()
for i in range(0, count):
tmp = ''
if '==' in ostr[i]:
code = b64ord(ostr[i][-3])
tmp = str(bin(code))[-4::]
#由于python会在二进制数前加上'0b',所以采取以下操作去掉
if code <= 1:
tmp = '000' + tmp[-1]
elif 2<= code <= 3:
tmp = '00' + tmp[-2::]
elif 4<= code <= 7:
tmp = '0' + tmp[-3::]
elif '=' in ostr[i]:
code = b64ord(ostr[i][-2])
tmp = str(bin(code))[-2::]
if code <= 1:
tmp = '0' + tmp[-1]
info += tmp
#将得到的结果拼接起来
for i in range(0, len(info), 8):
flag += chr(int(info[i:i+8], 2))
print(flag)
2.其他编码
(1)base编码家族
除常见的base64外,还有base32,base16,base100等,各自有各自的特点
(2)其他编码
除此之外还有各种各样的编码,需要不断地学习积累经验
可以使用工具尝试各种各样的解密与加密,来寻找究竟是哪种编码
标题二、图片隐写及python处理图片
使用工具如下
1.010 Editor:010 Editor是一款功能强大的代码编辑器,可在官网下载**;2.stegsolve;3.Vmcare虚拟机**
。与之有关的考点有
(1)文件头,文件尾
常见文件头和文件尾有
- JPEG 文件头:
FF D8 FF
文件尾:FF D9(jpg文件属性中可隐藏信息)
- PNG 文件头:
89 50 4E 47 0D 0A 1A 0A
文件尾:AE 42 60 82
- ZIP Archive (zip) 文件头:
50 4B 03 04
文件尾:50 4B
- RAR Archive (rar) 文件头:
52 61 72 21
例如文件头尾缺失,文件头尾与文件格式不符等
(附上一题个人花较大精力的)
有题目将全部二进制倒过来,较为简单,倒序输出即可。我写的题是82 60 42 AE,是将每八位二进制一组给倒过来,应当使用python脚本将整个文本倒序,称作切片输出:
with open("input_file_addr",'rb') as input_file: #旧文件
with open("output_file_addr",'rb') as output_file: #新文件
output_file.write(input_file.read()[::-1])
便能得到正确文件
(2)信息隐写
比较简单的比如将base64,或者flag字符串直接复制到文件尾后面,不会影响文件;
也有将文件隐写在文件中,在010中可使用search寻找连续可识别字符串,找到可疑隐写信息(比如(补写)),此时需要使用VMware虚拟机,自行创建一个kali系统,在终端下载一个binwalk或foremost(个人常用binwalk)将终端用cd命令进入文件所在目录,使用:
binwalk -e 114514.png
会出现一系列信息,同时在同一目录下会出现一个文件夹,里面就是分离出来的文件,之后便可实现下一步解题
(3)lsb隐写
此隐写我常用到stegsolve,将图片导入此应用程序,可以点击下面<>一个一个观察图片中是否出现可疑的黑点或者其他,并记下左上角的颜色及序号,在Analyse选项中点击Date Extract,保存为文本文件或者二进制文件(还有Frame Brower可查看gif的每一帧)
除了较为简单的stegsolve,还有在kali系统的steghide工具可以分离jpg中lsb隐写的文件,使用
steghide extract -sf 文件名字,之后输入密码,当然一般没有密码。
(4)盲水印隐写
(待补充)
(5)像素点隐写(python处理图片)
(2023geekchanllenaage)一题xqr给了一张二维码的图片,扫描之后是正常的什么信息都获取不了,拖进010之后看见隐藏了一个png文件,将其分离出来之后,是缺少定位符并且十分模糊的图片,根据大佬的思路,可以选择查看图片的像素点
(用gpt搞了一段代码(不会python╭ (T □ T)╮))
from PIL import Image
#获取图片
image = Image.open('path_to_your_image.jpg')
# 获取图片的宽度和高度
width, height = image.size
# 计算像素点数量
pixel_count = width * height
# 打印结果
print("该图片由", pixel_count, "个像素点组成")
(二维码就不放了)可以得到第一个清晰的图片是有5625个像素点,第二张是有625个,说明第一张的图片像素点九个就组成一个,说明第一张图片长宽是第二张的三倍(属性中也可以看出来)第一种方法是根据大佬的思路,把第一个图片以间隔为3读取像素点,第二个图片直接读取像素点,分别转换成2进制,这样两个图片的数据就一样长, 可以全部异或,最后再把得到的数据转成二维码放大三倍就能出真正的二维码,直接扫出flag
from PIL import Image
#打开图片xqr读取数据
image = Image.open("path1")
width,height = image.size
XQRpixel =""
for y in range(0,height,3):
for x in range(0,width,3):
if image.getpixel((x,y))[0] == 0:#黑色
XQRpixel += "0"
else:
XQRpixel += "1"
#打开另一个图片读取数据
image = Image.open("path2")
width,height = image.size
XORpixel = ""
for y in range(0,height):
for x in range(0,width):
if image.getpixel((x,y))[0] == 0:#黑色
XORpixel += "0"
else:
XORpixel += "1"
#俩数据异或一下再生成图片
data = ""
for i in range(len(XQRpixel)):
data += chr( ((ord(XQRpixel[i]) - 48) ^ (ord(XORpixel[i]) - 48)) + 48)
print(data)
image = Image.new("RGB",(3*width,3*height),(255,255,255))
for y in range(width):
for x in range(height):
if data[y*width + x] == '0':
for i in range(3):
for j in range(3):
image.putpixel((3 * x + i, 3 * y + j), (255, 255, 255))
else:
for i in range(3):
for j in range(3):
image.putpixel((3 * x + i, 3 * y + j), (0, 0, 0))
image.show()
第二种思路是wp中的思路,发现定位角缺失,应该是和图片异或有关
标题三、音频隐写
(使用工具:1、Audacity)
(1)波形图(wav)
当听到一些刺耳的声音可以猜想是波形图,当然也有直接就是莫斯电码,可以选择直接手记。
将音频文件拖入Audacty中,可能会出现波形图例如一上一下的线条,可以联想到二进制数据,将波峰记作1,波谷作为0,再进入下一步。也有可能是摩斯电码,将波形图缩小,可以看到明显的一长一短和间隔,可以手记。
(2)频谱图
可以在旁边的选项中打开频谱图,一些简单的题应该可以直接看到flag
(3)(做的音频题较少,等以后收集)
标题四、docx文件隐写
有少数题将flag隐藏在docx文件中
flag可以放在批注中;
也可以放在扉页中,将扉页全选,再改变颜色,就可以出现;
还有一些间隔中不正常的回车,可以用ctrl+f搜到,也可以用选择并改变颜色;
flag也可以放在一些字体的名称,看见选择那些与正文字体不符的字,就可以在上面看见字体名称。
标题五、流量分析(不会)
(以后补充)
标题六、压缩包隐写
(1)伪压缩
将压缩包放入010中,观察其字节流,压缩源文件数据区中50 4B 03 04 是其文件头标志,随后是两位十六进制,说明解压所需版本,之后就是四位数字是全局方式位标记,四个数字中第二个是奇数代表是加密,偶数2代表是未加密。压缩源文件目录区中 50 4B 01 02 是开头,后面八位数字是代表了压缩和解压所需的版本,后面四位数字也是全局方式位标记,也是第二位数字代表了是否加密。之后将两者的决定是否加密的数字进行比较。如果两者都是偶数,那早就直接打开了;如果前偶后奇,说明是伪加密,伪加密的处理方法很多:
1,比较简单的有用linux系统中的binwalk -e指令可以直接无视伪加密