Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Halo a h-uile duine.

Bruidhnidh sinne, Viktor Antipov agus Ilya Aleshin, an-diugh mun eòlas againn air a bhith ag obair le innealan USB tro Python PyUSB agus beagan mu innleadaireachd cùil.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

ro-eachdraidheil

Ann an 2019, Òrdugh Riaghaltas Caidreachas na Ruis Àir. 224 “Air aontachadh ris na Riaghailtean airson a bhith a’ comharrachadh thoraidhean tombaca le dòighean aithneachaidh agus feartan buileachadh siostam fiosrachaidh stàite airson sùil a chumail air cuairteachadh bathair a tha fo ùmhlachd bileagan èigneachail le dòighean aithneachaidh. a thaobh toraidhean tombaca” thàinig e gu bith.
Tha an sgrìobhainn a’ mìneachadh gum feum luchd-saothrachaidh bho 1 Iuchar 2019 gach pasgan tombaca a chomharrachadh. Agus feumaidh luchd-sgaoilidh dìreach na toraidhean sin fhaighinn le bhith a’ cur an gnìomh sgrìobhainn gluasaid uile-choitcheann (UDD). Feumaidh stòran, an uair sin, reic thoraidhean le bileagan a chlàradh tron ​​​​chlàr airgid.

Cuideachd, bho 1 Iuchar 2020, thathas a’ toirmeasg cuairteachadh stuthan tombaca gun ainm. Tha seo a’ ciallachadh gum feumar a h-uile pasgan toitean a chomharrachadh le còd-bàr sònraichte Datamatrix. A bharrachd air an sin - puing chudromach - thionndaidh e a-mach nach bi an Datamatrix àbhaisteach, ach neo-sheasmhach. Is e sin, chan e còd dubh air geal, ach a chaochladh.

Rinn sinn deuchainn air na sganadairean againn, agus thionndaidh e a-mach gum feum a’ mhòr-chuid dhiubh a bhith air an ùrachadh / ath-thrèanadh, air neo chan urrainn dhaibh dìreach a bhith ag obair gu h-àbhaisteach leis a’ chòd-barra seo. Bha an tionndadh seo de thachartasan a’ gealltainn ceann goirt dhuinn, leis gu bheil tòrr stòran aig a’ chompanaidh againn a tha sgapte thairis air raon mòr. Grunn deichean de mhìltean de chlàran airgid - agus glè bheag de ùine.

Dè bha ri dhèanamh? Tha dà roghainn ann. An toiseach: bidh innleadairean air an làrach ag ùrachadh agus ag atharrachadh nan sganaran le làimh. San dàrna h-àite: bidh sinn ag obair air astar agus, mas fheàrr, bidh sinn a’ còmhdach mòran sganaran aig an aon àm ann an aon tionndadh.

Cha robh a 'chiad roghainn, gu follaiseach, freagarrach dhuinne: dh'fheumadh sinn airgead a chosg air innleadairean tadhail, agus anns a' chùis seo bhiodh e doirbh smachd a chumail air a 'phròiseas agus a cho-òrdanachadh. Ach is e an rud as cudromaiche gum biodh daoine ag obair, is e sin, is dòcha gum faigheadh ​​​​sinn tòrr mhearachdan agus, as coltaiche, gun a bhith a’ coinneachadh ris a’ cheann-latha.

Tha an dàrna roghainn math dha na h-uile, mura h-eil airson aon rud. Cha robh na h-innealan frasaidh iomallach aig cuid de luchd-reic a bha a dhìth oirnn airson na siostaman obrachaidh a bha a dhìth. Agus leis gu robh na cinn-latha a’ ruith a-mach, bha agam ri smaoineachadh le mo cheann fhìn.

An ath rud, innsidh sinn dhut mar a leasaich sinn innealan airson sganaran inneal-làimhe airson an Debian 9.x OS (tha na clàran airgid againn uile air Debian).

Fuasgail an tòimhseachan: mar a ghlanas tu sganair

Tha Victor Antipov ag aithris.

Bidh an goireas oifigeil a bheir an neach-reic seachad ag obair fo Windows, agus dìreach le IE. Faodaidh an goireas an sganair a lasadh agus a rèiteachadh.

Leis gur e Debian an siostam targaid againn, chuir sinn a-steach frithealaiche usb-redirector air Debian agus teachdaiche ath-stiùireadh usb air Windows. A’ cleachdadh goireasan usb-redirector, chuir sinn air adhart an sganair bho inneal Linux gu inneal Windows.

Chunnaic goireas bho reiceadair Windows an sganair agus eadhon ga lasadh gu h-àbhaisteach. Mar sin, rinn sinn a’ chiad cho-dhùnadh: chan eil dad an urra ris an OS, tha e na chùis air a’ phròtacal frasaidh.

ceart gu leòr. Ruith sinn am frasadh air inneal Windows, agus thug sinn air falbh an dump air inneal Linux.

Lìon sinn an dump a-steach do WireShark agus ... dh'fhàs mi brònach (bidh mi a 'fàgail cuid de na mion-fhiosrachadh mun dump, chan eil ùidh sam bith aca).

Na sheall an dump dhuinn:

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Tha seòlaidhean 0000-0030, a’ breithneachadh le Wireshark, nam fiosrachadh seirbheis USB.

Bha ùidh againn ann am pàirt 0040-0070.

Cha robh dad soilleir bho aon fhrèam tar-chuir ach a-mhàin na caractaran MOCFT. Thionndaidh na caractaran sin gu bhith nan caractaran bhon fhaidhle firmware, a bharrachd air na caractaran a bha air fhàgail gu deireadh an fhrèam (tha am faidhle firmware air a chomharrachadh):

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Dè bha na samhlaidhean fd 3e 02 01 fe a’ ciallachadh, gu pearsanta, mar Ilya, cha robh beachd sam bith agam.

Thug mi sùil air an fhrèam a leanas (chaidh fiosrachadh seirbheis a thoirt air falbh an seo, chaidh am faidhle firmware a chomharrachadh):

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Dè dh'fhàs soilleir? Gu bheil a’ chiad dà bytes mar sheòrsa de sheasmhachd. Dhearbh a h-uile bloca às deidh sin seo, ach ro dheireadh a’ bhloc tar-chuir:

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Bha am frèam seo cuideachd uamhasach, leis gu robh an seasmhach air atharrachadh (air a chomharrachadh) agus, gu h-annasach gu leòr, bha pàirt den fhaidhle ann. Sheall meud nam bytes a chaidh a ghluasad den fhaidhle gun deach 1024 bytes a ghluasad. Cha robh fios agam a-rithist dè bha na bytes a bha air fhàgail a’ ciallachadh.

An toiseach, mar sheann far-ainm BBS, rinn mi ath-sgrùdadh air na protocolaidhean tar-chuir àbhaisteach. Cha deach protocol a chuir a-steach 1024 bytes. Thòisich mi a’ sgrùdadh a’ bhathar-chruaidh agus thàinig mi tarsainn air protocol 1K Xmodem. Leig e le 1024 a chuir a-mach, ach le caveat: an toiseach dìreach 128, agus dìreach mura robh mearachdan ann, mheudaich am protocol an àireamh de bytes a chaidh a ghluasad. Bha gluasad 1024 bytes agam sa bhad. Cho-dhùin mi sgrùdadh a dhèanamh air protocolaidhean tar-chuir, agus gu sònraichte an X-modem.

Bha dà atharrachadh air a' mhodem.

An toiseach, cruth pacaid XMODEM le taic CRC8 (an XMODEM tùsail):

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

San dàrna h-àite, cruth pacaid XMODEM le taic CRC16 (XmodemCRC):

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Tha e coltach ri chèile, ach a-mhàin SOH, àireamh pacaid agus CRC agus fad pacaid.

Choimhead mi air toiseach an dàrna bloc tar-chuir (agus a-rithist chunnaic mi am faidhle firmware, ach mar-thà air a chuir a-steach le 1024 bytes):

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Chunnaic mi am bann-cinn eòlach fd 3e 02, ach bha an ath dhà bytes air atharrachadh mar-thà: bha e 01 fe, agus thàinig e gu bhith 02 fd. An uairsin mhothaich mi gu robh an dàrna bloc a-nis air a h-àireamhachadh 02 agus mar sin a ’tuigsinn: air beulaibh orm bha àireamh a’ bhloc sgaoilidh. Is e a’ chiad gèar 1024 01, is e an dàrna fear 02, is e an treas fear 03 agus mar sin air adhart (ach ann an hex, gu dearbh). Ach dè tha an t-atharrachadh bho fe gu fd a’ ciallachadh? Chunnaic na sùilean lùghdachadh le 1, chuir an eanchainn an cuimhne gu bheil luchd-prògramaidh a 'cunntadh bho 0, chan e 1. Ach an uairsin carson a tha a' chiad bhloc 1, agus chan e 0? Cha do lorg mi am freagairt don cheist seo fhathast. Ach thuig mi mar a tha an dàrna bloc air a chunntadh. Chan eil an dàrna bloc dad nas motha na FF - (nas lugha) àireamh a’ chiad bhloc. Mar sin, chaidh an dàrna bloc ainmeachadh mar = 02 (FF-02) = 02 FD. Dhaingnich leughadh an dumpa às deidh sin mo bharail.

An uairsin thòisich an dealbh a leanas den tar-chuir a’ nochdadh:

Tòisich an tar-chuir
fd 3e 02 - Tòisich
01 FE - cunntair tar-chuir
Gluasad (34 blocaichean, 1024 bytes air an gluasad)
fd 3e 1024 bytes de dhàta (air a roinn ann am blocaichean 30 byte).
Deireadh an tar-chuir
fd 25

Thèid an dàta a tha air fhàgail a cho-thaobhadh ri 1024 bytes.

Cò ris a tha am frèam crìochnachaidh tar-chuir bloc coltach:

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

fd 25 - comharra gus crìoch a chuir air tar-chuir bloca. An ath 2f 52 - an còrr den fhaidhle suas gu 1024 bytes ann am meud. Tha 2f 52, a’ breithneachadh leis a’ phròtacal, na sgrùdadh CRC 16-bit.

Air sgàth seann amannan, rinn mi prògram ann an C a tharraing 1024 bytes bho fhaidhle agus a ’tomhas CRC 16-bit. Sheall cur air bhog a’ phrògraim nach e CRC 16-bit a tha seo. Stupor a-rithist - airson timcheall air trì latha. Fad na h-ùine seo bha mi a’ feuchainn ri tuigsinn dè a dh’ fhaodadh a bhith ann, mura h-e checksum. Fhad ‘s a bha mi a’ sgrùdadh làraich Beurla, fhuair mi a-mach gu bheil an X-modem a’ cleachdadh an àireamhachadh checksum aige fhèin - CRC-CCITT (XModem). Cha do lorg mi buileachadh C sam bith den àireamhachadh seo, ach lorg mi làrach a bha a’ tomhas an t-seic seo air-loidhne. An dèidh dhomh 1024 bytes den fhaidhle agam a ghluasad chun duilleag lìn, sheall an làrach dhomh seicum a bha gu tur a rèir an t-seic bhon fhaidhle.

Hooray! Chaidh an tòimhseachan mu dheireadh fhuasgladh, a-nis dh'fheumadh mi am firmware agam fhìn a dhèanamh. An uairsin, chuir mi air adhart m ’eòlas (agus cha do dh’ fhuirich e ach nam cheann) gu Ilya, a tha eòlach air an inneal cumhachdach Python.

A 'cruthachadh prògram

Tha Ilya Aleshin ag aithris.

Às deidh dhomh an stiùireadh iomchaidh fhaighinn, bha mi glè “toilichte.”

Càite an tòisich? Tha sin ceart, bhon toiseach.  Bho bhith a’ toirt dump bhon phort USB.

Cuir air bhog USB-pcap https://desowin.org/usbpcap/tour.html

Tagh am port ris a bheil an inneal ceangailte agus am faidhle far an sàbhail sinn an dump.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Bidh sinn a’ ceangal an sganair ri inneal far a bheil am bathar-bog dùthchasach EZConfigScanning airson Windows air a chuir a-steach.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

An sin lorg sinn an rud airson òrdughan a chuir chun inneal. Ach dè mu dheidhinn sgiobaidhean? Càite am faigh mi iad?
Nuair a thòisicheas am prògram, thèid an uidheamachd a sgrùdadh gu fèin-ghluasadach (chì sinn seo beagan nas fhaide air adhart). Agus bha còd-bàr trèanaidh ann bho sgrìobhainnean uidheamachd oifigeil. DEFALT. Seo an sgioba againn.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Tha an dàta riatanach air fhaighinn. Fosgail dump.pcap tro wireshark.

Cuir casg air nuair a thòisicheas tu air EZConfigScanning. Tha àiteachan air am bu chòir dhut aire a thoirt air an comharrachadh ann an dearg.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

A’ faicinn seo uile airson a’ chiad uair, chaill mi mo chridhe. Chan eil e soilleir càite an tèid thu an ath rud.

Beagan cnuasachaidh inntinn agus-is-agus... Aha! Anns an dump -mach An e sin e inagus in e -mach.

Rinn mi google dè th’ ann an URB_INTERRUPT. Fhuair mi a-mach gur e dòigh gluasad dàta a tha seo. Agus tha 4 dòighean mar seo: smachd, stad, isochronous, mòr-chuid. Faodaidh tu leughadh mun deidhinn fa leth.

Agus gheibhear na seòlaidhean crìochnachaidh ann an eadar-aghaidh inneal USB an dàrna cuid tron ​​​​àithne “lsusb -v” no a ’cleachdadh pyusb.

A-nis feumaidh sinn a h-uile inneal a lorg leis an VID seo. Faodaidh tu sgrùdadh sònraichte a dhèanamh le VID:PID.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Tha e coltach ri seo:

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Mar sin, tha am fiosrachadh riatanach againn: na h-òrdughan P_INFO. no DEFALT, a’ seòladh far an sgrìobh thu òrdughan endpoint = 03 agus càite am faigh thu am freagairt endpoint = 86. Chan eil air fhàgail ach na h-òrdughan a thionndadh gu hex.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Leis gu bheil sinn air an inneal a lorg mu thràth, leig dhuinn a dhì-cheangal bhon kernel ...

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

agus sgrìobh chun a’ phuing crìochnachaidh le seòladh 0x03,

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

... agus an uairsin leugh am freagairt bhon phuing crìochnachaidh le seòladh 0x86.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Freagairt structarail:

P_INFOfmt: 1
mode: app
app-present: 1
boot-present: 1
hw-sn: 18072B44CA
hw-rev: 0x20
cbl: 4
app-sw-rev: CP000116BBA
boot-sw-rev: CP000014BAD
flash: 3
app-m_name: Voyager 1450g
boot-m_name: Voyager 1450g
app-p_name: 1450g
boot-p_name: 1450g
boot-time: 16:56:02
boot-date: Oct 16 2014
app-time: 08:49:30
app-date: Mar 25 2019
app-compat: 289
boot-compat: 288
csum: 0x6986

Chì sinn an dàta seo ann an dump.pcap.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Sgoinneil! Tionndaidh barcodes siostam gu hex. Sin e, tha an comas trèanaidh deiseil.

Dè mu dheidhinn am firmware? Tha e coltach gu bheil a h-uile dad mar an ceudna, ach tha nuance ann.

Às deidh dhuinn cunntas iomlan a ghabhail air a’ phròiseas frasaidh, thuig sinn gu ìre mhòr dè a bha sinn a’ dèiligeadh. Seo artaigil mu XMODEM, a bha gu math cuideachail ann a bhith a’ tuigsinn mar a tha an conaltradh seo a’ tachairt, ged a bha e san fharsaingeachd: http://microsin.net/adminstuff/others/xmodem-protocol-overview.html Tha mi a’ moladh a leughadh.

A’ coimhead air an dump, chì thu gur e meud an fhrèam 1024, agus gur e meud dàta URB 64.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Mar sin - 1024/64 - gheibh sinn 16 loidhnichean ann am bloc, leugh am faidhle firmware 1 caractar aig aon àm agus cruthaich bloc. A’ cur ri loidhne 1 ann am bloc le caractaran sònraichte fd3e02 + àireamh bloca.
Thathas a’ cur ris na h-ath loidhnichean 14 le fd25 +, a’ cleachdadh XMODEM.calc_crc () bidh sinn a’ tomhas seic a’ bhloc gu lèir (thug e tòrr ùine a’ tuigsinn gur e CSUM a th’ ann an “FF - 1”) agus tha an loidhne mu dheireadh, 16th air a chur ris. le fd3e.

Bhiodh e coltach gur e sin e, leugh am faidhle firmware, buail na blocaichean, dì-cheangail an sganair bhon kernel agus cuir chun inneal e. Ach chan eil e cho sìmplidh sin. Feumaidh an sganair a bhith air atharrachadh gu modh firmware,
отправив ему NEWAPP = ‘\xfd\x0a\x16\x4e\x2c\x4e\x45\x57\x41\x50\x50\x0d’.
Cò às a tha an sgioba seo ?? Bhon dump.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Ach chan urrainn dhuinn bloc slàn a chuir chun sganair air sgàth crìoch 64:

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Uill, chan eil an sganair ann am modh frasaidh NEWAPP a’ gabhail ri hex. Mar sin, feumaidh tu gach loidhne bytes_array eadar-theangachadh

[253, 10, 22, 78, 44, 78, 69, 87, 65, 80, 80, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Agus an uairsin cuir an dàta seo chun sganair.

Gheibh sinn am freagairt:

[2, 1, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Ma nì thu sgrùdadh air an artaigil mu XMODEM, bidh e soilleir: chaidh gabhail ris an dàta.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Às deidh a h-uile bloc a bhith air a ghluasad, cuiridh sinn crìoch air a’ ghluasad END_TRANSFER = ‘xfdx01x04’.

Uill, leis nach eil fiosrachadh sam bith aig na blocaichean sin airson daoine àbhaisteach, stàlaidhidh sinn am firmware ann am modh falaichte gu bunaiteach. Agus dìreach gun fhios, cuiridh sinn bàr adhartais air dòigh tro tqdm.

Gnìomh airson leasaiche, no mar a bhiodh sinn a’ frasadh sganaran làimhe às aonais reiceadair

Gu dearbh, an uairsin tha e na chùis de rudan beaga. Chan eil air fhàgail ach am fuasgladh a phasgadh ann an sgriobtaichean airson ath-riochdachadh mòr aig àm a tha air a mhìneachadh gu soilleir, gus nach cuir thu dàil air a’ phròiseas a bhith ag obair aig na checkouts, agus gun cuir thu logadh a-steach.

An toradh

Às deidh dhuinn tòrr ùine agus oidhirp agus falt a chuir air ar cinn, bha e comasach dhuinn na fuasglaidhean a bha a dhìth oirnn a leasachadh, agus choinnich sinn ris a’ cheann-latha cuideachd. Aig an aon àm, tha na sganaran a-nis air an ùrachadh agus air an ath-thrèanadh sa mheadhan, tha sinn gu soilleir a’ cumail smachd air a’ phròiseas air fad. Shàbhail a’ chompanaidh ùine agus airgead, agus fhuair sinn eòlas luachmhor ann an uidheamachd innleadaireachd cùil den t-seòrsa seo.

Source: www.habr.com

Cuir beachd ann