Site lock and domain name

If you are selling licenses of your games, site locking is something that you just have to know. One of the mistakes I did early on was to simply use some piece of code I found on the web. It was something like this:

1
2
3
4
if(this.root.loaderInfo.url.indexOf("domain.com") != -1)
    trace("Good!"); // It's in the right domain
else
    trace("Bad!"); // It's in the wrong domain

What this does is to get the index (aka position) of the string “domain.com” from the string that is returned by the loaderInfo.url. If it returns -1 then the string “domain.com” is not present in the loaderInfo.url.

This solution is fine, but it presentes two problems.

First, if someone really wants to use your site-locked game, they can! They just have to find a way of putting the “domain.com” string somewhere in the path to your swf since this code does not compare the domain name but rather the presence of a string on another string.

The second problem is that you don’t know the domain where the game is present. I need that information for other evil schemes of mine, so this was the perfect reason to write a small tool that would fetch me the domain name.

So I wrote this simple static function that lies inside a class Toolkit -name I shamelessly stolen from a chat with Andrew from Epic Shadow- and that simply returns the root domain and the top level domain, separated by a dot from the loaderInfo.url.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*Returns the name of the domain without subdomain, e.g. vortixgames.com
* instead of www.vortixgames.com.*/
public static function Domain(root:MovieClip):String
{
    /* Splits the full path into an array of strings separated by "/"
  * and gets the index 2 value which is the full domain name.*/
    var currentDomain:String = root.loaderInfo.url.split("/")[2];
    /* Splits the result into an array of strings separated by "." and
  * checks the length of the array. If the array has a length of 3
  * the domain contains a subdomain, for instance "www" and it must
  * be discarded. If the length is 2 then, there's no subdomain
  * present. */
    var fqdn:Array = currentDomain.split("."); // FQDN in array form
    var rdi:int = 1; // Root Domain Index defaults to 1
    var tli:int = 2; // Top Level Index defaults to 2
    if (fqdn.length == 2)
    {
        rdi--;
        tli--;
    }
    return fqdn[rdi] + "." + fqdn[tli];
}

The only issue I have with this function is that I have to pass the root as a parameter to the function. Any idea on how I could solve this otherwise is most welcome.

Posted: March 2nd, 2009
at 12:00am by Vlad

Tagged with , ,


Categories: The code of VGS

Comments: 3 comments