Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Kumusta tanan.

Kami, si Victor Antipov ug Ilya Aleshin, karon maghisgot bahin sa among kasinatian sa pagtrabaho sa mga USB device pinaagi sa Python PyUSB ug gamay bahin sa reverse engineering.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

sa naunang kasaysayan

Sa 2019, Dekreto sa Gobyerno sa Russian Federation No. 224 "Sa pag-apruba sa mga Lagda alang sa pag-label sa mga produkto sa tabako nga adunay mga paagi sa pag-ila ug mga bahin sa pagpatuman sa sistema sa impormasyon sa estado alang sa pag-monitor sa sirkulasyon sa mga butang nga gipailalom sa mandatory nga pag-label nga adunay mga paagi sa pag-ila. may kalabotan sa mga produkto sa tabako” gipatuman.
Ang dokumento nagpatin-aw nga gikan sa Hulyo 1, 2019, ang mga tiggama kinahanglan nga markahan ang matag pakete sa tabako. Ug ang mga direktang distributor kinahanglan nga makadawat niini nga mga produkto uban ang pagpatuman sa usa ka universal transfer document (UDD). Ang mga tindahan, sa baylo, kinahanglan nga magparehistro sa pagbaligya sa mga produkto nga adunay label pinaagi sa cash register.

Usab, gikan sa Hulyo 1, 2020, gidili ang sirkulasyon sa mga produkto sa tabako nga wala’y label. Kini nagpasabot nga ang tanang pakete sa sigarilyo kinahanglang markahan ug espesyal nga barcode sa Datamatrix. Dugang pa - usa ka hinungdanon nga punto - nahimo nga ang Datamatrix dili ordinaryo, apan kabaliktaran. Kana mao, dili itom nga code sa puti, apan vice versa.

Among gisulayan ang among mga scanner, ug nahimo nga kadaghanan kanila kinahanglan nga i-reflash/retrain, kung dili, dili sila makahimo sa pagtrabaho nga normal sa kini nga barcode. Kini nga turno sa mga panghitabo naggarantiya kanamo usa ka grabe nga sakit sa ulo, tungod kay ang among kompanya adunay daghang mga tindahan nga nagkatag sa usa ka halapad nga teritoryo. Pipila ka napulo ka libo nga mga cash register - ug gamay ra nga oras.

Unsay angay buhaton? Adunay duha ka kapilian. Una: ang mga inhenyero sa site mano-mano nga nag-reflash ug nag-adjust sa mga scanner. Ikaduha: nagtrabaho kami sa layo ug, labing maayo, nagtabon sa daghang mga scanner sa usa ka higayon sa usa ka pag-uli.

Ang una nga kapilian, klaro, dili angay alang kanamo: kinahanglan namon nga mogasto og salapi sa pagbisita sa mga inhenyero, ug sa kini nga kaso lisud ang pagkontrol ug pag-coordinate sa proseso. Apan ang labing hinungdanon nga butang mao nga ang mga tawo magtrabaho, nga mao, mahimo naton nga makakuha daghang mga sayup ug, lagmit, dili makaabut sa gitakdang oras.

Ang ikaduha nga kapilian maayo alang sa tanan, kung dili alang sa usa ka butang. Ang ubang mga vendor walay remote flashing nga mga himan nga among gikinahanglan para sa tanang gikinahanglan nga operating system. Ug tungod kay hapit na ang mga deadline, kinahanglan nako nga maghunahuna sa akong kaugalingon nga ulo.

Sunod, isulti namo kanimo kung giunsa namo paghimo ang mga himan alang sa mga hand-held scanner alang sa Debian 9.x OS (ang tanan namong mga cash register anaa sa Debian).

Pagsulbad sa tigmo: unsaon pag-flash sa scanner

Si Victor Antipov nagtaho.

Ang opisyal nga utility nga gihatag sa vendor nagtrabaho ubos sa Windows, ug sa IE lamang. Ang utility mahimong mag-flash ug ma-configure ang scanner.

Tungod kay ang among target nga sistema mao ang Debian, nag-install kami og usb-redirector server sa Debian ug usb-redirector nga kliyente sa Windows. Gamit ang usb-redirector utilities, among gipasa ang scanner gikan sa Linux machine ngadto sa Windows machine.

