[GWCTF 2019]re3

题目链接:https://buuoj.cn/challenges#[GWCTF%202019]re3

用PEID的Krypto插件扫描文件

可能存在base64,md5和AES。

用IDA查看main函数,发现了自修改,是一个简单的异或操作

所以ida无法识别该函数

在ida中利用idapython脚本修改代码

key=[0xCB, 0x8D, 0x49, 0x35, 0x21, 0xB4, 0x7A, 0x4C, 0xC1, 0xAE, 0x7E, 0x62, 0x22, 0x92, 0x66, 0xCE]
text=[ 0xBC, 0x0A, 0xAD, 0xC0, 0x14, 0x7C, 0x5E, 0xCC, 0xE0, 0xB1, 0x40, 0xBC, 0x9C, 0x51, 0xD5, 0x2B, 0x46, 0xB2, 0xB9, 0x43, 0x4D, 0xE5, 0x32, 0x4B, 0xAD, 0x7F, 0xB4, 0xB3, 0x9C, 0xDB,0x4B, 0x5B]
key=bytes(key)
text=bytes(text)
mode = AES.MODE_ECB
cryptor = AES.new(key, mode)
decrypt_text=cryptor.decrypt(text)
print (b2a_hex(decrypt_text))

 

 


修改之后强制分析所选区域代码,按p生成函数,回到main函数按F5即可得到修改后的伪代码

查看sub_402219函数

不难看出这部分是AES加密,因为不存在iv,所以加密模式是ECB。 sub_40207B将生成的密钥保存至unk_603170,而生成密钥的过程和用户输入内容无关所以不必深入,可通过动态调试获取密钥。

sub_400A71函数对密钥进行了密钥扩展,后面的函数对分成两部分的用户输入进行AES加密。

密钥为CB8D493521B47A4CC1AE7E62229266CE

根据密钥长度判断出是AES128加密。byte_6030A0是AES的密文,

密文为BC0AADC0147C5ECCE0B140BC9C51D52B46B2B9434DE5324BAD7FB4B39CDB4B5B

已知密文和密钥,可以写脚本得到明文了

script:

#!/usr/bin/python3
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

key=[0xCB, 0x8D, 0x49, 0x35, 0x21, 0xB4, 0x7A, 0x4C, 0xC1, 0xAE, 0x7E, 0x62, 0x22, 0x92, 0x66, 0xCE]
text=[ 0xBC, 0x0A, 0xAD, 0xC0, 0x14, 0x7C, 0x5E, 0xCC, 0xE0, 0xB1, 0x40, 0xBC, 0x9C, 0x51, 0xD5, 0x2B, 0x46, 0xB2, 0xB9, 0x43, 0x4D, 0xE5, 0x32, 0x4B, 0xAD, 0x7F, 0xB4, 0xB3, 0x9C, 0xDB,0x4B, 0x5B]
key=bytes(key)
text=bytes(text)
mode = AES.MODE_ECB
cryptor = AES.new(key, mode)
decrypt_text=cryptor.decrypt(text)
print (b2a_hex(decrypt_text))

 

ascii解码后得到flag
 

 

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像