Код:
int analyse(unsigned char*in,int size,bool direct,char *sender)
{
if (DEBUG)
printf("direction %s server\n",direct?"FROM":"TO");
if (DEBUG)
dump(in,size);
if (size==0xAB&&in[0]==0xAB&&!in[1]&&!in[2])
{
in[0]=0xBA;
size=0xBA;
in[7]=0x21;
in[8]=0xC6;
in[9]=0;
in[10]=0;
//const unsigned char code[]={0x4E,0x95,0xDD,0x29,0xFC,0x9C,0xC3,0x77,0x20,0xB6,0xAD,0x97,0xF7,0xE0,0xBD,0x07};
if (RSA)
{
memcpy(serv_mod,in+11,128);
un_scrambleMod(serv_mod);
//ServRsa->setmod((char*)serv_mod,128,65537);
mpi_read_binary(&serv_rsa.N,serv_mod,128);
memcpy(in+11,my_mod,128);
}
encXORPass(in,2,0xBA,23545);
encode(in+2,0xBA-2,&keyIt_st);
if (DEBUG)
dump(in,size);
}
else
if(size==0x17&&in[0]==0x17&&!in[1]&&in[2]==0x0b)
{
size=0x22;
in[0]=0x22;
memset(in+0x17,0,0x22-0x17);
Checksum(in+2,size-2,true);
//dump(in,size);
encode(in+2,size-2,&keyIt);
if (DEBUG)
dump(in,size);
}
else
if(size==0x27&&in[0]==0x27&&!in[1]&&in[2]==0x03)
{
size=0x3A;
in[0]=0x3A;
memset(in+0x27,0,size-0x27);
Checksum(in+2,size-2,true);
//dump(in,size);
encode(in+2,size-2,&keyIt);
if (DEBUG)
dump(in,size);
}
else
if(size==0xB2&&in[0]==0xB2&&!in[1])
{
decode(in+2,size-2,&keyIt);
if (DEBUG)
dump(in,size);
if (RSA)
{
char paswd[128],pass[32],login[32];
memset(pass,0,sizeof(pass));
memset(login,0,sizeof(login));
//MyRsa->decrypt((char*)in+3,128,paswd,128);
// int len=128;
// rsa_pkcs1_decrypt( &my_rsa, RSA_PRIVATE, &len,in+3, (unsigned char*)paswd );
rsa_private(&my_rsa,in+3, (unsigned char*)paswd);
memcpy(login,paswd+0x5E,14);
memcpy(pass,paswd+0x6C,16);
logins[login]++; // -)
for(int i=0;pass[i];pass[i++]='*');
print_time();
autoban[sender]=0;
printf("login :%s password:%s logins=%d\n",login,pass,logins.size());
append_log(login,sender);
store_info();
if (DEBUG)
dump((unsigned char*)paswd,128);
//ServRsa->encrypt(paswd,128,(char*)in+3,128);
//rsa_pkcs1_encrypt(&serv_rsa,RSA_PUBLIC,128,(unsigned char*)paswd,in+3 );
rsa_public(&serv_rsa,(unsigned char*)paswd,in+3 );
Checksum(in+2,size-2-12,true);
if (DEBUG)
dump(in,size);
}
encode(in+2,size-2,&keyIt);
if (DEBUG)
dump(in,size);
}
else
if(DEBUG)
{
unsigned char dmp[2048];
memcpy(dmp,in,size);
decode(dmp+2,size-2,&keyIt);
dump(dmp,size);
}
return size;
}