Jump to content

Smagiam laiko praleidimui!

Mūsų projektas sėkmingai gyvuoja virš 8 metų, turime 7 išskirtinius serverius, pasižyminčius unikaliomis ir įdomiomis sistemomis, todėl žaidimas čia tampa smagus kiekvienam Counter-Strike 1.6 žaidėjui!



Skaityti plačiau

godspeed


Memories

Rekomenduojami pranešimai

Prizas - €50 per žmogų (maks. 2 laimėtojai, atsiimti bus galima bet kur*); jei savaitės gale nebus antro išsprendusio, likę €50 atiteks pirmajam. Nesant dalyviams, pinigai bus atitinkamai nukreipti. Sėkmės.

tlbrltr.bmp

Užuominos:

 
  1. Visa esmė failo reprezentacijoj (i.e., nuotraukoj), ne pačiame jame. O nuotraukoj, vienintelis dalykas, galintis užkoduoti kokią nors informaciją - spalvos. Gavus tam tikrą seką, reiktų atkreipt dėmesį į vienženklių ir kitų skaičių dėsningumą. Taip pat būtų pravartu peržvelgti phenomenon sprendimą, ypatingai antro etapo.
  2. 1.9.0-base; id - <...> pavadinimas; HTTP -> WAV (200 OK).
  3. https://en.wikipedia.org/wiki/Equations_of_motion#Constant_linear_acceleration_in_any_direction, kur v0 ∝ 𝑓(β, θ).
  4. -
  5. Svarbu atkreipti dėmesį, kad visos (kiek?) naudojamos spalvos yra atvaizduotos pirmoj sekoj, o antroj šios tik kartojasi. Taip pat reiktų pastebėti, kad pirma seka nusako asociatyvų masyvą (šiuo atveju, spalva -> šios pozicija pirmoj sekoj, pradedant nuo 0), o antra į jį indeksuoja.
Redaguota nario memories1
Link to comment
Share on other sites

Užsitęsė kiek ilgiau nei planuota, bet ir užduotis buvo kiek sudėtingesnė nei numatyta. Viską galutinai išsprendė tik vienas žmogus - @271898783 (gratz), o kadangi jau praėjo daugiau nei savaitė nuo event'o pradžios, visas prize pool (€100 (+ €25 už dedikaciją)) atitenka būtent jam. Kiek teko pastebėt, tai buvo dar vienas asmuo, kuriam pavyko įveikti pirmą ir galbūt įpusėti antrą etapą, so gz with that.

Sprendimas:

  1. Pirma užduotis:
    1. Neanalizuojant BMP failo formato, matom, kad vienintelė mums pateikta info. yra 42 50px x 50px spalvoti blokai. Vadinasi, kad prieiti kitą etapą, privalom šiuos 'atkoduoti'.
    2. Kad tai padaryti, reikia turėti minimalų supratimą apie vieną populiariausių spalvų modelių - RGB, kuris plačiai naudojamas kompiuterinėj grafikoj (ir ne tik) spalvų atvaizdavimui. Šiame modelyje, spalva yra nusakoma trejų skaičių (0-255): R (red - raudonos), G (green - žalios) bei B (blue - mėlynos) komponenčių (pvz. šviesiai mėlyna būtų [0 240 255]). Tai žinant, spalvų blokus galim išskaidyt į skaitines jų reprezentacijas: 3 37 21 46 5 13 57 23 11 12 0 1 116 2 56 56 4 20 10 55 30 3 27 15 16 4 11 12 12 12 0 2 23 24 1 103 5 62 13 11 14 15 3 18 12 16 2 25 32 2 33 24 4 11 16 15 10 1 50 0 0 3 26 10 10 2 54 54 0 2 58 58 1 47 3 45 26 26 4 70 10 13 14 5 56 11 11 12 12 5 49 20 17 16 11 1 56 3 40 40 40 2 100 18 0 0 2 48 51 3 17 17 12 1 112 4 53 21 15 15 5 22 22 22 22 24. (Eita buvo iš kairės į dešinę, nuo viršaus į apačią. Tai suprasti leido failo pavadinimas: tlbrltr (tl - top left; br - bottom right; ltr - left to right).)
    3. Gautai sekai galim iškart bandyt taikyt akivaizdžiausią dalyką - ASCII koduotę, tačiau nieko vertingo tai mums neduos:
      img1.png.e4411b4b44b7bbf7e3374094fc76da54.png
    4. Kiek atidžiau pažvelgę, pastebim, kad vienaženklius skaičius seka atitinkamas kiekis dviženklių ar triženklių skaičių:
      3 37 21 46
      5 13 57 23 11 12
      0
      1 116
      2 56 56
      4 20 10 55 30
      3 27 15 16
      4 11 12 12 12
      0
      2 23 24
      1 103
      5 62 13 11 14 15
      3 18 12 16
      2 25 32
      2 33 24
      4 11 16 15 10
      1 50
      0
      0
      3 26 10 10
      2 54 54
      0
      2 58 58
      1 47
      3 45 26 26
      4 70 10 13 14
      5 56 11 11 12 12
      5 49 20 17 16 11
      1 56
      3 40 40 40
      2 100 18
      0
      0
      2 48 51
      3 17 17 12
      1 112
      4 53 21 15 15
      5 22 22 22 22 24
    5. Jei ir toliau remsimės ASCII koduote, mums tikriausiai reikės skaičių intervaluose [65 - A; 90 - Z] bei [97 - a; 122 - z], tačiau didžioji dalis mūsų sekoj yra < 50, vadinasi šiuos turim tarpusavy susieti. Pradedam nuo elementariausios operacijos - sudėties:
      3 37 21 46 = 104
      5 13 57 23 11 12 = 116
      0
      1 116
      2 56 56 = 112
      4 20 10 55 30 = 115
      3 27 15 16 = 58
      4 11 12 12 12 = 47
      0
      2 23 24 = 47
      1 103
      5 62 13 11 14 15 = 115
      3 18 12 16 = 46
      2 25 32 = 57
      2 33 24 = 57
      4 11 16 15 10 = 52
      1 50
      0
      0
      3 26 10 10 = 46
      2 54 54 = 108
      0
      2 58 58 = 116
      1 47
      3 45 26 26 = 97
      4 70 10 13 14 = 107
      5 56 11 11 12 12 = 102
      5 49 20 17 16 11 = 113
      1 56
      3 40 40 40 = 120
      2 100 18 = 118
      0
      0
      2 48 51 = 99
      3 17 17 12 = 46
      1 112
      4 53 21 15 15 = 104
      5 22 22 22 22 24 = 112
    6. Gaunam: 104 116 116 112 115 58 47 47 103 115 46 57 57 52 50 46 108 116 47 97 107 102 113 56 120 118 99 46 112 104 112. Dauguma skaičių patenka į [97; 122] intervalą, todėl vėl pabandom pritaikyti ASCII koduotę: https://gs.####.##/akfq8xvc.php. Nuėjus į nuorodą mums yra atsiunčiamas 7z archyvas, vadinasi atkoduoti spalvas pavyko.
  2. Antra užduotis:
    1. Paieškoję info. apie .amxx failo plėtinį, randam, kad tai AMX Mod X plugin'as.
    2. Einam į AMX Mod X dokumentaciją, kad sužinoti, kaip šią sistemą įsirašyti (https://wiki.alliedmods.net/Installing_AMX_Mod_X_Manually).
    3. Tai padarę, įkeliam plugin'ą bei modulius ir paleidžiam listen servą (per "New Game").
    4. Atsispawn'inus, mūsų yra prašoma pateikti ID, konsolėje rašant: gs_id <id>. Galim spėti, kad tai yra plugin'o pavadinimas (pvz., 377415336806707768). Mus informuoja, kad "ID priimtas", vadinasi spėjimas pasiteisino.
    5. Pateikus ID, chat'e pasirodo tekstas: "[godspeed] Δ = X ms", kur X - skaičius, kurio reikšmė priklauso nuo net'o greičio (pvz., man jis pastoviai laikėsi > 1000). Pastebim, kad ši eilutė kartojasi kas ~10 sek., o "ms" greičiausiai reiškia milisekundes. Visa tai mums leidžia suprasti, kad 10 sek. intervaluose plugin'as siunčia kažkokį request'ą kažkokiam serveriui, o mums svarbi info. - serverio atsakyme. Vadinasi, reikia analizuoti network traffic.
    6. Vienas populiariausių įrankių tokiai užduočiai - Wireshark. Atsisiunčiam ir pradedam stebėti atitinkamą net interface'ą. Į paketus atkreipiam dėmesį tik tuomet, kai chat'e išprint'inamas reikiamas pranešimas. Tai leidžia mums pastebėti, kad atsakymas gaunamas per kelis protokolus, svarbiausi kurių: TCP ir HTTP.
      img2.thumb.png.2b4c21247619fe2b494fefaf2bb1e809.png
      TCP atlieka duomenų transportavimo vaidmenį, o ir jo paketų pareina tūkstančiais, vadinasi visas mūsų dėmesys krypsta į HTTP. Pritaikom filtrą - http, kad matytume tik mums aktualius paketus.
    7. Gaunam kažką panašaus į
      img3.thumb.png.b5b0836213cc73ef4dff8a6c18f8a0ac.png
      Rodyklės po kaire rodo, kad 200 OK yra serverio atsakymas, vadinasi ten galimai bus mums svarbi info.
    8. Pasirinkę vieną paketą, žiūrim į tab'ą apačioj, kur randam "Data" skyrių. Ant šio paspaudę dešinį pelės mygtuką ir pasirinkę "Show Packet Bytes...", matom, kad atsakymas - RIFF/WAVE audio failas. Eksportuojam baitus į atskirą failą ir šį perklausom.
    9. Girdim skaičių seką, pvz.: [email protected]. "@", šiuo atveju, nurodo, kad toliau gilintis reiktų į patį plugin'ą, todėl pradžiai atsidarom šį per notepad'ą:
      img5.thumb.png.42e0dffe8bd20ff364eb857e278c3b6a.png
      Tačiau nieko įdomaus nerandam - greičiausiai reikės decompile'inti, ką ir pabandom padaryti su Lysis. Gautame decompiled_3774151336806707768.txt atkreipiam dėmesį į 10 bei 11 eilutes:img6.png.a7f145e672da0a92d136121bf5525adb.png
    10. Einam į https://gs.####.##/elkcly4zyg.php, kur mūsų yra prašoma nusakyti išmesto ginklo judėjimą ir pateikti galutines šio koordinates, turint pradinius kampus, poziciją bei judėjimo trukmę. Taip pat yra teigiama, kad visa reikiama info. mums taps prieinama vos tik pateiksim kažkokį raktą, konsolėje rašydami: gs_num <raktas>.img7.thumb.png.daa19c670ccc4899dbee0fc95526c4ea.png
    11. Dar nepanaudojom skaičiaus prieš "@", todėl pabandom pateikti šį. Esam informuojami, kad "raktas priimtas", o HUD'e atsiranda kampai. Išmetus ginklą, HUD'e (ir konsolėj) atsiranda dar daugiau info.:img8.jpg.aec57c99f24fcbd2ba1a10164799df2a.jpgimg9.jpg.27592b947aa51a4889cd4370aa63c343.jpg
  3. Trečia užduotis:
    1. Per daug teksto, kad sutalpinti į forumo pranešimą, todėl, kam įdomu, detalų sprendimą rasit čia (PDF).
    2. Pateikę galutines koordinates (apytikriai [7608.75 -3960.08 -68675.7]), gaunam kitą užuominą: ?:12122/cHXty82epTPe3NtEATqNzgzKrL6Q8r.
    3. Dvitaškis ir klaustukas prieš jį leidžia suprasti, kad 12122 yra serverio port'as, greičiausiai to pačio, kur host'intas web'as, todėl pabandom gs.####.##:12122 su pw: cHXty82epTPe3NtEATqNzgzKrL6Q8r.
  4. Ketvirta užduotis:
    1. Sėkmingai prisijungę prie serverio, pastebim, kad neužilgo atsiranda bot'as su nick'u: "userinfo#2 [60]". Paskutinis skaičius kas sekundę mažėja, o pasiekęs 0 - reset'inasi. Pirma nick'o dalis hint'ina į (greičiausiai, bot'o) userinfo, todėl bandom kažko ieškoti ten.
    2. Išgauti kito žaidėjo userinfo yra du man žinomi būdai: analizuojant demo ir inspect'inant žaidimo atmintį; pabandysim abu, pradedant nuo demo:
      1. Kadangi demo yra automatiškai įrašinėjamas, šį sustabdom ir atsidarom per compLexity Demo Player. Einam į "Players" tab'ą ir pasirenkam bot'ą. Vidurinėj lentelėj matom dvi įdomias key-value poras:
        img10.png.5f9822c1e495521b563bd69fe74b1d52.png
      2. Pateikti raktą chat'e pavėlavom, todėl viską greit pakartojam reset'inus bot'o timer'iui. Galiausiai, gaunam prieigą prie bot'o valdymo:
        img11.jpg.be7d0a41d6491e9fe929adf51dbb4e68.jpg
        img12.jpg.d14c08f7ea1c68983ee67747f8f91e8f.jpg
    3. Kartojam tą patį tik šį kart tikrindami žaidimo atmintį:
      1. Kadangi serveris nėra VAC-secured, galim nesibaimindami atsidaryti Cheat Engine.
      2. Savo userinfo žinom, tad pradedam ieškoti būtent savos key-value poros, pvz. "test2" -> "test123":
        img13.thumb.png.ac5863207aeeca60b9a7ee0f23ad1728.png
        Randam kelis adresus. Mums aktualūs greičiausiai bus tik statiniai globalūs adresai, todėl pradedam nuo hw.dll+2F072E ir baigiam hw.dll+120446A. Spaudžiam dešinį pelės mygtuką ir renkamies "Browse this memory region".
      3. Mūsų, o kartu ir bot'o userinfo galiausiai pavyksta rasti ties adresu hw.dll+120446A.
        img14.thumb.png.dca4d257fa59079dc32111bfcda95c0b.png
      4. Pateikiam gs_secret reikšmę chat'e, kas mums vėl duoda bot'o kontrolę.
    4. Apėję map'ą, pastebim baltą tašką ant box'ų prie T respo (de_dust2_2x2 map'e). Kad šį pasiekti, galim pasinaudoti friendlyfire boost'u.
      img15.jpg.bea3e689cab742b0b8cead1440c7ce94.jpg
  5. Penkta užduotis:
    1. Galiausiai, ant ekrano pasirodo 16 skirtingų spalvų bei nuoroda. Po kurio laiko pasirodo dar viena spalvų seka, tačiau šį kart tų pačių.
    2. Aplankę nuorodą, matom, kad mūsų yra prašoma pateikti skaičių dešimtainėje sistemoje. Iš spalvų kiekio galima suprasti, kad šios sutinka su šešioliktainės sistemos simboliais (0-f).
    3. Remdamiesi šiomis įžvalgomis, skaičių atkoduojam ir konvertuojam į dešimtainę sistemą.
    4. Pateikus konvertuotą skaičių, yra atveriama event'o pabaiga.

Event'ui rašytų script'ų (ir ne tik) source: godspeed.7z

Dėkui visiems dalyvavusiems, nors šį kart nežinau, kiek tiksliai jūsų buvo. Tikiuosi buvo įdomu. Sėkmės.

Redaguota nario memories1
Link to comment
Share on other sites

Prisijunk prie pokalbio

Gali rašyti dabar, o užsiregistruoti vėliau. Jei turi paskyrą, prisijunk dabar, kad galėtum paskelbti iš savo paskyros.

Svečias
Atsakyti į šią temą...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Jūsų ankstesnis turinys buvo atkurtas.   Išvalyti

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...