Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Sampurasun sadayana.

Kami, Victor Antipov sareng Ilya Aleshin, ayeuna bakal nyarioskeun pangalaman urang damel sareng alat USB via Python PyUSB sareng sakedik ngeunaan rékayasa sabalikna.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

prasajarah

Dina 2019, Kaputusan Pamaréntah Féderasi Rusia No. 224 "Dina persetujuan Aturan pikeun labél produk bako kalayan sarana idéntifikasi sareng fitur palaksanaan sistem inpormasi nagara pikeun ngawaskeun sirkulasi barang anu tunduk kana labél wajib sareng alat idéntifikasi. patalina jeung produk bako” dikuatkeun.
Dokumén éta ngécéskeun yén ti 1 Juli 2019, pabrik diwajibkeun pikeun labél unggal bungkus bako. Sareng distributor langsung kedah nampi produk ieu kalayan ngalaksanakeun dokumen transfer universal (UDD). Toko, kahareupna kedah ngadaptarkeun penjualan produk anu dilabélan ngalangkungan kasir.

Ogé, ti 1 Juli 2020, sirkulasi produk bako anu henteu dilabelan dilarang. Ieu ngandung harti yén sakabéh bungkus roko kudu ditandaan ku barkod Datamatrix husus. Leuwih ti éta - titik penting - tétéla yén Datamatrix moal biasa, tapi tibalik. Hartina, lain kode hideung dina bodas, tapi sabalikna.

Kami nguji scanner kami, sareng tétéla yén kalolobaanana kedah di-reflash / dilatih deui, upami henteu, aranjeunna henteu tiasa dianggo sacara normal sareng barkod ieu. Kajadian ieu ngajamin urang nyeri sirah anu parah, sabab perusahaan kami ngagaduhan seueur toko anu sumebar di daérah anu lega. Sababaraha puluhan rébu kas registers - sarta saeutik pisan waktu.

Naon anu kudu dipigawé? Aya dua pilihan. Kahiji: insinyur dina situs sacara manual reflash tur saluyukeun scanner. Kadua: urang damel jarak jauh sareng, langkung saé, nutupan seueur scanner sakaligus dina hiji iterasi.

Pilihan kahiji, écés, teu cocog pikeun urang: urang kudu méakkeun duit dina ngadatangan insinyur, sarta dina hal ieu bakal hésé pikeun ngadalikeun jeung koordinat prosés. Tapi anu paling penting nyaéta jalma-jalma bakal damel, nyaéta, urang berpotensi bakal nampi seueur kasalahan sareng, paling dipikaresep, henteu nyumponan wates waktu.

Pilihan kadua hadé pikeun sadayana, upami henteu pikeun hiji hal. Sababaraha padagang teu gaduh alat kedip-kedip jauh anu urang peryogikeun pikeun sadaya sistem operasi anu diperyogikeun. Sarta saprak deadlines geus ngajalankeun kaluar, Kuring kungsi mikir kalawan sirah kuring sorangan.

Salajengna, kami bakal nyarioskeun ka anjeun kumaha kami ngembangkeun alat pikeun panyeken genggam pikeun Debian 9.x OS (sadayana kasir kami aya dina Debian).

Ngajawab tatarucingan: kumaha flash scanner a

Victor Antipov ngalaporkeun.

Utilitas resmi anu disayogikeun ku padagang tiasa dianggo dina Windows, sareng ngan ukur nganggo IE. Utiliti tiasa flash sareng ngonpigurasikeun scanner.

Kusabab sistem target kami nyaéta Debian, kami masang server usb-redirector dina Debian sareng klien usb-redirector dina Windows. Ngagunakeun utiliti usb-redirector, urang diteruskeun scanner ti mesin Linux Ubuntu kana mesin Windows.

Utiliti ti vendor Windows ningal panyeken sareng nyéépkeun sacara normal. Ku kituna, urang nyieun kacindekan kahiji: nanaon gumantung kana OS, éta masalah protokol kedip-kedip.

OKÉ. Urang ngajalankeun kedip-kedip dina mesin Windows, sarta dipiceun dump dina mesin Linux Ubuntu.

Urang boneka dump kana WireShark na ... meunang hanjelu (Kuring gé ngaleungitkeun sababaraha rinci dump, aranjeunna henteu dipikaresep).

Naon dump nunjukkeun ka kami:

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Alamat 0000-0030, ditilik ku Wireshark, mangrupikeun inpormasi jasa USB.

Kami museurkeun bagian 0040-0070.

Henteu aya anu jelas tina hiji pigura transmisi iwal karakter MOCFT. Karakter ieu tétéla janten karakter tina file firmware, ogé karakter sésana dugi ka ahir pigura (file firmware disorot):

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Naon hartina simbol fd 3e 02 01 fe, kuring pribadi, kawas Ilya, teu boga pamanggih.

