Warning Nu esti autentificat. Te rog autentifica-te sau inregistreaza-te pentru a avea acces la toate facilitatile forumului.
SkullBox  
Decembrie 04, 2008, 05:44:38 am
Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
Noutăţi: Gadgetinho - IT cu zambetul pe buze
 
 SkullBoxDirector webTutoriale  Pagina principală   Ajutor Caută Autentificare Creează un cont  
Pagini: [1]
  Imprimă  
Subiect: Protocol CS 1.6  (Citit de 1028 ori)
0Utilizatori şi 1 Vizitatori
3Nigma
*
Deconectat Deconectat

Gen: Bărbat
Mesaje: 970


SkullBox Guardian


WWW
Protocol CS 1.6, Iulie 23, 2007, 03:44:49 pm

Ok ... mi-am facut ceva timp liber si m-am gandit sa postez un tutorial daca nu interesant pentru unii...sigur de folos pentru altii. lol Tongue

Vreau ca acest topic sa fie exclusiv tutorialelor dedicate Protocolului de CS1.6 [Counter-Strike].Sa analizam reteaua si sa
vedem ce se petrece in culisele acestui joc.[ca doar asa il jucam ,nu? Big grin].Motivul acestui tutorial este acela ca nu exista specificatii
pe internet la acest protocol...sa dau o mana de ajutor celor ce cauta Smile si poate a ridicam putin nr de accesari la pagina,ca doamne
ajuta,jucatori sunt multi Smile ]

Ok ... astea fiind spuse... mi-am scos Ethereal-ul din directorul de programe neinstalate,l-am instalat,am pornit counterul,am pornit
programul si am inceput sa analizez.

In acest prim post vom vorbi despre ce se intampla in momentul in care Dorim sa achizitionam lista de servere de pe internet.
Stiti voi,atunci cand intrat in CS,dati Find Servers si apoi selectati tab-ul Internet de vedeti lista aceea ce tot creste.

Sa trecem direct la treaba

IP Server de Achizitie lista : 69.28.151.162
Port : 27010
Tipul conexiunii : UDP
Ok...deci sa zicem ca am simula o conexiune la acea adresa,de tip UDP,pe acel port...ce s-ar intampla? Mai nimic...trebuie sa ii transmitem ceva
serverului ca sa-i spunem ca dorim o lista.La prima conexiune i-am trimite asta:
Cod:
0x31, 0xff   //header standard
0x30,0x2e,  //the ip section 0.0.0.0
0x30,0x2e,
0x30,0x2e,
0x30,
0x3a,0x30,  //port section :0
0x00        //sfarsit stream

Acesta este primul request si este probabil si cel mai simplu deoarece,asa cum am observat,se mai transmit si alte date la server precum informatiile
despre filtrul selectat...dar merge si asa si oricum filtrul se poate aplica si pe partea clientului...desi pe partea serverului ar reduce timpul de executie
de pe partea clientului...dar eu le consider irelevante si vom sari peste acea parte.
Asadar...noi am trimis serverului informatii ca dorim lista de ip-uri incepand de la 0.0.0.0:0.
Dupa acest request...serverul va trimite,tot prin acelasi protocol,un datagram ce contine exact 1392Bytes...
Mai jos este un memory dump la un astfel de reply
Cod:
0030         ff ff ff ff 66 0a 52 4d b3 d4 69 88 52 4d    ....f.RM..i.RM
0040   d0 c2 69 87 52 4d fe fc 6d 6f 52 4d fe fc 69 87  ..i.RM..moRM..i.
0050   52 4d fe fe 69 87 52 4d 1e bc 69 87 52 4d 06 e2  RM..i.RM..i.RM..
0060   69 87 52 4d 06 e2 6d 6f 52 48 a6 9f 69 96 52 4e  i.RM..moRH..i.RN
0070   db 1d 69 87 52 4e f0 b8 69 87 52 4f 03 9b 69 87  ..i.RN..i.RO..i.
0080   52 47 da 1e 69 87 52 4f 92 4e 69 87 52 4f 92 4e  RG..i.RO.Ni.RO.N
0090   69 88 52 43 aa 96 69 87 52 4f bd fa 69 87 52 4f  i.RC..i.RO..i.RO
00a0   ea ae 69 87 52 4f f9 46 69 87 52 43 5e 4e 69 87  ..i.RO.Fi.RC^Ni.
00b0   52 50 fc 79 2b 67 52 50 fc 79 69 83 52 50 fc 79  RP.y+gRP.yi.RP.y
00c0   69 8b 52 50 fc 79 69 93 52 50 fc 79 65 cc 52 50  i.RP.yi.RP.ye.RP
00d0   fc 79 69 d0 52 50 fc 79 61 da 52 50 fc 79 59 e5  .yi.RP.ya.RP.yY.
00e0   52 42 46 be 69 87 52 50 fc 79 59 e6 52 42 3b e2  RBF.i.RP.yY.RB;.
00f0   d6 f7 52 50 fc 79 4e e8 52 42 3b e2 d6 f4 52 42  ..RP.yN.RB;...RB
0100   3b e2 d6 e2 52 42 3b e2 d7 32 52 42 3b e2 d7 19  ;...RB;..2RB;...
0110   52 42 3b e2 d7 18 52 42 3b e2 d7 13 52 42 3b e2  RB;...RB;...RB;.
0120   d7 11 52 52 81 12 69 87 52 53 3f 1f 69 87 52 29  ..RR..i.RS?.i.R)
0130   ef a5 69 87 52 5d 0e 98 d2 f5 52 5d 0e 98 d2 f7  ..i.R]....R]....
0140   52 5d 0e 98 d2 f8 52 22 4a b7 fc 33 52 5d 0e 98  R]....R"J..3R]..
0150   d2 f9 52 22 4a b7 fc 31 52 5d 0e 98 d2 fa 52 5d  ..R"J..1R]....R]
0160   0e 98 d2 fb 52 22 4a b7 fc 2a 52 5d 0e 98 d2 fc  ....R"J..*R]....
0170   52 5d 0e 98 d2 fd 52 5d 0e 98 d2 fe 52 5e dc 30  R]....R]....R^.0
0180   69 87 52 5e dc 3e 69 91 52 5e dc 4a 69 87 52 5e  i.R^.>i.R^.Ji.R^
0190   dc 66 69 91 52 5e dc 87 69 91 52 5e dc 96 69 91  .fi.R^..i.R^..i.
01a0   52 5e dc bb 69 91 52 5e dc bf 69 91 52 5e dc eb  R^..i.R^..i.R^..
01b0   69 91 52 5e e4 0a 69 87 52 5e e4 1b 69 87 52 5e  i.R^..i.R^..i.R^
01c0   e4 22 69 87 52 5e e4 25 69 87 52 5e e4 26 69 87  ."i.R^.%i.R^.&i.
01d0   52 5e e4 2c 69 87 52 5e e4 2d 69 87 52 5e e4 2f  R^.,i.R^.-i.R^./
01e0   69 87 52 5e e4 30 69 87 52 5e e4 37 69 87 52 5e  i.R^.0i.R^.7i.R^
01f0   e4 38 69 87 52 5e e4 39 69 87 52 5e e4 49 69 87  .8i.R^.9i.R^.Ii.
0200   52 5e e4 4a 69 87 52 03 9b 0e 69 87 52 5e e4 4c  R^.Ji.R...i.R^.L
0210   69 87 52 00 db b5 69 88 52 5e e4 4d 69 87 52 5e  i.R...i.R^.Mi.R^
0220   e4 4f 69 87 51 ff 18 56 69 87 52 5e e4 50 69 87  .Oi.Q..Vi.R^.Pi.
0230   52 5e e4 51 69 87 52 5e e4 55 69 87 52 5e e4 64  R^.Qi.R^.Ui.R^.d
0240   69 87 52 5e e4 69 69 87 52 5e e4 71 69 87 52 5e  i.R^.ii.R^.qi.R^
0250   e4 73 69 87 52 5e e4 77 69 87 52 5e e4 83 69 87  .si.R^.wi.R^..i.
0260   52 5e e4 84 69 87 52 5e e4 87 69 87 52 5e e4 8a  R^..i.R^..i.R^..
0270   69 87 52 5e e4 8d 69 87 52 5e e4 90 69 87 52 5e  i.R^..i.R^..i.R^
0280   e4 93 69 87 52 5e e4 94 69 87 52 5e e4 99 69 87  ..i.R^..i.R^..i.
0290   52 5e e4 9a 69 87 52 5e e4 9c 69 87 52 5e e4 9d  R^..i.R^..i.R^..
02a0   69 87 52 5e e4 ac 69 87 52 5e e4 b0 69 87 52 5e  i.R^..i.R^..i.R^
02b0   e4 b1 69 87 52 5e e4 b2 69 87 52 5e e4 b6 69 87  ..i.R^..i.R^..i.
02c0   52 5e e4 b8 69 87 51 ed d0 21 69 8b 52 5e e4 bc  R^..i.Q..!i.R^..
02d0   69 87 51 ed ca d2 69 87 52 5e e4 d2 69 87 52 5e  i.Q...i.R^..i.R^
02e0   e4 d4 69 87 52 5e e4 d5 69 87 52 5e e4 d9 69 87  ..i.R^..i.R^..i.
02f0   52 5e e4 e6 69 87 52 5e e4 e7 69 87 52 5e e4 e9  R^..i.R^..i.R^..
0300   69 87 51 ec d0 f7 69 87 52 5e e4 eb 69 87 51 ec  i.Q...i.R^..i.Q.
0310   bc c9 69 87 51 ec b5 22 69 89 52 5e e4 ee 69 87  ..i.Q.."i.R^..i.
0320   51 ec b5 22 69 88 52 5e e4 f0 69 87 51 ec b5 22  Q.."i.R^..i.Q.."
0330   69 87 52 5e e4 f5 69 87 52 5e e4 f7 69 87 51 ec  i.R^..i.R^..i.Q.
0340   a4 1a 69 87 52 5e e4 f9 69 87 52 60 16 c2 69 87  ..i.R^..i.R`..i.
0350   52 60 16 c3 69 87 52 60 16 c4 69 87 52 60 16 c5  R`..i.R`..i.R`..
0360   69 87 51 eb fc b5 69 87 51 eb f8 19 e4 a3 52 60  i.Q...i.Q.....R`
0370   40 1e 69 8d 51 eb f4 6e f8 f1 51 eb f0 7d d6 d9  @.i.Q..n..Q..}..
0380   52 60 40 60 69 9b 52 60 40 61 69 a5 52 60 40 8e  R`@`i.R`@ai.R`@.
0390   69 90 52 60 40 8e 69 94 51 eb d0 63 69 87 52 60  i.R`@.i.Q..ci.R`
03a0   40 8e 69 98 51 eb ca b0 69 8a 51 eb c9 66 69 87  @.i.Q...i.Q..fi.
03b0   52 60 40 8e 69 a6 52 60 40 8e 69 a8 51 eb 8d 5e  R`@.i.R`@.i.Q..^
03c0   69 87 52 60 40 91 69 90 51 ea fe ea f7 24 52 60  i.R`@.i.Q....$R`
03d0   40 91 69 92 51 ea d6 cd f4 ce 52 60 40 91 69 98  @.i.Q.....R`@.i.
03e0   51 ea d6 cd f4 53 52 60 40 91 69 a0 51 ea d6 cd  Q....SR`@.i.Q...
03f0   f4 1c 52 60 45 21 69 87 52 60 49 07 69 87 52 60  ..R`E!i.R`I.i.R`
0400   49 19 69 87 51 ea d5 40 69 87 52 60 49 20 69 87  I.i.Q..@i.R`I i.
0410   51 ea cc 34 0e 46 52 60 49 21 69 87 52 60 49 22  Q..4.FR`I!i.R`I"
0420   69 87 52 60 49 23 69 87 52 60 49 24 69 87 52 60  i.R`I#i.R`I$i.R`
0430   49 25 69 87 52 60 49 26 69 87 52 60 49 3d 69 87  I%i.R`I&i.R`I=i.
0440   52 60 49 4c 69 87 51 ea 8f f0 69 87 52 60 4b 1d  R`ILi.Q...i.R`K.
0450   69 87 52 60 4b 29 69 87 52 60 4d 8b 62 3e 52 60  i.R`K)i.R`M.b>R`
0460   4d 8c 57 1c 52 60 4d 8d 58 48 52 60 4d 8e 57 80  M.W.R`M.XHR`M.W.
0470   51 e9 fa a4 69 88 52 60 4d 97 34 26 52 60 55 0a  Q...i.R`M.4&R`U.
0480   5a 3c 52 60 55 0e 56 b8 52 60 55 1d 5a 3c 51 e9  Z0490   e3 8c 69 87 52 60 55 22 5a a0 52 60 55 24 69 87  ..i.R`U"Z.R`U$i.
04a0   52 60 55 2e 5b cc 51 e9 d7 31 69 87 52 60 55 33  R`U.[.Q..1i.R`U3
04b0   56 b8 51 e9 c5 6f 69 87 52 60 57 03 6b 08 51 e9  V.Q..oi.R`W.k.Q.
04c0   b9 de 69 87 52 60 57 03 6b 6c 52 60 57 0b 6b 08  ..i.R`W.klR`W.k.
04d0   52 60 57 0b 6b d0 51 e9 88 2d 69 87 52 60 57 0c  R`W.k.Q..-i.R`W.
04e0   6c 34 51 e9 74 8f 69 87 52 60 57 0c 6a 40 52 60  l4Q.t.i.R`W.j@R`
04f0   57 0c 6a a4 52 60 57 0d 6a 40 52 60 57 0d 6a a4  W.j.R`W.j@R`W.j.
0500   51 e9 6a 8a 69 8a 52 60 57 10 6b 08 52 60 57 10  Q.j.i.R`W.k.R`W.
0510   6b 6c 51 e9 5b 13 69 87 52 60 57 11 6b d0 52 60  klQ.[.i.R`W.k.R`
0520   57 12 6a 40 52 60 57 14 6c 34 51 e9 4e e4 69 82  W.j@R`W.l4Q.N.i.
0530   52 60 57 14 6a 40 52 60 57 14 6a a4 51 e9 4e 80  R`W.j@R`W.j.Q.N.
0540   fc 0d 52 60 57 23 6b 08 51 e9 11 9d 69 87 52 60  ..R`W#k.Q...i.R`
0550   57 35 6c 34 52 60 57 35 6a a4 51 e8 b1 e4 69 87  W5l4R`W5j.Q...i.
0560   52 60 58 a0 56 2c 51 e8 b1 2b 69 87 52 60 5b 1f  R`X.V,Q..+i.R`[.
0570   69 87 52 60 5b 44 69 87 52 60 5b 4a 69 87 52 60  i.R`[Di.R`[Ji.R`
0580   61 bc 69 78 52 60 65 10 6a a4 52 60 65 11 6b 08  a.ixR`e.j.R`e.k.
0590   52 60 65 11 69 dc 51 e7 ea 79 69 87 52 60 66 0c  R`e.i.Q..yi.R`f.
05a0   69 87                                            i.


Dumpul nu este complet intrucat am exclus headerele de protocol care il insoteau [IP,UDP,Ethernet,etc].
Pentru cei ce nu stiu ... acesta este un memory dump...in aceste 3 tabele se gasesc,numerotand de la stanga la dreapta, adresa de baza a randului,
coloana cu date brute[cea din mijloc - formatata in hexazecimale] si cea din dreapta ... coloana care reprezinta interpretarea bytesilro in
sistem ascii,mai atractiv Smile.
Ok ... avem cei 1392de Bytes...si acestia au o sectiune/header ce nu ne intereseaza ... aceea contine primii 6B,care in cazul nostru sunt:
Cod:
ff ff ff ff 66 0a

Am eliminat sectiunea...apoi,va vine sau nu a crede,dar restul de Bytes sunt adrese de servere impreuna cu portul lor disponibile pe internet.

Cum sunt formate aceste adrese?
Fieccare adreasa este alcatuita din 6B in care
Cod:
4B se folosesc pentru ip-ul serveului [IPv4 only] in format [x.y.z.w]
2B se folosesc pentru portul de conexiune

Probabil va intrebati de ce 2B pentru port? Pai intr-un Byte incap 255 ,iar gameri stiu ca adresele de CS sunt in general de forma 27015...mult mai mari,dar
care incap lejer in 2Bytes doarece 2B=32767. Ma intreb daca asta inseamna ca nu pot exista servere cu ip mai mare de 32767 ... dar asta va las pe voi sa aflati Smile
Oricum daca ar exista nu cred ca ar fi indexate de serverul central...sau nu stiu Tongue.Vedeti voi daca va intereseaza...

Asadar...avem primii 6B nefolositori si urmatorii din 6 in 6 B avem o adresa de server impreuna cu portul lui.Asta rezulta ca din pachetul de 1392 de date vom avea un numar de (1392-6)/6=231 adrese de ip.

Haideti sa aplicam ce am zis mai sus...pe o grupare de 6B consecutivi ... sa o luam pe ultima grupare.
Asta este :
Cod:
52 60 66 0c 69 87

Primii 4B tradusi individual in baza 10 ar da urmatoarea adresa de ip : 82.96.102.12 Ceea ce pare a fi o adresa de ip Tongue acum sa vedem portul :
Urmatorii 2B tradusi impreuna in baza 10 ar da urmatorul port :27015
Haha...nu este frumos portul ? Smile
Ok deci utlima adresa din lista unde am gasi un server ar fi 82.96.102.12:27015 . Puteti sa incercati sa vedeti daca va puteti conecta...eu nu garantez ca serverul respectiv mai este on intrucat dump-ul are cateva zile...si erverul e posibil sa fie particular...dar garantez ca judecata este buna Smile .

Asadar avem o lista de 231 de adrese unde se afla servere de cs.Cum achizitionam informatii privind numele servului,nr de locuri libere,harta care este jucata,etc le vom discuta intr-un post viitor.

Nu e o coincidenta ca am luat ultima grupare de 6B si l-am transformat in adresa de ip cu port.Desi noi avem primele 231 de adrese..ce facem sa luam urmatoarele 231 de adrese?
Mai tineti minte cand am facut primul request, am trimis date ca dorim sa pornim de la 0.0.0.0:0 si sa ne returneze servere?
Acum...daca dorim sa continuam cu lista... mai trimitem un request de achizitie servere .... dar de data asta pornind de la ultima adresa de server care am primit-o ... ca achizitionarea sa fie continua si serverul sa ocupe tot domeniu.

Ok...in primul request nu ati vazut prea multe detalii [erau doar 0 ],acum veti vedea ceva interesant.Pentru a continua achizitia de servere,datele trimise trebuiesc putin alterate...
In sens ca trimitem fiecare cifra ca corespondentul ei in baza 16.
De aceea conversia dintre hex -> zecimal este utila  in momentul de fata.
Asta o explica tabelul de mai jos
Cod:
Zecimal         Hex
0            0x30
1            0x31
2            0x32
3            0x33
4            0x34
5            0x45
6            0x36
7            0x37
8            0x38
9            0x39


Si mai sunt :
Cod:
[punct]      0x2e
[doua puncte] 0x3a

Datele de header,universal valabile pentru requestul asta :
Cod:
0x31, 0xff

,noul nostru request,pentru a continua achizitia de ip-uri de la ultimul procesat...ar fi:
Cod:
0x31, 0xff               //prefixul
0x38,0x32,0x2e,          //82.
0x39,0x36,0x2e,          //96.
0x31,0x30,0x32,0x2e      //102.
0x31,0x32,               //12
0x3a,                    //:
0x37,0x30,0x31,0x35,     //27015
0x00                     //end of stream


Liniar am trimite bytes din hexi astia :
Cod:
31 ff 38 32 2e 39 36 2e 31 30 32 2e 31 32 3a 37 30 31 35 00


Sper ca ati inteles cate ceva din acest mic tutorial...sper ca altele sa urmeze dupa cum timpul imi va permite

Pentru nelamuriri sau sugestii...postati aici
©3Nigma 23Iulie 2007
Memorat


Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...
3Nigma
*
Deconectat Deconectat

Gen: Bărbat
Mesaje: 970


SkullBox Guardian


WWW
Protocol CS 1.6, Iulie 24, 2007, 09:34:46 pm

Am aflat cum se iau ip-urile de pe internet care sigur ruleaza un server de cs1.6,acum sa vedem cum sa chestionam serverele pentru a afla mai multe informatii despre ele.

Ok ... totul se face in conexiune de tip UDP. Odata ce am aflat ip-ul si portul serverului,ne conectam la acel host si ii trimitem urmatoarea secventa de bytes[ii reproduc in Hex]:
Cod:
ff ff ff ff 54 53 6f 75 72 63 65 20 45 6e 67 69 6e 65 20 51 75 65 72 79 00

Se observa o sectiune de header :
Cod:
ff ff ff ff

Restul de date daca le-am traduce ar fi in ascii:
Cod:
TSource Engine Query.

Ultimul byte [ . ] este defapt ascii(00). In rest nu suna frumos? Practic noi chestionam serverul sa ne dea mai multe informatii.
Dupa acest pachet trimis...vom primi un pachet de la server cu informatii aditionale.
Eu am chestionat serverul 86.124.209.80:27015
Si am sa va prezint vizual ce am primit :

Se observa inca din imagine ca se pot delimita 2 zone de "receptie" :

· Date despre server
· Date despre jucatorii de pe server [vom discuta desprea asta cu alta ocazie]

Ok ... datele despre server le-am primit in formatul acesta [v-ati prins...iar fac un network dump Tongue ] :
Cod:
0020                                 ff ff ff ff 6d 31            ....m1
0030   36 39 2e 32 35 34 2e 32 36 2e 31 31 35 3a 32 37  69.254.26.115:27
0040   30 31 35 00 52 61 7a 76 61 6e 2e 76 6f 6f 64 6f  015.Razvan.voodo
0050   6f 2e 72 6f 00 61 77 70 5f 6d 61 70 32 00 63 73  o.ro.awp_map2.cs
0060   74 72 69 6b 65 00 43 6f 75 6e 74 65 72 2d 53 74  trike.Counter-St
0070   72 69 6b 65 00 08 13 2f 64 77 00 01 77 77 77 2e  rike.../dw..www.
0080   63 6f 75 6e 74 65 72 2d 73 74 72 69 6b 65 2e 6e  counter-strike.n
0090   65 74 00 00 00 01 00 00 00 00 9e f7 0a 00 01 00  et..............
00a0   00                                               .

Am eliminat bineinteles headerele de ip si udp,nu ne intereseaza sectiunea respectiva si am ramas doar cu datele pure.
Se observa o regiune header
Cod:
ff ff ff ff 6d  ....m

pe care normal ca o evitam,dar o specificam ... Winking
Apoi se observa o sectiune de
Cod:
31 36 39 2e 32 35 34 2e 32 36 2e 31 31 35 3a 32 37 30 31 35 00

In afara de ultimul byte care este 00 -> terminator de sir ... aplicand regula de formare a requestului de servere de mai sus ... ne iasa urmatorul ip:
Cod:
86.124.209.80:27015

Adica ip-ul serverului ...
Asadar ip-ul serverului este intre header si primul terminator de sir.

Continuam[peste terminatorul de sir Tongue]...
Avem aceasta secventa de bytes:
Cod:
52 61 7a 76 61 6e 2e 76 6f 6f 64 6f 6f 2e 72 6f 00

Traducat secventa asta in asci[neincluzand ultimul byte din secventa 00] am obtine :
Cod:
Razvan.voodoo.ro

Acesta este numele serverului ...
Asadar ... Numele serverului este situat intre primul terminator de sir si al doilea terminator de sir.

Continuam...
Cod:
61 77 70 5f 6d 61 70 32 00

Tradus in ascii[fara ultimul byte:
Cod:
wp_map2

Asta este numele hartii care se joaca in momentul de fata pe server.
Deci intre al 2-lea si al 3-lea terminator de sir se afla numele hartii ce se joaca in momentul de fata pe server.

Apoi ...
Urmeaza o secventa standard de bytes :
Cod:
63 73 74 72 69 6b 65 00 43 6f 75 6e 74 65 72 2d 53 74 72 69 6b 65 00

Care este tradus in ascii :
Cod:
cstrike.Counter-Strike

Cred ca acest segment standard are rolul de a valida tipul de server...posibil sa oscileze intre Half Life si cstrike,dar nu sun
sigur.In orice caz...in cazul serverului de CS1.6,el este constant.
Deci ... intre terminatorul 3 ,sarind peste 4 si pana la terminatorul 5 avem o secventa de 22B[standard]

Mai departe..urmeaza secventa de sloturi ocupate/sloturi totale.
Asta este trecuta pe cate un byte separat de info . In cazul nostur avem :
Cod:
08 13

care tradus in baza 10 ar insemna
Cod:
8 19

asta inseamna 8 sloturi ocupate ,19 sloturi in total.Probabil va intrebati de ce la mine in screen sunt 9 sloturi ocupate,19 sloturi libere?
Ei bine...aici eu sunt devina...pana am dat focus pe window-ul de cs,se pare ca a mai intrat un jucator . Dar asa este cu acesti 2B.

Urmeaza iar o secventa de bytes care este standard in toate requesturile de acest fel:
Cod:
2f 64 77 00 01 77 77 77 2e 63 6f 75 6e 74 65 72 2d 73 74 72 69 6b 65 2e 6e 65 74 00 00 00 01 00 00 00 00 9e f7 0a 00 01

Se pare ca daca ar fi sa traducem in ascii,se observa si o adresa de net in acest pachet:
Cod:
/dw..www.counter-strike.net..............

Dar precizez inca odata...aceasta secventa este standard in toate requesturile de astfel ...
deci avem o secventa de 40B.

Ne mai raman 2B din tot pachetul de analizat.Acestia sunt 00 00...ei bine...primul byte[la noi este 00] dar daca ar fi fost 01
atunci serverul ar fi Valve anti-cheat: Secure,ori la noi este 0 deci ar trebui sa fie Valve anti-cheat: Not Secure ceea ce si
este dupa cum imaginea o arata Smile.
Iar ultimul byte e terminatorul de sir.

Pingul il afiseaza in functie de cat de repede se face reply-ul de la server dupa ce clientul ii trimite pachetul de "chestionare" Smile

Atat pentru moment,pentru intrebari,nedumerir,sugestii postati aici
©3Nigma 24Iulie 2007
Memorat


Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...
R3AL
*
Deconectat Deconectat

Mesaje: 48


WWW
Protocol CS 1.6, Iulie 27, 2007, 12:08:18 pm

Gj 3Nigma  :thleft: SUPER tutorial Big grin
dar insa am o nelamurire:
am un convertor Hex -> ASCII
iar la unele secvente de hex mie nu imi traduce la fel cu ai  tradus tu, sau nu in totalitate ,de ex:

Cod:
31 36 39 2e 32 35 34 2e 32 36 2e 31 31 35 3a 32 37 30 31 35 00


mie mi-o traduce in:

Cod:
169.254.26.115:27015


iar la:

Cod:
63 73 74 72 69 6b 65 00 43 6f 75 6e 74 65 72 2d 53 74 72 69 6b 65 00


imi arata doar:

Cod:
cstrike


imi poti explica dc? Straight face

ps: folosesc net tools 4 pentru traducere hex <-> ascii, sa foloseasca programul alta baza sau c ?
Memorat

3Nigma
*
Deconectat Deconectat

Gen: Bărbat
Mesaje: 970


SkullBox Guardian


WWW
Protocol CS 1.6, Iulie 27, 2007, 12:50:37 pm

In primul rand felicitari ca te intereseaza de acest protocol Smile Daca ai si tu de adaugat ceva ... esti invitatul meu si chiar te rog sa ne imaprtasesti Smile .

Sa incep cu ultima intrebare ... ca e mai usor Tongue
daca ti-a dat cstrike la conversie inseamna ca e intradevar in baza 16,dar eu cred ca este alta problema ...
Observi ca imediat dupa 63 73 74 72 69 6b 65 care este defapt cstrike este 00 [terminatorul de sir] e doar o banuiala,eu nu lucrez cu programul respectiv ci mai degraba caut pe pagini web convertoare online,dar cred ca programul tau se opreste intentionat la delimitatorul de sir . Vezi daca nu are o optiune ceva...sa treaca peste el si sa traduca tot.

Acum ... referitor la prima intrebare...iti zic eu ce s-a intamplat Smile .
In mod normal ... asa este...intre header si primul delimitator de sir...este ip-ul serverului impreuna cu portul...uite ca ai dezlegat misterul cu privire la "de ce mai trimite serverul datele astea inapoi in coditiile in care noi ne folosim de aceeasi configuratie pentru a scoate datele astea de la server [configuratie luata si explicata in primul tut]?" Dupa intrebarea ta ... m-am pus nitel pe lucru ... si[asa cum am mai spus] ai dreptate... nu corespunde ip-ul tradus cu adevaratul ip al serverului.Stii de ce?
Stii ca sunt defapt 2 tipuri de servere de cs.
Unul de tip LAN si unul de tip Internet . Probabil ca ai observat ca daca incerci sa te conectezi pe un server de aflat cu restrictie de lan,nu te poti conecta. Cine zice ce si cum este in coditiile in care serverul principal[care ne returneaza lista de servere] se uita pe internet,si nu pe lan [lol] Laughing ?
Ei bine...ip-ul returnat[acela tradus] este defapt ip-ul de conexiune...el ne dicteaza daca serverul este pe lan sau in retea ...
In cazul nostru era ...
Cod:
169.254.26.115:27015

Si dupa cum stii
Cod:
169.254.xxx.xxx si 192.168.xxx.xxx

Sunt game de LAN . Deci serverul depistat de mine era pe Reteaua mea zonala. E si normal daca te uiti la ce ping avea Big grin .
Got it? Cu ajutorul tau am gasit si raspuns la intrebarea asta ...
Deci ... ip-ul returnat si recitit...este defapt adevaratul ip de conexiune!!!

Sa auzim numai de bine Winking  Applause

Uite asa invatam Winking
P.S : Am sa fac de indata ce am timp reviziile la tut ...
Memorat


Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...
Shocker
*
Deconectat Deconectat

Mesaje: 410



WWW
Protocol CS 1.6, Iulie 30, 2007, 09:14:34 am

Citat

Apoi ...
Urmeaza o secventa standard de bytes :
Cod:
63 73 74 72 69 6b 65 00 43 6f 75 6e 74 65 72 2d 53 74 72 69 6b 65 00

Care este tradus in ascii :
Cod:
cstrike.Counter-Strike

Cred ca acest segment standard are rolul de a valida tipul de server...posibil sa oscileze intre Half Life si cstrike,dar nu sun
sigur.In orice caz...in cazul serverului de CS1.6,el este constant.

Defapt urmeaza:
cstrike - mod-ul care ruleaza pe server [poate sa fie cstrike, wanted, blabla]
Apoi caracterul 00, sfarsit de linie
Counter-Strike - descrierea mod-ului care ruleaza pe server.

Citat

Urmeaza iar o secventa de bytes care este standard in toate requesturile de acest fel:
Cod:
2f 64 77 00 01 77 77 77 2e 63 6f 75 6e 74 65 72 2d 73 74 72 69 6b 65 2e 6e 65 74 00 00 00 01 00 00 00 00 9e f7 0a 00 01

Se pare ca daca ar fi sa traducem in ascii,se observa si o adresa de net in acest pachet:
Cod:
/dw..www.counter-strike.net..............

Dar precizez inca odata...aceasta secventa este standard in toate requesturile de astfel ...
deci avem o secventa de 40B.

Sirul asta reprezinta defapt: [fiecare caracter pe rand]
/ <-> 2F in hex, decimal 47 <= versiunea protocolul serverului
d <-> 64 in hex, d = DEDICATED server
w <-> 77 in hex, sistemul de operare pe care ruleaza serverul: w=windows, l=linux
00 - E protejat de parola serverul? 0=nu, 1=da
01 - Ruleaza vreun mod pe server? 0=nu, 1=da [e 1, deci da, ruleaza si anume cstrike]
www.counter-strike.net - site-ul mod-ului care ruleaza
00-urile alea ar mai fi: mod FTP, un byte nefolosit, mod version, mod size...
Memorat


Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day
Shocker
*
Deconectat Deconectat

Mesaje: 410



WWW
Protocol CS 1.6, Iulie 30, 2007, 09:39:08 am

In continuare va voi arata cum sa obtineti lista cu playeri de pe server, scorul lor si de cat timp joaca. Comunicarea cu serverul e identica cu metoda mentionata mai sus, UDP, blabla.
Trebuie sa trimiteti la server secventa:
Cod:

FF FF FF FF 70 6c 61 79 65 72 73

adica:
Cod:

....players

Nu e punct [ . ] ala, e caracterul 255 [$FF].

Serverul va returna ceva de genul:
Citat

FF FF FF FF 4 1 109 97 115 99 97 116 117 0 25 0 0 0 57 76 117 68 2 65 110 111 78 73 77 85 0 15 0 0 0 57 128 54 68 3 42 67 99 67 42 48 114 124 103 124 110 52 108 42 0 45 0 0 0 28 62 138 68 4 118 101 110 116 117 122 97 0 14 0 0 0 57 228 41 68

Cam ciudat, dar daca analizam sirul totul e clar:
Primii 4 bytes [FF FF FF FF] nu ne intereseaza, sarim peste. Al 5-lea byte reprezinta numarul de playeri [in cazul nostru e 4], apoi urmeaza niste seturi de caractere, pentru fiecare user [am colorat diferit pentru fiecare user], cele 4 seturi ar fi:
1 109 97 115 99 97 116 117 0 25 0 0 0 57 76 117 68
2 65 110 111 78 73 77 85 0 15 0 0 0 57 128 54 68
3 42 67 99 67 42 48 114 124 103 124 110 52 108 42 0 45 0 0 0 28 62 138 68
4 118 101 110 116 117 122 97 0 14 0 0 0 57 228 41 68
La toate sintaxa e aceeasi [vorbim de setul de caractere pentru fiecare user]:
Primul byte reprezinta numarul de ordine al userului [1, 2, 3, 4]
Urmatorii bytes pana la primul caracter 00 reprezinta NUMELE playerului
Apoi vine un DWORD [4 bytes] care reprezinta scorul playerului.
Iar apoi vine un alt sir de 4 bytes, care reprezinta timpul jucat pe server. Insa acesti 4 bytes trebuie tratati ca FLOAT / SINGLE [type casting], va reprezenta numarul de secunde. Bafta
Memorat


Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day
Shocker
*
Deconectat Deconectat

Mesaje: 410



WWW
Protocol CS 1.6, Iulie 30, 2007, 11:34:59 am

Citat
Si mai bine asa. Acum imi dau seama cum a facut Shocker  --Counter-Strike srerver status--(parca asa se numea)

 Cool
Citat
Ce mai urmeaza  ? Smile "Conectarea la un server" ? Smug

Ca sa te conectezi la server, prima data trebuie sa iei 'challenge-ul' de la server.
Trimiti la server:
Cod:

FF FF FF FF 67 65 74 63 68 61 6c 6c 65 6e 67 65

sau
Cod:

....getchallenge

O sa primesti inapoi ceva de genul:
Cod:

FF FF FF FF 41 30 30 30 30 30 30 30 30 20 31 35 36 39 32 37 33 32 34 30 20 32 00

adica:
Cod:

....A00000000 1569273240 2.

1569273240 este challenge-ul.

Conectarea la server se face conform sintaxei:
Cod:

....connect versiune-protocol challenge "string de conectare"

exemplu:
connect 47 1569273240 "prot4uniquerawvalvecdkeyf0ef8a36258af1bb64ed866538c9db76cocd8f174ddbb59f0012659f01010010014291bb45" "_cl_autowepswitch1bottomcolor6cl_dlmax128cl_lc1cl_lw1cl_updaterate20modelgordontopcolor30_vgui_menus_ah1\1rate30000*fid27223314*fname[war3.ultimate.ro]nameShocker"

Vedeti ca sunt 2 siruri de caractere, cuprinse intre ghilimele "". Primul contine informatii despre tipul de conexiune, cdkey, etc, iar apoi vin variabilele de conectare ce vor fi pasate serverului [nume, blabla, ce mai e pe-acolo]

Daca conectarea s-a realizat cu success ar trebui sa primiti de la server ceva de genul:
Cod:

....B 45 "xxx.xxx.xxx.xxx:60349

unde xxx.xxx.xxx.xxx este IP-ul tau si portul prin care va comunica clientul cu serverul.

S-a realizat conectarea client-server, dar asta nu inseamna ca te-ai conectat si la joc [sa apari la lista cu playeri, etc]. Mai trebuie niste comenzi, pe care inca nu le stiu  :mrgreen:
Memorat


Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day
Shocker
*
Deconectat Deconectat

Mesaje: 410



WWW
Protocol CS 1.6, Iulie 30, 2007, 03:18:53 pm

Citat

Felicitari mai ... Winking
Cred ca asta e tot ce se poate scoate dintr-un server...fara a juca pe el Smile ...

S-ar mai putea lua lista cu CVAR-urile [variabilele] serverului.
Trimiti la server:
Cod:

FF FF FF FF 72 75 6c 65 73 00

adica
Cod:

....rules.

Ar trebui sa primi ceva de genul:
Citat

FE FF FF FF 9D 11 00 00 02 FF FF FF FF 45 60 00 5F 74 75... etc

Pe noi ne intereseaza ce e dupa caracterul de dupa blocul blocul FF FF FF FF, adica dupa 45-ul ala.
Incepem cu primul caracter care ne intereseaza:
60 in hex, decimal = 96, avem 96 variabile
Apoi urmeaza variabilele de forma
Cod:

nume-variabila1 00 valoare 00 nume-variabila2 00 valoare 00 nume-variabila3 00 valoare 00

00 e defapt caracterul 00 aici.

La mine a iesit ceva de forma:
Cod:

_tutor_bomb_viewable_check_interval 0.5
_tutor_debug_level 0
...
admin_highlander 0
admin_ignore_immunity 0
admin_mod_version 2.50.60 (MM)
admin_quiet 0
...
mp_autoteambalance 1
mp_buytime 2
mp_c4timer 35
...
sv_stepsize 18
sv_stopspeed 75
...
w_version 0.48

Acolo unde sunt puncte am sters eu ca sa se vada in ansamblu cum arata. Atentie, mi se pare ca serverul trimite doar 1400 bytes de-odata, in cazul meu cele 96 variabile ocupau 1800 bytes sau ceva de genul, asa ca a trebuit sa dau RecieveString [read] la server de 2 ori.

Citat

Poate mai e de sapat in cazul Steamului si,ceea ce mi s-ar parea interesant, Friends din Steam . Dar asta e o chestiune mai adanca ... trebuie fie steam fie pacsteam Smile .

Am incercat eu odata, dar m-am lasat pagubas. Am facut un server UDP la mine pe comp [in Delphi] si incercam sa ma conectez din Steam la serverul asta sa vad ce informatii trimite la server [autentificarea Steam, blabla], dar nu am reusit mare lucru, trebuia sa raspunda si serverul cu ceva ca clientul sa continue sa trimita informatii, si nu stiam cu ce sa raspund.

Am facut hook la functia recvfrom din swds.dll de la Half-Life Dedicated Server sa interceptez toate stringurile trimise la server, dar si atunci era destul de complicat, nu am mai avut timp si am lasat-o balta Smile
Memorat


Just wake me up when everything's less overwhelming..., btw ShockingSoft is back !
Freakz only
Comics of the day
SkullAds
Ecspert
ReclAmator
* * * * *
Google AdSense

Gen: Bărbat
Mesaje: Multe

Reclama AdSense,
 

 
   


Pagini: [1]
  Imprimă  
 
Schimbă forumul:  

Creat cu MySQL Creat cu PHP Ethical hacking and programming community Director web romanesc cu inscriere gratuita Validat cu XHTML 1.0! Validat cu CSS!
IPFind, FAQDB, LAMP.ro, Good Proxy, Aberez.EU, RoFreeSBIE, ShockingSoft.com, HostVision, Invatam.net, PC Troubleshooting, Curs valutar online
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro