挺有意思的一题,记录一下
主要思路为smc解密 + AES算法
扔进ida后找到主函数:
发现函数地址异或,推测为smc,先按d转化为数据,然后直接使用python脚本解密:
from ida_bytes import *
ea = 0x402219
for i in range(0,224):
patch_bytes(ea + i, bytes(ea + i) ^ 0x99)
选中按p生成函数:
函数逻辑也很简单,a1为我们输入的flag,通过上面三个函数的变换,最终和给定的byte比较。
使用findcrypto插件发现为aes加密,直接编写脚本解密即可:
from Crypto.Cipher import AES
# 密文
encoded = [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 = [
0xCB, 0x8D, 0x49, 0x35, 0x21, 0xB4, 0x7A, 0x4C, 0xC1, 0xAE,
0x7E, 0x62, 0x22, 0x92, 0x66, 0xCE
]
aes = AES.new(bytes(key), AES.MODE_ECB)
data = aes.decrypt(bytes(encoded))
print(data)
解得flag:flag{924a9ab2163d390410d0a1f670}
标签:AES,BUUCTF,函数,re3,bytes,aes,flag,ea,GWCTF2019 From: https://www.cnblogs.com/reverse-chen/p/18331869