Category: Hack

Joaca Sah pe Yahoo Games cu Chess engine

O scurta descriere tehnica

In ultimii ani au fost dezvoltate o multitudine de engine-uri pentur sah, unele cu versiuni gratuite dar cele mai complexe cu versiuni ce pot fi cumparate( sau gasite). Un engine de sah este o aplicatie care poate analiza o anumita pozitie pe tabla de sah si poate indica cea mai buna mutare. Exista o interfata de comunicare care este de obicei CLI (cu input pe STDIN siĀ  output pe STDOUT) si ca protocol sunt doua optiuni principale, Xboard si UCI, majoritatea engine-urilor importante suportandu-le pe ambele.

Cel de-al doilea protocol, “Universal Chess Interface” fiind dezvoltat mai recent, are suport mai bun pentru multithreading, setarea memoriei alocate si altele si pe el il vom alege mai departe pentru implementare.

Ca engine vom alege Rybka considerat cel mai bun sau printre cele mai bune in diferite clasamente. Versiunea curenta este 3 si se asteapta sa apara versiunea 4 dar are si o versiune gratuita, mai veche care poate fi descarcata de pe site-ul rybka: Rybka 2.2n2. Aceasta este evident mai slaba dar prezinta functionalitatile de baza similare cu toate celelalte versiuni. Din nou, va reamintesc ca versiune 3 poate fi “gasita”.

Ce ne-am propus sa facem

Ne-am hotarat sa creem un programel care sa ne ajute sa trisam la jocul de sah de pe games.yahoo.com. De ce games.yahoo.com? Pentru ca este mare, stabil si cu multi utilizatori. In plus cu 1-2 ani in urma si-au schimbat interfata de joc si folosesc in momentul asta Flash. Pachetele se pot intercepta si in cazul flash-ului dupa decodarea swf-urilor ne putem da seama ce se foloseste si unde. Astfel descoperim ca foloseste un anumit limbaj de comunicare si printr-un modul de decriptare putem intelege cand se efectuaza mutari si putem folosi engine-ul de sah pentru calculul viitoarelor mutari posible. Termenul “a trisa” este corect deoarece in 15 secunde se pot prevede 7-10 mutari in avans, iar acest numar de mutari poate ajunge pana la 12-14 in cazul folosirii unui procesor quad core puternic dar si cu un engine performant care are mutithreading.

Sa trecem la treaba:

Pentru aplicatia principala – Visual Basic .NET. Pentru capturarea pachetelor – WinPcap. Pentru integrarea WinPcap cu VB – SharpPcap.

Este nevoie de crearea catorva clase pe care le vezi putea gasi mai jos in codul sursa:

  • “sah.vb” – pentru lucrul cu Engine.exe
  • “TcpManage.vb” pentru reordonarea pachetelor TCP. Pachetele sunt capturate cu WinPcap care lucreaza la Layer 2 – Link Layer si pachetele TCP au un sistem de verificare (de exemplu pachete sunt retrimise daca nu ajung cu bine la destinatie) si nu ajung intotdeauna in ordinea in care au fost trimise.
  • “comunicatie.vb” pentru decodarea informatiilor din pachete in instructiuni de joc cum ar fi mutarile.

Dupa o analiza amanuntita a protocolului de comunicatie cu serverul de joc s-a dezvoltat versiunea 1.0: YahooChessHelper.v1.0.0.0. Cu aceasta se pot detecta mutarile noi. Fiecare mutare este transmisa engine-ului care are la dispozitie 15 secunde sa gasesca cea mai buna mutare pe care o afiseaza pe ecran in mod text si grafic.

Cerintele sunt .NET Framework 2.0 si WinPcap. Fisierele SharpPcap.dll si Engine.exe sunt incluse in arhiva. Engine.exe este de fapt Rybka versiunea gratuita 2.2n2. Daca doriti sa folositi alte engine-uri inlocuiti acest fisier. Momentan functioneaza doar daca jucati cu piesele albe.

Utilizare:

Dupa pornire se selecteaza din lista placa de retea pe care se afla conexiunea la internet, se intra la Yahoo Games Chess pe o camera, se face un joc la o masa si se da Start inainte de a incepe un jocul. Daca doriti sa incepeti alt joc dati Stop si din nou Start.

Codul sursa poate fi downloadat aici: YahooChessHelper.proj cu scuze de rigoare daca va fi indescifrabil pe alocuri.

Multiple conexiuni terminal services (remote desktop) fara windows server

Astazi va vom prezenta o solutie alternativa la Terminal Services/Citrix.

In aproape toate softurile de gestiune/contabilitate/logistica, atunci cand este nevoie de folosirea softului de la distanta exista posiblitatea utilizarii unei conexiuni remote catre serverul cu aplicatii. Aceste nevoi sunt cauzate de multipli factori si solutia are avantajele si dezavantajele ei.

Avantaje:

Nu este nevoie de instalarea unui client al softului local si de latentele de conexiune ce ar aparea daca acest lucru s-ar intampla. Daca un soft este facut pentru lucrul in retea, atunci anumite proceduri care au nevoie de timp de raspuns mic(0.5ms) vor fi intarziate in cazul folosirii unei conexiuni prin internet unde latenta incepe de la 2-3ms pana la 30-50ms in tara si 50-100 in afara (luand cazurile medii actuale).

Ar mai exista posibilitatea instalarii unui client local cu un server de baza de date mai mic (o replica partiala a bazei de date principala). In cazul acesta trebuie sa existe si un modul de sincronizare intre cele doua baze de date care ar fi din nou eliminat.

Dezavantaje:

Conexiunea la internet trebuie sa functioneze pentru a se putea lucra in comparatie cu instalarea locala cu server de baza de date.

Maparea anumitor resurse din calculatorul aflat la distanta se poate face greoi. Cu imprimantele este ok din testele de pana acum dar anumite porturi (serial, usb) pot prezenta latente care sa aiba impact asupra aplicatiilor care le folosesc.

Cum functioneaza aceasta conectarea de la distanta. Utilizatorul remote se autentifica pe server si primeste un desktop (sau doar anumite aplicatii) pe care il poate vedea intr-o fereastra si cu care poate interactiona cu ajutorul mousului si a tastaturii. Aplicatii rulate remote sunt procese care ruleaza pe server iar spre client sunt transmise imagini (si sunete).

Exista doua mari solutii Microsoft Terminal Services si Citrix Presentation Server. Ambele au preturi considerabile.

Evident exista si alte posibilitati de conectare remote gratuite, de exemplu protocolul VNC. Acestea insa ofera posibilitatea conectarii la desktopul unui user care foloseste calculatorul si nu permite noi/multiple sesiuni.

Inca cazul sistemului de operare Windows cu licentele sale destinate utilizatorului final (Windows XP, Windwos vista, Windows 7), a fost introdusa posiblitatea conexiunii remote, numita Remote Desktop care permite folosirea calculatorului prin acelasi tip de conexiune dar simultan de maxim un singur utilizator fie el local sau remote. Aici intra in discutie si subiectul acestui post.

Cativa baieti inteligenti au gasit o posibilitate de a modifica anumite dll-uri din windows si acestea sa ramana certificate de microsoft. In cazul de fata, vorbim de termsrv.dll care in cazul versiunilor enumerate mai sunt, limiteaza numarul conexiunilor la 1. Acest numar se poate modifica si fiind probabil o locatie din fisier de un Byte (8 biti), valoare maxima este de 256 conexiuni simultan. Problema certificatului fisierului este pentru Windows Vista si Windows 7 unde sistemul nu prea vrea sa porneasca cu fisiere “nesigure”.

Patch-ul este evident nu tocmai legal, dar practic este foarte grea detectarea faptului ca se foloseste. Avantajele sunt considerabile nemaifiind necesara nici macar investirea intr-un sistem de operare server. Teoretic este nevoie de un Windows XP de exemplu, cu suficient de mult RAM pentru a tine cati useri este nevoie.

Informatii despre instalare si download gasiti aici: deepxw.blogspot.com


Dansette