/*
ADSubstract v2.10 Keymaker by Egis/CORE
Compile: cl /o2 adsk.c md5dgst.c
*/
#include <stdio.h>
#include <stdlib.h>
#include "md5.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;
typedef unsigned _int64 QWORD;
BYTE base[] = { "0123456789abcdefghijklmnopqrstuvwxyz" };
QWORD tobase( BYTE m )
{
BYTE i;
for( i = 0; i < 36; i++ )
if( base[ i ] == m )
return i;
return 0;
}
QWORD t64( BYTE *t )
{
QWORD q;
BYTE p[ 100 ], *b = p;
q = 0;
memset( p, 0, 100 );
strcpy( p, t );
strlwr( p );
while( *b ) {
q *= 32;
q += tobase( *b );
b++;
}
return q;
}
void p64( QWORD key )
{
BYTE s[ 20 ], *p = s, m;
memset( s, 0, 20 );
while( key ) {
*p = base[ key % 32L ];
key /= 32L;
p++;
}
p = s;
while( *p ) {
if( *p == '1' ) *p = 'w';
if( *p == 'b' ) *p = 'x';
if( *p == 'o' ) *p = 'z';
p++;
}
strrev( s );
strupr( s );
printf( s );
}
void main( void )
{
MD5_CTX c;
BYTE md[ MD5_DIGEST_LENGTH ];
int i;
DWORD magic[ 10 ] = { 0x5733a0c3, 0x155cf8be,
0xffc55d8d, 0x11cf424, 0x7117d5b1, 0x4baf5541, 0x83179f31, 0x20f3f593 };
BYTE pad[ 10 ];
QWORD k1, k2;
QWORD k;
char key[ 10 ] = { "EGIS" };
printf( "\n ._______/\\__________/\\_______/\\___________.\n"
" / _____\\_ ___
\\_____ \\ _____/\n"
"/ \\ \\
_\\ / / /__ __\\___\n"
"\\____________/__________\\___\\____ \\________/\n"
"+-ds-----------+ C.O.R.E..2.K +- \\_/ -------+\n\n"
"ADSubstract Pro v2.10 Keymaker by Egis/CORE.\n"
);
while( 1 ) {
srand( time( NULL ) );
for( i = 4; i < 8; i++ )
key[ i ] = base[ rand() % 32 ];
k1 = t64( key );
pad[ 0 ] = ( BYTE )( ( k1 & 0xff00 ) >> 8
);
pad[ 1 ] = ( BYTE )( ( k1 & 0xff0000 ) >>
16 );
pad[ 2 ] = ( BYTE )( ( k1 & 0xff000000 ) >>
24 );
pad[ 3 ] = ( BYTE )( ( k1 & 0xff00000000 )
>> 32 );
pad[ 4 ] = ( BYTE )( k1 & 0xff );
if( pad[ 4 ] > 18 )
break;
}
printf( "\nYour registration code: " );
p64( k1 );
MD5_Init( &c );
MD5_Update( &c, ( BYTE* ) magic, 32 );
MD5_Update( &c, pad, 5 );
MD5_Update( &c, ( BYTE* ) magic, 32 );
MD5_Final( md, &c );
k2 = md[ 0 ];
k2 <<= 8;
k2 += md[ 1 ];
k2 <<= 8;
k2 += md[ 2 ];
k2 <<= 8;
k2 += md[ 3 ];
k2 <<= 8;
k2 += md[ 4 ];
p64( k2 );
printf( "\n" );
}