Hacking subteran copierea și contrafacerea de bilete de metrou

Știi dorința de a rezolva toate enigmele pentru a deschide toate, dar protecția Metro Moscova? Efectuat, de exemplu, o „întoarcere veșnică“? Dar experții Metro sunt găsirea de modalități în mod constant mai sofisticate de protecție. indicativele de metal au fost înlocuite cu material plastic, acestea, la rândul lor, bilete magnetice și carduri contactless pentru a înlocui magnetice a sosit. Mulți cercetători a scăzut mâinile sale - se pare ca mitropolit a devenit o fortăreață inexpugnabilă. Dar orice apărare poate fi eludate. Și de multe ori, este de a deschide uneori mai usor decat pentru a construi o ...







Cum a început totul

Faceți cunoștință cu „ultraușoare“

Pentru a începe cu, desigur, nevoie doar undeva pentru a obține un cititor de card wireless care acceptă „ultraușoare“. Au existat două opțiuni: fie pentru a crește (care ar lua o lungă perioadă de timp), sau să cumpere un dispozitiv gata făcut. Când gândesc a doua opțiune, ținând cont de prețurile vechi de trei ani, m-am dus pielea de găină. Dar eu încă decis pentru a vedea prețurile. Și nu e de mirare! Am fost plăcut surprins să afle că puteți cumpăra un dispozitiv complet funcțional (Omnikey Cardman 5321), care susține o grămadă de carduri cu fir și fără fir la un preț atractiv - 4000 rublă. Desigur, nu un pic, dar pe de altă parte, nu este de 10.000; Mai mult decât atât, cumpararea gata-cititor a făcut posibil să se concentreze imediat pe cercetarea de bilete și nu pe proiectarea și depanare de fier, care ar putea trage pe o perioadă nedeterminată. Împreună cu cititorul în aceeași companie (ISBC) a fost achiziționat foarte convenabil SDK-ul de producție locale inițial. El, din nou, a permis să nu piardă timpul și energia pe scris nizkourovnevki și depanare software-ul de operare cu cititorul, și să se concentreze direct pe biletele.

Deci, pentru câteva zile de codificare pe îndelete mic program născut, prin care a fost posibil într-un mod convenabil de a monitoriza și guvernează întreaga structură internă a „ultraușoare“. Apoi am început să studieze biletele.

perete gol

Toate acestea grădină zoologică, am colectat pentru un singur scop - să definească în mod clar structura și formatul de înregistrare a datelor de pe bilet. Desigur, unele domenii au fost vizibile imediat cu ochiul liber, dar unele nu. De exemplu, nu am realizat în cazul în care a înregistrat numărul biletului de metrou (cel care este imprimat pe ea). Realizarea a venit destul de accident. Faptul că eu (și cred că majoritatea dintre noi), caută în hex, folosit pentru a se alinia la octetul de informații și de a gândi, cel puțin bytes. Sa dovedit că această abordare este greșită. Privind la biletul haldei, trebuie să se gândească unități mai mici - notebook-uri, și, uneori, biți. L-am dat seama când „a văzut“ ultimul număr al biletului - el a fost mutat de 4 biți în raport cu octet, iar cei 4 biți rămași pe această parte și pe celelalte camere de mână sunt ocupate de alte informații de serviciu.

După ceva timp, formatul de înregistrare a datelor bilet a devenit aproape complet clar. A devenit evident în cazul în care și cum să păstreze toate datele, contoare, identificatori. Au rămas doar câteva domenii, al cărui scop nu a fost clar, pur și simplu, din cauza haldei să arunce datele din ele sunt aceleași.

Dar asta e bucuria și peste - ar fi o nebunie să presupunem că aceste bilete sunt lăsate neprotejate. Fiecare depozit a fost de 32 de biți de informații diferite, nu se corelează cu restul conținutului. Am presupus că a fost un fel de control, „hash“ a datelor scrise pe bilet. Toate încercările de a estima sau a calcula 32 bit avansat eșec complet (în particular, s-a sugerat că aceasta este o formă CRC32, cu polinomiale non-standard și o valoare de pornire). Când încercați să schimbați biți de cel puțin un an și jumătate de informații în terminalul biletului de verificare la metrou fulgera „BILET rau“ Jack greu zakolachivaya unghiile în sicriu. Desigur, au existat încercări de eludare a sistemului în alte moduri, de exemplu, încercați să copiați un bilet la o hartă necompletată unu-la-unu (de aici, din păcate, a împiedicat numărul de serie din fabrică, care, după cum sa dovedit, a fost implicat în generarea de „hash“) sau pentru a seta biți de blocare, astfel să interzică turnichet pentru a schimba conținutul biletului. Terminal de verificare astfel de „etern“ bilet de recunoscut, dar a refuzat să lase turnichet ... Deci, am fugit într-un zid. Că zid mare, puternic de beton, pe care mulți oameni au un obicei de a fi ucis cu un început de rulare. Nu a găsi forumuri și panouri de mesaje nici o informație, am decis că aceste studiile mele terminat - nu mai sunt piese, și a pus un punct de grăsime. După cum sa dovedit, în zadar ...

