【CTF对抗- 2024KCTF 第九题 第一次接触】此文章归类为:CTF对抗。
程序第一步检测输入应为0-9a-z
随后将输入三等分,进行3次check
1
比较第一组输入8长度的字符串为 hellocat
2
输入的字符 - 0x30 后相加,其值为 DAT_00531004 内存值 (0xD) ,判断 iVar2 * DAT_00531008 == 0x8fa7c86 ,其中DAT_00531008 值为 3 ,iVar2 为字符串转数字得到
计算出iVar2 应为 50211202,其中 thunk_FUN_0045cbc0 将输入字符串倒转 ,传入的字符串应为 20211205
3
传入参数的字符串长度 >= 8,最后的判断条件为 DAT_00531e9c == 0x10000039 ,注意到 DAT_00531e9c | 0x10000000 之后,DAT_00531e9c = 1 会将结果覆盖,没有了0x10000000后,最后的判断不会相等
FUN_0045c710 中检测输入,每2个字符,第一个为a-d,第2个为1-4,进行一些计算
注意到 strcpy 会将超长度的字符串覆盖,需要输入9个字符,覆盖内存531e9c 低位为 0x39
在第2步check需要补充 0 ,应为 202112050
在第1步check需要添加1个字符
最后需要比较字符串为 40d511825ecbc207eb6ef9a7b1c6e34b
,根据hash特征数字和调试结果,确定为MD5
爆破输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import hashlib
ch = '0123456789abcdefghijklmnopqrstuvwxyz'
ch1 = 'abcd'
ch2 = '1234'
for a in ch1:
for b in ch2:
for c in ch1:
for d in ch2:
for e in ch1:
for f in ch2:
for g in ch1:
for h in ch2:
for X in ch:
ans = 'hellocat' + X + '202112050' + a + b + c + d + e + f + g + h + '9'
hash = hashlib.md5(ans.encode()).hexdigest()
if ( hash = = '40d511825ecbc207eb6ef9a7b1c6e34b' ):
print (ans)
|
最后输入为 hellocatx202112050a3b1c4d29
更多【CTF对抗- 2024KCTF 第九题 第一次接触】相关视频教程:www.yxfzedu.com