Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

gamespy server list

Featured Replies

  • Author
  • Localization

dex123, posted Thu Nov 26, 2015 11:29 am (10115)


Hi, i am trying to get list of servers from master server
game: serious sam classic the second encounter
master: gs.ostap.eu
port: 28900

but i cant get ips from last packet. How i can decrypt this? :
Code:
w}hGHEa @:?.mep,y9Pxb.m].mN.mN.mR.mZ=.mi.mN5.mRY.mR.m^.mb5.mi*&Vd.mN?.mO.mO9.mR.mR.mY.mZQ.ma.mV.md*&Vd?>P.mN .mN.mO%.mOa.mR.mR.mR.mR.mR.mV.mZ.mZy.m^.m^H.m..mb.mbg.mV.mj7d*&Vdl=dNk#d?>T>Jd>Jd\final\


InGame Browser gets it too in same view [wireshark screen]:
Image

cpp code I have tried:
[spoiler=123]
Code:
#include 
#include "gsmsalg.h"

#include
#include

using namespace std;

#pragma comment(lib, "ws2_32.lib")



#define PORT 28900
#define SERVERADDR "46.165.228.109" //??????? ????? ?? IP

//65.112.87.186
//46.165.228.109

int main()
{
    char buff[1024];
 
    // ??? 1 - ?????????? ???????? Winsock
    if (WSAStartup(0x202, (WSADATA *)&buff[0]))
    {
        printf("WSAStart error %d\n", WSAGetLastError());
        return -1;
    }
 
    // ??? 2 - ?????? ???
    SOCKET my_sock;
    my_sock = socket(AF_INET, SOCK_STREAM, 0);
    if (my_sock     {
        printf("Socket() error %d\n", WSAGetLastError());
        return -1;
    }
 
    // ??? 3 - ??????? ????????
    // ?????????? ???????? sockaddr_in - ?????? ???? ? ???? ???
    sockaddr_in dest_addr;
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(PORT);
    HOSTENT *hst;
 
    // ?????????? IP ???? ?? ??????? ? ???? ???
    if (inet_addr(SERVERADDR) != INADDR_NONE)
        dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
    else
    {
        // ????? ??????? IP ???? ?? ????????? ????? ???
        if (hst = gethostbyname(SERVERADDR))
            // hst->h_addr_list ???? ?? ???? ????,
            // ? ???? ?????? ?? ????
            ((unsigned long *)&dest_addr.sin_addr)[0] =
            ((unsigned long **)hst->h_addr_list)[0][0];
        else
        {
            printf("Invalid address %s\n", SERVERADDR);
            closesocket(my_sock);
            WSACleanup();
            return -1;
        }
    }
 
    // ???? ??? ????? - ?????? ???????? ????????
    if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)))
    {
        printf("Connect error %d\n", WSAGetLastError());
        return -1;
    }
 
    printf("OK.\n\n", SERVERADDR);
 
   char buffer[64];
    // ??? 4 - ???? ? ????? ?????
    int nsize;
nsize = recv(my_sock, &buff[0], sizeof(buff) - 1, 0);
        // ???? ???????? ???? ? ???? ????
        buff[nsize] = 0;
 
      strcpy_s(buffer, &buff[15]);

      printf("%s\n", buffer);

      unsigned char  *dest;

      unsigned char* y ;
      y = (unsigned char*) buffer;

      const char* q = "AKbna4";
      unsigned char* w ;
      w = (unsigned char*) q;

      dest = gsseckey( NULL, y, w, 0);
      std::cout
        // ????? ?? ??
        printf("%s", buff);
 


      char sss[256];
      strcpy_s( sss, "\\gamename\\serioussamse\\gamever\\1.6\\location\\0\\validate\\" );

      char * destchar;
      destchar = (char *) dest;
      strcat_s( sss, destchar);
      strcat_s( sss, "\\final\\\\queryid\\1.1\\");
      
      cout         // ??? ?????????? ???? ? ??????????
       // printf("\nyou:"); fgets(&buff[0], sizeof(buff) - 1, stdin);

      send(my_sock, sss, strlen(sss), 0);

      char query[64] = "\\list\\cmp\\gamename\\serioussamse\\final\\";
      send(my_sock, query, strlen(query), 0);

      recv(my_sock, &buff[0], sizeof(buff) - 1, 0);

      printf("\n%s\n", buff);

      cout         // ?????? ???? ?????? ????
       
   
    printf("Recv error %d\n", WSAGetLastError());
    closesocket(my_sock);
    WSACleanup();

   system("pause");
   return 0;
}

[/spoiler]
  • Author
  • Localization

aluigi, posted Thu Nov 26, 2015 2:08 pm (10120)


Port 28900 is used for encrypted queries (enctype 1, 2 and X), 28910 for plain-text.
If you need a client example (for wireshark because the code is not simple) check gslist: http://aluigi.altervista.org/papers.htm#gslist
If you want to "play" with encryption and need a minimalistic code as test and example:
http://aluigi.org/papers/enctypedec.zip

This stuff has been discussed a lot also on my old forum so check there too with google:
"enctype" site:aluigi.freeforums.org
  • Author
  • Localization

dex123, posted Fri Nov 27, 2015 12:03 pm (10157)


zomg, enctype1 is just 4 bytes and 1 short like Valve master server responce. I should have known :mrgreen: thx
  • Author
  • Localization

aluigi, posted Mon Nov 07, 2016 6:18 am (18627)


A note regarding using gslist with the unofficial Gamespy servers, it's necessary to specify the key of the requested game.
Example for qtracker:
Code:
gslist -n ironstorm -Y ironstorm y5Ei7C -x 65.112.87.186
Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.