KCTF2022-第二题-末日邀请

KCTF2022-第二题-末日邀请

字符串转换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int __fastcall str2int(int src, int len)
{
int i; // esi
char v4; // dl
char v5; // al

for ( i = 0; i < len; ++i )
{
v4 = *(_BYTE *)(i + src);
v5 = '0';
if ( v4 >= ':' )
v5 = 0x37;
*(_BYTE *)(i + src) = v4 - v5;
}
return 0;
}

image-20220511180010693

image-20220511180412661

image-20220511180602745

image-20220511180921771

暴力破解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def check(l):
v37 = 0
for i in range(9):
v23 = l[i] + 10*v37
v24 = v23 - 0x37373737
if v23 <= 0x4B435445:
v24 = v23
v37 = v24
if v24 %(i+1) == 0:
continue
else:
return False
return True

for i in itertools.permutations([1,2,3,4,5,6,7,8,9], 9):
l = []
for c in i:
l.append(c)
if check(l):
print(l)
1
[3, 8, 1, 6, 5, 4, 7, 2, 9]

目前还有前key的前3位未知,需要满足条件:

image-20220511181049091

可以通过暴力尝试得到前三位为421。

最终key: 421KCTF381654729

image-20220511181441556