Jump to content

XWIS:APGAR: Difference between revisions

From ModEnc²
en>Gordon-creAtive
PW is faked - I'm just looking for an true one.
 
m 5 revisions imported
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
APGAR is a token sent by a C&C game to tell XWIS Online the players password. The password is encrypted with an unknown method.
APGAR is a token sent by a C&C game to tell XWIS the players' password. The password is encrypted using a weak algorithm. This is a one-way encryption, i.e. you cannot find the original password from it's encrypted form.


Example:
Pseudo-code to calculate the password from an 8 letter input:
<pre>
<pre>
apgar OkaccecG 0
function apgar(input)
  lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  out = ""
  i = 1
  while (i <= 8)
    left = ascii value of input[ i ]
    right = ascii value of input[ length[input] - i ]
 
    if left is odd
        x = ((left * 2) XOR (left AND 1)) AND right
    else
        x = left XOR right
 
    out += lookup[x AND 63]
    i++
 
  return out
</pre>
</pre>
The closing zero seems to have a special function.
 
A C++ implementation of this algorithm:
<pre>
std::string apgar(std::string input) {
  std::string lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  std::string out = "";
  int i = 0;
  while (i < 8) {
    unsigned char left = input[i];
    unsigned char right = input[input.length() - i];
    unsigned char x = left & 1 ? ((left << 1) ^ (left & 1)) & right : left ^ right;
    out += lookup[x & 63];
    i++;
  }
  return out;
}
</pre>
 
Example (decrypted password "reneproj"):
<pre>
apgar Ykbcaxop 0
</pre>
 
The closing zero seems to have no special function.


[[Category:XWIS Protocol]]
[[Category:XWIS Protocol]]

Latest revision as of 22:14, 31 March 2025

APGAR is a token sent by a C&C game to tell XWIS the players' password. The password is encrypted using a weak algorithm. This is a one-way encryption, i.e. you cannot find the original password from it's encrypted form.

Pseudo-code to calculate the password from an 8 letter input:

function apgar(input)
  lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  out = ""
  i = 1
  while (i <= 8)
    left = ascii value of input[ i ]
    right = ascii value of input[ length[input] - i ]

    if left is odd 
        x = ((left * 2) XOR (left AND 1)) AND right
    else
        x = left XOR right

    out += lookup[x AND 63]
    i++
  
  return out

A C++ implementation of this algorithm:

std::string apgar(std::string input) {
  std::string lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  std::string out = "";
  int i = 0;
  while (i < 8) {
    unsigned char left = input[i];
    unsigned char right = input[input.length() - i];
 
    unsigned char x = left & 1 ? ((left << 1) ^ (left & 1)) & right : left ^ right;
 
    out += lookup[x & 63];
    i++;
  }
  return out;
}

Example (decrypted password "reneproj"):

apgar Ykbcaxop 0

The closing zero seems to have no special function.