Algo de decryptage de pwd aim

Contenu du snippet

Un petit algorythme pour decrypter les password AIM situé dans le repertoire "HKEY_CURRENT_USER\Software\America Online\AOL Instant Messenger (TM)\CurrentVersion\Users\VotreLogin\Login" de l'editeur de registre. j'ai simplement traduit la version de bigbang originale ecrite en visual basic. Le programme n'est certainement pas optimiser au maximum, donc si vous avez des idée, n'hesitez pas a m'en faire part. le programme est simplement une fonction qu'on appelle decrypt("mdp AIM") et elle retourne le mdp decrypter.

Source / Exemple :


#include <iostream.h>

char * decrypt(char * PW);
int lenght(char * chaine);
int ASCII(char lettre);

int main()
{
    // ÿÿCMPBGJHHEEHCLC est un pwd coder
	cout << decrypt("ÿÿCMPBGJHHEEHCLC") << "\n\n" ;
	return 0;
}

//////////////// FONCTION /////////////////////
char * decrypt(char * password)
{
	const int longueur = lenght(password);
	
	char * PW = new char[longueur - 2];

	int i = 0;
	while(password[i]!='\0')
	{
		PW[i] = password[i+2];
		i++;
	}
	

	long a;
	int b,c,d;
	char temp;
	int compte = 0;
	char * pass_finale = new char[(lenght(PW) / 2) - 3];

	 for(a=1;a<=lenght(PW);a = a + 2)
	 {

		 c = (( a / 2) % ( 16 + 1 ) + 1);
		 b = ASCII(PW[a - 1]) - 65;
		 
		 
		if ( (c==4) || (c==9) || (c==11) || (c==14) )
		{
			if ( (b % 2) < 1 )
			{
				b = b + 1;
			}
			else
			{
				b = b - 1;
			}
		}

		if ( (c==5) || (c==10) || (c==15) || (c==16) )
		{
			if ( (b % 4) < 2 )
			{
				b = b + 2;
			}
			else
			{
				b = b - 2;
			}
		}

		if ( (c==1) || (c==6) || (c==11) || (c==12) )
		{
			if ( (b % 8) < 4 )
			{
				b = b + 4;
			}
			else
			{
				b = b - 4;
			}
		}

		if ( (c==2) || (c==7) || (c==13) || (c==16) )
		{
			if ( b < 8 )
			{
				b = b + 8;
			}
			else
			{
				b = b - 8;
			}
		}

		if ( (c==12) || (c==13) || (c==14) || (c==15) )
		{
		
			b = 15 - b;
		}

		////////////////////////////
		d = b * 16;
		b = ASCII(PW[a]) - 65;

		if ( (c==5) || (c==7) || (c==9) || (c==10) || (c==16) )
		{
			if ( (b % 2) < 1 )
			{
				b = b + 1;
			}
			else
			{
				b = b - 1;
			}
		}

		if ( (c==1) || (c==6) || (c==9) || (c==11) || (c==12) )
		{
			if ( (b % 4) < 2 )
			{
				b = b + 2;
			}
			else
			{
				b = b - 2;
			}
		}

		if ( (c==2) || (c==7) || (c==8) || (c==9) || (c==13) )
		{
			if ( (b % 8) < 4 )
			{
				b = b + 4;
			}
			else
			{
				b = b - 4;
			}
		}
		 
		if ( (c==3) || (c==12) || (c==14) )
		{
			if ( b < 8 )
			{
				b = b + 8;
			}
			else
			{
				b = b - 8;
			}
		}

		if ( (c==8) || (c==10) || (c==11) )
		{
			b = 15 - b;
		}

		compte++;
		temp = (d + b);
		pass_finale[compte - 1] = temp;
	
	 }

	return pass_finale;
}

int lenght(char * chaine)
{
	int temp = 0;
	
	while(chaine[temp]!='\0')
	{
		temp++;
	}
	
	return temp - 1;
}

int ASCII(char lettre)
{
	
	switch(lettre)
	{

	case 'A' : return 65;break;
	case 'B' : return 66;break;
	case 'C' : return 67;break;
	case 'D' : return 68;break;
	case 'E' : return 69;break;
	case 'F' : return 70;break;
	case 'G' : return 71;break;
	case 'H' : return 72;break;
	case 'I' : return 73;break;
	case 'J' : return 74;break;
	case 'K' : return 75;break;
	case 'L' : return 76;break;
	case 'M' : return 77;break;
	case 'N' : return 78;break;
	case 'O' : return 79;break;
	case 'P' : return 80;break;
	case 'Q' : return 81;break;
	case 'R' : return 82;break;
	case 'S' : return 83;break;
	case 'T' : return 84;break;
	case 'U' : return 85;break;
	case 'V' : return 86;break;
	case 'W' : return 87;break;
	case 'X' : return 88;break;
	case 'Y' : return 89;break;
	case 'Z' : return 90;break;

	}
	
}

Conclusion :


Je remercie BigBang pour l'algorythme

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.