mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@755 385bec56-5757-e545-9c3a-d8741f4650f1
96 lines
2.3 KiB
C++
96 lines
2.3 KiB
C++
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
|
||
#define CODE_LENGTH 8
|
||
|
||
typedef unsigned char u8;
|
||
typedef unsigned short int u16;
|
||
typedef unsigned long u32;
|
||
typedef unsigned long long int u64;
|
||
|
||
typedef signed char s8;
|
||
typedef signed short int s16;
|
||
typedef signed long s32;
|
||
|
||
u32 table[0x100];
|
||
|
||
|
||
//==========================================================================
|
||
//
|
||
//==========================================================================
|
||
void _Crc32Init( void )
|
||
{
|
||
u32 poly = 0xedba6320; // DS‚̂Ƃ« 0xedb88320;
|
||
u32 crc;
|
||
|
||
for( u32 i = 0; i < 0x100; i++ )
|
||
{
|
||
crc = i;
|
||
for( u32 j = 8; j > 0; j-- )
|
||
{
|
||
if( crc & 1 )
|
||
{
|
||
crc = (crc>>1)^poly;
|
||
}
|
||
else
|
||
{
|
||
crc >>= 1;
|
||
}
|
||
}
|
||
table[i] = crc;
|
||
}
|
||
}
|
||
|
||
//==========================================================================
|
||
//
|
||
//==========================================================================
|
||
u32 _CalcCrc32( const u8 *src, u32 len )
|
||
{
|
||
u32 crc = 0xffffffff;
|
||
|
||
while( len )
|
||
{
|
||
crc = ((crc>>8)&0xffffffff)^table[(crc^(*src))&0xff];
|
||
src++;
|
||
len--;
|
||
}
|
||
return crc;
|
||
}
|
||
|
||
//==========================================================================
|
||
//
|
||
//==========================================================================
|
||
u32 _CalcMasterkey( const u8 *src )
|
||
{
|
||
u32 key;
|
||
|
||
_Crc32Init();
|
||
|
||
//key = ((_CalcCrc32( src, CODE_LENGTH )^0xaaaa)+5313)%100000;
|
||
key = ((_CalcCrc32( src, CODE_LENGTH )^0xaaaa)+5719)%100000;
|
||
return key;
|
||
}
|
||
|
||
//==========================================================================
|
||
//
|
||
//==========================================================================
|
||
int main( int argc, char *argv[] )
|
||
{
|
||
u32 masterKey;
|
||
|
||
if ( ( argc != 2 ) || ( argv[1] == NULL ) )
|
||
{
|
||
printf( "usage: MakeMasterKeyForCtr [date+code]\n" );
|
||
printf( "\n" );
|
||
printf( "example: date = Sep 8. code = 1234\n" );
|
||
printf( " MakeMasterKeyForCtr 09081234\n" );
|
||
return 1;
|
||
}
|
||
|
||
masterKey = _CalcMasterkey( (const u8*)argv[1] );
|
||
|
||
printf( "Master Key = %05d\n", masterKey );
|
||
|
||
return 0;
|
||
}
|