Kuring ningal pigura di handap ieu (inpormasi jasa parantos dihapus di dieu, file firmware parantos disorot):

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Naon anu janten jelas? Éta dua bait munggaran sababaraha jenis konstan. Sadaya blok saterusna dikonfirmasi ieu, tapi saméméh ahir blok transmisi:

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Pigura ieu ogé stupefying, saprak konstanta geus robah (disorot) jeung, cukup Oddly, aya bagian tina file. Ukuran bait anu ditransfer tina file nunjukkeun yén 1024 bait anu ditransfer. Kuring deui teu nyaho naon hartina bait sésana.

Anu mimiti, salaku nickname BBS heubeul, abdi reviewed protokol transmisi baku. Taya protokol dikirimkeun 1024 bait. Kuring mimiti diajar hardware jeung datang di sakuliah protokol 1K Xmodem. Ieu diwenangkeun ngirimkeun 1024, tapi kalawan caveat a: mimitina ngan 128, sarta ngan lamun euweuh kasalahan, protokol ngaronjat jumlah bait dikirimkeun. Kuring geuwat mindahkeun 1024 bait. Kuring mutuskeun pikeun diajar protokol transmisi, sarta hususna X-modem.

Aya dua variasi modem.

Kahiji, format pakét XMODEM kalayan dukungan CRC8 (XMODEM aslina):

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Kadua, format pakét XMODEM kalayan dukungan CRC16 (XmodemCRC):

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Sigana sarupa, iwal SOH, jumlah pakét jeung CRC sarta panjang pakét.

Kuring nempo awal blok transmisi kadua (sareng deui ningali file firmware, tapi geus indented ku 1024 bait):

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Kuring nempo header akrab fd 3e 02, tapi dua bait hareup geus robah: éta 01 fe, sarta jadi 02 fd. Teras kuring perhatikeun yén blok kadua ayeuna wilanganana 02 sahingga ngartos: di payuneun kuring aya panomeran blok transmisi. Kahiji 1024 gear nyaeta 01, kadua - 02, katilu - 03 jeung saterusna (tapi hex, tangtosna). Tapi naon hartina robah tina fe ka fd? Panon nempo panurunan ku 1, otak ngingetkeun yén programer cacah ti 0, teu 1. Tapi lajeng naha blok kahiji 1, sarta henteu 0? Kuring masih teu manggihan jawaban kana patarosan ieu. Tapi kuring ngartos kumaha blok kadua diitung. Blok kadua henteu langkung ti FF - (minus) jumlah blok kahiji. Ku kituna, blok kadua ditunjuk salaku = 02 (FF-02) = 02 FD. Bacaan salajengna tina dump dikonfirmasi dugaan kuring.

Lajeng gambar transmisi di handap ieu mimiti muncul:

Mimitian transmisi
fd 3e 02 - Mimitian
01 FE - counter transmisi
Transfer (34 blok, 1024 bait ditransfer)
fd 3e 1024 bait data (dibagi kana 30 blok bait).
Tungtung pangiriman
fd 25

Sésana data bakal dijajarkeun ka 1024 bait.

Naon rupa pigura tungtung transmisi blok:

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

fd 25 - sinyal pikeun ngeureunkeun transmisi block. 2f 52 salajengna - sesa file nepi ka 1024 bait ukuranana. 2f 52, ditilik ku protokol, nyaéta 16-bit CRC checksum.

Demi jaman baheula, kuring ngadamel program dina C anu narik 1024 bait tina file sareng ngitung CRC 16-bit. Ngaluncurkeun program nunjukkeun yén ieu sanés CRC 16-bit. Stupor deui - sakitar tilu dinten. Sadaya waktos ieu kuring nyobian ngartos naon éta, upami henteu checksum. Nalika diajar situs basa Inggris, kuring mendakan yén X-modem ngagunakeun itungan checksum sorangan - CRC-CCITT (XModem). Kuring henteu mendakan palaksanaan C tina itungan ieu, tapi kuring mendakan situs anu ngitung checksum ieu online. Saatos nransper 1024 bait file kuring ka halaman wéb, situs éta nunjukkeun kuring checksum anu lengkep cocog sareng checksum tina file.

Horeeee! Tatarucingan anu terakhir direngsekeun, ayeuna kuring kedah ngadamel firmware kuring sorangan. Salajengna, kuring masihan pangaweruh kuring (sareng éta ngan ukur aya dina sirah kuring) ka Ilya, anu akrab sareng toolkit Python anu kuat.

Nyieun program

Ilya Aleshin ngalaporkeun.

Saatos nampi petunjuk anu pas, kuring "bagja".

Dimana ngamimitian? Leres, ti mimiti.  Ti nyokot dump tina port USB.

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

Pilih port dimana alat disambungkeun jeung file dimana urang bakal nyimpen dump.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Urang sambungkeun scanner ka mesin dimana software EZConfigScanning asli pikeun Windows dipasang.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Di jerona urang mendakan barang pikeun ngirim paréntah ka alat. Tapi kumaha upami tim? Dimana abdi tiasa meunang aranjeunna?
Nalika program dimimitian, alat-alat anu ngajajal otomatis (urang bakal ningali ieu engké). Sareng aya barcode latihan tina dokumén alat resmi. DEFALT. Ieu tim kami.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Data anu diperyogikeun parantos nampi. Buka dump.pcap via wireshark.