Nakita sa usa ka utility gikan sa usa ka vendor sa Windows ang scanner ug gi-flash kini sa normal. Sa ingon, gihimo namon ang una nga konklusyon: wala’y nagdepende sa OS, kini usa ka butang sa flashing protocol.

OK ra. Gipadagan namo ang flashing sa Windows machine, ug gitangtang ang dump sa Linux machine.

Among gisulod ang dump sa WireShark ug... naguol (akong laktawan ang pipila ka mga detalye sa dump, wala silay interes).

Ang gipakita kanamo sa dump:

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Ang mga adres nga 0000-0030, nga gihukman sa Wireshark, maoy impormasyon sa serbisyo sa USB.

Interesado kami sa bahin 0040-0070.

Walay klaro gikan sa usa ka transmission frame gawas sa MOCFT nga mga karakter. Kini nga mga karakter nahimo nga mga karakter gikan sa firmware file, ingon man ang nahabilin nga mga karakter hangtod sa katapusan sa frame (ang firmware file gipasiugda):

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Unsa ang gipasabot sa mga simbolo fd 3e 02 01 fe, ako mismo, sama ni Ilya, walay ideya.

Gitan-aw nako ang mosunod nga frame (ang impormasyon sa serbisyo gikuha dinhi, ang firmware file gipasiugda):

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Unsay nahimong klaro? Nga ang unang duha ka byte usa ka matang sa kanunay. Ang tanan nga misunod nga mga bloke nagpamatuod niini, apan sa wala pa matapos ang transmission block:

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Kini nga frame makapakurat usab, tungod kay ang kanunay nausab (gipasiugda) ug, sa katingad-an, adunay bahin sa file. Ang gidak-on sa gibalhin nga byte sa file nagpakita nga 1024 bytes ang gibalhin. Wala na usab ako kahibalo kung unsa ang gipasabut sa nahabilin nga mga byte.

Una sa tanan, isip usa ka karaan nga angga sa BBS, akong gisusi ang standard transmission protocols. Walay protocol nga gipadala 1024 bytes. Nagsugod ko sa pagtuon sa hardware ug nakit-an ang 1K Xmodem protocol. Gitugotan ang pagpadala sa 1024, apan adunay usa ka caveat: sa una 128 ra, ug kung wala’y mga sayup, ang protocol nagdugang sa gidaghanon sa mga byte nga gipasa. Diha-diha dayon ako adunay usa ka pagbalhin sa 1024 bytes. Nakahukom ko nga magtuon sa mga protocol sa transmission, ug ilabi na ang X-modem.

Adunay duha ka mga kalainan sa modem.

Una, ang format sa pakete sa XMODEM nga adunay suporta sa CRC8 (ang orihinal nga XMODEM):

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Ikaduha, ang XMODEM packet format nga adunay suporta sa CRC16 (XmodemCRC):

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Morag susama, gawas sa SOH, numero sa pakete ug CRC ug gitas-on sa pakete.

Gitan-aw nako ang sinugdanan sa ikaduhang block sa transmission (ug nakita pag-usab ang firmware file, apan na-indent na sa 1024 bytes):

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Nakita nako ang pamilyar nga header fd 3e 02, apan ang sunod nga duha ka byte nausab na: kini 01 fe, ug nahimong 02 fd. Unya akong namatikdan nga ang ikaduha nga bloke karon gi-numero 02 ug sa ingon nakasabut: sa akong atubangan mao ang pag-numero sa transmission block. Ang una nga 1024 gear mao ang 01, ang ikaduha mao ang 02, ang ikatulo mao ang 03 ug uban pa (apan sa hex, siyempre). Apan unsa ang gipasabut sa pagbag-o gikan sa fe ngadto sa fd? Ang mga mata nakakita sa pagkunhod sa 1, ang utok nagpahinumdom nga ang mga programmer nag-ihap gikan sa 0, dili 1. Apan nganong ang unang block 1, ug dili 0? Wala gihapon nako makit-i ang tubag niini nga pangutana. Apan nasabtan nako kung giunsa pag-ihap ang ikaduhang bloke. Ang ikaduha nga bloke wala'y labaw sa FF - (minus) ang numero sa unang bloke. Busa, ang ikaduhang bloke gitudlo nga = 02 (FF-02) = 02 FD. Ang sunod nga pagbasa sa dump nagpamatuod sa akong pangagpas.

Dayon ang mosunod nga hulagway sa transmission nagsugod sa paglutaw:

