-
-
[原创] 2024KCTF 第九题 第一次接触
-
发表于: 2024-9-4 01:21 2535
-
程序第一步检测输入应为0-9a-z
随后将输入三等分,进行3次check
比较第一组输入8长度的字符串为 hellocat
输入的字符 - 0x30 后相加,其值为 DAT_00531004 内存值 (0xD) ,判断 iVar2 * DAT_00531008 == 0x8fa7c86 ,其中DAT_00531008 值为 3 ,iVar2 为字符串转数字得到
计算出iVar2 应为 50211202,其中 thunk_FUN_0045cbc0 将输入字符串倒转 ,传入的字符串应为 20211205
传入参数的字符串长度 >= 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
爆破输入
最后输入为 hellocatx202112050a3b1c4d29
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)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: