morbitz / vcrypter Goto Github PK
View Code? Open in Web Editor NEWThis project forked from necr0potenc3/vcrypter
vCrypter is a tool by Valios to calculate Ultima Online client login keys based on the client's version.
This project forked from necr0potenc3/vcrypter
vCrypter is a tool by Valios to calculate Ultima Online client login keys based on the client's version.
==================================== vCrypt is a tool by Valios to calculate Ultima Online login keys based on the client's version. Leaked source code obtained by the decompilation of the executable. Valios' code is pretty much a copy of OpenUO and if I remember correctly OpenUO's login keys code is inspired by POL's: OpenUO Version: namespace OpenUO.Ultima { public static class ClientUtility { public static void CalculateLoginKeys(uint major, uint minor, uint revision, uint build, out uint key1, out uint key2) { key1 = (major << 23) | (minor << 14) | (revision << 4); key1 ^= (revision * revision) << 9; key1 ^= (minor * minor); key1 ^= (minor * 11) << 24; key1 ^= (revision * 7) << 19; key1 ^= 0x2C13A5FD; key2 = (major << 22) | (revision << 13) | (minor << 3); key2 ^= (revision * revision * 3) << 10; key2 ^= (minor * minor); key2 ^= (minor * 13) << 23; key2 ^= (revision * 7) << 18; key2 ^= 0xA31D527F; } } } POL's Version: void CalculateCryptKeys( const std::string& name, TCryptInfo& infoCrypt ) 00031 { 00032 size_t len = name.length(); 00033 if ( ( strnicmp( "none", name.c_str(), len ) == 0 ) 00034 || ( strnicmp( "ignition", name.c_str(), len ) == 0 ) 00035 || ( strnicmp( "uorice", name.c_str(), len ) == 0 ) ) 00036 { 00037 infoCrypt.eType = CRYPT_NOCRYPT; 00038 infoCrypt.uiKey1 = 0; 00039 infoCrypt.uiKey2 = 0; 00040 } 00041 else if ( strnicmp( "2.0.0x", name.c_str(), 6 ) == 0 ) 00042 { 00043 infoCrypt.eType = CRYPT_BLOWFISH_TWOFISH; 00044 infoCrypt.uiKey1 = 0x2D13A5FD; 00045 infoCrypt.uiKey2 = 0xA39D527F; 00046 } 00047 else 00048 { 00049 try 00050 { 00051 size_t dot1 = name.find_first_of( '.', 0 ); 00052 size_t dot2 = name.find_first_of( '.', dot1 + 1 ); 00053 00054 int major = atoi( name.substr( 0, dot1 ).c_str() ); 00055 int minor = atoi( name.substr( dot1 + 1, dot2 - dot1 - 1 ).c_str() ); 00056 int build = atoi( name.substr( dot2 + 1, len - dot2 - 1 ).c_str() ); 00057 00058 int temp = ( ( major << 9 | minor ) << 10 | build ) ^ ( ( build*build ) << 5 ); 00059 infoCrypt.uiKey1 = ( temp << 4 ) ^ ( minor*minor ) ^ ( minor * 0x0B000000 ) ^ ( build * 0x380000 ) ^ 0x2C13A5FD; 00060 temp = ( ( ( major << 9 | build ) << 10 | minor ) * 8 ) ^ ( build*build * 0x0c00 ); 00061 infoCrypt.uiKey2 = temp ^ ( minor*minor ) ^ ( minor * 0x6800000 ) ^ ( build * 0x1c0000 ) ^ 0x0A31D527F; 00062 00063 if ( compareVersion( 1, 25, 35, major, minor, build ) ) 00064 infoCrypt.eType = CRYPT_OLD_BLOWFISH; 00065 else if ( ( major == 1 ) && ( minor == 25 ) && ( build == 36 ) ) 00066 infoCrypt.eType = CRYPT_1_25_36; 00067 else if ( compareVersion( 2, 0, 0, major, minor, build ) ) 00068 infoCrypt.eType = CRYPT_BLOWFISH; 00069 else if ( compareVersion( 2, 0, 3, major, minor, build ) ) 00070 infoCrypt.eType = CRYPT_BLOWFISH_TWOFISH; 00071 else 00072 infoCrypt.eType = CRYPT_TWOFISH; 00073 } 00074 catch ( ... ) 00075 { 00076 infoCrypt.eType = CRYPT_NOCRYPT; 00077 infoCrypt.uiKey1 = 0; 00078 infoCrypt.uiKey2 = 0; 00079 POLLOG_ERROR << "Malformed encryption version string: " << name << "using Ignition encryption engine\n"; 00080 } 00081 } 00082 } 00083 00084 bool compareVersion( int ver1major, int ver1minor, int ver1build, int ver2major, int ver2minor, int ver2build ) 00085 { 00086 if ( ver1major > ver2major ) 00087 return true; 00088 else if ( ver1major < ver2major ) 00089 return false; 00090 else if ( ver1minor > ver2minor ) 00091 return true; 00092 else if ( ver1minor < ver2minor ) 00093 return false; 00094 else if ( ver1build > ver2build ) 00095 return true; 00096 else if ( ver1build < ver2build ) 00097 return false; 00098 else 00099 return true; 00100 } - necr0potenc3 ====================================
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.