Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Bonjou tout moun.

Nou menm, Viktor Antipov ak Ilya Aleshin, jodi a pral pale sou eksperyans nou ap travay ak aparèy USB atravè Python PyUSB ak yon ti kras sou jeni ranvèse.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

pre-istwa

Nan 2019, Dekrè Gouvènman an nan Federasyon Larisi No 224 "Sou apwobasyon Règ yo pou mete etikèt sou pwodwi tabak ak mwayen idantifikasyon ak karakteristik nan aplikasyon an nan yon sistèm enfòmasyon leta pou kontwole sikilasyon an nan machandiz sijè a etikèt obligatwa ak mwayen idantifikasyon. an relasyon ak pwodwi tabak” te antre an fòs.
Dokiman an eksplike ke apati 1ye jiyè 2019, manifaktirè yo oblije mete etikèt sou chak pake tabak. Ak distribitè dirèk yo dwe resevwa pwodwi sa yo ak ekzekisyon an nan yon dokiman transfè inivèsèl (UDD). Magazen yo, nan vire, bezwen enskri vant lan nan pwodwi ki make nan kach enskri a.

Epitou, apati 1ye jiyè 2020, sikilasyon pwodwi tabak san etikèt yo entèdi. Sa vle di tout pake sigarèt yo dwe make ak yon kòd bar Datamatrix espesyal. Anplis - yon pwen enpòtan - li te tounen soti ke Datamatrix la pa pral òdinè, men envès. Sa vle di, pa kòd nwa sou blan, men vis vèrsa.

Nou teste eskanè nou yo, epi li te vin wè ke pi fò nan yo bezwen yo dwe reflashed/retraîné, otreman yo tou senpleman pa kapab travay nòmalman ak kòd bar sa a. Sa a vire nan evènman garanti nou yon gwo tèt fè mal, paske konpayi nou an gen yon anpil nan magazen ki gaye sou yon teritwa vas. Plizyè dizèn de milye de kach enskri - ak anpil ti tan.

Kisa ki te dwe fèt? Gen de opsyon. Premyèman: enjenyè sou plas manyèlman reflash ak ajiste eskanè yo. Dezyèmman: nou travay adistans epi, de preferans, kouvri anpil eskanè an menm tan nan yon sèl iterasyon.

Premye opsyon a, evidamman, pa t 'apwopriye pou nou: nou ta dwe depanse lajan nan vizite enjenyè, ak nan ka sa a li ta difisil a kontwole ak kowòdone pwosesis la. Men, bagay ki pi enpòtan an se ke moun ta travay, se sa ki, nou ta potansyèlman jwenn yon anpil nan erè epi, gen plis chans, pa satisfè dat limit la.

Dezyèm opsyon a bon pou tout moun, si se pa pou yon sèl bagay. Gen kèk machann ki pa t 'gen zouti flache aleka nou te bezwen pou tout sistèm operasyon yo mande yo. Epi depi dat limit yo te fini, mwen te oblije reflechi ak pwòp tèt mwen.

Apre sa, nou pral di w ki jan nou devlope zouti pou eskanè men yo pou Debian 9.x OS (tout kach anrejistre nou yo sou Debian).

Rezoud devinèt la: ki jan yo flash yon eskanè

Victor Antipov rapòte.

Sèvis piblik ofisyèl machann lan bay travay anba Windows, epi sèlman ak IE. Sèvis piblik la ka flash ak configured scanner la.

Depi sistèm sib nou an se Debian, nou enstale yon sèvè usb-redirector sou Debian ak yon kliyan usb-redirector sou Windows. Sèvi ak sèvis piblik usb-redirector, nou voye eskanè a soti nan yon machin Linux nan yon machin Windows.

Yon sèvis piblik ki soti nan yon machann Windows te wè eskanè a e menm te klere li nòmalman. Kidonk, nou te fè premye konklizyon an: pa gen anyen ki depann de eksplwatasyon an, li nan yon kesyon de pwotokòl la flache.

