[LitCTF 2023]debase64-入土为安的第十八天

简介: [LitCTF 2023]debase64-入土为安的第十八天

点进去sub_401520(v15, (int)v4)

if ( !*a1 )
    return 0;
  v2 = a1 + 4;
  v3 = a1;
  v4 = 0;
  v5 = 0;
  v13 = 0;
  while ( 1 )
  {
    v14 = -1;
    for ( i = 0; i != 64; ++i )
    {
      while ( byte_404000[i] != *v3 )
      {
        if ( ++i == 64 )
          goto LABEL_7;
      }
      LOBYTE(v14) = i;
    }
LABEL_7:
    LOBYTE(i) = 0;
    do
    {
      while ( byte_404000[i] != a1[v4 + 1] )
      {
        if ( ++i == 64 )
          goto LABEL_11;
      }
      BYTE1(v14) = i++;
    }
    while ( i != 64 );
LABEL_11:
    v7 = &a1[v4 + 2];
    for ( j = 0; j != 64; ++j )
    {
      while ( byte_404000[j] != *v7 )
      {
        if ( ++j == 64 )
          goto LABEL_15;
      }
      BYTE2(v14) = j;
    }
LABEL_15:
    v9 = &a1[v4 + 3];
    for ( k = 0; k != 64; ++k )
    {
      while ( byte_404000[k] != *v9 )
      {
        if ( ++k == 64 )
          goto LABEL_19;
      }
      HIBYTE(v14) = k;
    }
LABEL_19:
    v12 = v5 + 1;
    *(_BYTE *)(a2 + v5) = (4 * HIBYTE(v14)) | (BYTE2(v14) >> 4) & 3;
    if ( *v7 == '=' )
      return v12;
    v12 = v5 + 2;
    *(_BYTE *)(a2 + v5 + 1) = (16 * BYTE2(v14)) | (BYTE1(v14) >> 2) & 0xF;
    if ( *v9 == '=' )
      return v12;
    v5 += 3;
    v3 = v2;
    v2 += 4;
    v13 += 4;
    v4 = v13;
    *(_BYTE *)(a2 + v5 - 1) = (BYTE1(v14) << 6) | v14 & 0x3F;
    if ( !*(v2 - 4) )
      return v5;
  }
}
  • chunk 的第三个字节的低 6 位,映射到 Base64 字符。
  • chunk 的第二个字节的低 4 位,左移 2 位,加入 chunk 的第三个字节的高 2 位,映射到 Base64 字符。
  • chunk 的第一个字节的低 2 位,左移 4 位,加入 chunk 的第二个字节的高 4 位,映射到 Base64 字符。
  • chunk 的第一个字节的高 6 位,映射到 Base64 字符。
def custom_base64_encode(input_bytes):
    basetable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    # 以每三个字节为一组进行处理
    output = []
    # 确保输入长度为16字节
    input_bytes = input_bytes.ljust(16, b'\0')
    for i in range(0, len(input_bytes), 3):
        chunk = input_bytes[i:i + 3]
        number = 0
        if len(chunk) > 2:
            number += chunk[2] & 0x3F
            output.append(basetable[number])
        else:
            output.append(basetable[0])
        number = 0
        if len(chunk) > 1:
            number += chunk[1] & 0x0F
            number <<= 2
            number += chunk[2] >> 6
            output.append(basetable[number])
        else:
            output.append(basetable[0])
        number = 0
        if len(chunk) > 0:
            number += chunk[0] & 0x03
            number <<= 4
            if len(chunk) > 1:
                number += chunk[1] >> 4
            output.append(basetable[number])
        else:
            output.append(basetable[0])
        number = 0
        if len(chunk) > 0:
            number += chunk[0] >> 2
            output.append(basetable[number])
        else:
            output.append(basetable[0])
    return ''.join(output)
# 定义输入字节数据
input_bytes = bytes([
    0x46, 0xED, 0x18, 0x96, 0x56, 0x9E, 0xD2, 0x72, 0xB2, 0xB3, 0x80, 0x70, 0xFF
])
encoded_string = custom_base64_encode(input_bytes)
print("编码结果:", encoded_string)

Y0uReallyKn0wB4sAAw/AAAA

import hashlib
key = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
for i in key:
    str1 = "Y0uReallyKn0wB4s" + i + "==="
    if hashlib.md5(str1.encode('utf-8')).hexdigest() == "5a3ebb487ad0046e52db00570339aace":
        print(str1)
        break

Y0uReallyKn0wB4s3===

目录
相关文章
|
3月前
|
人工智能
notsequence 入土为安的第七天
notsequence 入土为安的第七天
29 1
|
3月前
[LitCTF 2024]hello_upx——入土为安的第一天
[LitCTF 2024]hello_upx——入土为安的第一天
32 0
|
3月前
|
数据安全/隐私保护
[LitCTF 2024]ezrc4——入土为安的第一天
[LitCTF 2024]ezrc4——入土为安的第一天
45 0
|
3月前
deedeedee 入土为安的第六天
deedeedee 入土为安的第六天
28 0
|
3月前
|
安全
babystack2.0-入土为安的第十六天
babystack2.0-入土为安的第十六天
37 0
|
3月前
[LitCTF 2023]程序和人有一个能跑就行了 入土为安的第五天
[LitCTF 2023]程序和人有一个能跑就行了 入土为安的第五天
36 0
|
3月前
|
数据安全/隐私保护 索引
HardSignin _ 入土为安的第十二天
HardSignin _ 入土为安的第十二天
17 0
|
3月前
|
Python
re4-unvm-me 入土为安的第六天
re4-unvm-me 入土为安的第六天
46 0
|
3月前
[MoeCTF 2022]ezTea-入土为安的第十九天
[MoeCTF 2022]ezTea-入土为安的第十九天
36 0
|
3月前
|
安全
[MoeCTF 2022]babyfmt-入土为安的第十九天
[MoeCTF 2022]babyfmt-入土为安的第十九天
41 0