GWCTF-2019-re3

二木 王者

题不是很难,但是自己做的时候过于Sb了,也不能这样说,害,就是自己想多了,不久前自己魔改了一下AES,所以一直想得是魔改的AES,在哪儿整了半天,越想越不对,其实就是没有魔改AES,调试一下把KEY调试出来即可。我去看了一些WP,有点离谱,有些把密钥的MD5分析出来了,然后解密。。。。确实也加深学到了如何去识别MD5算法,还是很有收获。

这道打开,是很经典的SMC解密。

image-20230925204147871

对于SMC我们有两种解法,一种是写IDC脚本,一种是直接动态调试,让它自己把密文解密出来。

对于IDC脚本:

1
2
3
from idc_bc695 import * s=0x402219                   #加密地址 
for i in range(224): #循环
PatchByte(s+i,Byte(s+i)^0x99)

进行动态分析

image-20230925204510681

分析这这个函数,我们可以知道,第一个sub_400A71就是我们AES的密钥扩展。

下面的函数就是AES加密函数,我们点开即可分析出。

image-20230925204719724

对于密钥,我们可以知道,密钥扩展,会在原来的密钥基础上进行扩展,也就是说,当密钥扩展后,我们扩展后的前16位,就是我们的原始密钥,我们动态调试提取出来即可。

先前我准备用赛博厨房来解的,但是不知道为啥解不出来(可能我不熟悉它的原因。。。)

所以就写一个py脚本来解

1
2
3
4
5
6
7
from Crypto.Cipher import AES
decodedata = 'BC0AADC0147C5ECCE0B140BC9C51D52B46B2B9434DE5324BAD7FB4B39CDB4B5B' #数据
key = 'CB8D493521B47A4CC1AE7E62229266CE' #密钥
aeskey = AES.new(bytes.fromhex(key), AES.MODE_ECB) #初始化加密器
decode = aeskey.decrypt(bytes.fromhex(decodedata)) #加密器解密
print(decode)

解出我们的FlAG:

flag{924a9ab2163d390410d0a1f670}

对于密钥,我看了他们的WP可以发现,居然是用MD5加密了BASE64表,然后在进行操作来生成的。

对于MD5特征码

image-20230925205323221

image-20230925210004320

一般的MD5的两个特征。

 评论
目录