GHCTF 2025

[GHCTF 2025]LockedSecret

这是一个展开tea

点击查看代码
#include <stdio.h>
#include <Windows.h>
#include <stdint.h>
void decrypt(uint32_t* v, uint32_t* k){
    uint32_t delta = 0x5E2377FF;
    uint32_t v0 = v[0], v1 = v[1], sum = delta*8;
    for (int i = 0; i < 8; i++)
    {
        v1 -= ((v0<<4) + k[2]) ^ (v0 + sum) ^ ((v0>>5) + k[3]);
        v0 -= ((v1<<4) + k[0]) ^ (v1 + sum) ^ ((v1>>5) + k[1]);
        sum -= delta;
        /* code */
    }
    v[0] = v0;
    v[1] = v1;
}

int main()
{
	uint32_t Key[] =
	{
        0x423DF72D,0x5F59A01,0x633FCF1D,0x77D19122
	};
   uint32_t EncFlag[] = {
	    0x31e45dc,0x2776e989,0x1234847,0x64ced270,0x33467fda,0xa34903b1,0x2cd10027,0x75bdb337 };
    for (int i = 0; i < 8; i+=2)
    {
        EncFlag [i] ^= 0xf;
        (EncFlag [i+1]) ^= 0xf;
        decrypt(&EncFlag[i] , Key);
    }

    printf("%.32s\n",EncFlag);
	return 0;
}

[GHCTF 2025]Mio?Ryo?Soyo?

点击查看代码
en = bytes([
    57,
    118,
    33,
    114,
    68,
    56,
    117,
    115,
    34,
    52,
    52,
    95,
    78,
    40,
    49,
    59,
    95,
    85,
    63,
    122,
    54,
    33,
    77,
    110,
    49,
    54,
    34,
    109,
    106,
    122,
    60,
    92,
    108,
    91,
    61,
    51,
    42,
    62,
    35,
    38,
    52,
    67,
    62,
    122,
    116,
    48,
    76,
    50,
    67,
    51,
    59,
    41,
    122,
    45,
    45,
    51,
    90
])
for i in en:
    print(chr(i), end='')
#9v!rD8us"44_N(1;_U?z6!Mn16"mjz<\l[=3*>#&4C>zt0L2C3;)z--3Z

这里面有一个我踩的坑

如果对en直接print的话输出结果为

b'9v!rD8us"44_N(1;_U?z6!Mn16"mjz<\\l[=3*>#&4C>zt0L2C3;)z--3Z'

对比一下发现反斜杠\是两个,这样cyberchef就梭不出来了

原因如下:

bytes类型表示二进制数据的类型,它是一个不可变的字节序列
直接打印 bytes 对象时,Python 会尝试将其内容解释为 ASCII 字符,并以 b'...' 的形式显示。

  • 如果字节值在可打印的 ASCII 范围内(32 到 126),则显示对应的字符。
  • 如果字节值不在可打印的 ASCII 范围内,则显示转义序列(如 \xHH,其中 HH 是十六进制值)
    92 --> \\ 反斜杠, 显示为 \\ 是因为反斜杠是转义字符 ,避免歧义
    for 循环打印字符(不会有歧义)
  • 当你使用 for 循环遍历 bytes 对象并打印每个字节对应的字符时,Python 会将每个字节值转换为对应的 ASCII 字符。
  • chr(i) 函数将整数 i 转换为对应的 Unicode 字符。

所以92应该转为\

base45改过编码表

点击查看代码
for i in range(48,93):
    print(chr(i),end="")
#0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\

posted @ 2025-04-28 19:44  zzz222666  阅读(90)  评论(0)    收藏  举报