阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
代码安全漏洞往往是系统或者网络被攻破的头号杀手。在C语言程序开发中,由于C语言自身语法的一些特性,很容易出现各种安全漏洞。因此,应该在C程序开发中充分利用现有开发工具提供的各种安全编译选项,减少出现漏洞的可能性。
阅读下列说明和C语言代码,回答问题1至问题4,将解答写在答题纸的对应栏内。
【说明】
在客户服务器通信模型中,客户端需要每隔一定时间向服务器发送数据包,以确定服务器是否掉线,服务器也能以此判断客户端是否存活,这种每隔固定时间发一次的数据包也称为心跳包。心跳包的内容没有什么特别的规定,一般都是很小的包。
某系统采用的请求和应答两种类型的心跳包格式如图4-1所示。
心跳包类型占1个字节,主要是请求和响应两种类型。
心跳包数据长度字段占2个字节,表示后续数据或者负载的长度。
接收端收到该心跳包后的处理函数是process_heartbeat(),其中参数p指向心跳包的报文数据,s是对应客户端的socket网络通信套接字。
void process_heartbeat(unsigned char *p, SOCKET s)
{
unsigned short hbtype;
unsigned int payload;
hbtype=*p++; //心跳包类型
n2s(p, payload); //心跳包数据长度
pl=p; //pl指向心跳包数据
if(hbtype=HB_REQUEST){
unsigned char *buffer, *bp;
buffer=malloc(1+2+payload);
*bp++=HB_RESPONSE; //填充1 byte的心跳包类型
s2n(payload, bp); //填充2 bytes的数据长度
memcpy(bp,pl,payload);
/*将构造好的心跳响应包通过socket s返回客户端 */
r=write_bytes(s, buffer,3+payload);
}
}
阅读下列说明,回答问题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和问题2,将解答写在答题纸的对应栏内。
【说明】
某一本地口令验证函数(C语言环境,X86_32指令集)包含如下关键代码;某用户的口令保存在字符数组origPassword中,用户输入的口令保存在字符数组userPassword中,如果两个数组中的内容相同则允许进入系统。
[...]
Char origPassword[12]=“Secret”;
Char userPassword[12];
[...]
gets(userPassword); /* 读取用户输入的口令*/
[...]
If(strncmp(origPassword,userPassword,12)!=0)
{
printf(“Password,doesn’t match!\n”);
exit(-1);
}
[...]
/* 口令认证通过时允许用户访问*/
[...]