Newsgroup: it.comp.lang.delphi
Titolo: Salvare una variabile nell'eseguibile

Come posso fare per salvare il valore di una variabile, mettiamo di 20
caratteri, all'interno dell'eseguibile ogni volta che viene avviato?
e ovviamente a richiamare quel valore prima 
grazie ;)

[Love] wrote:

Perche' devi salvarla proprio nell'eseguibile?
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 e ovviamente a richiamare quel valore prima
Dunque c'è da capire se ti interessa farlo obbligatoriamente a run-time.
Una soluzione potrebbe essere, ad esempio, quella di salvare in un file di 
testo la tua variabile e poi successivamente legare questo file come 
"risorsa" dell' eseguibile (con un procedimento esterno)
Diverso sarebbe nel caso in cui tu voglia farlo a run-time. Il s.o. a 
partire dal momento che vi è una immagine del programma (un processo) in 
esecuzione non permette che il file eseguibile che lo ha generato venga 
modificato. Esistono in realtà delle tecniche evolute di programmazione 
Windows che permettono di farlo. Una, se non ricordo male, consiste nel 
chiudere l'handle 4 (che è l'handle che lega l'immagine del file eseguibile 
con il file stesso) ottenendo pertanto lo "scaricamento" del processo dalla 
memoria, ma delegando il controllo ad una DLL precedentemente caricata si 
possono sovrascrivere parti dell' eseguibile (nel tuo contesto per salvare 
una variabile ti basterebbe lo stack).  Ricordo che quando mi documentai 
trovai parecchio materiale interessante a riguardo non ultimo quello dei 
self-deleting executables che utilizzano questa tecnica.
Saluti
--
- Carlo - 

vorrei farlo a runtime.
ad esempio... quando avvio l'applicativo, vorrei poter salvare data e
ora dell'ultimo utente che ha avviato l'applicazione, direttamente
nell'exe.
non volevo usare il registro di sistema ne file ini.

 nell'exe.
[mi quoto]
Perche' devi salvarla proprio nell'eseguibile?
[/mi quoto]
IMHO e' solo una complicazione.


e dove potrei salvarla?
voglio un posto dove la variabile non sia facilmente modificabile, e
non voglio lasciare tracce dell'applicativo

 non voglio lasciare tracce dell'applicativo
Qui c'è quanto ti dicevo. Mi ricordavo meglio di quanto credessi: 
http://www.catch22.net/tuts/selfdel.asp
 -- adattandolo dovresti riuscire nel 
tuo intento.
--
- Carlo -

[Love] wrote:

Quale e' la reale necessita'? Non vedo nessuna utilita' alla modifica
del binario in questo modo.
-- 
I am what I am, I do what I can


 del binario in questo modo.
Generalmente queste tecniche vengono utilizzate da Virus/Spyware et similia 
per scopi ben precisi.
Parlo ovviamente delle tecniche, poi magari quello che deve salvare lui non 
è propriamente una variabile ... ;-)
--
- Carlo -

nono è proprio una variabile.
Mettiamo ad esempio di voler proteggere il proprio eseguibile.
Dopo una certa data, dalla data della prima esecuzione... si
autochiude.
Comunque.. non per essere scontroso.. pero' ...mica ho chiesto
l'utilità :/ ..
accetto volentieri i vostri suggerimenti, ci mancherebbe.. pero'...
Volevo solo sapere come fare a mettere, secondo me, nel il posto più
sicuro dove salvare una data e un nome utente, che rimanga anche se
sposto l'eseguibile da un S.O. all'altro... , o se formatto e
reinstallo l'applicativo.

 reinstallo l'applicativo.
Se reinstalli l'applicativo, cambia l'eseguibile, la "variabile" va a
farsi benedire.
IMHO perdi solo tempo. Utilizza
http://sourceforge.net/projects/tponguard/
 in combinazione con Indy per
una attivazione Internet.


Hai ragione, mi ero dimenticato di dire che come "installazione", in
realtà è solo la copia del file exe, perchè uso solo componenti
standard.
Allora come posso fare per limitare l'uso del mio applicativo dopo 2
mesi dalla data della prima esecuizione, tenendo conto che non
necessita di "installazione", ma tutto l'applicativo è nell'exe ?

 necessita di "installazione", ma tutto l'applicativo è nell'exe
Installando e usando OnGuard di turbopower, o tmxprotector come scritto
molte volte in questo ng, cerca con gg.
ciao!
-- 
Morde. 
FAQ di icld (beta-version): 
http://icld.altervista.org
 
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

ma senza usare programmi esterni?

 ma senza usare programmi esterni?
nn capisco cosa intendi...
se installi ad esempio tmxprotector, hai un componente in piu' in delphi.
Lo aggiungi al tuo form principale, fai le operazioni necessarie sul tipo
di protezione che vuoi applicare, compili e distribuisci l'eseguibile.
Niente di piu' semplice, senza usare tools o tecniche particolari.
Ciao


ok provo :)
ho installato i componenti di OnGuard .. ma anche nella documentazione
c'e' scritto che, anche se puo' causare problemi con altro software,
nel caso in cui la data di sistema venga spostata, l'applicativo
continua ad andare.
Io ho creato il mio applicativo, che formatta dei file TXT, e ho già
inserito la funzione che dopo una data da me prefissata, si
autocancella il file (creando un .bat che cancella l'exe all'uscita).
il problema è che prendo la data di sistema.
io vorrei che anche se la data di sistema è inferiore a quella
dell'ultima esecuizione, il mio eseguibile venisse cancellato.
Per fare cio', non vorrei ricorrere al registro di sistema, in quanto
poi qualcuno potrebbe dirmi di aver "danneggiato il sistema", oppure a
file di testo esterni, che per quanto ben nascosti siano, sono
facilmente rintracciabili e modificabili.
Altrimenti c'e' un modo di criptare un file esterno?
Potrei fare si che se il file non viene trovato.. si autoelimina l'exe,
e in esso, scrivere criptatamente la data dell'ultima esecuzione e
dell'ultimo utente che ha aperto l'applicativo no?
E' complesso?

 E' complesso?
Il tuo modo di ragionare sicuramente si'.. ;-)
Sii piu' preciso: descrivi minuziosamente in che modo il tuo programma deve
bloccarsi o comunque inibire la possibilita' di utilizzarlo ulteriormente.


allora.. riepilogo, spero nel miglior modo possibile :)
Ho creato un programmino che formatta dei file di testo TXT.
Ad esempio, estrae le prime 100 righe (terminate da CR/LF), aggiunge un
progressivo, rendere le righet tutte della stessa lunghezza... etc etc.
Siccome è una prova, e vorrei farla vedere in giro, vorrei proteggere
il mio eseguibile, e non solo.
Io sapevo che: se un programma ad esempio, viene venduto, e poi non
viene pagato, se il programma reca danni ai dati o si blocca e crea dei
danni ad esempio alla rpoduzione, la ditta fornitrice del software puo'
anche esser citat per danni.
Onde evitare cio', partendo dal fatto che non vendo nulla ;) ... anche
per limitare l'uso di versioni vecchie, dopo un certo preiodo, si
autocancellano.
e fino a qui' , il progetto l'ho creato :D
attualmente all'avvio dell'applicativo controllo la data e se è
maggiore della data di creazione (da me impostata) + un mese,
l'eseguiile si chiude e si autocancella., o comunque.. non funziona +.
Se pero' metto sempre indietro la data di sistema.. ovviamente funziona
sempre.
Allora mi son detto: dove posso salvare la data dell'ultima esecuzione
dellì'applicativo? cosi' da effettuare un controllo incrociato.
Se la data attuale è maggiore di quell da me inserita o se è
inferiopre a quella salvata, il programma si deve chiudere e
cancellare, oppure alla chiusura dello stesso, si deve auto eliminare.
Non volevo usare il resgistro per non "sporcare" i sistemi dove viene
eseguito l'applicativo: qualcuno per qualche motivo potrbbe dire che il
mio applicativo ha creato danni modificando il sistema, oppure non
volevo usare file ini, facilmente identificabili e modificabili.
sapevo che si puo' inserire e salvare dei dati all'interno
dell'eseguibile stesso, e cosi', anche se comunque identificabili, ci
vuole qualcuno + in gamba di uno smanettone.
Ora faro' delle ricerche su questo lockbox.
Quello che voglio è che dopo una certa data, il mio eseguibile diventi
inutilizzabile, o meglio ancora, venga eliminato dai computer dove è
stato provato.

 stato provato.
Io ti do' questo suggerimento: fregatene della data, programmini stile
"datecrack" (
http://pifoman.free.fr/cours_cracking/cours_cracking_05.htm
)
oppure (
http://usuarios.lycos.es/godzilua/Datecrack.zip
), permettono di
craccare buona parte di queste protezioni.
Ti consiglio invece di agire sul numero di utilizzi: mettigli una quota di
50 esecuzioni: raggiunte le stesse, il programma non fa piu' queste
elaborazioni e chiede che venga registrato o acquistato sbloccato.
Semplice semplice, vedrai. Non serve architettare e investire tempo e
denaro sulle protezioni piu' sicure al mondo, perche' siamo comunque
consapevoli che tutto e' craccabile: conviene quindi agire imponendo una
forma di controllo che non sia invasiva, deleteria, distruttiva, paranoica.
Ciao!


Ho appena provato cosi':
ho creato un file di risorsa (.RES) contenente la data di inizio, e la
data di fine.
Leggendo questo file.. sono apposto :)
ora mi chiedo.. quanto è semplice modificare un file di risorse
incluso nel mio exe al momento della build dello stesso?
grazie ;)

 incluso nel mio exe al momento della build dello stesso?
molto molto semplice!!!
a meno che l'eseguibile non sia compresso!
--- posted by geoForum on 
http://www.delphiedintorni.it

no, non è compresso :( ...
scusami ... come si fa a modificare un file di risorse integrato
nell'exe?