-
-
看雪 2022·KCTF 秋季赛第六题 病疫先兆
-
发表于: 2022-11-29 21:44 8540
-
题目的逻辑很简单,就是一个输入然后,验证输入,全部在main函数里面很明显。
题目的大题意思就是输入14个字节的字符串,然后分成三部分,第一部分转换为十进制数,第二部分不作转换,第三部分也转换为十进制数字。下面就是这题的主要验证逻辑。
! 
可以判断出第二部分就是KCTF四个字母占用四个字节,然后上面有俩个循环,分别进行伪随机比较(与已知不变的盒子比较).
由字符长度为14个字节可以判断出伪随机数字的种子为五位数。所以可以进行爆破。
代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include<stdio.h>#include<stdlib.h>int main() { unsigned int rand1[]={15356, 8563, 9659, 14347, 11283, 30142, 29542, 18083, 5057, 5531, 23391, 21327, 20023, 14852, 4865, 23820, 16725, 18665, 25042, 24920,0}; unsigned int rand2[]={11190, 27482, 980, 5419, 28164, 9548, 16558, 22218, 6113, 21959, 13889, 11580, 2625, 19397, 25139, 8167, 28165, 3950, 25496, 27351,0}; for(int i=10000;i<100000;i++) { int j=0; srand(i); while(rand1[j]==rand())j++; if(rand1[j]==0) { printf("%d\n",i); break; } } for(int i=10000;i<100000;i++) { int j=0; srand(i); while(rand2[j]==rand())j++; if(rand2[j]==0) { printf("%d",i); break; } }}//序列号为14725KCTF83690 |
[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
赞赏
雪币:
留言: