Vizitator Postat Octombrie 5, 2015 Partajează Postat Octombrie 5, 2015 salut. pentru cei care se pricep la Arduino sau AVR..in general. exista vreun cod de genul unique ID chip pe care sa-l poti citi in cod ? daca stie cineva orice sfat e bine venit. Link spre comentariu
nico_2010 Postat Octombrie 6, 2015 Partajează Postat Octombrie 6, 2015 Cu exceptia (se pare) a XMega, uC Atmel nu au chip ID. Totusi poti implementa asta in memoria EEPROM, la o adresa oarecare folosind codul de mai jos: typedef struct { unsigned int ID_num; unsigned char volume; signed int lcd_contrast;etc.} ee_var_type;ee_var_type ee_vars EEMEM = { 0x1234, 51, -19}; unde in "ee_var_type ee_vars EEMEM" grupezi mai multe tipuri de variabile. Nu am pretentia ca respectivul cod este cel mai bun, este doar o idee. O alta varianta ar fi utilizarea unui circuit tip DS18S20 care are identificator unic, sau o memorie EEPROM externa care, de asemenea, are identificator unic. Link spre comentariu
Vizitator Postat Octombrie 6, 2015 Partajează Postat Octombrie 6, 2015 (editat) privind eeprom. nu vad cum s-ar putea evita clonarea cipului in felul asta...sau la ce bun un chipID fix.. folosirea unui DS18S20, mi se pare ok..daca nu se poate clona si asta cumva..cu vreun attiny alaturat.. oricum aplicatia foloseste si un termometru..ar fi o idee de cheie...secreta Editat Octombrie 6, 2015 de Vizitator Link spre comentariu
ratza Postat Octombrie 7, 2015 Partajează Postat Octombrie 7, 2015 Pui în EEPROM şi protejezi citirea din fuse bytes. Link spre comentariu
Vizitator Postat Octombrie 7, 2015 Partajează Postat Octombrie 7, 2015 (editat) ideea ca vreau sa las pcb/software la liber de descarcat, dar care cere un cod in functie de ceva unic. si cum uC-ul (atmega32) nu are.. ar mai fi varianta sa-si autogenereze un cod, nu stiu inca cum sa-l fac sa fie chiar 100% unic, ma gandeam sa citesc temperatura interna, vcc, micros() si alte dracovenii, ca sa genereze un cod cat de cat mai aproape de uniqueID, .. pe care si-l scrie in eeprom, si un logaritm de calcul pentru password, care urmeaza sa-l scrie tot in eeprom daca coincide cu cel "primit", un fel de ... validare. daca ramane invalid, functia returneaza -1 si in loop() apare return sau goto, deci nu se ruleaza codul... ps: oricum nu se vrea vanzare, doar inregistrarea/controlul folosirii softului. Editat Octombrie 7, 2015 de Vizitator Link spre comentariu
one Postat Octombrie 7, 2015 Partajează Postat Octombrie 7, 2015 (editat) Utilizatorul va folosi componenta lui nu ? Deci chiar daca ar avea un ID, nu ai sti care este, daca utilizatorul nu ti-l comunica. ATmega nu are ID. Softul va fi disponibil in sursa sau compilat (.hex) ? Daca e prima varianta nu prea ai ce face. Poti face o functie care sa verifice o anumita proprietate a parolei (de exemplu daca este divizibil cu 7393). Oricum cine face dezasamblare si intelege ce ai facut este destul de bun ca sa isi scrie programul si singur, imi imaginez. Daca doresti ca fiecare utilizator sa aiba o parola diferita este mai greu, dar nu imposibil. Mai intai, ar trebui sa generezi mai multe numere aleatorii (avr-gcc function rand() ) pe care sa le salvezi in mai multe locatii din EEPROM. Este la alegerea ta daca le utilizezi pe toate sau numai unul. Generarea mai multor numere este doar pentru a crea confuzie. Faci o functie care citeste numarul generat si il comunica intr-un fel utilizatorului, dupa care asteapta introducerea parolei. Utilizatorul iti comunica numarul iar tu aplici o functie oarecare asupra acestui numar astfel incat sa obtii un rezultat pe care il comunici inapoi utilizatorului. Acesta introduce parola si aceasta se salveaza la o alta locatie din eeprom. La reset, se ia valoarea ultima salvata si se aplica functia inversa, daca va coincide cu numarul generat aleatoriu, codul se executa. temperatura interna, vcc, micros() si alte dracovenii, ca sa genereze un cod cat de cat mai aproape de uniqueID, valoarea de calibrare pentru oscilatorul intern ? un divizor de tensiune citit cu ADC ? Nu este mai simplu ca utilizatorul sa se inregistreze pe site ca sa poata descarca programul ? Editat Octombrie 7, 2015 de one Link spre comentariu
nico_2010 Postat Octombrie 7, 2015 Partajează Postat Octombrie 7, 2015 De ce nu folosesti un bootloader AES sau DES de pe site-ul ATmel? Link spre comentariu
Vizitator Postat Octombrie 7, 2015 Partajează Postat Octombrie 7, 2015 (editat) programul va fi oferit in HEX cred ca pot elabora un mecanism anti-smart gay toti stim cam cum sa gasim gauri, deci stim si cum sa evitam cel mai mult posibil nu este mai simplu cu inregistrarea pe site, pentru ca un hex va fi uploadat peste tot si nu mai poti opri situatia. eu vreau sa fie folosit, dar nu in masa, si nici bani sa nu se faca mai tarziu din el daca eu tot nu vreau sa obtin asta. chestia cu eeprom e ok , cu conditia sa gasesc o metoda din soft sa scriu fusebitii. pentru ca cine scrie codul nu neaparat sa blocheze L2&L3 vorbesc prostii ? e posibil sa schimb fusebitii din soft sau...cumva la scrierea hex-ului automat ? daca nu gasesc o chestie sigura sa se puna L2L3 pe 1 nu prea am facut nimic. e suficient o decodare, copiezi eeprom si scri eeprom pe orice alt uC si gata heku ce parere aveti de PROGMEM() ? Editat Octombrie 7, 2015 de Vizitator Link spre comentariu
nico_2010 Postat Octombrie 7, 2015 Partajează Postat Octombrie 7, 2015 Revin si intreb: De ce nu folosesti un bootloader AES sau DES de pe site-ul ATmel (AVR231)? Iti asigura criptarea fisierului, insa permite incarcarea lui chiar daca fuse-bits sunt setati pe L3! Link spre comentariu
Ionut Remus Postat Octombrie 7, 2015 Partajează Postat Octombrie 7, 2015 Ca idee ...... Poti face in soft ca la un interval de timp sa scrie o valoare, spre exemplu valoarea 1, dupa care la fie o ulterioara alimentare, sau un alt interval de timp, sa verifice acea valoare si daca ea este in intervalul , sa zicem 1 - 10 atunci sa o scrie pe succesiva ei si sa ruleze programul, adica daca e 1 sa scrie 2 iar daca e 2 atunci sa scrie 3....etc... Iar cand valoarea devine 11 deja nu se mai incadreaza intre 1 -10 si asa sa nu mai ruleze programul. Singurul dezavantaj ar fi ca eeprom-ul se poate sterge/reseta....dar daca nu detaliezi nu cred ca cineva va sti exact cum contorizezi si pentru mai multa precautie ai putea implementa un ID, cum spunea colegii de mai sus, care sa fie intr-o stransa legatura cu idea mea, practice sa faci 2 metode care sa aiba un algoritm stric iar cand se sterge memoria sa fie in asa fel incat sa nu se mai "alinieze" cele 2 "protectii" si sa nu se mai poata folosi.(dar aici cred ca e mai greu deja, eu doar am dat o idee.) LE: o alta idee ar mai fi sa faci cumva sa "epuizezi" nr de scrieri a eeprom-ului intern al MCU-ul si o protective pe eeprom extern, unde se stocheaza o informative concreta si cand nu coincide cu cea din eepromul intern atunci sa nu ruleze programul...... Link spre comentariu
Vizitator Postat Octombrie 7, 2015 Partajează Postat Octombrie 7, 2015 (editat) Revin si intreb: De ce nu folosesti un bootloader AES sau DES de pe site-ul ATmel (AVR231)? Iti asigura criptarea fisierului, insa permite incarcarea lui chiar daca fuse-bits sunt setati pe L3! pentru ca eu nu am acces la uC. in plus nu stiu cum s-ar impaca cu Arduino. am postat pe arduino. nu sunt inca pus la punct cu limbajul nativ AVR. deocamdata. Ca idee ...... Poti face in soft ca la un interval de timp sa scrie o valoare, spre exemplu valoarea 1, dupa care la fie o ulterioara alimentare, sau un alt interval de timp, sa verifice acea valoare si daca ea este in intervalul , sa zicem 1 - 10 atunci sa o scrie pe succesiva ei si sa ruleze programul, adica daca e 1 sa scrie 2 iar daca e 2 atunci sa scrie 3....etc... Iar cand valoarea devine 11 deja nu se mai incadreaza intre 1 -10 si asa sa nu mai ruleze programul. Singurul dezavantaj ar fi ca eeprom-ul se poate sterge/reseta....dar daca nu detaliezi nu cred ca cineva va sti exact cum contorizezi si pentru mai multa precautie ai putea implementa un ID, cum spunea colegii de mai sus, care sa fie intr-o stransa legatura cu idea mea, practice sa faci 2 metode care sa aiba un algoritm stric iar cand se sterge memoria sa fie in asa fel incat sa nu se mai "alinieze" cele 2 "protectii" si sa nu se mai poata folosi.(dar aici cred ca e mai greu deja, eu doar am dat o idee.) LE: o alta idee ar mai fi sa faci cumva sa "epuizezi" nr de scrieri a eeprom-ului intern al MCU-ul si o protective pe eeprom extern, unde se stocheaza o informative concreta si cand nu coincide cu cea din eepromul intern atunci sa nu ruleze programul...... buna idee, dar eu nu vreau sa fie Trial. e programul complet. trebuie sa gasesc o solutie sa scriu LB2 & LB3 din cadrul softului. altfel tot eeprom e floare la ureche, cel putin cat timp eu stiu cat de usor este nu are sens. repet. nu am acces la uC, "omul" isi face pcb, scrie HEX-ul. eu din soft trebuie sa ma protejez cumva... oricum, fiecare idee de aici este utila, si va multumesc pentru sprijin. daca stie cineva cum pot scrie fusebit on the fly, rog sa ma ajute. Editat Octombrie 7, 2015 de Vizitator Link spre comentariu
nico_2010 Postat Octombrie 8, 2015 Partajează Postat Octombrie 8, 2015 Om bun, sa recapitulam: ai un produs care include un microcontroller al carui software intentionezi sa-l upgradezi periodic. Doresti ca versiunile ulterioare de software (upgrade) sa fie descarcabile de pe un site de catre utilizatorii produsului, fara sa existe posibilitatea diseminarii necontrolate. Pentru asta ar trebui ca microcontrollerul (protejat la citire) continut de produs sa contina un bootloader cu criptare AES sau DES care sa permita incarcarea fisierului hex criptat de asemenea. Mai multe gasesti aici: AVR231.pdf Link spre comentariu
one Postat Octombrie 8, 2015 Partajează Postat Octombrie 8, 2015 (editat) Parerea mea este ca ce e gratis sa fie gratis si ce e pe bani sa fie pe bani. Intr-adevar mai sunt anumite programe care necesita inregistrare, de exemplu DesignSpark ca sa il activezi trebuie sa te inregistrezi (gratis) dar sunt atatea situri chinezesti care ofera kit-ul de osciloscop cu AVR sau LC-metru si au softul gratis de descarcat fara parole si alte asemenea. Si pentru upgrade la firmware pentru camera foto sau BIOS-ul computerului este posibil dar putin probabil sa iti ceara sa te inregistrezi, oricum nimeni nu pierde timpul cu fiecare utilizator sa ii dea o parola cu care sa activeze descarcarea. Acestea se fac eventual automat, pe site. Daca dai ceva gratis nu vad de ce ai mai pierde timpul (caci da, vei deveni ocupat cu ceva care oferi gratis) cu fiecare utilizator ca sa ii dai parola pentru deblocare. Nu vreau sa combat ideea ta, dar cred ca daca unul care vrea sa faca bani iti ia ideea nu mai are nevoie de software. Editat Octombrie 8, 2015 de one Link spre comentariu
Vizitator Postat Octombrie 8, 2015 Partajează Postat Octombrie 8, 2015 (editat) sa incerc din nou sa ma fac inteles, dragi prieteni. (serios) nu doresc sa-l upgradez periodic. absolut deloc, nu am pomenit de asta pana acum. chiar daca ar sti ideea nu ar putea sti ce face softul, si e munca mea de 4 ani. si chiar daca ar sti, as presupune ca a muncit deja, si e ok. vreau sa impart cu unele persoane asta, dar vreau sa ma protejez in modul in care HEX-ul devine cumva public. nu am acces la uC ce urmeaza scris, deci nu pot seta fusebiti decat din soft eventual. nu ma intereseaza sa protejez softul. ci sa nu ruleze pe sisteme neautorizate de mine. atat. cu ce m-ar ajuta criptare AES in asa caz ? OnTopic: am reusit sa citesc fusebiti in program, si in caz ca nu pot sa-i scriu, programul va refuza sa ruleze daca nu e LB 3. tot e ceva. mai elegant ar fi sa-si puna singur L3 din soft. vreau protejare la citire. stie cineva cum, sau nu se poate ? tin din nou sa va multumesc pentru idei, si imi cer scuze daca nu expun foarte bine ceea ce doresc. chestia asta s-a transformat mai mult in "vreau sa stiu" decat neaparat o nevoie.. Cod citire: #include <avr/boot.h>byte lock_bits;void setup(){Serial.begin(9600);lock_bits = boot_lock_fuse_bits_get(GET_LOCK_BITS);Serial.print("Lock:");printeaza_binar(lock_bits);Serial.println("");}void loop(){}//////////////////////PROCEDURI///////////////////void printeaza_binar(byte b){ for (byte i=0x80; i>0; i>>=1) { if (b&i) { Serial.print('1'); } else { Serial.print('0'); } }} Ar fi pe undeva functia boot_lock_bits_set sau boot_lock_bits_set_safe in boot.h dar eu nu am inteles ce-am de facut.. Sursa: http://www.nongnu.org/avr-libc/user-manual/group__avr__boot.html Editat Octombrie 8, 2015 de Vizitator Link spre comentariu
Vizitator Postat Octombrie 8, 2015 Partajează Postat Octombrie 8, 2015 (editat) mda, nu se poate scrie LB1&2 on the fly. singura optiune pe care o vad eu este sa obligi scrierea in avrdude cu lockbit in program, citesti daca exista 0x0C sau 0x3C si cam asta e tot. citirea ar fi prima conditie inainte de inregistrare. Editat Octombrie 8, 2015 de Vizitator Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum