- 试题一:阅读下列说明,回答问题 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所产生的子密钥相同,就称这个密钥是弱密钥。
信息安全工程师试题 信息安全工程师笔试题
转载
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章