Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: rojo 05. 01. 2022, 16:28:08
-
Ahoj,
Tablet můj odvěký už neunese tíhu moderny. Ač stále chrabře běhá, Android 4.4 už současné vývojáře nezajímá a tak je tablet odsouzen k odchodu do věčných křemíků, jednosuše proto že už na něj nic nenainstaluji.
Mě stačí můj laptop s Debianem. Můj Vlak ale na PC nejede. Nainstaloval jsem si tedy Anbox a do něj nainstaloval MůjVlak a wow ono to teda jede. Přihlásil jsem se a inkarta ukazuje svůj divoce rotující QR kód.
Na to abych průvodčímu ukázal legitimaci přeci nepotřebuji LXC a kdo ví co. Předpokládám že bych mohl kód generovat sám. Tož, softit umím, ale co je v tom kódu? Na první pohled něco binárního. Vyfocený QR kód jsem přečetl pomocí zbarimg. Z hex dumpu svítí WEBPVP8 a RIFF. To by mohlo něco znamenat. Že by přes QR kód posílali mojí fotku? Číslo in karty by tam mělo být také...
Předpokládám že jsou data nějak podepsaná, klíče by měla mít aplikace, protože to funguje i offline, klíče tedy musí být nějak dostupné z mého profilu.
Pokud není známá specifikace kódu, je tu nějaký binary hacker? Tohle by mohla být pěkná utilitka pro fíky jako já - bez "chytrých" zařízení.
Díky
-
soukrome data ziskane z qr kodu se ti tu asi nechce davat, co?
obecne kdyz se louskaji nejake binarni data, tak se nejprve hledaji otevrene stringy, cele to muze byt taky zasifrovane
a pak je to na prd.
pripadne porovnat s daty jineho uzivatele, zda se daji vystopovat nejake stejne kusy dat.
dobre jsou hexa editory, ktere dokazou zobrazovat hodnoty od daneho offsetu jako short, int, long, float, dlouble
apod.
a chce to zkouset ruzne base64, md5 a podobne.
-
dojdi na si nádraží vyzvednout kartu a nemusíš řešit žádnou aplikaci
-
a nemusíš řešit
Tohle je trochu off-topic, ale budiž. Díky za radu. Nakupuji jízdenky on-line na fakturu a skrze digitální inkartu jsou tam i ty mé nákupy. S vytištěnou kartou bych stejně musel vytahovat jízdenky. Kouzlo karty na PC spočívá v tom že ve vlaku stejně na PC pracuji, stačí tedy jen otočit na průvodčího. Funguje to s anbox - ověřeno v praxi.
-
soukrome data ziskane z qr kodu se ti tu asi nechce davat, co?
Výroba fake digitální inkarty jde přes můj vlak asi zadarmo. Trochu to ale vázne přes anbox kvůli fotce. Když se podaří, nasdílím. Díky za podněty.
-
nechapu.. fyzickou inkartu proste pridas do appky. to cele vidis i v eshopu. pokud mas problem, ze nemas mobil co zvladne tu appku tak si porid plastovou kartu. tu si pruvodci "čipne" a jinak je vse stejne jako s tou virtualni (vidi tam tve jizdenky, vidi tam pripadne aplikaci na slevy atd).
-
nechapu..
Díky, o to mi teď nejde. Zajímá mě ten QR kód.
-
Pokud by ta data byla podepsaná aplikací v mobilu, bude to celkem k ničemu – nikomu by nebránilo udělat to samé, o co se pokoušíte vy, ale vložit si tam své údaje.
Otázka ale je, zda se vyplatí do toho investovat čas – ten formát je interní, může se klidně každých pár měsíců měnit. A ani to nemusí být záměrně kvůli znesnadnění vašich pokusů, ale prostě tak, jak se aplikace vyvíjí.
Ale když už to chcete řešit, máte přece tu aplikaci, která kód zobrazuje – takže by mi připadalo nejjednodušší ji disassemblovat a podívat se, jak se ten kód generuje.
-
Není mi úplně jasné co chceš, předpokládám že žádný fake (padělek) ale prostě vlastní digitální formu své legitimní inKarty mimo aplikaci Můj vlak?
Pokud bych spekuloval, tak ta animace jenom rotuje několik QR kódů, které obsahují informace z inKarty (včetně té fotky, když se podíváš průvodčí do toho jejího bazmeku tak se jít tam po načtení objeví) + ty jednotlivé QR kódy jízdenek.
Takže v nejjednodušším případě by mělo stačit bez nějakého reverse inženýringu prostě tu "pevnou" inKarta část nahrát jako animovaný obrázkek (video) a přilepit za něj ty jednotlivé kódy jízdenek (ty ti asi taky stačí zkopírovat jako obrázky a nebo je chceš nějak generovat?)
Tady je mimochodem specifikace tištěných Aztec kódů na papírových jízdenkách, třeba v tom QR kódu najdeš podobné věci:
https://zakazky.krajbezkorupce.cz/document_4021/f5cded1ff11ea0efe754c6dcbcf64b36-priloha-1-technicke-specifikace-2-2d-kody-standardy-pro-jizdni-doklady-cd-pdf
-
PS: Z toho dokumentu: Součástí dat kódu je digitální podpis. Ten je vytvořen metodou DSA s použitím privátního klíče vydavatele DST.
Takže obávám se že vlastní generování těch QR kódů nepůjde...
-
Pokud špekulujete nad přenosem fotky pomocí QR kodu tak asi nejdřív přečíst tohle:
https://en.wikipedia.org/wiki/QR_code (https://en.wikipedia.org/wiki/QR_code)
a pak tohle https://zpravy.aktualne.cz/finance/virtualni-in-karta-v-mobilu/r~d7508122fac811e7aabeac1f6b220ee8/ (https://zpravy.aktualne.cz/finance/virtualni-in-karta-v-mobilu/r~d7508122fac811e7aabeac1f6b220ee8/)
QR kód má v sobě zašifrovanou fotografii, osobní údaje o uživateli, seznam slevových aplikací a také čerstvě zakoupených jízdenek. To umožňuje vlakovému personálu provést kontrolu off-line a zároveň jej nelze kopírovat, čímž se výrazně zvyšuje ochrana proti zneužití," říká Miloslav Kopecký, předseda představenstva divize České dráhy - Informační systémy.
Proprietální formát, těžko prostřelitelný imho.
-
Tady je mimochodem specifikace tištěných Aztec kódů na papírových jízdenkách, třeba v tom QR kódu najdeš podobné věci
To je paráda! Díky, aspoň je čeho se chytit. Zkusím zachytit několik snímků a prozkoumat. Na konci je příklad 'doklad' tak třeba to bude zrovna inkarta. Takže najít správný offset a deflate.
jenom rotuje několik QR kódů
Jasně, pokud se kódy podepisují na serveru a appka jen tupě zobrazuje, pak nemám moc šanci generovat to sám. Vypadá to že to provedli poctivě (a že znám případy...) .
K reverse engineeringu by mi tedy mělo stačit odchytit komunikaci appky s cd.cz když se přihlašuji a když to stahuje ty jízdenky. Pak předstírat že jsem apka, vše stáhnout a zobrazit...
Má smysl tím trávit čas? Nevím :) děti se taky neptají když si hrají.
-
Jízdenky mají QR statický, pokud se nepletu. Tam asi není tolik informací, protože k jízdence je vždy třeba přikládat inKartu, pokud byla použíta ke slevě a podobně. Pravděpodobně se jedná o stejný QR, který je i na PDF jízdence z eshopu. Ten lze použít i v tištěné podobně v kombinaci s inKartou/dokladem totožnosti, atp.
QR kód inKarty je ten klasický měnící se, a řekl bych, že k rotaci několika málo kódů nedochází a fungnuje to na podobném principu jako OTP, kdy na základě nějakého tajemství se ten dočasný kód vygeneruje i offline. To ti bere možnost si ten QR jednoduše vyfotit/nahrát a pak se jím prokázat, protože jeho platnost je velice krátká.
-
Mám pocit, že je tu trochu zmatek v tom podepisování. Aby podepisování dávalo smysl, musí data (pro koho je jízdenka vydaná, na jakou trasu a na kdy) samozřejmě podepsat server. Pokud by je podepisovala až aplikace v mobilu, může pomocí reverzního inženýrství (o které se tu snažíte) kdokoli vydávat jakékoli jízdenky. Ale tahle data server podepíše jednou při nákupu jízdenky a pošle vám je do aplikace. Aplikace si ta podepsaná data uloží a dále s nimi už může pracovat offline. Tahle podepsaná data posílaná ze serveru by tazatel musel vždy získat i pro svou aplikaci.
Druhá věc je zobrazení QR kódu. Tam už podepisování není potřeba, může tam být leda pro efekt. Tam už se řeší jen to, aby se zobrazený QR kód každou sekundu změnil, což je ochrana proti jeho ofocení. Pravděpodobně se to řeší tak, že se vezmou ta výše uvedená data ze serveru, k nim se připojí časová značka a to celé se prožene nějakou transformační funkcí, aby se změna časové značky rozprostřela do celého zakódovaného řetězce (a neměnil se tak jen kus QR kódu, ale celý kód). Ta transformační funkce může být nějaká šifra, ale stačilo by třeba i XORovat celý vstup tou časovou značkou. Do toho pak ale moc nesedí informace o tom, že jste v tom kódu viděl nějaký kus dat – snad jedině že by ta data byla rozsekaná na bloky a podle času se jen bloky různě zamíchaly – jiný způsob, jak měnit v čase celý QR kód a zároveň v něm zachovat viditelné části mne nenapadá.
-
Co bych asi udělal jako první:
obyčejné screenshoty toho měnícího se kódu v aplikaci a podíval se jestli se jednotlivé "frames" mění v čase (porovnat klidně jako obrázky), třeba podle datumu nebo podle toho jestli je koupená i jízdenka (jestli jenom přibyde obrázek odpovídající QR kódu jízdenky k vytištění).
Pokud bych nad tím uvažoval abstraktněji:
- jak čtečka, tak aplikace mohou být offline
- komunikace je jednostranná: aplikace → čtečka
- QR kód jízdenky může být vytištěný
- jízdenka koupená s dostatečným předstihem se stáhne do čtečky průvodčího a je v ní vyvolána pouhým načtením inKarty
- inKarta může být čipová nebo v aplikaci
Nevidím žádný přínos toho že by ty kódy v aplikaci byly nějak "dynamicky" podepisované, nebo spojené dohromady (myslím tím inKartu a jízdenky). Naopak by to celý systém jenom komplikovalo a chovalo se v různých scénářích.
I neměnný podpis jednotlivých částí zaručí že údaje jsou intaktní, navzájem jsou patrně spojené identifikátorem té karty.
Proto se domnívám že ten rotující QR kód je opravdu je jenom animace samostatně fungujících částí, a inKarta se skládá z víc QR kódů proto aby se tam datově vešla i ta fotka.
Možná by někdo od fochu naznačil víc na šotouším fóru: https://www.k-report.net/discus/messages/28/251794.html
-
Pro upřesnění:
I neměnný podpis jednotlivých částí zaručí že údaje jsou intaktní, jízdenka na inKartu odkazuje pouze identifikátorem inKarty který obsahuje, domnívám se že toto propojení není samo o sobě nijak kryptograficky zabezpečeno.
-
obyčejné screenshoty toho měnícího se kódu v aplikaci a podíval se jestli se jednotlivé "frames" mění v čase (porovnat klidně jako obrázky)
Předpokládám, že se nebavíme o jízdence, ale o InKartě. Tam se mění celý QR kód (všechny jeho dlaždice) každou vteřinu – na to nepotřebuju screenshoty a porovnání obrázků, na to mi stačí oči.
- QR kód jízdenky může být vytištěný
Pro jízdenky (o kterých tu ale podle mne nediskutujeme) se používá aztécký kód, ne QR kód.
Nevidím žádný přínos toho že by ty kódy v aplikaci byly nějak "dynamicky" podepisované, nebo spojené dohromady (myslím tím inKartu a jízdenky). Naopak by to celý systém jenom komplikovalo a chovalo se v různých scénářích.
Někde dříve tady bylo zmíněno, že kód InKarty obsahuje i naposledy koupené jízdenky. Což by dávalo smysl – průvodčí může načíst jenom InKartu a pokud v ní budou uložené i poslední jízdenky, bude to celé fungovat offline (po stažení jízdenky do aplikace).
-
obyčejné screenshoty toho měnícího se kódu v aplikaci a podíval se jestli se jednotlivé "frames" mění v čase (porovnat klidně jako obrázky)
Předpokládám, že se nebavíme o jízdence, ale o InKartě. Tam se mění celý QR kód (všechny jeho dlaždice) každou vteřinu – na to nepotřebuju screenshoty a porovnání obrázků, na to mi stačí oči.
Domnívám se že se tak děje proto, že se data inKarty nevejdou do jednoho QR kódu (je tam ta barevná fotografie), a tudíž pořád dokola rotuje několik QR kódů které ta data inKarty postupně do čtečky přenesou.
Mnou navržené porovnávání směřuje k zjištění toho zda jde opravdu o stále stejnou smyčku (dat podepsaných jednou provždy na serveru při nákupu inKarty), a nebo zda jsou ty kódy generovány/podepisovány nějak složitěji v aplikaci.
- QR kód jízdenky může být vytištěný
Pro jízdenky (o kterých tu ale podle mne nediskutujeme) se používá aztécký kód, ne QR kód.
Moje domněnka byla (a pravděpodobně jsem se, když o tom teď přemýšlím, mýlil) že kódy jízdenek (to že jde o Aztec a ne QR kódy je technický detail) jsou také zařazeny do té animace. Vzpomněl jsem si nicméně na situaci která nasvědčuje opaku: průvodčí eTicket po načtení animace neviděla (nebyl tedy stažený do její čtečky kde by se spároval s načtenou inKartou), a požádala mě abych jej ukázal zvlášť.
Nevidím žádný přínos toho že by ty kódy v aplikaci byly nějak "dynamicky" podepisované, nebo spojené dohromady (myslím tím inKartu a jízdenky). Naopak by to celý systém jenom komplikovalo a chovalo se v různých scénářích.
Někde dříve tady bylo zmíněno, že kód InKarty obsahuje i naposledy koupené jízdenky. Což by dávalo smysl – průvodčí může načíst jenom InKartu a pokud v ní budou uložené i poslední jízdenky, bude to celé fungovat offline (po stažení jízdenky do aplikace).
K tomu viz moje zkušenost výše. Moje úvaha byla že pokud ta animace obsahuje jak inKartu tak jízdenky, jejich kódy jsou oddělené (podepsané nezávisle, a fungujícící samostatně), a pouze se po sobě ukazují ve smyčce a čtečka je postupně - nezávisle na sobě - načte.
-
Přidám svůj poznatek.
Právě jsem si otevřel aplikaci Můj vlak bez jakýchkoli aktuálně platných jízdenek a mohu s jistotou říci, že mi tam (v sekci InKarta) neustále rotují dva totožné QR kódy. Z toho usuzuji, že pravděpodobně jde opravdu jen o přenesení mnoha dat najednou (kvůli fotce).
-
Domnívám se že se tak děje proto, že se data inKarty nevejdou do jednoho QR kódu (je tam ta barevná fotografie), a tudíž pořád dokola rotuje několik QR kódů které ta data inKarty postupně do čtečky přenesou.
Máte pravdu, u mne to vypadá, že se tam střídají dva stejné QR kód. To je zajímavé řešení – a vysvětluje to, proč to čtení čtečkou průvodčích trvá tak dlouho.
Vzpomněl jsem si nicméně na situaci která nasvědčuje opaku: průvodčí eTicket po načtení animace neviděla (nebyl tedy stažený do její čtečky kde by se spároval s načtenou inKartou), a požádala mě abych jej ukázal zvlášť.
To nemusí svědčit o opaku – je možné, že se vám jízdenka nestáhla do aplikace. Já jsem vycházel z téhle citace:
a pak tohle https://zpravy.aktualne.cz/finance/virtualni-in-karta-v-mobilu/r~d7508122fac811e7aabeac1f6b220ee8/ (https://zpravy.aktualne.cz/finance/virtualni-in-karta-v-mobilu/r~d7508122fac811e7aabeac1f6b220ee8/)
QR kód má v sobě zašifrovanou fotografii, osobní údaje o uživateli, seznam slevových aplikací a také čerstvě zakoupených jízdenek. To umožňuje vlakovému personálu provést kontrolu off-line a zároveň jej nelze kopírovat, čímž se výrazně zvyšuje ochrana proti zneužití," říká Miloslav Kopecký, předseda představenstva divize České dráhy - Informační systémy.
To, že jsou v QR kódu zakódované i čerstvě zakoupené jízdenky by si myslím novinář jen tak nevymyslel.
-
Vzpomněl jsem si nicméně na situaci která nasvědčuje opaku: průvodčí eTicket po načtení animace neviděla (nebyl tedy stažený do její čtečky kde by se spároval s načtenou inKartou), a požádala mě abych jej ukázal zvlášť.
To nemusí svědčit o opaku – je možné, že se vám jízdenka nestáhla do aplikace.
Rozumím, nicméně v mém případě to bylo tak že ta jízdenka byla přímo v té aplikaci koupená, a ukázat jí znamenalo akorát přejít na jinou obrazovku a nechat čtečku ať jí načte zvlášť ze statického obrázku v detailu jízdenky.
Až pojedu příště tak se na ten animovaný QR kód podívám pořádně jestli v něm s nákupem jízdenky přibyl "frame" nebo ne.
V tom citátu z novin může být ledacos ztraceno v překladu nebo řečeno technicky nepřesnou zkratkou. Třeba se jenom pokoušeli říct že je to všechno offline v "QR" kódech v té aplikaci.
-
Načtení inKarty opravdu trvá déle, takže asi je opravdu potřeba načíst více kódů.
Co se týče jízdenek koupených přes aplikaci s inKartou (vázaných na cestujícího s inKartou), tak stačí načíst inKartu a jízdenky se už dále neskenují. Naopak to nefunguje, takže když napřed ukážete jen tu jízdenku, bude potřeba ještě dodatečně naskenovat inKartu, k prokázání identity/slevy. To ale dává smysl.
-
Jeste jedna vec, u virtualni inKarty je moznost mit ten QR kod vytisteny nebo jako obrazek v mobilu, po overeni udaju mi prisel email s pdf, ve kterem je dvojice QR, nad kterou je napsano:
V případě vybití či poškození mobilního telefonu ukažte tuto kartičku průvodčímu.
na tom obrazku je naznak, ze se to ma prehnout aby to bylo oboustranne. Samozrejme to asi nebude stacit pri kontrole v zahranici, ale pri kontrole pruvodcim CD by melo stacit mit ten QR, jizdenku maji ulozenou v POPce.
-
Co se týče jízdenek koupených přes aplikaci s inKartou (vázaných na cestujícího s inKartou), tak stačí načíst inKartu a jízdenky se už dále neskenují. Naopak to nefunguje, takže když napřed ukážete jen tu jízdenku, bude potřeba ještě dodatečně naskenovat inKartu, k prokázání identity/slevy. To ale dává smysl.
Což pořád neřeší, zda jsou jízdenky offline uloženy v mobilu cestujícího nebo ve čtečce průvodčího. Osobně mi dává větší smysl ta první varianta, protože se dá předpokládat, že když cestující kupuje jízdenku z mobilu, stihne se ještě jízdenka stáhnout. A jde o jednu nebo pár jízdenek. Zatímco průvodčí je dlouho ve vlaku, kde to se signálem nebývá nejlepší, musely by se mu tam nové jízdenky posílat každých pár minut – a pokud čtečka neví, na jakém vlaku průvodčí zrovna je a kde bude pak, musela by stahovat všechny jízdenky z celé republiky.
Ale o kterou variantu jde se snadno zjistí, až někdo z diskutujících nějakou jízdenku koupí :-)
-
Jeste jedna vec, u virtualni inKarty je moznost mit ten QR kod vytisteny nebo jako obrazek v mobilu, po overeni udaju mi prisel email s pdf, ve kterem je dvojice QR, nad kterou je napsano:
V případě vybití či poškození mobilního telefonu ukažte tuto kartičku průvodčímu.
na tom obrazku je naznak, ze se to ma prehnout aby to bylo oboustranne. Samozrejme to asi nebude stacit pri kontrole v zahranici, ale pri kontrole pruvodcim CD by melo stacit mit ten QR, jizdenku maji ulozenou v POPce.
Jsou QR kódy v tom PDF shodné s tím, co ukazuje aplikace? Pokud ano, zkuste je porovnat ještě v okamžiku, kdy budete mít zakoupenou nějakou jízdenku.
-
Načtení inKarty opravdu trvá déle, takže asi je opravdu potřeba načíst více kódů.
Co se týče jízdenek koupených přes aplikaci s inKartou (vázaných na cestujícího s inKartou), tak stačí načíst inKartu a jízdenky se už dále neskenují.
To jsem si také myslel, ale podle osobní zkušenosti to platí jen když je ta jízdenka už stažená na čtečce průvodčího (ze serveru). Pak se automaticky spáruje s tou načtenou inKartou kartou, stejně jako jízdenka koupená na webu. Pokud tam ale ta jízdenka (ještě) není, je třeba následně ukázat i ten Aztec kód jízdenky v aplikaci. Je to hodně neobvyklé, jezdím dost pravidelně a stalo se mi to zatím jednou.
-
Což pořád neřeší, zda jsou jízdenky offline uloženy v mobilu cestujícího nebo ve čtečce průvodčího.
Když si jízdenku kupuju v aplikaci, musím být online a jízdenka se mi s potvrzením nákupu stáhne a uloží do aplikace pro offline použití.
Do čtečky průvodčího se jízdenka také stáhne, podle zkušenosti během několika minut pokud je na signálu.
Tím se to IMHO celé převede na původní řešení párování inKarty v rukou zákazníka s jízdenkou v čtečce, jako při nákupu z webu. Pokud jízdenka v čtečce není, zákazník ji ukáže v aplikaci (stejně jako by ji ukázal na papíře kdyby si jí koupil na webu a vytisknul doma, je to prostě ten samý obrázek).
-
Jeste jedna vec, u virtualni inKarty je moznost mit ten QR kod vytisteny nebo jako obrazek v mobilu, po overeni udaju mi prisel email s pdf, ve kterem je dvojice QR, nad kterou je napsano:
V případě vybití či poškození mobilního telefonu ukažte tuto kartičku průvodčímu.
na tom obrazku je naznak, ze se to ma prehnout aby to bylo oboustranne. Samozrejme to asi nebude stacit pri kontrole v zahranici, ale pri kontrole pruvodcim CD by melo stacit mit ten QR, jizdenku maji ulozenou v POPce.
Tohle podle mne řeší rojoův problém. Buď může na notebooku ukazovat to PDF, nebo pokud to chce „vytunit“, může si udělat aplikaci, která ty dva QR kódy bude zobrazovat na střídačku s frekvencí 1 sekundy.