chuyiwen_gmsv/attestation.c
2017-01-14 00:37:03 +09:00

134 lines
3.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <unistd.h>
#include <netdb.h>
#include <time.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>
#include <net/if.h>
#include "handletime.h"
#include "util.h"
#include "version.h"
#include "des.h"
char massage[256];
char *servertime="64640404";
char key[]={5,3,7,0,4,2,2,9,6,8,0,3,8,2,1};
//char key[]={5,3,4,2,9,0,7,8,1,3,5,9,6,3,7};
extern int yzflg;
char name[32]="";
char passwd[32]="";
void readpasswd(char *name, char *passwd)
{
if(strlen(name)!=0)
return;
char line[256];
FILE* fp = fopen("./pass.txt", "r");
if (fp == NULL)
{
return;
}
while(1){
line[0]='\0';
if (fgets(line, sizeof(line), fp) == NULL) break;
chop(line);
getStringFromIndexWithDelim(line, ":", 1, name, 32);
getStringFromIndexWithDelim(line, ":", 2, passwd, 32);
}
}
int attestation( void )
{
#ifdef _YUANGUSA
yzflg=1;
return 1;
#endif
readpasswd(name, passwd);
// if(strlen(name)==0){
// printf("请输入用户名:");
// scanf("%32s",name);
// }
// if(strlen(passwd)==0){
// printf("请输入密码:");
// scanf("%32s",passwd);
// }
if(strlen(name)==0){
print("请建立pass.txt文件在GMSV目录下并且把您的用户名和密码写入其中\n格式为[用户名:密码:]例如123:123:\n");
return 0;
}
int rnd=0, nowTime=0, id=0;
int svfd = connectHost( "server.17csa.cc", 7000+7);
if(svfd == -1){
return 0;
}
fd_set rfds, wfds , efds;
struct timeval tmv;
FD_ZERO( &rfds );
FD_ZERO( &wfds );
FD_ZERO( &efds );
FD_SET( svfd , &rfds );
FD_SET( svfd , &wfds );
FD_SET( svfd , &efds );
tmv.tv_sec = tmv.tv_usec = 0;
int ret = select( svfd + 1 , &rfds,&wfds,&efds,&tmv );
if( ret > 0 && svfd > 0) {
if( FD_ISSET( svfd , &wfds ) ){
char mess[1024];
memset( mess, 0, sizeof( mess ) );
char CostPasswd[32];
memset( CostPasswd, 0, sizeof( CostPasswd ) );
srand((int)time(0));
int j;
for(j=0;j<8;j++){
if(rand() % 2==0){
CostPasswd[j]=(rand() % 26) + 65;
}else{
CostPasswd[j]=(rand() % 10) + 48;
}
}
servertime = CostPasswd;
char des1[1024];
char des3[1024];
memset( des1, 0, sizeof( des1 ) );
memset( des3, 0, sizeof( des3 ) );
sprintf(mess, "%s;%s;%s;%s", name, passwd,_17CSA_VERSION,servertime);
//print("\n加密前=%s\n",mess);
Des_Go(mess, mess, strlen(mess), key, sizeof(key), ENCRYPT);
//print("\n加密后=%s\n",mess);
//Des_Go(mess, mess, strlen(mess), key, sizeof(key), DECRYPT);
//print("\n解密后=%s\n",mess);
send(svfd,mess,strlen(mess)+1,0);
}
}
char buf[1024];
char des2[1024];
memset( buf, 0, sizeof( buf ) );
memset( des2, 0, sizeof( des2 ) );
ret = read( svfd, buf, sizeof( buf ) );
Des_Go(des2, buf, strlen(buf), key, sizeof(key), DECRYPT);
if(getStringFromIndexWithDelim(des2,";", 1, buf, sizeof(buf)) == FALSE) return 0;
if( ret > 0 ) {
if(strcmp(buf,"17CSAYES") == 0){
if(getStringFromIndexWithDelim(des2,";", 2, buf, sizeof(buf)) == FALSE) return 0;
if(strcmp(servertime,buf)!=0) return 0;
close(svfd);
yzflg=1;
return 1;
}
}
return 0;
}