Blok nalika ngamimitian EZConfigScanning. Tempat anu anjeun kedah perhatikeun ditandaan beureum.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Ningali sadayana ieu pikeun kahiji kalina, kuring kaleungitan haté. Teu jelas dimana ngagali salajengna.

Saeutik brainstorming jeung-na-na... Aha! Dina dump kaluar - ieu injeung in eta kaluar.

Kuring googled naon URB_INTERRUPT. Kuring manggihan yén ieu téh métode mindahkeun data. Sareng aya 4 metode sapertos: kontrol, interupsi, isochronous, bulk. Anjeun tiasa maca ngeunaan aranjeunna nyalira.

Jeung alamat titik tungtung dina panganteur alat USB tiasa didapet boh ngaliwatan paréntah "lsusb -v" atawa maké pyusb.

Ayeuna urang kedah milarian sadaya alat sareng VID ieu. Anjeun tiasa milarian sacara khusus ku VID:PID.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Sigana mah kieu:

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Janten, urang gaduh inpormasi anu diperyogikeun: paréntah P_INFO. atanapi DEFALT, alamat dimana nyerat paréntah titik = 03 sareng dimana kéngingkeun titik réspon = 86. Sadaya anu tetep nyaéta ngarobih paréntah kana hex.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Kusabab urang parantos mendakan alatna, hayu urang pegatkeun sambungan tina kernel ...

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

sareng nyerat ka titik tungtung kalayan alamat 0x03,

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

... lajeng baca respon ti titik tungtung kalawan alamat 0x86.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Jawaban terstruktur:

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

Urang tingali data ieu dump.pcap.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Hebat! Ngarobih barcode sistem kana hex. Éta éta, fungsionalitas latihan parantos siap.

Kumaha upami firmware? Sadayana sigana sami, tapi aya nuansa.

Saanggeus nyandak dump lengkep tina prosés kedip-kedip, urang kasarna dipikaharti naon kami kaayaan. Ieu artikel ngeunaan XMODEM, anu pohara mantuan pikeun ngarti kumaha komunikasi ieu lumangsung, sanajan dina istilah umum: http://microsin.net/adminstuff/others/xmodem-protocol-overview.html Abdi nyarankeun maca eta.

Ningali dump, anjeun tiasa ningali yén ukuran pigura téh 1024, sarta ukuran URB-data 64.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Ku kituna - 1024/64 - urang meunang 16 garis dina blok, baca file firmware 1 karakter dina hiji waktu sarta ngabentuk blok. Complementing 1 garis dina blok kalayan karakter husus fd3e02 + angka blok.
14 garis salajengna supplemented kalawan fd25 +, ngagunakeun XMODEM.calc_crc () urang ngitung checksum sakabéh blok (nyaéta nyandak loba waktu pikeun ngarti yén "FF - 1" nyaeta CSUM) jeung panungtungan, 16 garis supplemented. jeung fd3e.

Éta sigana éta, baca file firmware, pencét blok, pegatkeun sambungan scanner tina kernel sareng kirimkeun ka alat. Tapi teu kitu basajan. Scanner kedah dialihkeun ka modeu firmware,
отправив ему NEWAPP = ‘\xfd\x0a\x16\x4e\x2c\x4e\x45\x57\x41\x50\x50\x0d’.
Tim mana ieu teh?? Ti dump.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Tapi urang teu bisa ngirim sakabeh blok ka scanner alatan 64 wates:

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Nya, scanner dina mode kedip-kedip NEWAPP henteu nampi hex. Ku alatan éta, anjeun kudu narjamahkeun unggal baris 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]

Teras kirimkeun data ieu ka scanner.

Urang meunang jawaban:

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

Upami anjeun pariksa tulisan ngeunaan XMODEM, éta bakal écés: datana parantos katampi.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Sanggeus kabéh blok geus ditransfer, urang ngalengkepan mindahkeun END_TRANSFER = 'xfdx01x04'.

Nya, sabab blok ieu henteu nyandak inpormasi pikeun jalma biasa, kami bakal masang firmware dina modeu disumputkeun sacara standar. Jeung bisi wae, urang bakal ngatur kamajuan bar ngaliwatan tqdm.

Tugas pikeun pamekar, atanapi kumaha urang flashed scanner leungeun-diayakeun tanpa ngajual

Sabenerna, mangka éta masalah hal saeutik. Sadaya anu tetep nyaéta mungkus solusi dina naskah pikeun réplikasi massa dina waktos anu jelas, ku kituna henteu ngalambatkeun prosés damel di pamariksaan, sareng nambihan logging.

hasil

Saatos nyéépkeun waktos sareng usaha sareng rambut dina sirah, kami tiasa ngembangkeun solusi anu diperyogikeun, sareng ogé nyumponan wates waktu. Dina waktos anu sami, panyeken ayeuna di-reflash sareng dilatih deui sacara sentral, urang jelas-jelas ngontrol sadayana prosés. Pausahaan ngahemat waktos sareng artos, sareng kami nampi pangalaman anu berharga dina alat rékayasa sabalikna tina jinis ieu.

sumber: www.habr.com

Tambahkeun komentar