picoCTF be-quick-or-be-dead-1 dcrypt 模拟与 python

逆向工程 解密 Python
2021-07-10 15:13:56

这是be-quick-or-be-dead-1picoCTF挑战(下载

在这个文件中我们可以看到decrypt_flag()函数,这个函数返回这个标志:

./be-quick-or-be-dead-1 
Calculating key...
Done calculating key
Printing flag:
picoCTF{why_bother_doing_unnecessary_computation_fedbb737}

我想用python实现这个功能,我写了这段代码:

key=[0x2c,0x97,0xa5,0xe9]
i=0
flag=[0x5c,0xfe,0xc6,0x86,0x6e,0xc3,0xe3,0x92,0x59,0xff,0xdc,0xb6,0x4d,0xf8,0xd1,0x81,0x55,0xe5,0xfa,0x8d,0x5e,0xfe,0xcb,0x8e,0x6d,0xe2,0xcb,0x87,0x56,0xf4,0xc0,0x9a,0x47,0xf6,0xd7,0x90,0x6a,0xf4,0xca,0x84,0x46,0xe2,0xd1,0x88,0x43,0xfe,0xca,0x87,0x67,0xf1,0xc0,0x8d,0x5b,0xf5,0x92,0xda,0x0d,0xea]
while i < 58 :
    flag[i] = chr(flag[i] ^ key[(i&3)])
    i=i+1

print "".join(flag)

但是当我运行它时,打印错误的标志:

picoBTF{uhy_aothyr_dringAunnzceskaryFcomjutaoionKfedwb73!}

我的问题是什么?

谢谢

1个回答

您的解决方案脚本缺少一个重要部分。如果你看一下拆解,你会注意到这样的部分

0x004006ee      8b45ec         mov eax, dword [var_14h]
0x004006f1      83c001         add eax, 1
0x004006f4      8945ec         mov dword [var_14h], eax

其中var_14h的关键所在,使这部分正在修改中的第一项key,每次算法上循环,(你可以检查几行上面的那些)。你可以像这样修改你的脚本:

➜ picoCTF cat solv.py

key=[0x2c,0x97,0xa5,0xe9]
i=0
flag=  [0x5c,0xfe,0xc6,0x86,0x6e,0xc3,0xe3,0x92,0x59,0xff,0xdc,0xb6,0x4d,0xf8,0xd1,0x81,0x55,0xe5,0xfa,0x8d,0x5e,0xfe,0xcb,0x8e,0x6d,0xe2,0xcb,0x87,0x56,0xf4,0xc0,0x9a,0x47,0xf6,0xd7,0x90,0x6a,0xf4,0xca,0x84,0x46,0xe2,0xd1,0x88,0x43,0xfe,0xca,0x87,0x67,0xf1,0xc0,0x8d,0x5b,0xf5,0x92,0xda,0x0d,0xea]
while i < 58 :
    flag[i] = chr(flag[i] ^ key[(i&3)])
    if i&3 == 0:
        key[0] = key[0] + 1
    i=i+1

print "".join(flag)

➜ picoCTF python solv.py
picoCTF{why_bother_doing_unnecessary_computation_fedbb737}