OK. Nou kouri flache a sou machin nan Windows, epi retire pil fatra a sou machin nan Linux.

Nou boure pil fatra a nan WireShark ak ... te tris (mwen pral omisyon kèk nan detay yo nan pil fatra a, yo pa nan okenn enterè).

Ki sa pil fatra a te montre nou:

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Adrès 0000-0030, jije pa Wireshark, se enfòmasyon sèvis USB.

Nou te enterese nan pati 0040-0070.

Pa gen anyen ki klè nan yon ankadreman transmisyon eksepte karaktè MOCFT yo. Karaktè sa yo te tounen karaktè ki soti nan fichye firmwèr la, osi byen ke karaktè ki rete yo jouk nan fen ankadreman an (fichye firmwèr la make):

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Pèsonèlman, tankou Ilya, mwen pa t gen okenn lide ki sa senbòl yo fd 3e 02 01 fe vle di.

Mwen te gade ankadreman sa a (enfòmasyon sèvis yo te retire isit la, fichye firmwèr la te make):

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Ki sa ki te vin klè? Sa de premye bytes yo se yon kalite konstan. Tout blòk ki vin apre yo konfime sa a, men anvan fen blòk transmisyon an:

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Ankadreman sa a te tou stupefying, depi konstan a te chanje (met aksan sou) epi, etranj ase, te gen yon pati nan dosye a. Gwosè a nan octets yo transfere nan dosye a te montre ke 1024 bytes yo te transfere. Mwen ankò pa t 'konnen ki sa bytes ki rete yo vle di.

Premye a tout, kòm yon ansyen tinon BBS, mwen revize pwotokòl transmisyon estanda yo. Pa gen pwotokòl transmèt 1024 bytes. Mwen te kòmanse etidye pyès ki nan konpitè epi mwen te rankontre pwotokòl 1K Xmodem la. Li pèmèt transmèt 1024, men ak yon opozisyon: nan premye sèlman 128, epi sèlman si pa te gen okenn erè, pwotokòl la ogmante kantite bytes transmèt. Mwen imedyatman te gen yon transfè nan 1024 bytes. Mwen deside etidye pwotokòl transmisyon, epi espesyalman X-modèm la.

Te gen de varyasyon nan modèm la.

Premyèman, fòma pake XMODEM ak sipò CRC8 (orijinal XMODEM):

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Dezyèmman, fòma pake XMODEM ak sipò CRC16 (XmodemCRC):

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Li sanble menm jan an, eksepte pou SOH, nimewo pake ak CRC ak longè pake.

Mwen te gade nan kòmansman dezyèm blòk transmisyon an (e ankò te wè fichye firmwèr la, men li te deja indentée pa 1024 bytes):

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Mwen te wè header abitye fd 3e 02, men de bytes kap vini yo te deja chanje: li te 01 fe, epi li te vin 02 fd. Lè sa a, mwen remake ke dezyèm blòk la te nimewote kounye a 02 epi konsa konprann: devan m 'te nimero blòk transmisyon an. Premye Kovèti pou 1024 la se 01, dezyèm lan se 02, twazyèm lan se 03 ak sou sa (men nan hex, nan kou). Men, kisa chanjman nan fe pou fd vle di? Je yo te wè yon diminisyon pa 1, sèvo a te raple ke pwogramasyon konte soti nan 0, pa 1. Men, Lè sa a, poukisa premye blòk la 1, epi yo pa 0? Mwen poko jwenn repons kesyon sa a toujou. Men, mwen te konprann ki jan dezyèm blòk la konte. Dezyèm blòk la pa gen anyen plis pase FF - (mwens) nimewo a nan premye blòk la. Kidonk, dezyèm blòk la te deziyen kòm = 02 (FF-02) = 02 FD. Lekti ki vin apre nan pil fatra a konfime devine mwen.

Lè sa a, foto sa a nan transmisyon an te kòmanse parèt:

Kòmanse nan transmisyon
fd 3e 02 – Kòmanse
01 FE – kontwa transmisyon
Transfè (34 blòk, 1024 bytes transfere)
fd 3e 1024 byte done (divize an blòk 30 byte).
Fen transmisyon
fd 25

Done ki rete yo dwe aliyen ak 1024 octets.

Ki jan ankadreman fen transmisyon blòk la sanble:

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

fd 25 - siyal pou fini transmisyon blòk. Next 2f 52 - rès la nan dosye a jiska 1024 bytes nan gwosè. 2f 52, jije pa pwotokòl la, se yon chèk CRC 16-bit.

Pou dedomajman pou ansyen tan yo, mwen te fè yon pwogram nan C ki rale 1024 byte nan yon dosye epi kalkile yon CRC 16-bit. Lanse pwogram nan te montre ke sa a se pa yon CRC 16-bit. Stupor ankò - pou apeprè twa jou. Pandan tout tan sa a mwen t ap eseye konprann ki sa li ta ka, si se pa yon checksum. Pandan m t ap etidye sit ki pale angle, mwen te dekouvri ke X-modem la sèvi ak pwòp kalkil checksum li - CRC-CCITT (XModem). Mwen pa t 'jwenn okenn aplikasyon C nan kalkil sa a, men mwen te jwenn yon sit ki kalkile checksum sa a sou entènèt. Lè w te transfere 1024 octets nan fichye mwen an nan paj wèb la, sit la te montre m yon sòm chèk ki konplètman matche ak sòm chèk la nan dosye a.

Houra! Dènye devinèt la te rezoud, kounye a mwen te bezwen fè firmwèr pwòp mwen an. Apre sa, mwen te pase konesans mwen (epi li te rete sèlman nan tèt mwen) bay Ilya, ki moun ki abitye ak zouti pwisan Python la.

Kreye yon pwogram

Ilya Aleshin rapòte.

Lè m te resevwa enstriksyon ki apwopriye yo, mwen te trè "kontan".

Ki kote yo kòmanse? Sa a dwat, depi nan kòmansman an.  Soti nan pran yon pil fatra nan pò USB la.

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

Chwazi pò a kote aparèy la konekte ak dosye a kote nou pral sove pil fatra a.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Nou konekte eskanè a nan yon machin kote lojisyèl natif natal EZConfigScanning pou Windows enstale.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Nan li nou jwenn atik la pou voye kòmandman nan aparèy la. Men, e ekip yo? Ki kote mwen ka jwenn yo?
Lè pwogram nan kòmanse, ekipman an te vote otomatikman (nou pral wè sa yon ti kras pita). Epi te gen kòd bar fòmasyon ki soti nan dokiman ekipman ofisyèl yo. DEFALT. Sa a se ekip nou an.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Done ki nesesè yo te resevwa. Louvri dump.pcap via wireshark.

Bloke lè w kòmanse EZConfigScanning. Kote ou bezwen peye atansyon a yo make an wouj.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Lè m wè tout bagay sa yo pou premye fwa, mwen te pèdi kè. Li pa klè ki kote yo fouye pwochen.

Yon ti brase lide ak-ak-ak... Aha! Nan pil fatra a soti - sa a inAk in sa a soti.

Mwen google kisa URB_INTERRUPT ye. Mwen te jwenn ke sa a se yon metòd transfè done. Epi gen 4 metòd sa yo: kontwòl, entèwonp, isochrone, esansyèl. Ou ka li sou yo separeman.

Ak adrès pwen final yo nan koòdone aparèy USB a ka jwenn swa atravè lòd "lsusb -v" oswa lè l sèvi avèk pyusb.

Koulye a, nou bezwen jwenn tout aparèy ki gen VID sa a. Ou ka fè rechèch espesyalman pa VID:PID.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Li sanble sa a:

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Se konsa, nou gen enfòmasyon ki nesesè yo: kòmandman P_INFO yo. oswa DEFALT, adrès kote yo ekri kòmandman endpoint=03 ak ki kote pou jwenn repons lan endpoint=86. Tout sa ki rete se konvèti kòmandman yo nan hex.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Depi nou te deja jwenn aparèy la, ann dekonekte li nan nwayo a...

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

