Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Hi kulħadd

Aħna, Viktor Antipov u Ilya Aleshin, illum se nitkellmu dwar l-esperjenza tagħna ta 'ħidma ma' apparati USB permezz ta 'Python PyUSB u ftit dwar l-inġinerija inversa.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

preistorja

Fl-2019, id-Digriet tal-Gvern tal-Federazzjoni Russa Nru 224 "Dwar l-approvazzjoni tar-Regoli għat-tikkettar ta 'prodotti tat-tabakk b'mezzi ta' identifikazzjoni u karatteristiċi tal-implimentazzjoni ta 'sistema ta' informazzjoni tal-istat għall-monitoraġġ taċ-ċirkolazzjoni ta 'oġġetti soġġetti għal tikkettar obbligatorju b'mezzi ta' identifikazzjoni fir-rigward tal-prodotti tat-tabakk” daħlet fis-seħħ.
Id-dokument jispjega li mill-1 ta 'Lulju 2019, il-manifatturi huma meħtieġa li jittikkettjaw kull pakkett ta' tabakk. U d-distributuri diretti għandhom jirċievu dawn il-prodotti bl-eżekuzzjoni ta 'dokument ta' trasferiment universali (UDD). Il-ħwienet, min-naħa tagħhom, jeħtieġ li jirreġistraw il-bejgħ ta 'prodotti ttikkettjati permezz tal-cash register.

Ukoll, mill-1 ta 'Lulju, 2020, iċ-ċirkolazzjoni ta' prodotti tat-tabakk mhux tikkettati hija pprojbita. Dan ifisser li l-pakketti tas-sigaretti kollha għandhom ikunu mmarkati b'barcode Datamatrix speċjali. Barra minn hekk - punt importanti - irriżulta li d-Datamatrix mhux se jkun ordinarju, iżda invers. Jiġifieri mhux kodiċi iswed fuq l-abjad, iżda viċi versa.

Ittestjajna l-iskaners tagħna, u rriżulta li l-biċċa l-kbira tagħhom jeħtieġ li jerġgħu jiġu mħarrġa mill-ġdid, inkella sempliċement ma jkunux jistgħu jaħdmu b'mod normali b'dan il-barcode. Din il-bidla tal-avvenimenti ggarantitilna uġigħ ta 'ras qawwi, minħabba li l-kumpanija tagħna għandha ħafna ħwienet li huma mifruxa fuq territorju vast. Diversi għexieren ta’ eluf ta’ cash registers – u ftit li xejn ħin.

X'kellu jsir? Hemm żewġ għażliet. L-ewwel: inġiniera fuq il-post manwalment reflash u aġġusta l-iskaners. It-tieni: naħdmu mill-bogħod u, preferibbilment, inkopru ħafna skaners f'daqqa f'iterazzjoni waħda.

L-ewwel għażla, ovvjament, ma kinitx adattata għalina: ikollna nonfqu l-flus fuq inġiniera li jżuru, u f'dan il-każ ikun diffiċli li nikkontrollaw u nikkoordinaw il-proċess. Iżda l-iktar ħaġa importanti hija li n-nies jaħdmu, jiġifieri, potenzjalment ikollna ħafna żbalji u, x'aktarx, ma nilħqux l-iskadenza.

It-tieni għażla hija tajba għal kulħadd, jekk mhux għal ħaġa waħda. Xi bejjiegħa ma kellhomx l-għodod li jteptep mill-bogħod li kellna bżonn għas-sistemi operattivi kollha meħtieġa. U peress li l-iskadenzi kienu qed jispiċċaw, kelli naħseb b’rasi.

Sussegwentement, aħna ngħidulek kif żviluppajna għodod għal skaners li jinżammu fl-idejn għall-OS Debian 9.x (il-cash registers kollha tagħna huma fuq Debian).

Issolvi l-riddle: kif flash scanner

jirrapporta Victor Antipov.

L-utilità uffiċjali pprovduta mill-bejjiegħ taħdem taħt Windows, u biss ma 'IE. L-utilità tista 'tteptep u tikkonfigura l-iskaner.

Peress li s-sistema fil-mira tagħna hija Debian, installajna server usb-redirector fuq Debian u klijent usb-redirector fuq il-Windows. Bl-użu ta 'utilitajiet usb-redirector, aħna bagħtna l-iskaner minn magna Linux għal magna Windows.

Utilità minn bejjiegħ tal-Windows rat l-iskaner u anke flashed b'mod normali. Għalhekk, għamilna l-ewwel konklużjoni: xejn ma jiddependi fuq l-OS, hija kwistjoni tal-protokoll li jteptep.

KOLLOX SEW. Aħna dam it-teptep fuq il-magna tal-Windows, u neħħejna d-dump fuq il-magna Linux.

Mimlijna l-miżbla f'WireShark u... imdejjaq (nħalli barra xi dettalji tad-dump, m'huma ta 'ebda interess).

Dak li wrietna l-miżbla:

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Indirizzi 0000-0030, ġġudikati minn Wireshark, huma informazzjoni tas-servizz USB.

Konna interessati fil-parti 0040-0070.

Xejn ma kien ċar minn qafas ta' trasmissjoni wieħed ħlief għall-karattri MOCFT. Dawn il-karattri rriżultaw li kienu karattri mill-fajl tal-firmware, kif ukoll il-karattri li fadal sat-tmiem tal-qafas (il-fajl tal-firmware huwa enfasizzat):

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

X'fissru s-simboli fd 3e 02 01 fe, jien personalment, bħal Ilya, ma kellix idea.

Ħarist lejn il-qafas li ġej (l-informazzjoni tas-servizz tneħħiet hawn, il-fajl tal-firmware ġie enfasizzat):

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

X’sar ċar? Li l-ewwel żewġ bytes huma xi tip ta 'kostanti. Il-blokki sussegwenti kollha kkonfermaw dan, iżda qabel it-tmiem tal-blokk tat-trasmissjoni:

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Dan il-qafas kien ukoll stupefying, peress li l-kostanti kienet inbidlet (enfasizzata) u, stramba, kien hemm parti mill-fajl. Id-daqs tal-bytes trasferiti tal-fajl wera li ġew trasferiti 1024 bytes. Erġajt ma kontx naf xi jfisser il-bytes li fadal.

L-ewwelnett, bħala laqam antik tal-BBS, irrevejt il-protokolli ta 'trażmissjoni standard. Ebda protokoll trażmess 1024 bytes. Bdejt nistudja l-ħardwer u ltqajt mal-protokoll 1K Xmodem. Ippermetta t-trażmissjoni ta '1024, iżda b'twissija: għall-ewwel 128 biss, u biss jekk ma kienx hemm żbalji, il-protokoll żied in-numru ta' bytes trażmessi. Immedjatament kelli trasferiment ta’ 1024 bytes. Iddeċidejt li nistudja protokolli ta 'trażmissjoni, u speċifikament l-X-modem.

Kien hemm żewġ varjazzjonijiet tal-modem.

L-ewwel, il-format tal-pakkett XMODEM b'appoġġ CRC8 (l-XMODEM oriġinali):

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

It-tieni nett, il-format tal-pakkett XMODEM b'appoġġ CRC16 (XmodemCRC):

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Jidher simili, ħlief għal SOH, numru tal-pakkett u CRC u tul tal-pakkett.

Fittixt lejn il-bidu tat-tieni blokk ta 'trażmissjoni (u għal darb'oħra rajt il-fajl tal-firmware, iżda diġà indentjat b'1024 bytes):

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Rajt l-header familjari fd 3e 02, iżda ż-żewġ bytes li jmiss kienu diġà nbidlu: kien 01 fe, u sar 02 fd. Imbagħad innutajt li t-tieni blokk issa kien innumerat 02 u għalhekk mifhum: quddiemi kien hemm in-numerazzjoni tal-blokka tat-trasmissjoni. L-ewwel tagħmir 1024 huwa 01, it-tieni huwa 02, it-tielet huwa 03 u l-bqija (iżda f'hex, ovvjament). Imma xi tfisser il-bidla minn fe għal fd? L-għajnejn raw tnaqqis b'1, il-moħħ fakkar li l-programmaturi jgħoddu minn 0, mhux 1. Imma allura għaliex l-ewwel blokk huwa 1, u mhux 0? Għadni ma sibtx it-tweġiba għal din il-mistoqsija. Imma fhimt kif jingħadd it-tieni blokk. It-tieni blokk mhu xejn aktar minn FF – (nieqes) in-numru tal-ewwel blokk. Għalhekk, it-tieni blokk ġie indikat bħala = 02 (FF-02) = 02 FD. Il-qari sussegwenti tal-miżbla kkonferma l-raden tiegħi.

Imbagħad bdiet toħroġ l-istampa li ġejja tat-trasmissjoni:

Bidu tat-trażmissjoni
fd 3e 02 – Ibda
01 FE – kontur tat-trażmissjoni
Trasferiment (34 blokk, 1024 bytes trasferiti)
fd 3e 1024 bytes ta' data (maqsuma fi blokki ta' 30 byte).
Tmiem tat-trażmissjoni
fd 25

Id-dejta li jifdal trid tiġi allinjata ma' 1024 bytes.

Kif jidher il-qafas tat-tarf tat-trażmissjoni tal-blokka:

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

fd 25 – sinjal sat-tmiem tat-trażmissjoni tal-blokk. Li jmiss 2f 52 - il-bqija tal-fajl sa 1024 bytes fid-daqs. 2f 52, ġġudikat mill-protokoll, huwa checksum CRC ta '16-bit.

Għal żminijiet qodma, għamilt programm f'C li ġibed 1024 bytes minn fajl u kkalkula CRC ta '16-bit. It-tnedija tal-programm wera li dan mhuwiex CRC 16-bit. Stupor mill-ġdid - għal madwar tlett ijiem. Dan iż-żmien kollu kont qed nipprova nifhem x’jista’ jkun, jekk mhux checksum. Waqt li nistudja siti bil-lingwa Ingliża, skoprejt li l-X-modem juża l-kalkolu tas-checksum tiegħu stess - CRC-CCITT (XModem). Ma sibt l-ebda implimentazzjoni C ta 'dan il-kalkolu, iżda sibt sit li kkalkula din iċ-checksum online. Wara li ttrasferixxa 1024 bytes tal-fajl tiegħi għall-paġna tal-web, is-sit wera lili checksum li qabbel kompletament maċ-checksum mill-fajl.

Ħura! L-aħħar riddle ġiet solvuta, issa kelli bżonn nagħmel il-firmware tiegħi stess. Sussegwentement, għadda l-għarfien tiegħi (u baqa 'biss f'rasi) lil Ilya, li huwa familjari mal-għodda qawwija Python.

Ħolqien ta 'programm

Ilya Aleshin jirrapporta.

Wara li rċevejt l-​istruzzjonijiet xierqa, kont “ferħan.”

Fejn tibda? Hekk hu, mill-bidu.  Minn tieħu dump mill-port USB.

Tnedija USB-pcap https://desowin.org/usbpcap/tour.html

Agħżel il-port li miegħu huwa konness l-apparat u l-fajl fejn se nissejvjaw id-dump.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Aħna nqabbdu l-iskaner ma 'magna fejn is-softwer indiġenu EZConfigScanning għall-Windows huwa installat.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Fiha nsibu l-oġġett biex jintbagħtu kmandi lill-apparat. Imma xi ngħidu dwar it-timijiet? Fejn nista' niksebhom?
Meta jibda l-programm, it-tagħmir jiġi mistħarreġ awtomatikament (dan naraw dan ftit aktar tard). U kien hemm taħriġ barcodes minn dokumenti tat-tagħmir uffiċjali. DEFALT. Dan huwa t-tim tagħna.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Id-data meħtieġa waslet. Iftaħ dump.pcap permezz ta' wireshark.

Imblokka meta tibda EZConfigScanning. Postijiet li trid tagħti attenzjoni għalihom huma mmarkati bl-aħmar.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Meta rajt dan kollu għall-ewwel darba, qtajt qalbi. Mhuwiex ċar fejn iħaffer wara.

Ftit brainstorming u-u-u... Aha! Fil-miżbla barra - hu inU in dan barra.

I google x'inhu URB_INTERRUPT. Sibt li dan huwa metodu ta 'trasferiment tad-data. U hemm 4 metodi bħal dawn: kontroll, interruzzjoni, isochronous, bl-ingrossa. Tista' taqra dwarhom separatament.

U l-indirizzi tal-endpoint fl-interface tal-apparat USB jistgħu jinkisbu jew permezz tal-kmand "lsusb –v" jew bl-użu ta 'pyusb.

Issa rridu nsibu l-apparati kollha b'dan il-VID. Tista' tfittex speċifikament permezz ta' VID:PID.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Jidher bħal dan:

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Allura, għandna l-informazzjoni meħtieġa: il-kmandi P_INFO. jew DEFALT, indirizzi fejn tikteb kmandi endpoint=03 u fejn tikseb ir-rispons endpoint=86. Kulma jibqa 'huwa li tikkonverti l-kmandi għal hex.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Peress li diġà sibna l-apparat, ejja skonnettjawh mill-qalba...

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

... u ikteb lill-endpoint bl-indirizz 0x03,

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

... u mbagħad aqra r-rispons mill-endpoint bl-indirizz 0x86.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Risposta strutturata:

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

Aħna naraw din id-dejta f'dump.pcap.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Kbir! Ikkonverti l-barcodes tas-sistema għal hex. Dak hu, il-funzjonalità tat-taħriġ hija lesta.

Xi ngħidu dwar il-firmware? Jidher li kollox huwa l-istess, iżda hemm sfumatura.

Wara li ħadna dump sħiħ tal-proċess li jteptep, bejn wieħed u ieħor fhimna dak li konna nittrattaw. Hawnhekk hawn artiklu dwar XMODEM, li kien ta’ għajnuna kbira biex wieħed jifhem kif isseħħ din il-komunikazzjoni, għalkemm f’termini ġenerali: http://microsin.net/adminstuff/others/xmodem-protocol-overview.html Nirrakkomanda li taqrah.

Meta wieħed iħares lejn il-miżbla, tista 'tara li d-daqs tal-qafas huwa 1024, u d-daqs tad-dejta URB huwa 64.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Għalhekk – 1024/64 – nikbru 16-il linja fi blokk, aqra l-fajl tal-firmware karattru 1 kull darba u niffurmaw blokka. Li tikkumplimenta linja 1 fi blokka b'karattri speċjali fd3e02 + numru tal-blokk.
L-14-il linja li jmiss huma supplimentati b'fd25 +, billi nużaw XMODEM.calc_crc() aħna nikkalkulaw is-checksum tal-blokk kollu (ħadet ħafna ħin biex nifhmu li "FF - 1" hija CSUM) u l-aħħar, is-16-il linja hija supplimentata ma fd3e.

Jidher li hu, aqra l-fajl tal-firmware, laqat il-blokki, skonnettja l-iskaner mill-qalba u ibgħatha lill-apparat. Imma mhux daqshekk sempliċi. L-iskaner jeħtieġ li jinbidel għall-modalità tal-firmware,
отправив ему NEWAPP = ‘\xfd\x0a\x16\x4e\x2c\x4e\x45\x57\x41\x50\x50\x0d’.
Minn fejn hu dan it-tim?? Mill-miżbla.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Imma ma nistgħux nibagħtu blokka sħiħa lill-iskaner minħabba l-limitu ta '64:

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Ukoll, l-iskaner fil-mod li jteptep NEWAPP ma jaċċettax hex. Għalhekk, ser ikollok tittraduċi kull linja bytes_array

[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]

U mbagħad ibgħat din id-dejta lill-iskaner.

Nirċievu t-tweġiba:

[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]

Jekk tiċċekkja l-artiklu dwar XMODEM, isir ċar: id-dejta ġiet aċċettata.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Wara li l-blokki kollha jkunu ġew trasferiti, aħna tlesti t-trasferiment END_TRANSFER = 'xfdx01x04'.

Ukoll, peress li dawn il-blokki ma jġorru l-ebda informazzjoni għal nies ordinarji, aħna se ninstallaw il-firmware fil-modalità moħbija b'mod awtomatiku. U fil-każ, aħna ser norganizzaw progress bar permezz ta 'tqdm.

Kompitu għal żviluppatur, jew kif aħna flashed skaners li jinżammu fl-idejn mingħajr bejjiegħ

Fil-fatt, allura hija kwistjoni ta 'affarijiet żgħar. Dak kollu li jibqa 'huwa li tgeżwer is-soluzzjoni fi skripts għal replikazzjoni tal-massa f'ħin definit b'mod ċar, sabiex ma jonqosx il-proċess tax-xogħol fil-checkouts, u żżid il-qtugħ.

Total

Wara li qattajna ħafna ħin u sforz u xagħar fuq rasna, stajna niżviluppaw is-soluzzjonijiet li kellna bżonn, u wkoll issodisfaw l-iskadenza. Fl-istess ħin, l-iskaners issa huma refashed u mħarrġa mill-ġdid ċentralment, aħna nikkontrollaw b'mod ċar il-proċess kollu. Il-kumpanija ffrankat ħin u flus, u ksibna esperjenza imprezzabbli f'tagħmir ta 'inġinerija inversa ta' dan it-tip.

Sors: www.habr.com

Żid kumment