Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Sanibonani nonke.

Thina, u-Viktor Antipov kanye no-Ilya Aleshin, namuhla sizokhuluma ngolwazi lwethu lokusebenza namadivayisi we-USB nge-Python PyUSB kanye nokuncane mayelana nobunjiniyela bokuhlehla.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

prehistory

Ngo-2019, Isimemezelo Sikahulumeni Wenhlangano YaseRussia No. 224 “Ekuvunyweni Kwemithetho yokulebula imikhiqizo kagwayi ngezindlela zokuhlonza kanye nezici zokusetshenziswa kohlelo lolwazi lombuso lokuqapha ukusatshalaliswa kwempahla engaphansi kokulebula okuyisibopho ngezindlela zokuhlonza. mayelana nemikhiqizo kagwayi” yaqala ukusebenza.
Lo mbhalo uchaza ukuthi kusukela ngoJulayi 1, 2019, abakhiqizi kudingeka balebule iphakethe ngalinye likagwayi. Futhi abasabalalisi abaqondile kufanele bathole le mikhiqizo ngokusebenzisa idokhumenti yokudlulisa yonke indawo (UDD). Izitolo zona, zidinga ukubhalisa ukuthengiswa kwemikhiqizo enelebula ngerejista yemali.

Futhi, kusukela ngoJulayi 1, 2020, ukusakazwa kwemikhiqizo kagwayi engenamalebula akuvunyelwe. Lokhu kusho ukuthi wonke amaphakethe kagwayi kufanele amakwe ngebhakhodi ye-Datamatrix ekhethekile. Ngaphezu kwalokho - iphuzu elibalulekile - kwavela ukuthi i-Datamatrix ngeke ibe yinto evamile, kodwa ephambene. Okusho ukuthi, hhayi ikhodi emnyama emhlophe, kodwa okuphambene nalokho.

Sihlole izikena zethu, kwatholakala ukuthi eziningi zazo zidinga ukukhanyisa kabusha/ukuqeqeshwa kabusha, ngaphandle kwalokho azikwazi ukusebenza ngendlela evamile ngale bhakhodi. Lokhu kuphenduka kwezehlakalo kusiqinisekise ikhanda elibuhlungu, ngoba inkampani yethu inezitolo eziningi ezihlakazekile endaweni enkulu. Amashumi amaningana ezinkulungwane zamarejista emali - kanye nesikhathi esincane kakhulu.

Yini okwakumelwe yenziwe? Kunezinketho ezimbili. Okokuqala: onjiniyela abasendaweni bakhanyisa kabusha futhi balungise izikena. Okwesibili: sisebenza ukude futhi, okungcono, simboza izikena eziningi ngesikhathi esisodwa ngokuphindaphinda okukodwa.

Inketho yokuqala, ngokusobala, yayingafaneleki kithi: kwakuzodingeka sichithe imali ekuvakasheleni onjiniyela, futhi kulokhu kungaba nzima ukulawula nokuxhumanisa inqubo. Kodwa okubaluleke kakhulu ukuthi abantu bazosebenza, okungukuthi, singathola amaphutha amaningi futhi, cishe, singafinyeleli umnqamulajuqu.

Inketho yesibili inhle kuwo wonke umuntu, uma kungeyona into eyodwa. Abanye abathengisi babengenawo amathuluzi okukhanyisa kude ebesiwadinga kuwo wonke amasistimu wokusebenza adingekayo. Futhi njengoba izikhathi ezibekiwe zaziphela, kwadingeka ngicabange ngekhanda lami.

Okulandelayo, sizokutshela ukuthi siwathuthukise kanjani amathuluzi ezikena ezibanjwa ngesandla ze-Debian 9.x OS (zonke izincwadi zethu zemali ziku-Debian).

Rarulula imfumbe: indlela yokukhanyisa isithwebuli

UVictor Antipov uyabika.

Insiza esemthethweni ehlinzekwa umthengisi isebenza ngaphansi kweWindows, futhi kuphela nge-IE. Insiza ingakhanyisa futhi ilungiselele isithwebuli.

Njengoba uhlelo lwethu oluqondiwe kuyi-Debian, sifake iseva yokuqondisa kabusha i-usb ku-Debian kanye neklayenti lokuqondisa kabusha i-usb ku-Windows. Sisebenzisa izinsiza ze-usb-redirector, sidlulisele isithwebuli sisuka emshinini we-Linux siye emshinini we-Windows.

Insiza evela kumthengisi weWindows yabona isithwebuli futhi yasikhanyisa ngokujwayelekile. Ngakho-ke, senze isiphetho sokuqala: akukho okuncike ku-OS, kuyindaba yephrothokholi ekhanyayo.

