{linux mint}
ho trovato questa discussione che tratta di un argomento di cui ho bisogno. Il problema è che non riesco a tradurre in pratica quello che viene suggerito, potreste aiutarmi?
http://superuser.com/questions/22603...-specific-task
{linux mint}
ho trovato questa discussione che tratta di un argomento di cui ho bisogno. Il problema è che non riesco a tradurre in pratica quello che viene suggerito, potreste aiutarmi?
http://superuser.com/questions/22603...-specific-task
Cosa hai bisogno di fare esattamente?
Amaro C++, il gusto pieno dell'undefined behavior.
fare in modo che un programma quando "chiede" l' ora al pc la risposta di questo sia sempre la stessa
Allora devi fare come spiegato... devi realizzare una libreria dinamica che esporti le funzioni time(), gettimeofday() e clock_gettime(), fargli restituire il valore che vuoi e usare la variabile d'ambiente LD_PRELOAD per dire al loader dinamico di caricarla per prima e di usare quindi le sue funzioni al posto di quelle "vere" fornite dal sistema.
Amaro C++, il gusto pieno dell'undefined behavior.
Grazie mille
Un' esperto quanto impiegherebbe a farlo? Così da sapere la mole di lavoro che andrei a chiedere all' eventuale...
Cmq se qualcuno vuole darmi alcuni suggerimenti e/o aiuti sarei felicissimo, prevedo nottate di studio per arrivare a concludere qualcosa
20 minuti?
Amaro C++, il gusto pieno dell'undefined behavior.
codice:#include <sys/types.h> #include <stddef.h> /* Ora a cui congelare il tempo (in notazione UNIX epoch) */ const time_t fixedTime=652789800; struct timezone { int tz_minuteswest; /* minutes west of Greenwich */ int tz_dsttime; /* type of DST correction */ }; time_t time(time_t * t) { if(t!=NULL) *t=fixedTime; return fixedTime; } int gettimeofday(struct timeval *tv, struct timezone *tz) { if(tv!=NULL) { tv->tv_sec=fixedTime; tv->tv_usec=0; } if(tz!=NULL) { /* Mi invento un GMT+1 */ tz->tz_minuteswest=60; tz->tz_dsttime=0; } return 0; } int clock_gettime(clockid_t clk_id, struct timespec *tp) { (void)clk_id; if(tp!=NULL) { tp->tv_sec=fixedTime; tp->tv_nsec=0; } return 0; }codice:matteo@teoxubuntu:~/cpp/detourtest$ gcc -O3 -Wall -Wextra -shared timedetour.c -o libtimedetour.so matteo@teoxubuntu:~/cpp/detourtest$ LD_PRELOAD=/home/matteo/cpp/detourtest/libtimedetour.so date sab 8 set 1990, 12.30.00, CEST
Amaro C++, il gusto pieno dell'undefined behavior.
Un pelo migliorato (gestisce correttamente tz in gettimeofday forwardandolo alla funzione originale):
codice:#define _GNU_SOURCE #include <sys/types.h> #include <dlfcn.h> #include <stddef.h> // Ora a cui congelare il tempo (in notazione UNIX epoch) const time_t fixedTime=652789800; struct timezone { int tz_minuteswest; /* minutes west of Greenwich */ int tz_dsttime; /* type of DST correction */ }; // Typedef per il puntatore a funzione per gettimeofday originale typedef int (*gettimeofday_t)(struct timeval *tv, struct timezone *tz); // gettimeofday originale gettimeofday_t gettimeofday_orig = NULL; time_t time(time_t * t) { if(t!=NULL) *t=fixedTime; return fixedTime; } int gettimeofday(struct timeval *tv, struct timezone *tz) { if(tz!=NULL) { if(gettimeofday_orig==NULL) { gettimeofday_orig=(gettimeofday_t) dlsym(RTLD_NEXT, "gettimeofday"); if(gettimeofday_orig==NULL) return -1; } int ret=gettimeofday_orig(NULL, tz); if(!ret) return ret; } if(tv!=NULL) { tv->tv_sec=fixedTime; tv->tv_usec=0; } return 0; } int clock_gettime(clockid_t clk_id, struct timespec *tp) { (void)clk_id; if(tp!=NULL) { tp->tv_sec=fixedTime; tp->tv_nsec=0; } return 0; }codice:matteo@teoxubuntu:~/cpp/detourtest$ gcc -O3 -fPIC -Wall -Wextra -shared timedetour.c -o libtimedetour.so matteo@teoxubuntu:~/cpp/detourtest$ LD_PRELOAD=/home/matteo/cpp/detourtest/libtimedetour.so date sab 8 set 1990, 12.30.00, CEST
Amaro C++, il gusto pieno dell'undefined behavior.
Grazie mille sei stato gentilissimo.
Ma questi codici dove devo inserirli? come? scusa per le continue domande, non ho alcuna esperienza
Il primo è il sorgente di una libreria dinamica in C; incollalo in un editor di testo e salvalo con estensione .c; eventualmente modifica il valore di fixedTime all'inizio (per impostare la data che verrà fornita sempre al programma da ingannare; è un normale timestamp UNIX, ci sono una miriade di siti che ti consentono di generarlo).
A questo punto compila il file da un terminale:
e otterrai così la libreria dinamica (nomefile.so) che dirotta le chiamate a time, gettimeofday e clock_gettime.codice:gcc -O3 -fPIC -Wall -Wextra -shared nomefile.c -o nomefile.so
Quindi, per ingannare il programma, lancialo da console assegnando però prima il percorso della libreria che hai generato alla variabile ambiente LD_PRELOAD:
codice:LD_PRELOAD=/percorso/della/libreria/nomefile.so nomeprogramma
Amaro C++, il gusto pieno dell'undefined behavior.