PDA

View Full Version : [C/C]Programmare cornici digitali


nucarote
04-04-2011, 11:53
Salve, vorrei sapere se c'è qualche SDK o tool per poter scrivere programmi che siano eseguibili sull'HW limitatissimo delle cornici digitali e se c'è qualche modo per poterlo caricare sulla memoria della cornice stessa.

nucarote
25-08-2011, 11:47
up

LMCH
26-08-2011, 01:51
Prima dovresti come minimo specificare l'hardware, fa una differenza enorme. ;)

Di solito il fornitore dell'hardware propone come minimo un suo SDK di basso livello con le librerie di base, nel caso delle cornici digitali non è insolito che sotto ci sia Windows CE oppure Linux.

Ma per eseguire programmi "esterni" su un prodotto finito di quel tipo o la cosa è prevista direttamente da chi ha sviluppato il prodotto oppure bisogna usare trucchi tipo stack overflow o heap smashing con immagini confezionate ad arte.

Troppa fatica, se proprio vuoi una "cornice programmabile" prendi un tablet cinese con Android al di sotto dei 100 euro e lo potrai usare anche come cornice oltre che per molto altro.

Io recentemente ne ho preso uno in offerta a 99 euro (display 800x480 con touchscreen resistivo, cpu ARMv5TE ad 800Mhz accelerazione hardware della grafica 2D, 256MB di ram, Android 2.2, Wi-Fi, webcam frontale) che oltre alla scheda microSD aveva pure un "connettore di espansione" con DUE porte USB host ed il caro vecchio connettore ethernet RJ45. :D

Non si tratta di un prodotto che consiglierei a chi vuole un tablet, ma come aggeggio per hobbysti e smanettoni di hardware e software è un affarone visto che usando l'ethernet e le due USB host lo si può interfacciare con un sacco di roba. :cool:
L'unica cosa che gli manca sono I/O digitali, ingressi analogici e DAC optoisolati ma per quello gli si può (ad esempio) collegare sull'ethernet un Arduino con interfaccia ethernet. :)

LMCH
26-08-2011, 02:22
se proprio vuoi una "cornice programmabile" prendi un tablet cinese con Android al di sotto dei 100 euro e lo potrai usare anche come cornice oltre che per molto altro.

Mi ero scordato di aggiungere alcune cose se vuoi usare un tablet Android economico:
1) prendine uno per cui esistono firmware aggiornati (ora come ora da Android 2.2 in su), meglio se parte già con Android 2.2 "di serie".
2) informati se sia già sbloccato (se può caricare .apk "non sicuri") o se sia facile sbloccarlo;
3) minimo 256MB (più ram c'è e meglio è, ma guarda la ram fisicamente presente non quella "libera" ed occhio che in molti prodotti d'importazione a basos costo le specifiche sono confuse, una ricerca fatta con google toglie parecchi dubbi);
4) prima dell'acquisto fai un giro sul sito del produttore e guarda cosa è incluso (nel mio caso a convincermi all'acquisto è stato il connettore di espansione), poi guarda nei vari forum per vedere che altro c'è di interessante, cose da sapere riguardo le applicazioni utilizzabili su di essi, ecc. ecc.
5.1) nel caso di Android dal sito di google dedicato ad esso puoi scaricare l'SDK (per scrivere applicazioni con sorgenti in java anche se il runtime è la VM Dalvik), l'NDK (per scrivere programmi o parti di programmi in C/C++/assembly) e poi ti serve Eclipse come IDE. Insomma, non è una passeggiata ma attualmente è la soluzione più a basso costo.
5.2) oppure in alternativa potresti prendere in considerazione AppAccelerator
(sviluppi app usando html5/css/javascript/python/ruby che possono girare su Android,iOS,Windows,Mac,Linux) la Community Edition è gratuita.

nucarote
26-08-2011, 16:33
...

Ma per eseguire programmi "esterni" su un prodotto finito di quel tipo o la cosa è prevista direttamente da chi ha sviluppato il prodotto oppure bisogna usare trucchi tipo stack overflow o heap smashing con immagini confezionate ad arte.

...

Ti ringrazio per i tuoi consigli, in particolare quelli che ho quotato di cui gradirei qualche delucidazione e/o qualche link.
Comunque la mia "idea" (o meglio scimmia o curiosità) è quello di usare l'hw di una cornice per fare un simil tablet o quanto meno poterci caricare un paio di app mie.