Pagsugod sa transmission
fd 3e 02 – Pagsugod
01 FE – transmission counter
Pagbalhin (34 blocks, 1024 bytes gibalhin)
fd 3e 1024 bytes sa datos (gibahin sa 30 byte blocks).
Katapusan sa transmission
fd 25

Ang nahabilin nga datos i-align sa 1024 bytes.

Unsa ang hitsura sa block transmission end frame:

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

fd 25 – signal sa pagtapos sa block transmission. Sunod 2f 52 - ang nahabilin nga file hangtod sa 1024 bytes ang gidak-on. 2f 52, sa paghukom sa protocol, usa ka 16-bit nga CRC checksum.

Alang sa karaan nga panahon, naghimo ako usa ka programa sa C nga nagbira sa 1024 bytes gikan sa usa ka file ug gikalkula ang usa ka 16-bit nga CRC. Ang paglansad sa programa nagpakita nga kini dili usa ka 16-bit nga CRC. Stupor pag-usab - sulod sa mga tulo ka adlaw. Niining panahona naningkamot ko nga masabtan kung unsa kini, kung dili usa ka checksum. Samtang nagtuon sa English-language sites, akong nadiskobrehan nga ang X-modem naggamit sa kaugalingong checksum kalkulasyon - CRC-CCITT (XModem). Wala koy nakit-an nga bisan unsang C nga pagpatuman niini nga kalkulasyon, apan nakit-an nako ang usa ka site nga nagkalkula niini nga checksum online. Ang pagbalhin sa 1024 bytes sa akong file ngadto sa web page, gipakita kanako sa site ang usa ka checksum nga hingpit nga mitugma sa checksum gikan sa file.

Hooray! Ang katapusan nga tigmo nasulbad, karon kinahanglan ko nga maghimo sa akong kaugalingon nga firmware. Sunod, akong gipasa ang akong kahibalo (ug kini nagpabilin lamang sa akong ulo) ngadto kang Ilya, kinsa pamilyar sa gamhanan nga toolkit nga Python.

Paghimo og programa

Si Ilya Aleshin nagtaho.

Kay nakadawat sa tukma nga mga instruksiyon, ako “malipayon” kaayo.

Asa magsugod? Mao na, sukad pa sa sinugdan.  Gikan sa pagkuha sa usa ka dump gikan sa USB port.

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

Pilia ang pantalan diin konektado ang aparato ug ang file diin among i-save ang dump.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Among ikonektar ang scanner sa usa ka makina diin ang lumad nga EZConfigScanning software para sa Windows na-install.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Diha niini atong makita ang butang alang sa pagpadala sa mga sugo ngadto sa device. Apan komosta ang mga team? Asa nako sila makuha?
Sa diha nga ang programa magsugod, ang mga ekipo awtomatikong polled (atong makita kini sa ulahi). Ug adunay mga barcode sa pagbansay gikan sa opisyal nga mga dokumento sa kagamitan. DEFALT. Kini ang among team.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Ang gikinahanglan nga datos nadawat. Ablihi ang dump.pcap pinaagi sa wireshark.

Pag-block sa pagsugod sa EZConfigScanning. Ang mga lugar nga kinahanglan nimong hatagan og pagtagad gimarkahan og pula.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Nakita nako kining tanan sa unang higayon, nawad-an kog kadasig. Dili klaro kung asa ang sunod nga pagkalot.

Usa ka gamay nga brainstorming ug-ug-ug... Aha! Sa basurahan gikan sa - mao ang inug in kini gikan sa.

Akong gi-google kung unsa ang URB_INTERRUPT. Akong nahibal-an nga kini usa ka pamaagi sa pagbalhin sa datos. Ug adunay 4 nga ingon nga mga pamaagi: pagkontrol, paghunong, isochronous, kadaghanan. Mahimo nimong basahon ang bahin kanila nga gilain.

Ug ang mga adres sa endpoint sa interface sa USB device mahimong makuha pinaagi sa command "lsusb -v" o gamit ang pyusb.

Karon kinahanglan naton pangitaon ang tanan nga mga aparato nga adunay kini nga VID. Makapangita ka ilabi na pinaagi sa VID:PID.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Murag mao ni:

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Busa, kita adunay gikinahanglan nga impormasyon: ang P_INFO mga sugo. o DEFALT, mga adres kung asa isulat ang mga sugo endpoint=03 ug asa makuha ang tubag endpoint=86. Ang nahabilin mao ang pag-convert sa mga sugo sa hex.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Tungod kay nakit-an na namon ang aparato, idiskonekta kini gikan sa kernel ...

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

