Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Helo pawb

Heddiw, byddwn ni, Viktor Antipov ac Ilya Aleshin, yn siarad am ein profiad o weithio gyda dyfeisiau USB trwy Python PyUSB ac ychydig am beirianneg wrthdroi.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

cynhanes

Yn 2019, Archddyfarniad Llywodraeth Ffederasiwn Rwsia Rhif 224 “Ar ôl cymeradwyo'r Rheolau ar gyfer labelu cynhyrchion tybaco gyda modd adnabod a nodweddion gweithredu system gwybodaeth y wladwriaeth ar gyfer monitro cylchrediad nwyddau sy'n destun labelu gorfodol gyda modd adnabod mewn perthynas â chynhyrchion tybaco” i rym.
Mae'r ddogfen yn esbonio, o 1 Gorffennaf, 2019, ei bod yn ofynnol i weithgynhyrchwyr labelu pob pecyn o dybaco. Ac mae'n rhaid i ddosbarthwyr uniongyrchol dderbyn y cynhyrchion hyn gyda gweithredu dogfen drosglwyddo gyffredinol (UDD). Mae angen i siopau, yn eu tro, gofrestru gwerthu cynhyrchion wedi'u labelu trwy'r gofrestr arian parod.

Hefyd, o 1 Gorffennaf, 2020, gwaherddir cylchrediad cynhyrchion tybaco heb eu labelu. Mae hyn yn golygu bod yn rhaid marcio pob pecyn sigaréts â chod bar Datamatrix arbennig. Ar ben hynny - pwynt pwysig - mae'n troi allan na fydd y Datamatrix yn gyffredin, ond gwrthdro. Hynny yw, nid cod du ar wyn, ond i'r gwrthwyneb.

Fe wnaethon ni brofi ein sganwyr, a daeth i'r amlwg bod angen ail-fflachio / ailhyfforddi'r rhan fwyaf ohonyn nhw, fel arall ni allant weithio'n normal gyda'r cod bar hwn. Roedd y tro hwn o ddigwyddiadau yn gwarantu cur pen difrifol i ni, oherwydd mae gan ein cwmni lawer o siopau sydd wedi'u gwasgaru dros diriogaeth helaeth. Sawl degau o filoedd o gofrestrau arian parod – ac ychydig iawn o amser.

Beth oedd i'w wneud? Mae dau opsiwn. Yn gyntaf: mae peirianwyr ar y safle yn ail-fflachio ac yn addasu'r sganwyr â llaw. Yn ail: rydym yn gweithio o bell ac, yn ddelfrydol, yn gorchuddio llawer o sganwyr ar unwaith mewn un iteriad.

Nid oedd yr opsiwn cyntaf, yn amlwg, yn addas i ni: byddai’n rhaid inni wario arian ar ymweld â pheirianwyr, ac yn yr achos hwn byddai’n anodd rheoli a chydlynu’r broses. Ond y peth pwysicaf yw y byddai pobl yn gweithio, hynny yw, mae'n bosibl y byddem yn cael llawer o gamgymeriadau ac, yn fwyaf tebygol, yn methu â bodloni'r terfyn amser.

Mae'r ail opsiwn yn dda i bawb, os nad am un peth. Nid oedd gan rai gwerthwyr yr offer fflachio o bell yr oedd eu hangen arnom ar gyfer yr holl systemau gweithredu gofynnol. A chan fod y terfynau amser yn dod i ben, roedd yn rhaid i mi feddwl gyda fy mhen fy hun.

Nesaf, byddwn yn dweud wrthych sut y gwnaethom ddatblygu offer ar gyfer sganwyr llaw ar gyfer yr AO Debian 9.x (mae ein holl gofrestrau arian parod ar Debian).

Datrys y pos: sut i fflachio sganiwr

Mae Victor Antipov yn adrodd.

Mae'r cyfleustodau swyddogol a ddarperir gan y gwerthwr yn gweithio o dan Windows, a dim ond gydag IE. Gall y cyfleustodau fflachio a ffurfweddu'r sganiwr.

Gan mai Debian yw ein system darged, fe wnaethom osod gweinydd ailgyfeirio usb ar Debian a chleient ailgyfeirio usb ar Windows. Gan ddefnyddio cyfleustodau ailgyfeirio usb, fe wnaethom anfon y sganiwr ymlaen o beiriant Linux i beiriant Windows.

Gwelodd cyfleustodau gan werthwr Windows y sganiwr a hyd yn oed ei fflachio fel arfer. Felly, gwnaethom y casgliad cyntaf: nid oes dim yn dibynnu ar yr OS, mae'n fater o'r protocol fflachio.

IAWN. Fe wnaethom redeg y fflachio ar y peiriant Windows, a thynnu'r dymp ar y peiriant Linux.

Fe wnaethon ni stwffio'r domen i mewn i WireShark a... mynd yn drist (byddaf yn hepgor rhai o fanylion y domen, nid ydyn nhw o unrhyw ddiddordeb).

Yr hyn a ddangosodd y domen i ni:

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Mae cyfeiriadau 0000-0030, yn ôl Wireshark, yn wybodaeth gwasanaeth USB.

Roedd gennym ddiddordeb yn rhan 0040-0070.

Nid oedd unrhyw beth yn glir o un ffrâm drosglwyddo ac eithrio'r cymeriadau MOCFT. Trodd y cymeriadau hyn yn gymeriadau o'r ffeil firmware, yn ogystal â'r nodau sy'n weddill hyd at ddiwedd y ffrâm (amlygir y ffeil firmware):

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Beth oedd ystyr y symbolau fd 3e 02 01 fe, doedd gen i'n bersonol, fel Ilya, ddim syniad.

Edrychais ar y ffrâm ganlynol (mae gwybodaeth gwasanaeth wedi'i thynnu yma, mae'r ffeil firmware wedi'i hamlygu):

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Beth ddaeth yn amlwg? Bod y ddau beit cyntaf yn rhyw fath o gyson. Cadarnhaodd pob bloc dilynol hyn, ond cyn diwedd y bloc trosglwyddo:

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Roedd y ffrâm hon hefyd yn syfrdanol, gan fod y cysonyn wedi newid (amlygwyd) ac, yn rhyfedd ddigon, roedd rhan o'r ffeil. Roedd maint y bytes a drosglwyddwyd o'r ffeil yn dangos bod 1024 beit wedi'u trosglwyddo. Doeddwn i ddim yn gwybod eto beth oedd ystyr gweddill y beit.

Yn gyntaf oll, fel hen lysenw BBS, adolygais y protocolau trosglwyddo safonol. Dim protocol wedi'i drosglwyddo 1024 beit. Dechreuais astudio'r caledwedd a dod ar draws y protocol 1K Xmodem. Roedd yn caniatáu trosglwyddo 1024, ond gyda chafeat: ar y dechrau dim ond 128, a dim ond os nad oedd unrhyw wallau, cynyddodd y protocol nifer y bytes a drosglwyddwyd. Cefais drosglwyddiad o 1024 beit ar unwaith. Penderfynais astudio protocolau trosglwyddo, ac yn benodol yr X-modem.

Roedd dau amrywiad o'r modem.

Yn gyntaf, fformat pecyn XMODEM gyda chefnogaeth CRC8 (yr XMODEM gwreiddiol):

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Yn ail, fformat pecyn XMODEM gyda chefnogaeth CRC16 (XmodemCRC):

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Mae'n edrych yn debyg, ac eithrio SOH, rhif pecyn a CRC a hyd pecyn.

Edrychais ar ddechrau'r ail floc trosglwyddo (a gwelais y ffeil firmware eto, ond eisoes wedi'i hindentio gan 1024 bytes):

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Gwelais y pennawd cyfarwydd fd 3e 02, ond roedd y ddau beit nesaf eisoes wedi newid: roedd yn 01 fe, ac yn dod yn 02 fd. Yna sylwais fod yr ail floc bellach wedi'i rifo 02 ac felly'n deall: o'm blaen roedd rhif y bloc trosglwyddo. Y gêr 1024 cyntaf yw 01, yr ail yw 02, y trydydd yw 03 ac yn y blaen (ond mewn hecs, wrth gwrs). Ond beth mae'r newid o fe i fd yn ei olygu? Gwelodd y llygaid ostyngiad o 1, atgoffodd yr ymennydd fod rhaglenwyr yn cyfrif o 0, nid 1. Ond yna pam mae'r bloc cyntaf 1, ac nid 0? Nid wyf wedi dod o hyd i'r ateb i'r cwestiwn hwn o hyd. Ond deallais sut mae'r ail floc yn cael ei gyfrif. Nid yw'r ail floc yn ddim mwy na FF – (llai) rhif y bloc cyntaf. Felly, dynodwyd yr ail floc fel = 02 (FF-02) = 02 FD. Cadarnhaodd darlleniad dilynol o'r domen fy nyfaliad.

