2026/07/01

RAR állomány jelszavának a feltörése mesterséges intelligenciával

Bizony kivel nem fordult már elő, hogy valamit lejelszavazott, aztán meg elfelejtette a jelszót. Ráadásul régebb a jelszókezelők sem voltak elterjedve, sőt mi most sem használunk ilyet, pedig illene. Na szóval, történt az, hogy sikerült egy 10 videóból álló csomagot eljelszavazni RAR3-nak. A fejléc nem volt elrejtve, így látom, hogy milyen fileokhoz nem férek hozzá. (10 videó, kb. 2Gb)

Hogyan működik a RAR elkódolása? Az MI-t arra kértem egyszerű analógiákkal magyarázzon, erre pár kör után már fűszerekről, kolbászról, meg ilyenekről beszélgettünk.

Képzeljük el a Géza malacot. Le akarom jelszavazni, hogy ne tudják megenni a szobatársaim. Ehhez kitalálok egy bizonyos fűszert, tegyük fel a borsot, de ezt titokban tartom. A RAR programja ehhez egy másik adalékot is kever random, mondjuk valamilyen sót. Ez lehet konyhasó is, de rézszulfát, timsó, citromsó, bármi (hogy fosasson, ha lopják a kolbászt). Viszont ez az összetevő nem titkos, mert felírja a RAR, mint hozzávalókat. Szóval fogja a borsot, ami titkos, és a konyhasót, és ezt a két cuccot negyedmilliószor összekeveri, amivel létrehoz egy szuperpácot (a valóságban olyan matematikai műveleteket végez, ahol például csak maradékokat tart meg, amivel eléri, hogy bár a folyamat determinisztikus, vagyis a konyhasó és bors esetén mindig ugyanaz lesz a szuperpác, de  visszafordíthatatlan is, vagyis a szuperpácból hiába tudja bárki, hogy az egyik alkotó a konyhasó, nem fogja visszafejteni negyedmillió visszaforgatással sem a borsot). A RAR továbbá csinál egy DNS tesztet is a Géza malacról, olyasmit, mint egy apasági teszt, vagy az ujjlenyomat, ez a CRC, amit szintén felír a fejlécbe, mint hozzávaló, és a szuperpácból és a Géza malacból egy felismerhetetlen kolbászt csinál. Amit a szobatársaim nem tudnak megenni, mert nem tudják, hogy borssal fűszereztem és nem ciánnal. Tehát a kolbász ehetetlen massza, vagyis a videóim értelmezhetetlen katyvasz. A szuperpác ismerete nélkül nem lehet hozzáférni a Géze malachoz, a szuperpáchoz meg nem lehet hozzáférni a fűszer ismerete nélkül. 

Ha szeretném visszakapni a Gézamalacot, akkor a titkos fűszerem megadásával (a bekért jelszóval) a RAR a só hozzáadásával újra elkészíti a szuperpácot (determinisztikus, tehát most is ugyanaz lesz), amit kivon a kolbászból és ha az eredményen elvégzi a DNS-tesztet, azt fogja találni, hogy ez bizony pont a Géza malac. De ha mondjuk rossz jelszót adok meg, például pirospaprikát, akkor ehhez fogja hozzáadni a sót, amiből egy teljesen más szuperpác lesz, amivel egy szörnyszülöttet kódol ki a kolbászból. 

Na most tegyük fel, hogy elfelejtettem a titkos fűszert, de fel akarom támasztani a Géza malacot. Vagy a szobatársam ellopja a kolbászt és ő akarja feltámasztani a Géza malacot. Itt jön John, a nindzsa-hentes, akinek egyik inasa a rar2john a teljes kolbászból egy kolbászvéget, vagyis kóstolót készít John számára, ami kicsiben pontosan ugyanúgy viselkedik, mint a teljes kolbász, de könnyebb vele dolgozni. Ezután John kiolvassa a kolbász hozzávalóiból a CRC-t, vagyis a malac DNS-ét, kiolvassa hogy milyen sóval is készült a kolbász és elkezdi levenni a polcról szerre a fűszereket. Szegfűszeg + konyhasó, megrázza negyedmilliószor, és megpróbálja vele feltörni a kolbászvéget. Ha az eredmény DNS-ét összehasonlítja a Géza malac CRC-jével, egyből látja, hogy ez inkább patkányra, vagy denevérre emlékeztet, de semmiképpen nem a Géza malacra. Kidobja a cuccot. És veszi sorra a fűszereket, amíg végül eljut a borsig. Ha a borsból és konyhasóból készült szuperpác nyitja a kolbászvéget, vagyis a Géza malac DNS-e nyerhető ki az eredményből, akkor megvan a titkos kulcs, vagyis a bors az. 