KULUNGILE. Sasebenzisa ukukhanya emshinini we-Windows, futhi sasusa udoti emshinini we-Linux.

Sagxilisa imfucumfucu ku-WireShark futhi... sadabuka (ngizoyishiya eminye imininingwane yokulahlwa, ayinanzuzo yanoma iyiphi).

Esikuboniswe yilahlwa:

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Amakheli 0000-0030, ukwahlulela nge-Wireshark, ulwazi lwesevisi ye-USB.

Besinentshisekelo engxenyeni ethi 0040-0070.

Akukho okwakucacile kuhlaka olulodwa lokudlulisela ngaphandle kwezinhlamvu ze-MOCFT. Lezi zinhlamvu ziphenduke izinhlamvu ezivela kufayela le-firmware, kanye nezinhlamvu ezisele kuze kube sekupheleni kohlaka (ifayela le-firmware ligqanyisiwe):

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Okushiwo yizimpawu fd 3e 02 01 fe, mina ngokwami, njengo-Ilya, ngangingazi.

Ngibheke uhlaka olulandelayo (ulwazi lwesevisi lususiwe lapha, ifayela le-firmware ligqanyisiwe):

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Yini eyacaca? Ukuthi amabhayithi amabili okuqala awuhlobo oluthile lokuhlala njalo. Wonke amabhulokhi alandelayo akuqinisekisile lokhu, kodwa ngaphambi kokuphela kwebhulokhi yokudlulisela:

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Lolu hlaka lwalubuye luxake, njengoba okungaguquki kwakushintshile (kugqanyisiwe) futhi, ngokuxakile, kwakukhona ingxenye yefayela. Usayizi wamabhayithi adlulisiwe wefayela ubonise ukuthi amabhayithi angu-1024 adlulisiwe. Angazi futhi ukuthi amabhayithi asele asho ukuthini.

Okokuqala nje, njengesidlaliso esidala se-BBS, ngibuyekeze izivumelwano zokudlulisa ezijwayelekile. Ayikho iphrothokholi edluliselwe kumabhayithi angu-1024. Ngaqala ukufunda ihadiwe futhi ngahlangana nephrothokholi ye-1K Xmodem. Kuvunyelwe ukudlulisa i-1024, kodwa nge-caveat: ekuqaleni kuphela i-128, futhi kuphela uma kwakungekho amaphutha, iphrothokholi yandisa inani lamabhayithi adlulisiwe. Ngokushesha ngibe nokudluliselwa kwamabhayithi angu-1024. Nginqume ukutadisha amaphrothokholi okudlulisela, futhi ikakhulukazi i-X-modemu.

Kwakukhona ukuhluka okubili kwemodemu.

Okokuqala, ifomethi yephakheji ye-XMODEM enosekelo lwe-CRC8 (i-XMODEM yoqobo):

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Okwesibili, ifomethi yephakethe ye-XMODEM enokwesekwa kwe-CRC16 (XmodemCRC):

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Kubukeka kufana, ngaphandle kwe-SOH, inombolo yephakheji ne-CRC nobude bephakheji.

Ngibheke ekuqaleni kwebhulokhi yokudlulisela yesibili (ngaphinda ngabona ifayela le-firmware, kodwa selivele lihlehliswe ngamabhayithi angu-1024):

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Ngabona unhlokweni ojwayelekile fd 3e 02, kodwa amabhayithi amabili alandelayo ayeseshintshile: kwaba ngu-01 fe, futhi waba ngu-02 fd. Ngabe sengiqaphela ukuthi ibhulokhi yesibili manje yayinenombolo engu-02 futhi ngaleyo ndlela yaqondakala: phambi kwami ​​kwakukhona izinombolo zebhulokhi yokudlulisela. Igiya lokuqala le-1024 lingu-01, elesibili lingu-02, elesithathu ngu-03 njalonjalo (kodwa ku-hex, kunjalo). Kodwa kusho ukuthini ukushintsha kusuka ku-fe kuya ku-fd? Amehlo abona ukwehla ngo-1, ubuchopho bukhumbuza ukuthi abahleli babala kusuka ku-0, hhayi 1. Kodwa-ke kungani i-block yokuqala ingu-1, hhayi u-0? Angikayitholi impendulo yalo mbuzo. Kodwa ngaqonda ukuthi ibhulokhi yesibili ibalwa kanjani. Ibhulokhi yesibili ayiyona into engaphezu kwe-FF - (minus) inombolo yebhulokhi yokuqala. Ngakho, ibhulokhi yesibili yaqokwa njenge = 02 (FF-02) = 02 FD. Ukufundwa okwalandela kokulahlwa kwaqinisekisa ukuqagela kwami.

Khona-ke isithombe esilandelayo sokudluliswa kwaqala ukuvela:

Ukuqala kokudlulisela
fd 3e 02 - Qala
01 FE – isibali sokudlulisa
Dlulisela (amabhulokhi angu-34, amabhayithi angu-1024 adlulisiwe)
fd 3e 1024 bytes idatha (ihlukaniswe 30 byte amabhlogo).
Ukuphela kokudlulisela
fd25

Idatha esele izoqondaniswa namabhayithi angu-1024.

Ngabe lubukeka kanjani uhlaka lokugcina lokudluliswa kwebhulokhi:

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

fd 25 - isignali yokuqeda ukudluliswa kwebhulokhi. Okulandelayo 2f 52 - lonke ifayela elingafika ku-1024 bytes ngosayizi. I-2f 52, uma kubhekwa umthetho olandelwayo, iwukuhlola i-CRC engu-16-bit.

Ngenxa yezikhathi zakudala, ngenze uhlelo ngo-C oludonse amabhayithi angu-1024 efayeleni futhi labala i-CRC engu-16-bit. Ukwethula uhlelo kubonise ukuthi lena akuyona i-16-bit CRC. Stupor futhi - cishe izinsuku ezintathu. Sonke lesi sikhathi bengizama ukuqonda ukuthi kungaba yini, uma kungeyona isheke. Ngenkathi ngifunda amasayithi olimi lwesiNgisi, ngithole ukuthi i-X-modemu isebenzisa esayo isibalo se-checksum - CRC-CCITT (XModem). Angitholanga noma yikuphi ukufakwa kwe-C kwalesi sibalo, kodwa ngithole isayithi elibale le-checksum ku-inthanethi. Ngemva kokudlulisa amabhayithi angu-1024 efayela lami ekhasini lewebhu, isayithi langibonisa isheke elifana ngokuphelele nesheke elisuka efayeleni.

Hooray! Imfumbe yokugcina yaxazululeka, manje ngangidinga ukwenza eyami i-firmware. Ngokulandelayo, ngadlulisela ulwazi lwami (futhi lwahlala ekhanda lami kuphela) ku-Ilya, ojwayelene nekhithi yamathuluzi enamandla iPython.

Idala uhlelo

U-Ilya Aleshin uyabika.

Ngemva kokuthola iziqondiso ezifanele, “ngajabula” kakhulu.

Uzoqala kuphi? Kunjalo, kusukela ekuqaleni.  Ekuthatheni indawo yokulahla embobeni ye-USB.

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

Khetha imbobo lapho idivayisi ixhunywe khona kanye nefayela lapho sizolondoloza khona ukulahlwa.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Sixhuma isithwebuli emshinini lapho kufakwe khona isofthiwe yomdabu ye-EZConfigScanning ye-Windows.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Kuyo sithola into yokuthumela imiyalo kudivayisi. Kodwa kuthiwani ngamaqembu? Ngingazitholaphi?
Lapho uhlelo luqala, okokusebenza kuhlolwa ngokuzenzakalelayo (sizokubona lokhu ngemva kwesikhashana). Futhi kwakukhona amabhakhodi okuqeqesha avela kumadokhumenti emishini esemthethweni. I-DEFALT. Iqembu lethu leli.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Idatha edingekayo yamukelwe. Vula i-dump.pcap nge-wireshark.

Vimba lapho uqala i-EZConfigScanning. Izindawo okudingeka uzinake zimakwe ngokubomvu.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Ngokubona konke lokhu okokuqala, ngaphelelwa yinhliziyo. Akukacaci ukuthi uzomba kuphi ngokulandelayo.

Ukuxoxisana okuncane futhi-futhi-futhi... Aha! Endaweni yokulahla out - kuyinto in, futhi in lokhu kungukuthi out.

Ngibheke ku-google ukuthi iyini i-URB_INTERRUPT. Ngithole ukuthi lena indlela yokudlulisa idatha. Futhi kunezindlela ezi-4 ezinjalo: ukulawula, ukuphazamisa, isochronous, inqwaba. Ungafunda ngazo ngokwehlukana.

Futhi amakheli ephoyinti lokugcina kusixhumi esibonakalayo sedivayisi ye-USB angatholwa ngomyalo othi “lsusb –v” noma kusetshenziswa i-pyusb.

