RCTF2025 re部分wp

作者:shixz 发布时间: 2025-11-18 阅读量:12 评论数:0

chaos

打开程序即可获取flag

chaos2

一长串mov,明显是加密数据之类的,然后紧接着跳转sub_4017D0,明显其是校验函数之类的.

.text:0040175A                 push    80h ;           ; 128字节
.text:0040175F                 mov     edx, [ebp-190h]
.text:00401765                 push    edx             ; 密钥位置
.text:00401766                 lea     eax, [ebp-18Ch]
.text:0040176C                 push    eax             ; S盒
.text:0040176D                 call    sub_4017D0      ; RC4初始化

100H,256其实也能想到是RC4加密。

不过需要注意的是如果没有检测到调试之类的就会对密钥特定偏移进行修改

def rc4_init(key):
    S = list(range(256))
    j = 0
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]
    return S

def rc4_crypt(S, data):
    i = 0
    j = 0
    out = []
    for byte in data:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        k = S[(S[i] + S[j]) % 256]
        out.append(byte ^ k)
    return bytes(out)

enc_data = [
    0x0F, 0x1A, 0x8A, 0x5A, 0x22, 0xAB, 0x1E, 0x63, 0x19, 0x5A, 0x87, 0xF2, 0xE6, 0xE9, 0xD7, 0xD1,
    0x97, 0xF9, 0xF8, 0x32, 0x5B, 0xDE, 0x2D, 0xD6, 0xA3, 0x4F, 0x7E, 0xCB, 0x61, 0xB2, 0x3F, 0xBF,
    0xB7, 0x1B, 0x0A, 0x84, 0xB3, 0xB4, 0xDE, 0x03, 0x46, 0x7B, 0x83, 0xF0, 0xC4, 0xB3, 0xAB, 0x7B,
    0x29, 0xBC, 0x1F, 0xFE, 0x8A, 0x79, 0x26, 0xDA, 0x08, 0x01, 0x85, 0x66, 0x7D, 0xBB, 0xEE, 0x0F,
    0x89, 0x59, 0xD4, 0x5F, 0xAC, 0x18, 0xAE, 0x0B, 0x4E, 0xF0, 0xB7, 0x05, 0x5C, 0x81, 0x04, 0x9F,
    0xA4, 0x1C, 0x5D, 0xA0, 0xB9, 0x07, 0x92, 0x5C, 0x8A, 0x53, 0xF3, 0xFF, 0xF7, 0xA7, 0xDD, 0x2E,
    0xE6, 0xED, 0x0F, 0x77, 0x2C, 0x4A, 0x22, 0xF1, 0x36, 0x4F, 0xA7, 0xEE, 0x0D, 0xD6, 0x04, 0x73,
    0x55, 0x5E, 0x3E, 0x93, 0xA4, 0x34, 0x29, 0x67, 0xFC, 0x23, 0x79, 0x19, 0xD8, 0xC9, 0x2B, 0xCF
]

key_bytes = b'flag:{Th1sflaglsG00ds}' + b'\x00' * 106 
key = list(key_bytes)

key[8] = ord('i')
key[14] = ord('I') 
key[17] = ord('o')
key[18] = ord('o')

S = rc4_init(key)
dec_data = rc4_crypt(S, enc_data)

    flag = dec_data.decode('ascii')
    print(f"解密后的flag: {flag}")

评论