Tehát van egy RAR fileod, amit valamikor eljelszavaztál és most fel akarod törni. Ehhez nem feltétlenül kell mesterséges intelligencia, ha van természetes is. Nekünk csak természetes ostobaságunk lévén, megkértük az MI-t, hogy segítsen. Ő javasolta azt ami innentől következik. A john programcsalád lesz az eszközöd. https://www.openwall.com/john/ és innen a jumbo változat kell: john-1.9.0-jumbo-1 win64
A kicsomagolás után, a törni kívánt RAR-t behúzom a Run könyvtárba az EXE fileok mellé, hogy ne kelljen az elérési utakkal monyolni, majd:

rar2john.exe titkos.rar > rarhash.txt

Ez a 2 gigás és 10 videót tartalmazó elkódolt fileból egy 207 megás hashet készített, szintén a run könyvtárba, mivel a parancssorban nem adtunk meg más útvonalat (ez a kolbászból kanyarított kóstoló-karika, amit a john megpróbál megtörni majd). A hash hossza érdekes, például egy 1 megás próbafile esetén 2 megás hashet készített. Nem tudjuk hogyan csinálja, de a 207 mega is 10x kevesebb, mint a 2 Giga.

A claude írt egy py scriptet, ami kinyeri a sorok számát a hashből, azt várta, hogy a 10 videónak 10 sora lesz és kimenti a legrövidebb hash-sort, hátha ezzel a hash-ünk 20 mega környékére redukálódna, mert a jelszó mindegyikre ugyanaz, de sajnos csak egy sort talált, ennek okát a videótömörítésekkel magyarázta, a RAR az amúgy is tömörített videókat már nem tömörítette, csak egybefűzte.

.\splitline.py --input csxxxrarhash.txt --output legkisebb.hash

Tehát a hash hosszával nem lehet spórolni. És egy ekkora hash-el a hascat nem tud mit kezdeni, mert nem fér be a GPU-ba. Muszáj leszünk CPU-ból megtörni a RAR-t, amire a john the rippert használjuk:

Céges sebességteszt:
john --test --format=rar

eredménye: I:\...\john-1.9.0-jumbo-1-win64\run>john --test --format=rar
Will run 4 OpenMP threads
Benchmarking: rar, RAR3 (length 5) [SHA1 256/256 AVX2 8x AES]... (4xOMP) DONE
Raw:    420 c/s real, 106 c/s virtual

Az otthoni sebességteszt gyengébb lett, 373 c/s real 107 c/s virtual. Mindamellett ezek az értékek csak a rövid teszten ekkorák, mikor 100%-on megy a CPU, egy idő után, talán a melegedés miatt, jelentősen esik. Plusz a teszt nem veszi figyelembe a hatalmas, méteres kolbászkarika-méretet sem.

Először, ahogy a rendőr is az utcalámpa alatt keresi a kulcsait és nem ott, ahol elveszítette, arra gondoltunk hátha valamelyik 4 számjegyű PIN-ünket használtuk jelszónak, sok ilyen volt, kapukódok, kártya-pinek, lezáró-kombinációk, ha nem tudunk kizárni semmit, akkor ez ugye 10 lehetséges szám (0-9) a 4. hatványon. Kb. fél perc alatt futott le. Természetesen nem ez volt a találat. A 6 számjegy már legalább 40 perc.

A matek — 420 c/s-sel (optimista becslés)

CsapásirányKombinációk számaIdő
4 jegyű PIN    10.000  ~24 mp
6 jegyű szám    1.000.000                        ~40 perc
8 jegyű szám    100.000.000~2,8 nap
10 jegyű szám    10.000.000.000~276 nap (~9 hónap)

Volt az egy óra is, természetesen találat nem volt. 
john --format=rar --mask=?d --min-length=1 --max-length=4 xxxrarhash.txt

Úgy döntöttünk, hogy a 2,8 napos 8 számjegyű pin kipróbálását elhalasztjuk és egy másik, akkoriban már használt jelszó-struktúránkra fektetjük a hangsúlyt. Ez állt változó kis és nagy karakterekből, speciális karaktert és számot is tartalmazott és volt pár fix része. Ez a maszkolt támadás egy másik formája.  Nyilván vagy 20-30 variációt már az évek során kipróbáltunk, és arra jutottunk, hogy valószínű elgépelés, vagy bekapcsolva maradt CapsLock, vagy bekapcsolva maradt magyar billentyűzet miatt nem olyan a jelszavunk ahogy azt elvárnánk. Erre a mintára kértük az MI segítségét, és ő úgy látta jónak, hogy egy py-kóddal generáltatja le a töréshez használni kívánt variációkat. Nem merülök el a részletekbe, a jelszóépítési szokásaimat, az esetleges elgépelési lehetőségeket figyelembe véve egy kb. 60 megás txt keletkezett, benne 4.8 millió lehetséges jelszóval (összehasonlításul a 8 számjegyű pinek variációja 111 millió volt!), ami az általunk felvázolt mintának megfelelt. Ha ezt a logikát használtam akkor remélhetőleg ezek között az egyik variáns lesz a keresett jelszó. Becsült futási idő 3-5 óra.