... epi ekri nan pwen final la ak adrès 0x03,

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

... ak Lè sa a, li repons lan soti nan pwen final la ak adrès 0x86.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Repons estriktire:

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

Nou wè done sa yo nan dump.pcap.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Gwo! Konvèti kòd bar sistèm nan hex. Se li, fonksyonalite fòmasyon an pare.

Ki sa ki sou firmwèr la? Tout sanble se menm bagay la, men gen yon nuans.

Èske w fin pran yon pil fatra konplè nan pwosesis la flache, nou apeprè konprann sa nou te fè fas ak. Isit la se yon atik sou XMODEM, ki te trè itil nan konprann ki jan kominikasyon sa a rive, kwake an tèm jeneral: http://microsin.net/adminstuff/others/xmodem-protocol-overview.html Mwen rekòmande li li.

Gade nan pil fatra a, ou ka wè ke gwosè ankadreman an se 1024, ak gwosè URB-done yo se 64.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Se poutèt sa - 1024/64 – nou jwenn 16 liy nan yon blòk, li fichye firmwèr la 1 karaktè nan yon moman epi fòme yon blòk. Konpleman 1 liy nan yon blòk ak karaktè espesyal fd3e02 + nimewo blòk.
Pwochen 14 liy yo konplete ak fd25 +, lè l sèvi avèk XMODEM.calc_crc () nou kalkile sòm chèk la nan blòk la tout antye (li te pran anpil tan yo konprann ke "FF - 1" se CSUM) ak dènye, 16th liy lan konplete. ak fd3e.

Li ta sanble se li, li dosye firmwèr la, frape blòk yo, dekonekte eskanè a soti nan nwayo a epi voye li nan aparèy la. Men, li pa senp konsa. Scanner a bezwen chanje nan mòd firmwèr,
отправив ему NEWAPP = ‘\xfd\x0a\x16\x4e\x2c\x4e\x45\x57\x41\x50\x50\x0d’.
Ki kote ekip sa soti?? Soti nan pil fatra a.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Men, nou pa ka voye yon blòk antye nan eskanè a akòz limit 64 la:

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Oke, eskanè a nan mòd flache NEWAPP pa aksepte hex. Se poutèt sa, ou pral oblije tradui chak liy 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]

Apre sa, voye done sa yo nan eskanè a.

Nou jwenn repons lan:

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

Si ou tcheke atik la sou XMODEM, li pral vin klè: done yo te aksepte.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Apre tout blòk yo te transfere, nou konplete transfè a END_TRANSFER = 'xfdx01x04'.

Oke, depi blòk sa yo pa pote okenn enfòmasyon pou moun òdinè, nou pral enstale firmwèr la nan mòd kache pa default. Epi jis nan ka, nou pral òganize yon ba pwogrè atravè tqdm.

Yon travay pou yon devlopè, oswa ki jan nou te flash eskanè men yo san yon machann

Aktyèlman, Lè sa a, se yon kesyon de ti bagay. Tout sa ki rete se vlope solisyon an nan scripts pou replikasyon an mas nan yon tan klèman defini, se konsa yo pa ralanti pwosesis la nan travay nan kesye yo, epi ajoute antre.

Total

Lè nou te pase anpil tan ak efò ak cheve nan tèt nou, nou te kapab devlope solisyon nou bezwen yo, epi tou li te respekte dat limit la. An menm tan an, eskanè yo kounye a reflashed ak re-antrenasyon santralman, nou klèman kontwole tout pwosesis la. Konpayi an te ekonomize tan ak lajan, epi nou te genyen eksperyans anpil valè nan ekipman jeni ranvèse nan kalite sa a.

Sous: www.habr.com

Add nouvo kòmantè