Thread

license.awsdk solution? (Sdk)

license.awsdk solution? // Sdk

1  |  

slippery e

Jun 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 e

Jun 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--

1  |  
Awportals.com is a privately held community resource website dedicated to Active Worlds.
Copyright (c) Mark Randall 2006 - 2024. All Rights Reserved.
Awportals.com   ·   ProLibraries Live   ·   Twitter   ·   LinkedIn