View Full Version : PER ESPERTI: Utility per azzerare la memoria RAM
ValeriaVitolo
30-05-2005, 10:05
Ciao a tutti,
avrei bisogni di un'utility che cancelli (formatti / azzeri) la memoria ram del PC, ovviamente senza intaccare il sistema operativo: quindi da poter realizzare anche a PC acceso (e senza riavviare ovviamente).
Bisogna svilupparla ad hoc o c'è qualcosa in commercio?
Ovviamente sarebbe meraviglioso se potessi scrivere il codice per farla da sola....
Grazie a tutti, ciao.
RaouL_BennetH
30-05-2005, 10:19
Ciao a tutti,
avrei bisogni di un'utility che cancelli (formatti / azzeri) la memoria ram, ovviamente senza intaccare il sistema operativo.
Bisogna svilupparla ad hoc o c'è qualcosa in commercio?
Ovviamente sarebbe meraviglioso se potessi scrivere il codice per farla da sola....
Grazie a tutti, ciao.
Tecnicamente non so aiutarti granchè :( ma credo che "azzerare" la Ram non sia possibile. Credo solo si possa allocare-deallocare memoria in una certa percentuale, ma portarla a zero credo sia non possibile.
Sul come...non lo so :(
ValeriaVitolo
30-05-2005, 10:23
Mmmmmmm.....
Beh conoscendo quali sono le aree che il Sistema Operativo (per semplicità Windows XP) lascia libere per i dati, credo occorra semplicemente "pulirla" con degli ZERO utilizzando i puntatori.....
O no?
RaouL_BennetH
30-05-2005, 10:29
Mmmmmmm.....
Beh conoscendo quali sono le aree che il Sistema Operativo (per semplicità Windows XP) lascia libere per i dati, credo occorra semplicemente "pulirla" con degli ZERO utilizzando i puntatori.....
O no?
Il fatto è che credo sia impossibile sapere quali sono le aree che utilizza il sistema operativo. Ma attenzione, sono davvero newbie, non prendere per buone le cose che dico :D
lombardp
30-05-2005, 11:55
Mmmmmmm.....
Beh conoscendo quali sono le aree che il Sistema Operativo (per semplicità Windows XP) lascia libere per i dati, credo occorra semplicemente "pulirla" con degli ZERO utilizzando i puntatori.....
O no?
Su sistemi operativi tipo DOS, credo sia fattibile.
Nei sistemi operativi moderni la memoria è gestita in modo protetto, cioè ciascun processo (programma) ha il suo spazio di indirizzamento privato e nessuno lo può toccare. Anche se hai i puntatori alle aree usate dagli altri programmi, il tuo programma non potrà mai fisicamente accederle. Insomma Windows (ma anche gli altri SO moderni) di principio sono fatti per non permettere quello che vuoi fare.
Al limite basta allocare un vettore della stessa dimensione della memoria libera del PC ed inizializzarla, ad esempio, a zero...
Gli altri programmi, probabilmente, verranno swappati sul disco...in ogni caso tutta la memoria libera verrebbe azzerata... Non capisco poi che senso abbia :boh:
ValeriaVitolo
30-05-2005, 16:29
Allora, il sistema operativo protegge aree di RAM, ma quelle dove "operano" processi del S.O. stesso quindi non dati.
Forse occorre un'altra condizione: prima di lanciare questa "fantomatica" utility bisognerebbe chiudere tutte le applicazioni diverse dal S.O..
Ovvero "ricreare" una situazione tipo avvio di XP (appena dopo la formattazione) senza programmi o altro caricato in ram.
Supponendo questa condizione, qualcuno di voi saprebbe realizzare una routine del genere?
Grazie a tutti.
Al limite basta allocare un vettore della stessa dimensione della memoria libera del PC ed inizializzarla, ad esempio, a zero...
Gli altri programmi, probabilmente, verranno swappati sul disco...in ogni caso tutta la memoria libera verrebbe azzerata... Non capisco poi che senso abbia :boh:
è evidente che vuole evitare che qualcuno leggendo la memoria fisica, vada a leggere password e dati privati; tuttavia quello che dice non si può fare, già solo per il fatto che è impossibile "conoscere le zone occupate dal sistema operativo"; Valeria, leggiti qualcosa sul paging e sulla memoria virtuale e capirai il perché.
Su sistemi operativi tipo DOS, credo sia fattibile.
Nei sistemi operativi moderni la memoria è gestita in modo protetto, cioè ciascun processo (programma) ha il suo spazio di indirizzamento privato e nessuno lo può toccare. Anche se hai i puntatori alle aree usate dagli altri programmi, il tuo programma non potrà mai fisicamente accederle. Insomma Windows (ma anche gli altri SO moderni) di principio sono fatti per non permettere quello che vuoi fare.
può anche verificarsi che un puntatore sia valido sia nel contesto del tuo processo che in quello di altri; in tal caso vai ad azzerare la tua memoria anziché quella dell'altro processo; se poi "sfondi" i limiti dei tuoi segmenti e tenti di accedere ad indirizzi senza senso, segmentation fault.
ValeriaVitolo
30-05-2005, 16:32
Beh il fine è proprio quello: evitare che possano essere letti dati ancora in ram.
Cmq so che è fattibile per certo.
BYEZ
hmmm, però a pensarci bene forse soluzioni alternative esistono; dipende anche da quello che vuole fare lei: Valeria, sii più specifica, perché vuoi azzerare la RAM?
Fenomeno85
30-05-2005, 16:38
bhe se è una pwd con md5 o simili la si può rendere difficile da convertire :O
cmq azzera tutta la memoria non è il massimo e non vedo l'utilità
Perchè anche sapendo che c'è la pwd in memoria bisogna anche sapere dove è allocata
~§~ Sempre E Solo Lei ~§~
Beh il fine è proprio quello: evitare che possano essere letti dati ancora in ram.
ok, allora pongo due ipotesi:
a) il processo nella cui memoria risiedono i dati privati è ancora in esecuzione: perlustrare la sua memoria è semplicissimo, e cancellarla anche solo in parte potrebbe provocarne il crash; in teoria un programma ben progettato dovrebbe essere esso stesso a cancellare dati privati quando non sono più necessari.
b) il processo è terminato: se vuoi cancellare dalla memoria le sue pagine effettivamente e definitivamente, non ti resta che lavorare in ring0; però hai la necessità di sapere anche quali erano e dove si trovavano le pagine del processo, quindi ne devi tenere traccia prima che questo termini.
Al limite basta allocare un vettore della stessa dimensione della memoria libera del PC ed inizializzarla, ad esempio, a zero...
Gli altri programmi, probabilmente, verranno swappati sul disco...in ogni caso tutta la memoria libera verrebbe azzerata... Non capisco poi che senso abbia :boh:
altra soluzione: si, si può applicare quello che dici, al limite limitando la dimensione del vettore a qualche decina di megabyte in meno della dimensione complessiva della RAM fisica (altrimenti il SO non c'entra più :p), e poi si può usare VirtualLock; così funziona per forza, a meno che VirtualLock non ritorna FALSE (nel qual caso probabilmente è necessario diminuire ancora la dimensione del vettore).
ValeriaVitolo
30-05-2005, 16:50
Mmmmmm....
Io credo che esista un qualche strumento - metodo - utility - funzione - tale che interrogandola (ovvero interrogando il S.O. stesso) restituisca le aree RAM libere, cioè vuote: ZERI o dati non più in uso.....
Sono convinta di aver letto qualcosa da qualche parte ma non ricordo +....
:(
Altra ipotesi: il sistema operativo protegge i dati del S.O. stesso giusto?
A questo punto è facile: sparare (a) zero in tutte le celle Ram:
- quelle dov'è il S.O. resteranno protette (inaccessibili);
- quelle invece dove c'è altro verranno modificate......
O nO?
ghiotto86
30-05-2005, 17:36
la vedo un po dura perchè come hanno detto altri i pocessi non allocano la memoria in maniera sequenziale qundi non si può sapere quali aree sono dell'o.s o quali di altrri processi.
per l'array il fatto che venga allocato sequenzialmente non mi sembra buona come soluzione.
poi so + niubbo di voi e posso anche aver detto un sacco si str@nza@te :D
ciao.
ti consiglierei di allocare i tuoi dati in maniera dinamica cosicchè regoli tu l'allocazione e la deallocazione.
ciauz
Mmmmmm....
Io credo che esista un qualche strumento - metodo - utility - funzione - tale che interrogandola (ovvero interrogando il S.O. stesso) restituisca le aree RAM libere, cioè vuote: ZERI o dati non più in uso.....
Sono convinta di aver letto qualcosa da qualche parte ma non ricordo +....
:(
o hai visto qualche utility per DOS (facile da realizzare) oppure hai visto quello che io definirei un vero e proprio fenomeno da baraccone dell'informatica, ovvero un programma che piglia i processi uno per uno (snapshot e toolhelp), se li apre (OpenProcess), e si guarda tutte le pagine una per una (VirtualQuery) lolloso si, :D ma non ne vedo molto l'utilità :D
è anche possibile che tu abbia visto un driver che in kernel mode analizza da cima a fondo la memoria lineare, ma ne dubito perché come programma mi sembra non solo assurdo ma anche inutile... :p
Altra ipotesi: il sistema operativo protegge i dati del S.O. stesso giusto?
A questo punto è facile: sparare (a) zero in tutte le celle Ram:
- quelle dov'è il S.O. resteranno protette (inaccessibili);
- quelle invece dove c'è altro verranno modificate......
O nO?
supponendo che tu stia sempre parlando di ring0 (visto che parli di sparare zeri direttamente in spazi lineari calpestando alla grande segmentazione, paginazione, swap del S.O. e tutto quello che ti avevo detto di leggere e che non hai letto manco per sbaglio :)) la risposta è no: secondo te in che modo il sistema operativo dovrebbe proteggere le sue aree di memoria? chiunque ti abbia detto che lo fa doveva essere un magnifico esemplare di scemo del villaggio; :) ti sei mai chiesta cosa provochi le schermate blu?
per l'array il fatto che venga allocato sequenzialmente non mi sembra buona come soluzione.
Invece sì...visto che in questo modo glia tlri programmi swappano... Anzi...forse come ha detto 71104 sarebbe meglio allocarlo di dimensione apri alla dimensione della memoria di sistema meno qalche decina di mega...
Invece sì...visto che in questo modo glia tlri programmi swappano... Anzi...forse come ha detto 71104 sarebbe meglio allocarlo di dimensione apri alla dimensione della memoria di sistema meno qalche decina di mega...
e fare il VirtualLock! è un dettaglio importante :)
e ci tengo anche a precisare che se il processo contenente i dati da cancellare è ancora in esecuzione questa soluzione è perfettamente inutile :)
Chiaro...bisogna premettere che così si azzera il contenuto della memroia libera e non di quelal di altri processi...che appena verrà riswappata in memoria avrà i valori precedenti...
ghiotto86
30-05-2005, 19:42
ci tengo anche a precisare che se il processo contenente i dati da cancellare è ancora in esecuzione questa soluzione è perfettamente inutile :)
ovvio.
per il fatto dell'array secondo me si creano un po di casini per gli altri processi che andrebbero a bottane.
scusa ma posso chiederti na cosa: che cavolo devi proteggere tanto che cancelli persino aree di memoria??
gli altri processi non vanno a gentil pulzelle, vanno in swap :p
per quelli non c'è problema, ed è proprio questo il problema: se il programma la cui memoria contiene i dati da cancellare fa parte di quegli "altri processi", cioè in pratica se sto programma sta ancora girando, la soluzione del blocco gigantesco è inutile; è una soluzione che serve solo a dare una ripulita alla memoria fisica, non virtuale.
poi in effetti sarei molto curioso anche io di conoscere lo scopo finale di tutta sta cosa: si teme forse lo spionaggio? :D
ghiotto86
30-05-2005, 22:11
grazie ho capito 71104 (perchè ti chiami così? :confused: )
cmq hai ragione per il fatto del processo, ed è anche un problema.
scopriranno gli audaci programmatori a scoprire il segreto di valeria? lo sapremo nella prossima puntata :sofico:
lombardp
30-05-2005, 22:57
Mmmmmm....
Io credo che esista un qualche strumento - metodo - utility - funzione - tale che interrogandola (ovvero interrogando il S.O. stesso) restituisca le aree RAM libere, cioè vuote: ZERI o dati non più in uso.....
Forse comincio a capire il tuo problema: dopo la chiusura del programma e conseguente deallocazione della memoria, la memoria usata dal tuo programma contiene ancora dati "sensibili" pur essendo deallocata, per cui temi che riallocandola un processo possa leggerne il contenuto.
Quindi vorresti "sparare" zeri in tutte le aree non usate.
Altra ipotesi: il sistema operativo protegge i dati del S.O. stesso giusto?
A questo punto è facile: sparare (a) zero in tutte le celle Ram:
- quelle dov'è il S.O. resteranno protette (inaccessibili);
- quelle invece dove c'è altro verranno modificate......
O nO?
Da quello che so, la memoria virtuale di Windows (2000, XP) è organizzata in modo che lo spazio di indirizzamento di ogni processo è completamente virtuale. Ciascun processo vede come "virtualmente" disponibile per sé tutto lo spazio di indirizzamento, esattamente 2GB di memoria (su Windows un processo a livello USER può avere max 2GB). In realtà la memoria fisica RAM ha di solito dimensione minore ed è condivisa con altri processi. Tanti processi con 2GB di spazio di indirizzamento sono rimappati in una memoria virtuale, parte della quale risiederà nella RAM fisica e parte sull'hard disk.
Tutto questo per dire che:
Un puntatore con un certo valore numerico, in due processi diversi punterà in generale a locazioni fisiche diverse. Non serve a nulla allocare 2GB di memoria in un processo e azzerarli, perché anche se possibile, sono 2GB confinati al suo spazio di indirizzamento. Cioè non ha nessun effetto sulla memoria degli altri.
Come ha detto 71104, l'unico modo di accedere direttamente alla memoria, è operare a ring 0, in poche parole con un driver che operi con gli stessi privilegi del sistema operativo.
ghiotto86
30-05-2005, 23:04
in poche parole con un driver che operi con gli stessi privilegi del sistema operativo.
e aggiungo che è impossibile con windows (penso)
RAMBOOSTER, altrimenti usa c++ e accedi alla memoria e cancella il cancellabile
-__________-''''''''
ghiotto86
31-05-2005, 00:11
e che ci vuole 71104, ci stavamo perdendo in chiacchere :O :D
Forse comincio a capire il tuo problema: dopo la chiusura del programma e conseguente deallocazione della memoria, la memoria usata dal tuo programma contiene ancora dati "sensibili" pur essendo deallocata, per cui temi che riallocandola un processo possa leggerne il contenuto.
Quindi vorresti "sparare" zeri in tutte le aree non usate.
se le cose stanno così come hai interpretato tu (e cioè se il suo obiettivo è quello di cancellare fisicamente ex-dati sensibili di un processo terminato) allora è sufficiente la soluzione di cionci con le mie precisazioni, e cioè si alloca un blocco gigantesco e lo si inizializza tutto a zero dopo aver fatto un bel VirtualLock; la dimensione del blocco deve essere quella della memoria fisica meno qualche decina di mega (ci sono pezzi del SO che non possono essere swappati: come si fa a swappare il file system, l'IO Manager o il Memory Manager stesso? :p :p :p), e questo con un'ottima probabilità provvederà ad azzerare la memoria fisica (non virtuale: i processi che ancora girano continueranno ad avere i loro dati): si tratta di un vero e proprio wipe della RAM ^^
la chiave del discorso insomma è tutta qui: che devi fare esattamente, Valeria? il programma che ha scritto i dati sensibili, è ancora in esecuzione al momento del wipe oppure no?
e che ci vuole 71104, ci stavamo perdendo in chiacchere :O :D
si, aspetta che raccolgo le spalle da terra... :doh: :D
ValeriaVitolo
31-05-2005, 09:01
WOW quante risposte... grazie a tutti.
Quello che desideravo era un'utility che cancellasse i dati eventualmente (e non certamente) ancora residenti nella memoria del PC, ad applicazione terminata (per applicazione una qualsiasi: anche notepad per intenderci) per motivi di privacy o comunque di sicurezza.
Supponiamo per semplicità che l'applicazione che ha creato / manipolato / letto i dati sia stata chiusa, o meglio addirittura che tutte le applicazioni diverse dal S.O. siano state chiuse.
Premesso che abbiamo escluso il riavvio del pc, questa utility dovrebbe GARANTIRE al 100% la sua funzionalità, ovvero non un byte di dati che possa in qualche modo sfuggire a TERMINATOR.
....
In realtà, per essere proprio ZELANTI e realizzare una soluzione completa del problema (vedi titolo) occorrerebbe pure azzerare il file di swap, buffer di stampanti, ecc.
Ma credo che il primo passo + importante sia quello della Ram.... che se avesse soluzione (e so per certo di si) potrebbe schiudere le porte a programmi + articolati.
BYEZ
P.s. Per cionci & 71104, la routine che avete proposto che forma avrebbe? Cioè è ipotizzabile solo teoricamente perchè troppo complessa?
P.s. Per cionci & 71104, la routine che avete proposto che forma avrebbe? Cioè è ipotizzabile solo teoricamente perchè troppo complessa?
no no, è fattibilissima e semplicissima, solo che ci metti un sacco di tempo ad eseguirla (proporzionalmente a quanto hai di RAM).
ma questo TERMINATOR che hai nominato che è? era una battuta (che non ho capito :confused: ) o un programma?
ghiotto86
31-05-2005, 14:01
forse il nome che avrà il programma se lo farà :D
DanieleC88
31-05-2005, 14:31
Ma credo che il primo passo + importante sia quello della Ram.... che se avesse soluzione (e so per certo di si) potrebbe schiudere le porte a programmi + articolati.
Sinceramente, non credo che ci siano sistemi operativi così poco "saggi" da permettere ai programmi di accedere direttamente alla memoria... tutti i programmi dovrebbe essere confinati nello user space. Credo.
Anche se questo, ovvio, è un parere da profano.
ValeriaVitolo
01-06-2005, 11:33
Quindi....
gettiamo la spugna?
:cry:
Quindi....
gettiamo la spugna?
:cry:
Guarda secondo me ti stai preoccupando per nulla. Realizzare un programma in grado di leggere eventuali informazioni dopo che un'altro è stato deallocato è praticamente impossibile. Ma anche se lo fosse azzerare completamente la memoria ram sarebbe come usare una bomba atomica da qualche megatone per uccidere la zanzara che ti sta dando fastidio.
Se hai i sorgenti del programma che vuoi proteggere basta una memset sui dati "sensibili" prima di deallocarli. Se non li hai puoi sempre chiedere a chi a realizzato il programma ma probabilmente ti dira che non ne vale la pena.
ciao ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.