1 大白**

修改高度

下载得到dabai.png。根据提示,十六进制下改高度。Windows下由于不会验证CRC,因此改任意大值均可。若需要计算确切的高度值,可以使用如下脚本:

import struct
import binascii
from Crypto.Util.number import bytes_to_long

img = open('C:/Users/Administrator/Desktop/dabai.png', 'rb').read()

for i in range(0xFFFF):
stream = img[12:20] + struct.pack('>i', i) + img[24:29]
crc = binascii.crc32(stream)
if crc == bytes_to_long(img[29:33]):
print(hex(i))

梅花香之苦寒来

根据坐标画图

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/5/20 11:22
# @Author : upload
# @File : 11.py
# @Software: PyCharm

with open('D:\\oneDrive云存储\\OneDrive\\桌面\\misc\\梅花香之苦寒来\\1.txt', 'r') as h:
h = h.read()
with open('./ascii.txt', 'a') as a:
for i in range(0, len(h), 2):
tmp = '0x'+h[i]+h[i+1]
tmp = int(tmp, base=16)

a.write(chr(tmp))

from PIL import Image

d = open('C:/Users/Administrator/Desktop/1.txt', 'r')
w = 280
h = 280
img = Image.new('RGB', (w, h), (255, 255, 255))

while True:
s = d.readline()
if not s:
break
x = int(s.split(',')[0][1:])
y = int(s.split(',')[1][:-2])
img.putpixel((x, y), (0, 0, 0))
img.show()
img.save('C:/Users/Administrator/Desktop/1.png')

[BJDCTF2020]一叶障目

CRC碰撞脚本

#coding=utf-8
import zlib
import struct
#读文件
file = '1.png' #注意,1.png图片要和脚本在同一个文件夹下哦~
fr = open(file,'rb').read()
data = bytearray(fr[12:29])
crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
#crc32key = 0xCBD6DF8A #补上0x,copy hex value
#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') #hex下copy grep hex
n = 4095 #理论上0xffffffff,但考虑到屏幕实际,0x0fff就差不多了
for w in range(n):#高和宽一起爆破
width = bytearray(struct.pack('>i', w))#q为8字节,i为4字节,h为2字节
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
#print(data)
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print(width,height)
#写文件
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+'.png','wb')#保存副本
fw.write(newpic)
fw.close

[BJDCTF2020]纳尼

图片修复

GIF文件头47 49 46 38,直接给它加上,点击开始的数字直接编辑就好,然后保存

[ACTF新生赛2020]outguess

outguess

outguess -k 'abc' -r mmm.jpg flag.txt 

[SWPU2019]我有一只马里奥

NTFS流隐藏文件

kali工具之convert

gif图片帧分离

convert ggg.gif hh.jpg

[GXYCTF2019]gakki

字频统计,

# -*- coding:utf-8 -*-
#Author: mochu7
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"
strings = open('./flag.txt').read()

result = {}
for i in alphabet:
counts = strings.count(i)
i = '{0}'.format(i)
result[i] = counts

res = sorted(result.items(),key=lambda item:item[1],reverse=True)
for data in res:
print(data)

for i in res:
flag = str(i[0])
print(flag[0],end="")


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/6/24 9:45
# @Author : upload
# @File : 字符统计.py
# @Software: PyCharm
# -*- coding:utf-8 -*-
#Author: mochu7
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"
strings = open('D:/oneDrive云存储/OneDrive/桌面/misc/00000268 (2)/flag.txt').read()

result = {}
for i in alphabet:
counts = strings.count(i)
i = '{0}'.format(i)
result[i] = counts

res = sorted(result.items(),key=lambda item:item[1],reverse=True)
for data in res:
print(data)

for i in res:
flag = str(i[0])
# print(flag)

if i[1] == 0:
break
print(flag[0], end="")

大佬的脚本学习一下!

sqltest

aa = ''
with open('1.txt','r') as f:
# f.readline()
# print(int(f.readline())
# print(f.readlines())
# f.readline()
for i in f:
# print(i)
pp = i.replace('\n','')
aa += chr(int(pp))

print(aa)

[ACTF新生赛2020]base64隐写

base64隐写

def get_base64_diff_value(s1, s2):
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
res = 0
for i in xrange(len(s2)):
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res


def solve_stego():
with open('E:/abcc.txt', 'rb') as f:
file_lines = f.readlines()
bin_str = ''
for line in file_lines:
steg_line = line.replace('\n', '')
norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
diff = get_base64_diff_value(steg_line, norm_line)
print diff
pads_num = steg_line.count('=')
if diff:
bin_str += bin(diff)[2:].zfill(pads_num * 2)
else:
bin_str += '0' * pads_num * 2
print goflag(bin_str)


def goflag(bin_str):
res_str = ''
for i in xrange(0, len(bin_str), 8):
res_str += chr(int(bin_str[i:i + 8], 2))
return res_str


if __name__ == '__main__':
solve_stego()

常见文件头

前言
对常见文件文件头和隐写术做个归纳总结

文件头文件尾
图片隐写
音频隐写
电子文档隐写
一、文件头文件尾
1、图片
JPEG
文件头:FF D8 FF     
文件尾:FF D9
TGA
未压缩的前4字节 00 00 02 00
RLE压缩的前5字节 00 00 10 00 00
PNG
文件头:89 50 4E 47 0D 0A 1A 0A    
文件尾:AE 42 60 82
GIF
文件头:47 49 46 38 39(37) 61    
文件尾:00 3B
BMP
文件头:42 4D
文件头标识(2 bytes) 42(B) 4D(M)
TIFF (tif)
文件头:49 49 2A 00
ico
文件头:00 00 01 00
Adobe Photoshop (psd)
文件头:38 42 50 53
2、office文件
MS Word/Excel (xls.or.doc)
文件头:D0 CF 11 E0