Yna dechreuodd y llun canlynol o'r trosglwyddiad ddod i'r amlwg:

Dechrau trosglwyddo
fd 3e 02 – Cychwyn
01 FE – rhifydd trawsyrru
Trosglwyddo (34 bloc, trosglwyddwyd 1024 beit)
fd 3e 1024 beit o ddata (wedi'i rannu'n 30 bloc beit).
Diwedd y trosglwyddiad
fd 25

Data sy'n weddill i gael ei alinio i 1024 beit.

Sut olwg sydd ar y ffrâm diwedd trawsyrru bloc:

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

fd 25 – signal i derfynu trawsyriant bloc. 2f 52 nesaf – gweddill y ffeil hyd at 1024 beit mewn maint. Mae 2f 52, a barnu yn ôl y protocol, yn wiriad CRC 16-did.

Er mwyn yr hen amser, gwnes raglen yn C a dynnodd 1024 beit o ffeil a chyfrifo CRC 16-did. Dangosodd lansio'r rhaglen nad yw hwn yn CRC 16-did. Stupor eto - am tua thri diwrnod. Yr holl amser hwn roeddwn yn ceisio deall beth allai fod, os nad siec. Wrth astudio gwefannau Saesneg, darganfyddais fod y X-modem yn defnyddio ei gyfrifiad siec ei hun - CRC-CCITT (XModem). Ni wnes i ddod o hyd i unrhyw weithrediadau C o'r cyfrifiad hwn, ond des o hyd i wefan a oedd yn cyfrifo'r siec hwn ar-lein. Ar ôl trosglwyddo 1024 beit o fy ffeil i'r dudalen we, dangosodd y wefan siec i mi a oedd yn cyfateb yn llwyr i'r siec o'r ffeil.

Hwre! Datryswyd y pos olaf, nawr roedd angen i mi wneud fy firmware fy hun. Nesaf, trosglwyddais fy ngwybodaeth (ac arhosodd yn fy mhen yn unig) i Ilya, sy'n gyfarwydd â'r pecyn cymorth pwerus Python.

Creu rhaglen

Mae Ilya Aleshin yn adrodd.

Ar ôl derbyn y cyfarwyddiadau priodol, roeddwn yn “hapus iawn.”

Ble i ddechrau? Mae hynny'n iawn, o'r dechrau.  O gymryd dymp o'r porth USB.

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

Dewiswch y porthladd y mae'r ddyfais wedi'i gysylltu ag ef a'r ffeil lle byddwn yn arbed y domen.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Rydyn ni'n cysylltu'r sganiwr â pheiriant lle mae'r meddalwedd brodorol EZConfigScanning ar gyfer Windows wedi'i osod.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Ynddo rydym yn dod o hyd i'r eitem ar gyfer anfon gorchmynion i'r ddyfais. Ond beth am dimau? Ble alla i eu cael?
Pan fydd y rhaglen yn dechrau, mae'r offer yn cael ei bleidleisio'n awtomatig (byddwn yn gweld hyn ychydig yn ddiweddarach). Ac roedd hyfforddiant codau bar o ddogfennau offer swyddogol. DEFALT. Dyma ein tîm.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Mae'r data angenrheidiol wedi'i dderbyn. Agor dump.pcap trwy wireshark.

Blociwch wrth gychwyn EZConfigScanning. Mae lleoedd y mae angen i chi roi sylw iddynt wedi'u marcio mewn coch.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Wrth weld hyn i gyd am y tro cyntaf, collais galon. Nid yw'n glir ble i gloddio nesaf.

Ychydig o drafod syniadau ac-a-a... Aha! Yn y dymp allan - mae'n inAc in hwn allan.

Fe wnes i googled beth yw URB_INTERRUPT. Cefais wybod mai dull trosglwyddo data yw hwn. Ac mae 4 dull o'r fath: rheoli, torri ar draws, isochronous, swmp. Gallwch ddarllen amdanynt ar wahân.

A gellir cael y cyfeiriadau diweddbwynt yn y rhyngwyneb dyfais USB naill ai trwy'r gorchymyn “lsusb -v” neu ddefnyddio pyusb.

Nawr mae angen inni ddod o hyd i bob dyfais gyda'r VID hwn. Gallwch chwilio yn benodol yn ôl VID:PID.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Mae'n edrych fel hyn:

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Felly, mae gennym y wybodaeth angenrheidiol: y gorchmynion P_INFO. neu DEFALT, yn cyfeirio at ble i ysgrifennu gorchmynion endpoint=03 a ble i gael yr ymateb endpoint=86. Y cyfan sydd ar ôl yw trosi'r gorchmynion i hecs.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Gan ein bod eisoes wedi dod o hyd i'r ddyfais, gadewch i ni ei datgysylltu o'r cnewyllyn ...

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