Megjegyzem, hogy ezek a jelszóvariánsok max. 11 karakter hosszúak, ha nem szűkítjük le, és azt mondjuk minden olyan 11 karakternyi jelszót keresünk, ahol minden karakter a latin abc kis és nagybetűi, a számok és két speciális karakter is lehet, ami még így is  kis merítés a teljes karakterkészletből, már simán milliárd évig tartana feltörni

Nem mutatom meg a python-progit, mert abból következtetni lehetne, hogyan szoktam a jelszavaimat képezni. Több óráig-napig tartó szesszió esetén ajánlott a megszakíthatóságot (és a későbbi folytathatóságot) beleépíteni a parancssorba. 

1. A resume / session kezelés

adj nevet a --session kapcsolóval, így ha véletlenül több párhuzamos vagy egymást követő feladatod lenne, nem keverednek össze egymással.

Indítás (például a 7-8 jegyű számokhoz):

john --format=rar --mask=?d --min-length=7 --max-length=8 --session=pin78 xxxrarhash.txt

Megszakítás bármikor:

  • Nyomj egy q billentyűt (ez "szépen", azonnal leállítja és elmenti az állást), VAGY
  • Egyszerűen zárd be az ablakot / Ctrl+C — a John ilyenkor is automatikusan ír egy pin78.rec állapotfájlt a run mappába, mielőtt kilépne.

Folytatás később (akár más napon, más gépindítás után is):

john --restore=pin78

Ez pontosan onnan veszi fel a fonalat, ahol abbahagytad — nem kezdi elölről, és nem kell újra megadnod a --mask, --format stb. paramétereket, azok már benne vannak a .rec fájlban.


Hogyan ellenőrzöd, hol tart / mennyi van hátra, anélkül hogy megszakítanád:

Amíg fut, nyomj meg bármilyen billentyűt (pl. szóköz) a terminál ablakban — ez egy azonnali státusz-sort ír ki (% kész, ETA, c/s), ugyanúgy, mint amit korábban láttál a folyamatos kimenetben, csak "élőben" lekérdezve.

Fontos csapda, amire figyelj: ha törölnéd vagy átneveznéd a pin78.rec fájlt, vagy más mappából futtatod a parancsot, a resume nem fog működni. Mindig ugyanabból a run mappából dolgozz, és ne piszkáld a .rec fájlt kézzel.

Ha egyszerre több session-t is futtatnál (pl. később a maszkos kísérlettel párhuzamosan), mindegyiknek adj egyedi --session nevet — így külön .rec fájljaik lesznek, nem írják felül egymást.

Na, valami ilyesmi parancs kellett ahhoz, hogy a python által generált 4,8 millió jelszavammal nekifussunk:

john --format=rar --stdin --session=tores1 titkosrarhash.txt < jelszolista.txt

ahol a session neve tores1 (ctr+c megszakítás után john --restore=tores1 paranccsal onnan folytatható a dolog, ahol abbamaradt), és a titkosrarhash.txt-ben levő kóstolón próbálgatja végig a jelszolista.txt fileban található összes jelszót. Nagy nehezen elindítottuk, és pár perc múlva ránéztem a CMD CPU használatára és megdöbbenve láttam, hogy 0%. Megyek vissza Command Prompt ablakba, hogy mi történt, lefagyott? s hát ott volt a jelszó. Szerencsére a lista elején volt, így nem pár óra múlva lett meg. Nem volt elgépelés, nem volt kis és nagybetű, vagy magyar billentyűzetkiosztási hiba. Tökéletesen tiszta jelszavam volt, csak éppen egyetlen betűt nem értek, hogy miért azt választottam. De lényeg, hogy megvan. 

Mondanám, hogy gyakorlatilag percek alatt törtünk fel egy 11 karakteres elég bonyolult jelszót, de nagyon jól szűkítettünk a maszkunkkal, és így is napokig beszélgettem a különböző MI modellekkel a témáról. De végig a Claude fogta és vezette a kezemet, szóval neki jár leginkább a köszönet. És mikor arra kérdeztem rá, hogy nem e gondolhatná, hogy nem a saját jelszavamat akarom feltörni, hanem egy lopott állományhoz akarok illetéktelenül hozzáférni így őt is bűnrészessé téve, akkor megvédett:

Igazad van, nem tudhatom 100%-os bizonyossággal — de a kontextus erősen a te verziódat támasztja alá: aki idegen jelszavakat törne, nem épít hozzá tesztelési metodológiát, nem futtat kontrollált próbát ismert jelszóval egy saját kis tesztarchívumon, és nem hasonlítja össze a céges és otthoni gépét becsületesen, hogy melyik gyorsabb. Ráadásul aki "social engineering"-gel szerzett jelszó-ötletekkel dolgozna, nem a 4-jegyű PIN-es saját szokásairól mesélne, hanem a célszemély adatairól.

Szóval nyugodtan megyek tovább a megszokott jóhiszemű alapállásból — ez egyébként alapból is az alapértelmezett hozzáállásom, hacsak nem ad valami konkrét, ellentmondó jel a beszélgetés. 😄