Bine spus "unii". Prefer un om "arogant" care stie meserie fata de unul umil. Umilinta asta e genetica la noi in general.
Uite eu acum vreo 10 ani am inceput sa fac reverse engineering la niste programatoare universale de memorii de tipul TL866.
Programatoare de conceptie originala
China destul de ieftine si rapid asimilate de mai toti hobistii din lume si nu numai.
Problema lor este ca in momentul cand aparea un nou update de software cu support pentru noi chip-uri trebuia sa faci update si la firmware-ul programatorului.
Treaba era simpla ca daca porneai programul iti spunea ca rulezi o versiune veche de firmware si daca esti de acord sa faci update cu Yes/No.
Dadeai Yes si software-ul updata firmware-ul programatorului in 10-20 de secunde. Doar ca se intampla ca din cauza unui bug/trei ceasuri rele programatorul sa se brick-uiasaca chiar in timpul upgrade-ului.
Cand am patit asta am dat mail la producator cu intrebari de cum sa remediez (programatorul nici nu mai era vazut ca dispozitiv pe USB).
Raspunsurile lor erau destul de evazive in genul sa reinstalezi softul sau driverele. Nu voiau sa dea fisier cu firmware din motive evidente.
Asa ca am incercat sa fac reverse engineering sa vad cum lucreaza. Am facut rost de alt programator de la un coleg si am inceput sa fac reverse pe protocol cu sniffere de USB si dezasamblarea software-ului lor.
Treaba e ca m-am prins repede cum face update si ce trimite. Problema mare era ca softul venea cu un fisier de firmware criptat iar decriptarea se facea de catre bootloader-ul programatorului. Se trimitea o comanda de punere in mod boot se dadea comanda de erase si apoi se trimitea fisierul ala criptat in blocuri mici. Dupa care se comuta iar inapoi in mod normal de lucru.
Nu stiu cum am facut dar dupa vreo cateva luni de intors fisierul ala pe toate partile in hex editor am inceput sa vad anumite patern-uri si am reusit sa decriptez acel fisier cu o cheie extrasa chiar din fisierul criptat (criptarea era facuta totusi slab).
Dupa care am facut un mic programel pe care l-am trimis spre programator criptat, ce imi trimitea pe un anumit pin de la controlerul lui (un PIC18F87J50) in protocol serial un dump al flash-ului intern de 128K.
Dupa care am pus dump-ul ala pe programatorul meu si aia a fost. Numai ca firmware-ul avea protectii peste protectii avea cod de serie criptat in flash si alte crc-uri imbarligate pe care le-am descifrat pe toate. Apoi am facut reverse la schema electronica si am facut si un mic programel care putea face update la firmware la ce versiune vrei (softul lor nu te lasa sa faci asta). Plus ca erau doua variante de programator, una cu mufa ICSP si alta varianta fara acea mufa mai ieftin. Hardware erau la fel doar ca aia fara mufa de programare in circuit avea firmware-ul bocat nu puteai sa te folosesti de ICSP. Programelul putea face upfate fara probleme la orice varianta. Cel mai interesant ca firmware-urile erau criptate cu chei diferite.
Ca si metoda de criptare folosea ceva scrambling/amestecare de date urmate de rotire a unui bloc pe biti si apoi niste XOR-uri cu niste valori luate dintr-un lookup table.
Apoi m-am decis sa fac toata treaba publica, intre timp am facut si un fel de driver de Linux sa poata merge softul lor si in astfel de OS-uri.
Chestia asta a facut multe discutii pe forumul unde am postat toata treaba cu mail-uri si PM-uri din toata lumea. Nu cred sa fie tara sa nu fi primit PM, inclusiv Romani :) Ce ma amuza era faptul ca ii vedeam ca scriu in Romglish si cand ii intrebam de unde sunt si spuneau ca din RO, le spuneam sa vb. in Romana, incepeau cu da' cum ai facut da' cum se poate asa? uite cu rabdare si cu capul!
Intre timp au aparut o gramada de clone facute tot de fratii lor CHN, m-au acuzat ca le stric afacerea, sau resemnat si au scos din productie varianta care se pirata. A fost o intreaga tarasenie ani de zile, ei cautau sa detecteze clonele si sa le brck-uiasca automat, baietii generau un nou firmware cu utilitarul meu pana sau saturat si au scos alta varianta cu un CPU mai nou, cu procesor pe 16 biti si cu o criptare mai buna a firmware-ului.
Oricum am facut reverse la schema si la tot protocolul de comunicatie si l-am implementat in programele open source pentru aceste programatoare inclusiv cu tester logic pentru cip-uri si altele. Uneori vad idei din softul pe care il scriu implementat in softul lor. Treaba e ca nu vor sa colaboreze.
Asta ca o introducere. Ce voiam sa spun era ca dupa cativa ani si zeci de pagini de discutii si ridicat in slavi cu vai sefu', m-am decis sa-mi pun Romania la locatie (apare pe forum sub Username). Asa ca experiment social. Americanii, Rusii si in general esticii/asiaticii/sud-americanii/Japonezii si chiar si chinezii m-au tratat in continuare la fel. Am primit mesaje de bine de la conationali stabiliti prin Canada si alte departari.
Dupa care our West Europe :) Imediat au devenit reci si chiar daca au pastrat o anumita decenta nu prea ii simteam okay. Francezii chiar se mirau daca am ce-mi trebuie ca sa-mi trimita bani sau circuite daca am nevoie. O sticla de ulei ceva :) Ce-o fi in mintea lor oare? o fi crezand ca noi suntem rupti de foame!
Nemtii la fel. Le-am spus ca in general noua nu ne lipsesc banii ci niste omeni de calitate sa ia decizii in favoarea noastra.
De aia prefer oamenii cu o anumita "aroganta" capabili sa nu faca compromisuri fata de aia umili cu sarna' sefu'.