familiaritate ciudat

ICQ de contact de la doar în cazul în care am scos, curățat în același timp, lista de contacte de pe server și de a pune în ordine busteni (Buna ziua din nou, paranoia). În cele din urmă, el scrie din nou, în cazul în care acest lucru. Dar mai mult nu am scris ...







Fenomenul oamenilor software

Deci, am luat disassembler și a mers la locul de muncă. Mecanismul este format din două fișiere - CryptKeyRef.dll și keys.d (numai fișier „șiret“ în întregul program, care, cu excepția fișierelor cu cheile, nimic altceva nu-i place). Și pentru a utiliza toate acest bun la rulare-bpl'ina SmLayout.bpl. Această bibliotecă a fost o mană cerească pentru cercetarea mea - continea clase pentru lucrul cu conținutul intern al biletelor. Deoarece aceasta este o rulare-BPL, a fost suficient doar să se uite la ea exportă masa de a avea 60 la suta pentru a intelege ce este ceea ce. O analiză mai detaliată va pune totul în locul său. Amintiți-vă, la începutul acestui articol, am vorbit despre asta în structura „ultraușoare“ există încă un număr de domenii, al cărui scop nu a fost clar? Unul dintre aceste domenii - așa-numitul „identificator de aspect.“ De fapt, toate biletele de metrou sunt construite din porțiunea de antet a datelor părții fixe și variabile. Deci, acest câmp este «Layout» în antet este doar determină modul în care și ce date se află în restul biletului. Există mai multe aspecte (fiecare sub propriul tip de bilet), și SmLayout.bpl fiecare dintre ele au avut clasa proprie (plus o clasă părinte comună, care au fost metode de lucru cu părții introductive) acestuia. Prin urmare, pentru a afla ce câmpuri în fiecare aspect pentru că răspunsul a fost simplu (în continuare, vorbind cu unele nume de metode în exporturi!).

Finalizat complet întregul Aspectul 8 (care este utilizat în „Ultralight“) și dublu-a verifica dacă toate câmpurile din structura biletului, am avut ideea de dreapta, am luat mecanismul cheie. Într-adevăr, el a fost responsabil pentru generarea de „hash“. Cum mecanismul a fost complet clar după studierea lucrărilor metoda, care se ocupă de calculul „hash“.

În primul rând, dintr-un fișier cu tastele (keys.d) este selectată cheia corectă. Sistemul este proiectat astfel încât fiecare tip de bilet are propriul identificator (inclus prezent un tabel complet cu ID-uri și nume de bilete într-un fișier text cu valori separate prin virgulă). Se compune dintr-un identificator de zonă (cererea) și tipul de identificare a cardului. Deci, pe baza acestor numere în fișierul selectat keyring-cheie, dintre care în interior poate fi de mai multe chei (în cazul în care se introduce o nouă cheie, iar vechile bilete încă în uz). Înregistrarea unui nou bilet vine cu primul, și verificați valabilitatea - folosind toate cheile în keyringe. În continuare, cheia selectată este decriptat folosind CryptKeyRef.dll (de ce acestea sunt stocate criptate, nu voi ști). După aceea, cheia decriptat și aproape toate datele biletului, precum și numărul său de hardware-ul de serie și numărul de (metoda de generare a unui „hash“, care este indicat pentru keyringa în keys.d) - sunt transferate la funcția ckCalcHashCode, care este în același CryptKeyRef.dll. La ieșire vom obține valoarea pe care eu la un moment dat și „blocat“ - aceeași „hash“. Desigur, am scris un mic program care, folosind aceste funcții din CryptKeyRef.dll și fișierul keys.d pot fi verificate și, dacă ceva, pentru a recalcula „hash“ în orice groapa. Am verificat de două ori totul în câteva grămezi, și a primit un rezultat pozitiv, a plecat, bucuros să doarmă.

chei fault

În ciuda succesului teoretic, am vrut să văd totul, ca să spunem așa, „în luptă.“ A doua zi, întorcându-se de la locul de muncă, am cumpărat în mod specific în stare proaspătă „UltraLight“ pentru o călătorie, pentru a vedea dacă cheile mele sunt, sau nu mai sunt (aparent, ei erau puțin vechi). Puteți, desigur, a fost imediat încearcă să scrii „fabricate“ „UltraLight“ și du-te verifica, dar în acel moment am fugit o carte de martor, și un pic înfricoșător merge „la întâmplare“ - dintr-o dată? La sosire acasă, am mai întâi de toate, chiar și fără să se spele pe mâini lui, uitându-s-au grabit sa verifice biletul la o cheie proaspătă. Și aici am fost de așteptare pentru un mare păcat - „hash“ scris pe bilet nu trece pe oricare dintre tastele. Prin urmare, cheia este într-adevăr deja putred, și au fost înlocuite cu altele noi. Acest lucru complet neagă toată munca mea. M-am simțit puțin trist. Am fiert ceai verde, a jucat un pic pian (da), și se așeză pe taxa lui de reproducție neterminat ...

Nu este totul pierdut

Deja fără o picătură de îndoială am nituite propria mea Väsby (din fericire, am avut halde de acest tip, care uneori a simplificat sarcina - am schimbat doar datele basculante și numărul) și „hash“ calculat folosind cheia. Deci, este timpul de testare (mai ales de când am cumpărat doar un pic de plastic clar).

Intrând în hol, am pus mai întâi un „bilet“ la terminalul de testare. Pe tabloul de bord fulgeră valabilitatea biletului, pe care am, și LED-ul verde se aprinde. În consecință, lucrările. Efectuarea grimasă mai simplu și ascunde un manșon de plastic alb-zăpadă, am abordat turnichet, a pus mâna pe validatorului și ... a mers liniștit pe un verde distractiv luat foc. Aceasta a marcat victoria finală.

Ce urmează?

Și apoi a început experimentele în care a fost găsit multe lucruri interesante. De exemplu, o astfel de „stânga“ Väsby poate merge doar două sau trei zile. Faptul este că numărul care este în interiorul bilet am citat „de la buldozer“, fiecare trecere este stocat în memoria capului turnichet, iar după un timp trimis cu restul centrului de date. Acolo, sistemul nu este emis de fapt, bilet cu acest număr și intră în ea în stop-list, care este apoi distribuit tuturor turnicheŃi de metrou. Și așa ar trebui să fie făcut cu toate tipurile de bilete, nu numai Väsby - în plus față de „hash“ și cheile de schimbare frecvent este de apărare foarte bună. Workaround este, din motive evidente, nu este posibil. De asemenea, sa observat că setarea sau nu setarea de biți de blocare este de nici o importanță faptului, funcționează biletul sau nu. Singura excepție este un pic OTP blocare zonă, turnichet care, aparent, verifică întotdeauna, în ciuda faptului că, în scris, OTP nu va.

Mai târziu, am luat terminalele metroshny și autobuz, le-a condus în ordine, și a început studiată pe banca de rezerve. Acum, pentru a testa următoarea presupunere, nu mai trebuia să ruleze cu mutanta proaspăt coapte bilet la metrou, și a devenit posibil pentru a le testa „pe loc“. Mai ales terminalul de metrou a fost aceleași vechi (orice altceva și buggy), cum ar fi cheile. Așa că am putea încerca să „lucreze“, precum și orice alte tipuri de bilet „Ultralight“ - ceva ce n-am putut face „live“ în metrou.

Sfârșitul, sau rezumați

sistem de metrou, și, în special, noile bilete „UltraLight“, contrar opiniilor și conjecturilor, au fost bine protejate. Foarte mulțumit de faptul că dezvoltatorii au folosit un standard de încredere și testate în timp, mai degrabă decât reinventeze roata. Cu o astfel de protecție bilet fals „Ultralight“, care nu au acces la date confidențiale (informații cheie), este pur și simplu imposibil. Remarcabil proiectată și un sistem de chei interschimbabile, și un mecanism de oprire foi.