LMCH
27-08-2011, 00:17
Ti ringrazio per i tuoi consigli, in particolare quelli che ho quotato di cui gradirei qualche delucidazione e/o qualche link.
Comunque la mia "idea" (o meglio scimmia o curiosità) è quello di usare l'hw di una cornice per fare un simil tablet o quanto meno poterci caricare un paio di app mie.

Quello a cui mi riferivo era una code injection in ram per inserire proprio codice eseguibile e mandarlo in esecuzione (ma funziona solo se riescia ad individuare qualche punto debole nel firmware e se i programmi eseguibili sono in ram invece che essere eseguiti da una NOR-flash).
Se il codice eseguibile sta in ram, si cerca qualcosa in esso che non fa controlli sulla dimensione dei dati da elaborare (in questo caso delle bitmap) e gli si spara dentro una finta bitmap "troppo grande" che scrive al di fuori dell'area di memoria allocata per essa su stack o su heap fino a quando non va a sovrascrivere il codice o un indirizzo di ritorno nello stack (sostituendolo con l'indirizzo del codice che si vuole eseguire).
E' una tecnica usata dai malware e dai programmi che "sbloccano" cellulari e tablet.
Ma ripeto, se consideri quanto tempo ci perderesti, fai prima e spendi meno a prendere un tablet economico al di sotto dei 100 euro.

nucarote
27-08-2011, 08:46
Quello a cui mi riferivo era una code injection in ram per inserire proprio codice eseguibile e mandarlo in esecuzione (ma funziona solo se riescia ad individuare qualche punto debole nel firmware e se i programmi eseguibili sono in ram invece che essere eseguiti da una NOR-flash).
Se il codice eseguibile sta in ram, si cerca qualcosa in esso che non fa controlli sulla dimensione dei dati da elaborare (in questo caso delle bitmap) e gli si spara dentro una finta bitmap "troppo grande" che scrive al di fuori dell'area di memoria allocata per essa su stack o su heap fino a quando non va a sovrascrivere il codice o un indirizzo di ritorno nello stack (sostituendolo con l'indirizzo del codice che si vuole eseguire).
E' una tecnica usata dai malware e dai programmi che "sbloccano" cellulari e tablet.
Ma ripeto, se consideri quanto tempo ci perderesti, fai prima e spendi meno a prendere un tablet economico al di sotto dei 100 euro.

Che non sia una cosa facile lo avevo intuito, comunque per l'accesso alla Ram come si procede?

LMCH
27-08-2011, 23:56
Che non sia una cosa facile lo avevo intuito, comunque per l'accesso alla Ram come si procede?

Prepari una "immagine finta" (di solito una in formato .bmp se è supportato, visto che è un formato relativamente semplice) con un header sbagliato ad hoc in modo da provocare un buffer overflow, nell' "immagine finta" avrai infilato il codice binario che vuoi eseguire e lo avrai posizionato dentro i dati dell' "immagine finta" in modo tale che l'esecuzione del codice di decodifica "funzioni male" a causa del buffer overflow (che va a sovrascrivere dati e codice in ram) e continui l'esecuzione nel codice binario inserito nell'immagine.
Concettualmente semplice ma in pratica complicato, specialmente perchè devi capire se c'è qualche bug nel firmware da usare per provocare il buffer overflow.

Ma di solito se hai già modo di analizzare il firmware ed è su flash eprom, fai prima a riscriverlo/modificarlo in modo da supportare l'esecuzione di codice esterno senza dover fare quanto scritto sopra.

Capisci ora perchè era meglio l'altra alternativa ? ;)

nucarote
28-08-2011, 08:46
Prepari una "immagine finta" (di solito una in formato .bmp se è supportato, visto che è un formato relativamente semplice) con un header sbagliato ad hoc in modo da provocare un buffer overflow, nell' "immagine finta" avrai infilato il codice binario che vuoi eseguire e lo avrai posizionato dentro i dati dell' "immagine finta" in modo tale che l'esecuzione del codice di decodifica "funzioni male" a causa del buffer overflow (che va a sovrascrivere dati e codice in ram) e continui l'esecuzione nel codice binario inserito nell'immagine.
Concettualmente semplice ma in pratica complicato, specialmente perchè devi capire se c'è qualche bug nel firmware da usare per provocare il buffer overflow.