...ug pagsulat sa endpoint nga adunay adres 0x03,

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

... ug dayon basaha ang tubag gikan sa endpoint nga adunay adres nga 0x86.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Structure nga tubag:

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

Atong makita kini nga data sa dump.pcap.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Nindot! I-convert ang mga barcode sa sistema ngadto sa hex. Mao na, andam na ang pagpaandar sa pagbansay.

Unsa ang mahitungod sa firmware? Ang tanan morag managsama, apan adunay usa ka nuance.

Sa pagkuha sa usa ka kompleto nga paglabay sa proseso sa pagkidlap, halos among nasabtan kung unsa ang among giatubang. Ania ang usa ka artikulo bahin sa XMODEM, nga nakatabang kaayo sa pagsabut kung giunsa kini nga komunikasyon nahitabo, bisan pa sa kinatibuk-ang termino: http://microsin.net/adminstuff/others/xmodem-protocol-overview.html Girekomenda nako ang pagbasa niini.

Sa pagtan-aw sa dump, imong makita nga ang gidak-on sa frame mao ang 1024, ug ang gidak-on sa URB-data mao ang 64.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Busa - 1024/64 - nakakuha kami 16 ka linya sa usa ka bloke, basaha ang firmware file 1 nga karakter matag higayon ug maghimo usa ka bloke. Pagdugang sa 1 ka linya sa block nga adunay espesyal nga karakter fd3e02 + block number.
Ang sunod nga 14 ka linya gidugangan sa fd25 +, gamit ang XMODEM.calc_crc() gikalkulo namo ang checksum sa tibuok block (nagkinahanglan kini og daghang panahon aron masabtan nga ang "FF - 1" mao ang CSUM) ug ang katapusan, ika-16 nga linya gidugangan uban fd3e.

Morag mao na kana, basaha ang firmware file, naigo ang mga bloke, idiskonekta ang scanner gikan sa kernel ug ipadala kini sa aparato. Apan dili kini yano. Ang scanner kinahanglan nga ibalhin sa firmware mode,
отправив ему NEWAPP = ‘\xfd\x0a\x16\x4e\x2c\x4e\x45\x57\x41\x50\x50\x0d’.
Asa ni nga team gikan?? Gikan sa dump.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Apan dili kami makapadala usa ka tibuuk nga bloke sa scanner tungod sa limitasyon sa 64:

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Aw, ang scanner sa NEWAPP flashing mode dili modawat hex. Busa, kinahanglan nimong hubaron ang matag linya 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]

Ug dayon ipadala kini nga datos sa scanner.

Atong makuha ang tubag:

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

Kung imong susihon ang artikulo bahin sa XMODEM, kini mahimong klaro: ang datos gidawat.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Human mabalhin ang tanang block, kompletohon namo ang pagbalhin END_TRANSFER = 'xfdx01x04'.

Aw, tungod kay kini nga mga bloke wala magdala bisan unsang kasayuran alang sa ordinaryong mga tawo, among i-install ang firmware sa tinago nga mode nga default. Ug sa kaso lang, mag-organisar kami og progress bar pinaagi sa tqdm.

Usa ka buluhaton alang sa usa ka developer, o kung giunsa namon pag-flash ang mga gikuptan nga mga scanner nga wala’y tindera

Sa pagkatinuod, kini usa ka butang sa gagmay nga mga butang. Ang nahabilin mao ang pagputos sa solusyon sa mga script alang sa mass replication sa usa ka tin-aw nga gitakda nga oras, aron dili mapahinay ang proseso sa pagtrabaho sa mga checkout, ug idugang ang pag-log.

Ang resulta

Sa paggasto og daghang oras ug paningkamot ug buhok sa among mga ulo, nakahimo kami sa pagpalambo sa mga solusyon nga among gikinahanglan, ug nakab-ot usab ang deadline. Sa parehas nga oras, ang mga scanner karon gi-reflash ug gibansay pag-usab sa sentro, tin-aw namon nga gikontrol ang tibuuk nga proseso. Ang kompaniya nakadaginot ug panahon ug kuwarta, ug nakabaton mig bililhong kasinatian sa reverse engineering nga kagamitan niining matang.

Source: www.habr.com

Idugang sa usa ka comment