2024数信杯北区决赛实操

本次比赛北区决赛第三名 学生组第一

image-20241003122509200

ez_sign

先爆破出密码123456

img

打开看到jpg中的flag1

img

flag{266c7354-0817

流量包中找到flag2

img

-4694-9494-

给了一个part3.zip 无法正常解压 010打开查看 发现有大量FF 写个脚本和0xFF异或

with open("part3.zip", 'rb') as f:
    data = f.read()
xor_data = bytearray(d ^ 0xFF for d in data)
with open("1.zip", 'wb') as f:
    f.write(xor_data)

正常解压压缩包 得到flag3

img

flag{266c7354-0817-4694-9494-c727479d8f1a} 

其实上面异或这一步直接在010editor里面进行也可以 记得选择无符号字节

image-20241003121454849

也可以直接在赛博厨子中进行 先解hex 在进行异或

image-20241003121649531

签到寄语

随便写

写完用CameraFileCopy扫码 得到文件

image-20241003121741906

Secret1

小强离开电脑的时候,某人把小强的秘密给偷走了,还把文件修改覆盖了,作案脚本也删了。请帮助小强找到丢失的相关数据。

1.提交加密算法工具当中的flag值。(提交示例:flag{*})

使用r-studio打开内存镜像 在secret文件夹下面有个pyc文件 保存出来 打开就有flag

image-20241003121804041

secret2

2.恢复图片中的flag值

把上面的pyc文件代码逆出来

def encode(png):
    flag = "flag{eba771fd-2b03-418f-b11a-60f1141c99ee}"
    lens = len(flag)
    with open(png, "rb") as f:
        pic_bytes = f.read()
        print(len(pic_bytes))
        output_bytes = bytearray()
        for i in range(0, len(pic_bytes)):
            output_bytes.append(pic_bytes[i] ^ ord(flag[i * 2 % lens]))

    with open(png, "wb") as f:
        f.write(output_bytes)

filescan出来一个flag.png 保存出来 这就是被加密的图片 ai跑个脚本恢复出原图片

def decode(png):
    flag = "flag{eba771fd-2b03-418f-b11a-60f1141c99ee}"
    lens = len(flag)
    with open(png, "rb") as f:
        enc_bytes = f.read()
        output_bytes = bytearray()
        for i in range(len(enc_bytes)):
            output_bytes.append(enc_bytes[i] ^ ord(flag[i * 2 % lens]))

    with open("decoded_" + png, "wb") as f:
        f.write(output_bytes)

# 使用解密函数
decode("flag.png")

image-20241003121948915

secret3(赛后复盘)

3.提交压缩包当中的flag值。

也算是学到了 一个很不常见的插件使用方式

压缩包在上一题恢复出来的图片尾部 提取出来之后 确定为真加密 开始找密码

密码在剪切板中

剪贴板插件后面加上-v参数 因为可能在明文之间有不可见字符进行隔断 这个时候仅使用clipboard就可能看不到全部明文

clipboard -v 

下图是加不加-v参数的对比

image-20241003125734777

拿到密码后 解压压缩包出flag

image-20241003125808201

history1

r-studio里面找到两个ipynb文件

image-20241003122015611

使用vol导出

.\volatility.exe -f F:\history\history_91c3e27c00d70d4d6982952b60a4bb51\data.raw --profile=Win7SP1x64 filescan | findstr ".ipynb"                                             ─╯
Volatility Foundation Volatility Framework 2.6
0x000000007d843bd0     16      0 -W-rw- \Device\HarddiskVolume1\Users\ctf\Anaconda3\etc\fish\conda\.ipynb_checkpoints\Untitled-checkpoint.ipynb
0x000000007da54b40     16      0 R--rw- \Device\HarddiskVolume1\Users\ctf\Anaconda3\etc\fish\conda\Untitled.ipynb

.\volatility.exe -f F:\history\history_91c3e27c00d70d4d6982952b60a4bb51\data.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000007d843bd0 -D E:\Desktop\数信杯\history            ─╯
Volatility Foundation Volatility Framework 2.6
DataSectionObject 0x7d843bd0   None   \Device\HarddiskVolume1\Users\ctf\Anaconda3\etc\fish\conda\.ipynb_checkpoints\Untitled-checkpoint.ipynb

.\volatility.exe -f F:\history\history_91c3e27c00d70d4d6982952b60a4bb51\data.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000007da54b40 -D E:\Desktop\数信杯\history            ─╯
Volatility Foundation Volatility Framework 2.6
DataSectionObject 0x7da54b40   None   \Device\HarddiskVolume1\Users\ctf\Anaconda3\etc\fish\conda\Untitled.ipynb

打开就是flag

img

history2

同上题

img

Pixel

首先看到文件头提示SM4CBC sm4国密算法 CBC模式 修改为png头后 正常打开图片

尾部有密文

image-20241003122040190

存在lsb隐写 先得到key

image-20241003122100826

注意这个地方是1不是l(踩大坑)

image-20241003122224057

zsteg得到iv

image-20241003122314206

直接解密

image-20241003122337452

水印攻击_北区(990分)

gpt调

from PIL import Image, ImageEnhance
import numpy as np

# 打开原始图片
image_path = "input.png"
image = Image.open(image_path)

# 1. 轻微调整亮度
def adjust_brightness(image, factor=1.05):
    enhancer = ImageEnhance.Brightness(image)
    return enhancer.enhance(factor)

# 2. 添加轻微的高斯噪声
def add_noise(image, mean=0, var=0.001):
    img_array = np.asarray(image)
    row, col, ch = img_array.shape
    sigma = 0.0003
    gauss = np.random.normal(mean, sigma, (row, col, ch))
    noisy_img = img_array + gauss * 255
    noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)
    return Image.fromarray(noisy_img)

# 3. 叠加轻微的掩码块
def add_mask_block(image, block_size=5, opacity=0.1):
    img_array = np.array(image)
    mask = np.zeros_like(img_array)
    h, w, _ = img_array.shape
    start_h = np.random.randint(0, h - block_size)
    start_w = np.random.randint(0, w - block_size)
    mask[start_h:start_h + block_size, start_w:start_w + block_size] = (255, 255, 255)
    final_img = (1 - opacity) * img_array + opacity * mask
    final_img = np.clip(final_img, 0, 255).astype(np.uint8)
    return Image.fromarray(final_img)

# 应用以上步骤对图像进行处理
image = adjust_brightness(image, factor=1.1) # 轻微提高亮度
image = add_noise(image, mean=0, var=0.0005)  # 添加轻微噪声

# 保存处理后的图片
image.save("result.png")

Ezsql

联合注入 先闭合前面的sql查询语句 后面根据题目描述 查询whatisthis表中的flag

name=1') union all select 1,flag,3 FROM whatisthis--+

easy-decode

对main函数计算md5,动调有问题,不同工具结果都不同,比较新颖的反调试

idapython直接算

import hashlib
import ida_bytes

# 指定的起始地址(替换为有效的起始地址)
start_addr = 0x7FF721E11000

# 要读取的长度
length = 0x7D0

# 读取字节数据
byte_values = [ida_bytes.get_byte(start_addr + i) for i in range(length)]

# 将字节数组转换为字节串(bytes)
byte_data = bytes(byte_values)

# 计算MD5哈希值
md5_hash = hashlib.md5(byteS_data).hexdigest()

# 打印MD5哈希值
print("MD5:", md5_hash)

image-20241003122429607

厨子解aes,iv全零

img