• 试题一:阅读下列说明,回答问题 1 至问题 4 ,将解答写在答题纸的对 应栏内。
  • 【说明】
  • 基于 Windows32 位系统分析下列代码,回答相关问题 。
  • void Challenge(char *str)
  • {
  • char temp[9]={0};
  • strncpy(temp,str,8);
  • printf("temp=%s\n",temp);
  • if(strcmp(temp"Please!@")==0){
  • printf("KEY: ****");
  • }
  • }
  • int main(int argc,char *argv[ ])
  • {
  • Char buf2[16]
  • Int check=1;
  • Char buf[8]
  • Strcpy (buf2, "give me key! !");
  • strcpy(buf,argv[1]);
  • if(check==65) {
  • Challenge(buf);
  • }
  • else {
  • printf("Check is not 65 (%d) \n Program terminated!!\n",check);
  • }
  • Return 0;
  • }
  • 【问题 1】(3 分)
  • main 函数内的三个本地变量所在的内存区域称为什么?它的两个最基本操作是什么?
  • 【问题 2】(3分)
  • 画出buf,check,buf2 三个变量在内存的布局图。


  • 【问题 3】(2分)
  • 应该给程序提供什么样的命令行参数值(通过argv变量传递)才能使程序执行流程进入判断语句 If(check=65)....然后调用challenge( )函数。
  • 【问题4】(4分)
  • 上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补次漏洞。
    查看答案
  • 考友试题答案分享:
  • 1、缓存区,出栈和入栈 2、buf 8,2格 check 65 buf2 16 3、argv=65 4、缓存溢出
  • 1、堆栈,push(压栈)或者pop(弹栈)操作。 2、buf8字节 check4字节 buf2 16字节。 3、覆盖超过buf数组个字节,也就是输入参数,例如:********a,注意大小端。前面8个任意的非零字符都可以,后跟一个大写a字符,因为a字符的ascⅱ码值等于65。 4、缓存溢出或者栈溢出 对输入参数的长度进行检查。
  • 1、堆栈,push(压栈)或者pop(弹栈)操作。 2、buf8字节 check4字节 buf2 16字节。 3、覆盖超过buf数组个字节,也就是输入参数,例如:********a,注意大小端。前面8个任意的非零字符都可以,后跟一个大写a字符,因为a字符的ascⅱ码值等于65。 4、缓存溢出或者栈溢出 对输入参数的长度进行检查。
  • 问题1:堆栈。入栈和出栈。<br>问题2:从低地址到高地址,buf占两行,check占1行,buf2占4行。<br>问题3:输入的字符串长度大于8个,且第9个字符为大写字母a。<br>问题4:缓冲区溢出漏洞。加入检查输入字符串长度的代码,使其不超过8个,可以修补此漏洞。
  • 1.堆栈,push和pop<br>2. buff2<br>    check<br>    buf<br>3前8个字符为任意值,第九个字符为阿斯克码为65值的字符即为a。<br>4.缓冲区溢出<br>使用授权的工具开发正确的程序。禁用不安全的函数,使用输入验证。静态分析验证指针的完整性

  • 试题二:阅读下列说明,回答问题 1 至问题 5,将解答写在答题纸的对 应栏内。
  • 【说明】
  • DES 是一种分组密码,己知 DES 加密算法的某个 S 盒如表 4-1 所示。

  • 【问题1】 (4分)
  • 请补全该 S 盒,填补其中的空(1) - (4),将解答写在答题纸的对应栏内。
  • 【问题 2】 (2分)
  • 如果该 S 盒的输入为 110011,请计算其二进制输出。
  • 【问题3】(6分)
  • DES加密的初始置换表如下:

  • 置换时,从左上角的第一个元素开始,表示输入的明文的第58位置换成输出的第1位,输入明文的第50位置换成输出的第2位,从左至右,从上往下,依次类推。
  • DES加密时,对输入的64位明文首先进行初始置换操作。
  • 若置换输入的明文M=0123456789ABCDEF(16进制),请计算其输出(16进制表示)。
  • 【问题4】(2分)
  • 如果有简化的DES版本,其明文输入为8比特,初始置换表IP如下:
  • IP:2 6 3 1 4 8 5 7
  • 请给出其逆初始置换表。
  • 【问题5】(2分)
  • DES加密算法存在一些弱点和不足,主要有密钥太短和存在弱密钥。请问,弱密钥的定义是什么?
  • 问题1 (1)10 (2)6 (3)1 (4)11 问题2 0100 问题5 弱密钥,密钥太短,并且可能存在密钥相同,
  • 一、10 6 1 11 二、0100 三、 四 4 1 3 5 7 2 8 6 五、弱密钥分成两个部分 全1或者全0,这样的每次加密的密钥都相同 对初始秘钥k ,若通过密钥生成算法生成的圈(子)密钥都相同,则成k为弱密钥 半弱密钥,有些种子密钥只能生成两个不同的子密钥,这种种子密钥称为半弱密钥,半弱密钥会将明文加密成相同的密文,
  • 一、10 6 1 11 二、0100 三、 四 4 1 3 5 7 2 8 6 五、弱密钥分成两个部分 全1或者全0,这样的密钥加密的结果都相同
  • 1、10 6 1 11 2、0100 3、cc00ccfff0aaf0aa 4、41357286 5、
  • 1.10,6,1,11<br>2.0100<br>3.m=0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111<br>    ip=1100 1100 0000 0000 1100 1100 1111 1111 1111          <br>0000 1010 1010 1111 0000 1010 1010<br>      =cc00ccfff0aaf0aa<br>4.-ip=41357286<br>5.存在一个密钥k,由这个密钥k所产生的子密钥相同,就称这个密钥是弱密钥。