ThreadBoard ArchivesSite FeaturesActiveworlds SupportHistoric Archives |
license.awsdk solution? (Sdk)
license.awsdk solution? // Sdkslippery eJun 20, 2006, 9:21am
This is a multi-part message in MIME format.
------=_NextPart_000_0008_01C6946C.6D9296A0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit Let me know if the attached file is useful, or if I've overlooked something. -- Sleepy E ------=_NextPart_000_0008_01C6946C.6D9296A0 Content-Type: text/plain; format=flowed; name="awSDK60Crack.cpp"; reply-type=original Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awSDK60Crack.cpp" // Created by Sleepy E for SDK build 60. Use and abuse at your own risk. // Could someone please explain why the universe authorization isn't enough. // I'm back to being a tourist again so I haven't actually tested the code fully. // Would need to login a tourist bot for that, and it'd take me an hour to patch. #define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <tchar.h> #include <windows.h> #include "aw.h" // Remove the need for license.awsdk void license_bye(void) { UCHAR *p; long *offset; // Get addresses of API hook HMODULE hmod = GetModuleHandle(_T("aw")); // aw.dll must be loaded already UCHAR *init = (UCHAR*)GetProcAddress(hmod, "aw_init"); // Copy the real API address memcpy(&init, init + 1, sizeof(UCHAR*)); // Patch aw_init aw_init(AW_BUILD); // load first chunk of aw_init into memory // Skip the call to license.awsdk loader p = init + 0x18; *p++ = 0xEB; // jmp short $+0Ah *p = 0x0A; // Get address of license.valid and set it to indicate a valid license memcpy(&p, init + 0x28, sizeof(p)); *p = TRUE; aw_init(AW_BUILD); // make sure next chunk of aw_init is in memory // Get the absolute address of license.expired() and patch it to always return FALSE p = init + 0x35; offset = (long*)(init + 0x31); p += *offset; *p++ = 0x33; // xor eax, eax *p++ = 0xC0; *p = 0xC3; // retn // No need to patch aw_create_resolve because, // license.address and license.port are both 0 by default which means they're // not compared to where the users wants to connect // license.limit is 0 by default which means no limit for the number of instances } int _tmain(int argc, _TCHAR* argv[]) { license_bye(); int rc = aw_init(AW_BUILD); if (rc) { printf("Reason code %d; that's bad mmmkay?", rc); return 1; } //your_sdk_code_here(); return 0; } ------=_NextPart_000_0008_01C6946C.6D9296A0-- slippery eJun 20, 2006, 10:47am
This is a multi-part message in MIME format.
------=_NextPart_000_0017_01C69478.6ABC9CD0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit Seems patching the code wasn't good enough so here's the revised version. It connects to the stagecoach universe for me. -- Sleepy E ------=_NextPart_000_0017_01C69478.6ABC9CD0 Content-Type: text/plain; format=flowed; name="awSDK60Crack.cpp"; reply-type=original Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="awSDK60Crack.cpp" // Created by Sleepy E for SDK build 60. Use and abuse at your own risk. // Could someone please explain why the universe authorization isn't enough. // Ok, this time I've succesfully connected to the stagecoach universe ;) #define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <tchar.h> #include <windows.h> #include "aw.h" // Remove the need for license.awsdk void license_bye(void) { UCHAR *p; // Get addresses of API hook HMODULE hmod = GetModuleHandle(_T("aw")); // aw.dll must be loaded already UCHAR *init = (UCHAR*)GetProcAddress(hmod, "aw_init"); // Copy the real API address memcpy(&init, init + 1, sizeof(UCHAR*)); // Patch aw_init aw_init(AW_BUILD); // load first chunk of aw_init into memory // Skip the call to license.awsdk loader p = init + 0x18; *p++ = 0xEB; // jmp short $+0Ah *p = 0x0A; // Get address of license.valid and set it to indicate a valid license memcpy(&p, init + 0x28, sizeof(p)); *p = TRUE; // Get address of license.expiration_time and set it to a high value memcpy(&p, init + 0x14, sizeof(p)); p += 0x418; // offset of expiration_time *p++ = 0xFF; // unix time 0x7FFFFFFF *p++ = 0xFF; *p++ = 0xFF; *p = 0x7F; // No need to patch aw_create_resolve because, // license.address and license.port are both 0 by default which means they're // not compared to where the users wants to connect // license.limit is 0 by default which means no limit for the number of instances } void handle_universe_attributes(void) { printf("Universe attributes\n"); } int _tmain(int argc, _TCHAR* argv[]) { license_bye(); int rc = aw_init(AW_BUILD); if (rc) { printf("Reason code %d; init isn't working mmmkay?", rc); return 1; } rc = aw_create("stagecoachisland2.com", 5891, NULL); if (rc) { printf("Reason code %d; you're not connecting mmmkay?", rc); return 1; } aw_event_set(AW_EVENT_UNIVERSE_ATTRIBUTES, handle_universe_attributes); aw_string_set(AW_LOGIN_NAME, "your name"); aw_int_set(AW_LOGIN_OWNER, /*your number*/1); aw_string_set(AW_LOGIN_PRIVILEGE_PASSWORD, "your privilage password"); aw_string_set(AW_LOGIN_APPLICATION, "awSDK60Crack"); if (rc = aw_login()) { printf ("Reason code %d; not logged in mmmkay?\n", rc); return 1; } for (;;) { rc = aw_wait(-1); if (rc) { printf("Reason code %d; while waiting mmmkay?\n", rc); return 1; } } aw_destroy (); aw_term (); return 0; } ------=_NextPart_000_0017_01C69478.6ABC9CD0-- |