Please feel free to test it.
For testing purpose, you can use following values. (one of working Name and Serial)
Hide
//
// ReverseL18_keygen.cpp - Key Generator of Basic RCE level 18
// Made by 3735943886
// Lisence : GPL
//
#include < i o s t r e a m >
#include < s t r i n g >
#include < i o m a n i p >
extern unsigned __int32 TemplateA [ ] ;
extern unsigned __int32 TemplateB [ ] ;
extern unsigned __int32 TemplateC [ ] ;
extern unsigned __int32 TemplateD [ ] ;
extern unsigned char TemplateE [ ] ;
using namespace std ;
inline void bswap ( unsigned __int32 * u )
{
* u = ( * u > > 24 ) | ( * u > > 8 ) & 0xff00 | ( * u < < 8 ) & 0xff0000 | ( * u < < 24 ) ;
return ;
}
unsigned __int64 KeyGen ( string * pName , unsigned __int32 * * Template , unsigned char * Template2 )
{
// Format of Key : ################
unsigned __int64 Serial = 0 ;
unsigned __int32 i = 0 ;
unsigned __int32 * NameBuf = new unsigned __int32 [ 3 ] ;
memset ( NameBuf , 0 , 8 ) ;
pName - > copy ( ( char * ) NameBuf , 8 , 0 ) ;
bswap ( & NameBuf [ 0 ] ) ;
bswap ( & NameBuf [ 1 ] ) ;
for ( i = 0 ; i < 0x10 ; i + + )
{
NameBuf [ 2 ] = NameBuf [ 1 ] ;
NameBuf [ 1 ] = NameBuf [ 0 ] ;
NameBuf [ 0 ] = ( ( ( Template [ 0 ] [ ( ( unsigned char * ) NameBuf ) [ 3 ] ] + Template [ 1 ] [ ( ( unsigned char * ) NameBuf ) [ 2 ] ] )
^ Template [ 2 ] [ ( ( unsigned char * ) NameBuf ) [ 1 ] ] ) + Template [ 3 ] [ ( ( unsigned char * ) NameBuf ) [ 0 ] ] ) ^ NameBuf [ 2 ] ;
}
( ( __int32 * ) & Serial ) [ 1 ] = ( 0x524500 | Template2 [ pName - > length ( ) * 2 ] ) ;
( ( __int32 * ) & Serial ) [ 0 ] = ( ( NameBuf [ 1 ] > > 24 ) + ( ( __int32 * ) & Serial ) [ 1 ] ) * 0x407af0 ;
( ( __int32 * ) & Serial ) [ 1 ] + = ( ( __int32 * ) & Serial ) [ 0 ] ;
( ( __int32 * ) & Serial ) [ 0 ] - = 0x587370 ;
delete [ ] NameBuf ;
return Serial ;
}
int main ( )
{
string * pName = new string ;
unsigned __int32 * Template [ 4 ] ;
unsigned __int64 Serial ;
// Logo
cout < < endl < < "ReverseL18_keygen.cpp - Key Generator of Basic RCE level 18"
< < endl < < "Made by 3735943886" < < endl < < "Lisence : GPL" < < endl < < endl ;
// Get Name
cout < < "Name : " ; getline ( cin , * pName ) ;
if ( pName - > length ( ) > = 5 & & pName - > length ( ) < = 1100 )
{
Template [ 0 ] = TemplateA ;
Template [ 1 ] = TemplateB ;
Template [ 2 ] = TemplateC ;
Template [ 3 ] = TemplateD ;
Serial = KeyGen ( pName , Template , TemplateE ) ;
cout < < "Serial : " < < uppercase < < hex < < setfill ( '0' ) < < setw ( 16 ) < < Serial < < endl ;
}
else
{
cout < < "Name must be at least 5 chars or more..." < < endl ;
}
delete pName ;
return 0 ;
}
Hide