Ma di solito se hai già modo di analizzare il firmware ed è su flash eprom, fai prima a riscriverlo/modificarlo in modo da supportare l'esecuzione di codice esterno senza dover fare quanto scritto sopra.


Capisci ora perchè era meglio l'altra alternativa ? ;)

Quello che volevo chiedere è da quali porte è possibile accedere alla RAM e possibilmente alla ROM.
Piccola parentesi sui tablet a basso costo, quali secondo te sono i più affidabili.

LMCH
28-08-2011, 10:57
Quello che volevo chiedere è da quali porte è possibile accedere alla RAM e possibilmente alla ROM.

Dipende dall'hardware del dispositivo.


Piccola parentesi sui tablet a basso costo, quali secondo te sono i più affidabili.

Non ce ne sono. Nel senso che di solito molti di essi condividono un "progetto di riferimento" ma poi i vari produttori OEM fanno una modifica qui e la per risparmiare su qualcosa oppure per "aggiornarli" con più ram, un display migliore, una batteria differente ecc. in base a quel che chiede il cliente che ne ordina un certo quantitativo per poi rivenderli con il suo marchio.
Il sistema migliore è selezionare 2..3 modelli che sembrano interessanti e poi cercare via google sui forum dedicati se ci sono problemi particolari, cosa ci si può far girare, fino a quale versione di Android si può aggiornarli, ecc. ecc.

nucarote
28-08-2011, 18:58
...
Non ce ne sono. Nel senso che di solito molti di essi condividono un "progetto di riferimento" ma poi i vari produttori OEM fanno una modifica qui e la per risparmiare su qualcosa oppure per "aggiornarli" con più ram, un display migliore, una batteria differente ecc. in base a quel che chiede il cliente che ne ordina un certo quantitativo per poi rivenderli con il suo marchio.
Il sistema migliore è selezionare 2..3 modelli che sembrano interessanti e poi cercare via google sui forum dedicati se ci sono problemi particolari, cosa ci si può far girare, fino a quale versione di Android si può aggiornarli, ecc. ecc.

Lo immaginavo grazie. ;)

AnonimoVeneziano
30-08-2011, 15:17
Quello che volevo chiedere è da quali porte è possibile accedere alla RAM e possibilmente alla ROM.
Piccola parentesi sui tablet a basso costo, quali secondo te sono i più affidabili.

Dovresti dissaldare il chip della ROM e riprogrammarlo con un tuo firmware, ma scrivere un firmware per un dispositivo avendo poche conoscenze sulle specifiche dello stesso (e non credo la casa produttrice ne rilasci molte di specifiche) sicuramente non è una cosa facile, a meno che la cornice non usi una piattaforma HW conosciuta e diffusa (come fanno certi router per esempio e per questa ragione ci sono progetti in giro che trasformano routers in mini computer attraverso una mini distribuzione linux) .

Ciao

nucarote
30-08-2011, 15:26
Dovresti dissaldare il chip della ROM e riprogrammarlo con un tuo firmware, ma scrivere un firmware per un dispositivo avendo poche conoscenze sulle specifiche dello stesso (e non credo la casa produttrice ne rilasci molte di specifiche) sicuramente non è una cosa facile, a meno che la cornice non usi una piattaforma HW conosciuta e diffusa (come fanno certi router per esempio e per questa ragione ci sono progetti in giro che trasformano routers in mini computer attraverso una mini distribuzione linux) .

Ciao

Per quanto riguarda i cellulari è "possibile" in qualche modo accedere alla ROM tramite JTAG, e mi chiedevo se si potesse fare qualcosa di analogo per le cornici digitali.

AnonimoVeneziano
30-08-2011, 15:29
Per quanto riguarda i cellulari era possibile in qualche modo accedere alla ROM tramite JTAG, e mi chiedevo se si potesse fare qualcosa di analogo per le cornici.

Beh, se c'è una possibilità del genere in genere non è documentata ed è dipendente dal dispositivo che hai. In genere staccare la ROM e riprogrammarla è l'unico modo "universale" per essere sicuro che la cosa funzioni

nucarote
30-08-2011, 16:09
Beh, se c'è una possibilità del genere in genere non è documentata ed è dipendente dal dispositivo che hai. In genere staccare la ROM e riprogrammarla è l'unico modo "universale" per essere sicuro che la cosa funzioni

Dopo il JTAG staccare la ROM è davvero l'ultima spiaggia.