...ac ysgrifennu at y diweddbwynt gyda chyfeiriad 0x03,

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

... ac yna darllenwch yr ymateb o'r diweddbwynt gyda chyfeiriad 0x86.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Ateb strwythuredig:

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

Rydym yn gweld y data hwn yn dump.pcap.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Gwych! Trosi codau bar system yn hecs. Dyna ni, mae'r swyddogaeth hyfforddi yn barod.

Beth am y firmware? Mae'n ymddangos bod popeth yr un peth, ond mae yna naws.

Ar ôl cymryd rhan gyflawn o'r broses fflachio, roeddem yn deall yn fras yr hyn yr oeddem yn delio ag ef. Dyma erthygl am XMODEM, a oedd yn ddefnyddiol iawn i ddeall sut mae'r cyfathrebu hwn yn digwydd, er yn gyffredinol: http://microsin.net/adminstuff/others/xmodem-protocol-overview.html Rwy'n argymell ei ddarllen.

Wrth edrych ar y domen, gallwch weld mai maint y ffrâm yw 1024, a maint data URB yw 64.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Felly - 1024/64 – rydym yn cael 16 llinell mewn bloc, darllenwch y ffeil firmware 1 cymeriad ar y tro a ffurfio bloc. Yn ategu 1 llinell mewn bloc gyda nodau arbennig fd3e02 + rhif bloc.
Mae'r 14 llinell nesaf yn cael eu hategu gan fd25 +, gan ddefnyddio XMODEM.calc_crc () rydym yn cyfrifo siec y bloc cyfan (cymerodd lawer o amser i ddeall mai CSUM yw “FF - 1”) ac ategir yr 16eg llinell olaf gyda fd3e.

Mae'n ymddangos mai dyna ni, darllenwch y ffeil firmware, taro'r blociau, datgysylltu'r sganiwr o'r cnewyllyn a'i anfon at y ddyfais. Ond nid yw mor syml â hynny. Mae angen newid y sganiwr i'r modd firmware,
отправив ему NEWAPP = ‘\xfd\x0a\x16\x4e\x2c\x4e\x45\x57\x41\x50\x50\x0d’.
O ble mae'r tîm yma?? O'r dymp.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Ond ni allwn anfon bloc cyfan i'r sganiwr oherwydd y terfyn 64:

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Wel, nid yw'r sganiwr yn y modd fflachio NEWAPP yn derbyn hecs. Felly, bydd yn rhaid i chi gyfieithu pob llinell 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]

Ac yna anfon y data hwn i'r sganiwr.

Cawn yr ateb:

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

Os gwiriwch yr erthygl am XMODEM, daw'n amlwg: mae'r data wedi'i dderbyn.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Ar ôl i bob bloc gael ei drosglwyddo, rydym yn cwblhau'r trosglwyddiad END_TRANSFER = 'xfdx01x04'.

Wel, gan nad yw'r blociau hyn yn cynnwys unrhyw wybodaeth i bobl gyffredin, byddwn yn gosod y firmware yn y modd cudd yn ddiofyn. A rhag ofn, byddwn yn trefnu bar cynnydd trwy tqdm.

Tasg i ddatblygwr, neu sut y gwnaethom fflachio sganwyr llaw heb werthwr

Mewn gwirionedd, yna mae'n fater o bethau bach. Y cyfan sydd ar ôl yw lapio'r datrysiad mewn sgriptiau ar gyfer atgynhyrchu torfol ar amser sydd wedi'i ddiffinio'n glir, er mwyn peidio ag arafu'r broses o weithio yn y desgiau talu, ac ychwanegu logio.

Cyfanswm

Ar ôl treulio llawer o amser ac ymdrech a gwallt ar ein pennau, roeddem yn gallu datblygu'r atebion yr oedd eu hangen arnom, a chwrdd â'r dyddiad cau hefyd. Ar yr un pryd, mae'r sganwyr bellach yn cael eu hail-fflachio a'u hailhyfforddi'n ganolog, rydym yn amlwg yn rheoli'r broses gyfan. Arbedodd y cwmni amser ac arian, a chawsom brofiad amhrisiadwy mewn offer peirianneg gwrthdro o'r math hwn.

Ffynhonnell: hab.com

Ychwanegu sylw