MS Access (mdb)
文件头:53 74 61 6E 64 61 72 64 20 4A

WordPerfect (wpd)
文件头:FF 57 50 43

Adobe Acrobat (pdf)
文件头:25 50 44 46 2D 31 2E

application/vnd.visio(vsd)
文件头:D0 CF 11 E0 A1 B1 1A E1

Email [thorough only] (eml)
文件头:44 65 6C 69 76 65 72 79 2D 64 61 74 65 3A

Outlook Express (dbx)
文件头:CF AD 12 FE C5 FD 74 6F

Outlook (pst)
文件头:21 42 44 4E

Rich Text Format (rtf)
文件头:7B 5C 72 74 66

txt 文件(txt)
文件头:Unicode:FE FF / Unicode big endian:FF FE / UTF-8:EF BB BF /ANSI编码是没有文件头的

3、压缩包文件
ZIP Archive (zip)
文件头:50 4B 03 04
文件尾:50 4B
RAR Archive (rar)
文件头:52 61 72 21
4、音频文件
Wave (wav)
文件头:57 41 56 45
audio(Audio)
文件头: 4D 54 68 64
audio/x-aac(aac)
文件头:FF F1(9)
5、视频文件
AVI (avi)
文件头:41 56 49 20
Real Audio (ram)
文件头:2E 72 61 FD
Real Media (rm)
文件头:2E 52 4D 46
MPEG (mpg)
文件头:00 00 01 BA(3)
Quicktime (mov)
文件头:6D 6F 6F 76
Windows Media (asf)
文件头:30 26 B2 75 8E 66 CF 11
MIDI (mid)
文件头:4D 54 68 64
6、代码文件
XML (xml)
文件头:3C 3F 78 6D 6C

HTML (html)
文件头:68 74 6D 6C 3E

Quicken (qdf)
文件头:AC 9E BD 8F

Windows Password (pwl)
文件头:E3 82 85 96

7、其他类型
windows证书文件(der)
文件头:30 82 03 C9
CAD (dwg)
文件头:41 43 31 30
Windows Shortcut (lnk)
文件头:4C 00 00 00
Windows reg(reg)
文件头:52 45 47 45 44 49 54 34

BUUCTF:[HBNIS2018]caesar

知识点:凯撒

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/6/24 14:49
# @Author : upload
# @File : caesar.py
# @Software: PyCharm
def change(c, i):
num = ord(c)
if (num >= 33 and num <= 126):
num = 33 + (num + i - 33) % (94) # 126-33=93
return chr(num)


def kaisa_jiAmi(string, i):
string_new = ''
for s in string:
string_new += change(s, i)
print(string_new)
return string_new


# 本题有种暴力解密感觉
def kaisa_jiEmi(string):
for i in range(0, 94):
print('第' + str(i + 1) + '种可能:', end=' ')
# 区别在于 string 是该对象原本就是字符串类型, 而 str()则是将该对象转换成字符串类型。
kaisa_jiAmi(string, i)


# 你要知道input输入的数据类型都是string
def main():
print('请输入操作,注意不是平常26种:')
choice = input('1:恺撒加密,2:凯撒穷举解密.请输入1或2:')
if choice == '1':
string = input('请输入需要加密字符串: ')
num = int(input('请输入需要加密的KEY: '))
kaisa_jiAmi(string, num)
elif choice == '2':
string = input('请输入需要解密字符串: ')
kaisa_jiEmi(string)
else:
print('输入错误,请重试')
main()


if __name__ == '__main__':
main()

[ACTF新生赛2020]NTFS数据流

注意:这里解压的时候使用Win RAR解压,涉及NTFS流的都需要Win RAR解压

zip

知识点:CRC校验爆破

  • CRC校验爆破
  • rar文件头尾的熟悉
  • notepad++插件的使用

import zipfile
import string
import binascii

def CrackCrc(crc):
for i in dic:
for j in dic:
for p in dic:
for q in dic:
s = i + j + p + q
if crc == (binascii.crc32(s) & 0xffffffff):
#print s
f.write(s)
return

def CrackZip():
for I in range(68):
file = 'out' + str(I) + '.zip'
f = zipfile.ZipFile(file, 'r')
GetCrc = f.getinfo('data.txt')
crc = GetCrc.CRC
#以上3行为获取压缩包CRC32值的步骤
#print hex(crc)
CrackCrc(crc)

dic = string.ascii_letters + string.digits + '+/='

f = open('out.txt', 'w')
CrackZip()
f.close()

[安洵杯 2019]吹着贝斯扫二维码

知识点:拼图

先file一下

CMD命令

ren * *.jpg

[MRCTF2020]不眠之夜

不眠之夜

知识点:拼图

linux下montage的用法:montage *.png -tile 图片摆放格式 -geometry 图片分辨率 flag.png


120张,每张都是200 x 100,应该长:10张图片,宽:12张图片,那么拼起来的总图就应该是长:2000 x 宽:1200

使用montage和gaps

montage *jpg -tile 10x12 -geometry 200x100+0+0 flag.jpg
gaps --image=flag.jpg --generations=40 --population=120 --size=100


python gaps用法:gaps --image=flag.jpg --generations=40 --population=120 --size=100

Code
image Path to puzzle
size Puzzle piece size in pixels
generations Number of generations for genetic algorithm
population Number of individuals in population