Skip to content

RS, UUID and UDID

These are the parameters that can be frequently noticed when sending a request.

RS

RS stands for Random Seed, or Random String, which is essentially just a string containing n (often 10) random alphanumeric characters. RS is mainly sent as rs in requests.

Generating RS is quite simple:

Python

py
import random
from string import ascii_letters, digits  # so we don't have to type [A-Za-z0-9] by hand

# this code works only on python 3.6 and above

possible_letters = ascii_letters + digits


def generate_rs(n: int) -> str:
    return ("").join(random.choices(possible_letters, k=n))

UUID

UUID stands for Universally Unique IDentifier. It has format of aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeee and used to be sent as uuid in requests, but now the player ID (not to be confused with the account ID) is sent in its place instead.

It can be randomly generated using our generate_rs() function:

Python

py
def generate_uuid(parts: [int] = (8, 4, 4, 4, 10)) -> str:
    # apply generate_rs to each number in parts, then join results
    return ("-").join(map(generate_rs, parts))

UDID

UDID is an abbreviation for Unique Device IDentifier that is sent as udid in requests.

On Android, your UDID is generated by making a UUIDv4 from your SSAID (Settings.Secure.ANDROID_ID). However, there's a common bug with the SSAID returning the value 9774d56d682e549c on multiple devices. If the SSAID matches that string, a random UUIDv4 is generated instead. What's interesting is that the UDID on Android is one of the few parts of the Java code, so it's easily decompilable.

On Windows, the game tries to obtain either the thread or the process SID and removes all the dashes from it, which is a really long number starting with S. If it fails, the UDID is NoUDID_, followed by a random value from 0 to 1,000,000,000.

Python

py
import random


def generate_udid(start: int = 100_000, end: int = 100_000_000) -> str:
    return "S15" + str(random.randint(start, end)) + str(random.randint(start, end)) + str(random.randint(start, end)) + str(random.randint(start, end))