Manje sidinga ukuthola wonke amadivayisi anale VID. Ungasesha ngokuqondile nge-VID:PID.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Kubukeka kanjena:

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Ngakho, sinolwazi oludingekayo: imiyalo ye-P_INFO. noma i-DEFALT, ikheli lapho ibhalwa khona imiyalo endpoint=03 nokuthi ungayitholaphi impendulo ethi endpoint=86. Okusele nje ukuguqula imiyalo ibe yi-hex.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Njengoba sesivele siyitholile idivayisi, masiyinqamule ku-kernel...

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

...bese ubhalela ekugcineni ngekheli elithi 0x03,

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

... bese ufunda impendulo evela ekugcineni enekheli elithi 0x86.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Impendulo eyakhiwe:

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

Sibona le datha ku-dump.pcap.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Kuhle! Guqula amabhakhodi esistimu abe yi-hex. Yilokho kuphela, ukusebenza kokuqeqeshwa sekumi ngomumo.

Kuthiwani nge-firmware? Konke kubonakala kufana, kodwa kune-nuance.

Ngemva kokulahla ngokuphelele inqubo ekhanyayo, cishe saqonda ukuthi sibhekene nani. Nansi i-athikili emayelana ne-XMODEM, eyasiza kakhulu ekuqondeni ukuthi lokhu kuxhumana kwenzeka kanjani, noma ngokwemibandela evamile: http://microsin.net/adminstuff/others/xmodem-protocol-overview.html Ngincoma ukuyifunda.

Uma ubheka indawo yokulahla udoti, ungabona ukuthi usayizi wozimele ungu-1024, futhi usayizi wedatha ye-URB ngu-64.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Ngakho-ke - 1024/64 - sithola imigqa engu-16 kubhlokhi, funda ifayela le-firmware uhlamvu olu-1 ngesikhathi futhi sakha ibhulokhi. Ukugcwalisa umugqa ongu-1 kubhulokhi enezinhlamvu ezikhethekile ze-fd3e02 + inombolo yebhulokhi.
Imigqa elandelayo engu-14 yengezwe nge-fd25 +, kusetshenziswa i-XMODEM.calc_crc() sibala isheke yebhulokhi yonke (kuthathe isikhathi esiningi ukuqonda ukuthi i-“FF – 1” yi-CSUM) kanye nomugqa wokugcina, we-16 wengezwe. nge fd3e.

Kubonakala sengathi yilokho, funda ifayela le-firmware, shaya amabhlogo, unqamule isithwebuli ku-kernel bese usithumela kudivayisi. Kodwa akulula kangako. Isithwebuli sidinga ukushintshelwa kumodi ye-firmware,
отправив ему NEWAPP = ‘\xfd\x0a\x16\x4e\x2c\x4e\x45\x57\x41\x50\x50\x0d’.
Livelaphi leliqembu?? Kusuka endaweni yokulahla.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Kodwa asikwazi ukuthumela ibhlokhi yonke kusikena ngenxa yomkhawulo wama-64:

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Hhayi-ke, isithwebuli kumodi ekhanyayo ye-NEWAPP asamukeli i-hex. Ngakho-ke, kuzodingeka uhumushe umugqa ngamunye 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]

Bese uthumela le datha kusikena.

Sithola impendulo:

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

Uma uhlola isihloko mayelana ne-XMODEM, kuzocaca: idatha yamukelwe.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Ngemva kokuthi wonke amabhulokhi edlulisiwe, siqedela ukudlulisa END_TRANSFER = 'xfdx01x04'.

Hhayi-ke, njengoba la mabhuloki angathwali imininingwane yabantu abajwayelekile, sizofaka i-firmware ngemodi efihliwe ngokuzenzakalela. Futhi uma kwenzeka, sizohlela ibha yokuqhubeka nge-tqdm.

Umsebenzi wonjiniyela, noma ukuthi sikhanyisa kanjani izikena ezibanjwa ngesandla ngaphandle komthengisi

Empeleni, ke kuyindaba yezinto ezincane. Okusele nje ukugoqa isixazululo kumaskripthi ukuze kuphindaphindeke ngobuningi ngesikhathi esichazwe ngokucacile, ukuze ungabambezeli inqubo yokusebenza ezindaweni zokukhokha, futhi wengeze ukungena.

Umphumela

Ngemva kokuchitha isikhathi esiningi nomzamo kanye nezinwele emakhanda ethu, sakwazi ukuthuthukisa izixazululo esizidingayo, futhi sahlangabezana nomnqamulajuqu. Ngesikhathi esifanayo, izikena manje sezikhanyisa kabusha futhi ziqeqeshwa kabusha phakathi nendawo, silawula ngokucacile yonke inqubo. Inkampani yonga isikhathi nemali, futhi sazuza ulwazi olubalulekile emishinini yobunjiniyela ehlehlayo yalolu hlobo.

Source: www.habr.com

Engeza amazwana