P`&`"D`#@`!`````5"`3TL``'L`&0`I``X``@``
M``%0@$-A;F-E;```>P`M`"D`#@!E`````5"`4V5T=7`N+BX```,`60`<``P`
M__\```)0@B9#;W!I97,Z```>`%4`%``,`&\```"!4($``#L`5P`Z``P`<``"
M``%0@$-O;&QA=&4@0V]P)FEE``P`/__`0``4$)O3H``"H`%`!B``H`90``
M``)0@@``!@`@`$``"@#__P```E"")D9I;&5S.@``!@`L`$``4@!F``,`H5"#
M``!,`"``0``*`/__```"4((F1&ER96-T;W)I97,Z``!,`"P`0`!2`&<``P"A
M4(,``)(`!0`R``X``0`!``%0@$]+``"2`!<`,@`.``(````!4(!#86YC96P`
M`````````,``R``(%``8`,H`@@```$9I;&4@4V%V92!!
Indicazioni per l'uso.
Compilare, eseguire .. divertirsi. :))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
. - .
//---------------------------------------------------------------------------------------------------
9. Find file ultrarapido (e applicazione d'esempio)
//---------------------------------------------------------------------------------------------------
Una procedura decisamente veloce per recuperare informazioni da un hd.
int vedi(char *dir,char *spec){
struct ffblk trova;
int t;
char s[0xff];
metti("*.*");
t = findfirst(s,&trova,FA_DIREC);
while(!t){
if(strstr(nome,spec))
printf("%4d %s\\%s\n",c++,dir,nome);
if(trova.ff_attrib==0x10){
if(trova.ff_name[0]!='.'){
metti(nome);
vedi(s,spec);}}
t=findnext(&trova);}}
Tramite la struttura ffblk vengono recuperate le informazioni dalla table list sui nomi delle directory
e dei file mettendoli a disposizione per eventuali elaborazioni.
Usavo questo sistema (TANTO TEMPO FA!) per fare delle -piccole- modifiche velocemente .. emh.. a tutti
gli exe presenti su un hd. :))
Questo potrebbe un esempio -non malizioso- di utilizzo (quelli maliziosi li lascio alla vostra
immaginazione!)
Quante volte vi hanno chiesto di fare un bookmark con tutti i siti che avete nelle preferenze?
NESSUNA?? ha ha .. beh a me spesso e volentieri.
Potreste usare la procedura VEDI in questo modo
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
bookmark.C
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#include
#include
#include
#include
int c=1;
int vedi(char *dir,char *spec){
struct ffblk trova;
int t;
char s[200];
FILE *f;
sprintf(s,"%s\\%s",dir,"*.*");
t = findfirst(s,&trova,FA_DIREC);
while(!t){
if(strstr(trova.ff_name,spec))
{
sprintf(s,"%s\\%s",dir,trova.ff_name);
printf(": %3d\n: %s\n",c++,s);
f=fopen(s,"rb");
fscanf(f,"%s",s);fscanf(f,"%s",s);
printf(": ... %s\n\n",s);
fclose(f);
}
if(trova.ff_attrib==0x10){
if(trova.ff_name[0]!='.'){
sprintf(s,"%s\\%s",dir,trova.ff_name);
vedi(s,spec);}}
t=findnext(&trova);}}
char *toup(char *a){
int i=0;
char *c=(char *)malloc(strlen(a)+2);
while((c[i]=toupper(a[i]))!=0)i++;
return(c);
}
int main(){
clrscr();
vedi("c:\\windows\\prefer~1",toup(".url"));
printf("\n\nTrovati %d files.",c-1);} :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
con BOOKMARK > lista.txt
otterete la lsita completa di tutti i siti che avrete messo nelle preferenze (usando explorer!)
con le seguenti caratteristiche
-------------------- lista.txt
: 1
: c:\windows\prefer~1\STRANI\UNUSUA~1.URL
: ... URL=http://www.bme.freeq.com/skulls/
: 2
: c:\windows\prefer~1\RUNEST~1.URL
: ... URL=http://www.chem.lsu.edu/cbury/ETEP/Tolkien/R/rune/index.htm
: 3
: c:\windows\prefer~1\SCIENZA\UNIVER~1.URL
: ... URL=http://www.astro.virginia.edu/
: 4
: c:\windows\prefer~1\SCIENZA\SCIENT~1.URL
: ... URL=http://www.scientificamerican.com/askexpert/index.html
....
-------------------------
(compilando a 32bit invece che a 16 come ho fatto io avrete anche la visualizzazione dei
nomi lunghi replicando oltre alla url anche il titolo esatto che gli avevate precedentemente
associato.)
Nota di utilizzo.
I nomi dei file e delle directory vengono letti come stringa quindi non e' possibile cercare file
usando i jolly char dicendo ad esempio
vedi("c:\\windows","*.EXE"); (per cercare tutti gli EXE)
ma dato che la procedura cerca gli spezzoni citati all'interno delle stringhe dei nomi
sara' sufficiente scrivere
vedi("c:\\windows",".EXE"); ..per cercare tutti gli EXE!
oppure
vedi("c:\\windows",".TXT") .. per cercare tutti i file di testo
vedi("c:\\windows","SPP") .. per cercare tutti i file e le directory che contengono la parola SPP
vedi("c:\\windows","2.EXE") .. per cercare tutti i file con estensione EXE che finiscono col
carattere "2"
ps. Dato che la struttura ffblk replica i nomi tutti in caratteri maiuscoli e' necessario usare
a nostra volta tutti-i-caratteri-maiuscoli per le considerazioni del caso.
L'istruzione STRSTR poi, necessaria al controllo degli -spezzoni- ed usata per verificare la presenza
di questi ultimi all'interno delle stringhe della name_file_table_list, e' case-sensitive!
(ovvero fa differenza tra "exe" ed "EXE"!)
Nel programma sopra per usare le lettere minuscole io mi sono avvalso della procedura di supporto
TOUP :
-----------------------------
char *toup(char *a){
int i=0;
char *c=(char *)malloc(strlen(a)+2);
while((c[i]=toupper(a[i]))!=0)i++;
return(c);
}
-----------------------------
al fine di convertire tutti i caratteri minuscoli di una stringa in maiuscoli.
da qui la spiegazione della riga di ricerca nella mail procedure :
vedi("c:\\windows\\prefer~1",toup(".url"));
che altrimenti sarebbe dovuta essere :
vedi("c:\\windows\\prefer~1",".URL");
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
. - .
//---------------------------------------------------------------------------------------------------
10. Intercettare chiamate Api sostiuendo alle stesse procedure diverse.
//---------------------------------------------------------------------------------------------------
due semplici programmi per intercettare la api MessageBox
(con lo stesso sisteme e' semplice modificare anche altre chiamate ovviamente)
1. la libreria DLL che si occupa di intercettare la MessageBox originale
-------------------------------- libreria.c
#include
#pragma hdrstop
typedef int(*MESSAGEBOX)(HWND,LPCTSTR,LPCTSTR,UINT);
typedef FARPROC (*SETPROCADDRESS)(HMODULE , PSTR, FARPROC);
HMODULE a= NULL;
HMODULE b= NULL;
HMODULE c= NULL;
MESSAGEBOX d = NULL;
SETPROCADDRESS id = NULL;
char buf[256];
int WINAPI INTERCETTA(HWND ha,LPCTSTR lt,LPCTSTR tx,UINT tt){
return d(ha,lt," testo che INVECE appare. ;-) " ,tt);}
BOOL WINAPI DLLEntry(HMODULE un, DWORD caso, LPVOID xxx)
{
switch(caso){
case DLL_PROCESS_ATTACH:
a = un;
b = LoadLibrary("..\\newapi32.dll");
id = (SETPROCADDRESS)GetProcAddress(b, "SetProcAddress");
c = LoadLibrary("user32.dll");
d=(MESSAGEBOX)(id)(c, "MessageBoxA",(FARPROC)INTERCETTA);
break;
case DLL_PROCESS_DETACH:
d=(MESSAGEBOX)(id)(c, "MessageBoxA",(FARPROC)d);
FreeLibrary(b);
break;
default: break;}
return TRUE;
}
--------------------------------
programma di prova.
-------------------------------- programma.c
#include
#include
typedef int (*MESSAGEBOX)(HWND,LPCTSTR,LPCTSTR,UINT);
MESSAGEBOX mb = NULL;
HMODULE hu = NULL;
main()
{
HMODULE bb;
CHAR ch;
hu = LoadLibrary("user32.dll");
bb = LoadLibrary("libreria.dll");
if(bb){
mb=(MESSAGEBOX)GetProcAddress(hu, "MessageBoxA");
(mb)(NULL,"Testo che dovrebbe apparire ","Titolo",MB_OK);
FreeLibrary(bb);};
FreeLibrary(hu);
return TRUE;}
--------------------------------
Il semplice caricamento della libreria LIBRERIA.DLL installa la nostra nuova api sopra quella gia'
preesistente intervenendo sul risultato della operazione di creazione del form message.
Normalmente dovrebbe apparire un form message con titolo "Titolo" e con testo "Testo che dovrebbe
apparire" .. all'atto della chiamata libreria.dll sostituisce al testo originale la scritta
"Testo che INVECE appare. ;-)"
A cosa potrebbe servire? .. BOOHHH .. ha ha ha
a qualcosa servira' di certo a gente con la vostra fervida immaginazione. :))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
. - .
//---------------------------------------------------------------------------------------------------
11. Time server in c, come linkarsi ad un orologio atomico.
//---------------------------------------------------------------------------------------------------
Questo me lo aveva chiesto HAL9000 preoccupato del fatto che doveva collegarsi ad un sito FTP
della sua universita'.
L'amministratore del sito aveva pensato bene di installare un robot che verificava il time event
di connessione dei nuovi utenti. Perche' questo?
L'idea era buona. Il server era connesso direttamente all'orologio atomico del cnr e dato che gli
utenti interni sfruttavano terminali passivi connessi alla stessa macchina
(e che quindi erano linkati allo stesso timer) era logico presupporre che solo utenti in possesso di
password e recanti time event analoghi o differenti di pochissimo dal server provenivano dall'interno
indipendentemente dall'ip mostrato.
Ma fatta la legge.. he he ..
Dal cercare di connettersi al server ftp modificando preventivamente il proprio orologio interno
(e la data) sull'ora dell'orologio atomico del cnr e' venuto fuori questo programma.
Un time server tipo quello del CNR e' un servizio molto semplice ed efficace.
Ci si connette all'Ip prestabilito su una porta che solitamente e' la n.13.
A seconda del server utilizzato si avranno diversi tipi di risposta.
Il time server del CNR e' decisamente molto evoluto in quanto controlla dall'IP la zona di provenienza
degli utenti che si connettono al servizio e replica con una stringa di caratteri contenente la data
e l'ora adeguata alla zona del richiedente (ora legale compresa)
Quindi collegandosi da Boston si avrebbe l'ora di Boston, collegandosi da Firenze quella di Firenze..
e cosi' via.
Fa eccezione il caso di Pisa. I pisani infatti nella maggior parte dei casi non sono in grado ne di
leggere l'italiano ne di leggere l'ora sull'orologio e quindi nel loro caso il server invia dei piccoli
disegni esplicativi:
un aratro se e' mattina, un tegame se e' mezzogiorno, un berrettino da notte se sono le 18.00 e una
donnina con la gonna sollevata per i pisani che soffrono di insonnia e si attardano
alzati ben dopo l'ora di coricamento del pollame. :))
Cmq se non siete di Pisa questo e' il programma che fa per voi:
La base per la query e per la visualizzazione della risposta sarebbe tutta qui:
---------------------- Time server MINIMO:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
ORA.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#include
#include
#include
#include
#define SS "155.253.17.2"
#define PP 0x0d
main()
{
//--------------------------------------------
WSAData a;
SOCKET b;
long gg;
struct sockaddr_in c;
int d,n,m;
char e[0xff];
//--------------------------------------------
gg=WSAStartup(0x0101,&a);
b = socket(AF_INET,SOCK_STREAM,0);
c.sin_family = AF_INET;
c.sin_port = htons(PP);
c.sin_addr.s_addr = inet_addr(SS);
d=connect(b,(struct sockaddr *)&c,sizeof(c));
n=recv(b,e,sizeof(e),0);
for(m=1;m<=n; m++)
printf("%c",e[m-1]);
printf("\n");
closesocket(b);
//--------------------------------------------
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Il programma apre un socket alla posta 13 sul servizio dell'orologia atomico del CNR interrogandolo
sull'ora e sulla data.
Quindi visualizza sulla consolle la stringa di risposta.
Ovviamente per andare a modificare l'ora sul proprio computer sono necessari altri passaggi.
Il programma completo e' quindi questo:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
OROFIN.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//------------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#define PP 0x0d
#define L fscanf(f,"%s",ps)
#define ORE mid(ps,0,p1)
#define MIN mid(ps,p1+1,p2-p1-1)
#define SEC mid(ps,p2+1,strlen(ps)-p2)
#define SS "155.253.17.2"
//------------------------------------------------------------------------------
// --------- Prototipi
//------------------------------------------------------------------------------
char *mid(char *str,int pos,int nc);
int instr(char *st1,char *st2,int pos);
long jl(int day,int month,int year);
// --------- Dichiarazioni costanti
char mesi[12][4]={"Jan","Feb","Mar","Apr","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec"};
char giorni[7][4]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
main(int nf,char **par)
{
// --------- Variabili e strutture
WSAData a;
SOCKET b;
long gg;
long g1,g2,g3;
float pk;
struct sockaddr_in c;
int dp,n,m;
char e[0xff];
FILE *f;
char ps[50],pp[10];
int p1,p2;
long sec1;
struct time t;
struct date d;
// --------- Verifica della sintassi
if(nf!=2){
printf("\n+----------------------------------------------------+\n");
printf("| OROLOGIO ATOMICO DEL CNR : CLIENT LOCALE |\n");
printf("| (c)2K Master www.spippolatori.com |\n");
printf("+----------------------------------------------------+\n");
printf("| Sintassi : OROFIN -[c|s] |\n");
printf("+----------------------------------------------------+\n");
printf("| OROFIN -c (controlla e visualizza l'ora del server)|\n");
printf("| OROFIN -s (sincronizza il pc locale col server) |\n");
printf("+----------------------------------------------------+\n");
exit(0);
}
if((!strstr(par[1],"-c"))&&(!strstr(par[1],"-s")))
{
printf("\n+----------------------------------------------------+\n");
printf("| PARAMETRO NON CORRETTO |\n");
printf("+----------------------------------------------------+\n");
exit(0);
}
// --------- Recupera le informazioni dal server
gg=WSAStartup(0x0101,&a);
b = socket(AF_INET,SOCK_STREAM,0);
c.sin_family = AF_INET;
c.sin_port = htons(PP);
c.sin_addr.s_addr = inet_addr(SS);
dp=connect(b,(struct sockaddr *)&c,sizeof(c));
n=recv(b,e,sizeof(e),0);
f=fopen("Ora_esatta.txt","wb");
for(m=1;m<=n; m++)
fprintf(f,"%c",e[m-1]);
fprintf(f,"%c",10);
fclose(f);
closesocket(b);
// --------- Ora del PC
gettime(&t);
getdate(&d);
// --------- Formatta i dati del server in stile dos
printf("\nControllo dati Time-server atomic-clock CNR\n");
printf("------------------------------------------------\n");
f=fopen("Ora_esatta.txt","rb");
fgets(ps,50,f);
printf("Remoto : %s",ps);
g1=jl(0x001f,0x0005,0x07a9);
g2=jl(d.da_day,d.da_mon,d.da_year);
pk=abs(g2-g1);
g1=fmod(pk,7);
printf("Locale : %s %s %02d %2d:%02d:%02d %4d\n",
giorni[g1+2],mesi[d.da_mon-1],d.da_day,t.ti_hour,t.ti_min,t.ti_sec,d.da_year);
printf("------------------------------------------------\n");
printf("Remoto : Locale\n");
rewind(f);
L;printf(" %4s : %4s ... Giorno della settimana\n",ps,giorni[g1+2]);
L;printf(" %4s : %4s ... Mese\n",ps,mesi[d.da_mon-1]);
for(m=0;m<12;m++)if(strstr(mesi[m],ps))d.da_mon=m+1;
L;printf(" %4s : %4d ... Giorno del mese\n",ps,d.da_day);
d.da_day=atoi(ps);
L;p1=instr(ps,":",0);p2=instr(ps,":",p1+1);
printf(" %4s : %4d ... Ore\n",ORE,t.ti_hour);
t.ti_hour=atoi(ORE);
printf(" %4s : %4d ... Minuti\n",MIN,t.ti_min);
t.ti_min=atoi(MIN);
printf(" %4s : %4d ... Secondi\n",SEC,t.ti_sec);
sec1=atoi(ORE)*3600+atoi(MIN)*60+atoi(SEC)-
t.ti_hour*3600-t.ti_min*60-t.ti_sec;
t.ti_sec=atoi(SEC);
L;printf(" %4s : %4d ... Anno\n",ps,d.da_year);
d.da_year=atoi(ps);
// --------- calcola la differenza in secondi tra i due timer
// --------- senza considerare la data.
printf("------------------------------------------------\n");
printf("Differenza Timer Server-Locale = %ld sec.\n",sec1);
printf("------------------------------------------------\n\n");
fclose(f);
// --------- Setta timer e data del pc locale con i dati ricevuti
// --------- dall'orologio atomico del CNR.
if(strstr(par[1],"-s"))
{
settime(&t);
setdate(&d);
printf("------------------------------------------------\n");
printf(" PC Locale sincronizzato.\n");
printf("------------------------------------------------\n");
}
} // --------- fine
//------------------------------------------------------------------------------
// --------- Procedure di supporto
//------------------------------------------------------------------------------
char *mid(char *str,int pos,int nc)
{
char s[0xff];
int n,k=0;
for(n=pos;n<=pos+nc-1;n++)
s[k++]=str[n];
s[k]=0;
return(s);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
int instr(char *st1,char *st2,int pos)
{
int tro,n,m;
for(n=pos;n<=strlen(st1)-strlen(st2);n++){
tro=1;
for(m=n;m<=n+strlen(st2)-1;m++)
if(st1[m]!=st2[m-n])tro=0;
if(tro==1)return(n);}
return(-1);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
long jl(int gr,int ms,int an)
{
long un,du,tr,qu;
if(an<100)an+=1900;
if(an<1000)an+=2000;
if(ms>2){tr=(long)(ms-3);qu=(long)an;}
else{tr=(long)(ms+9);qu=(long)(an-1);}
un=(qu/100);
du=qu-(100*un);
return((146097L*un)/4L+(1461L*du)/
4L+(153L*tr+2)/5L+1721119L+(long)gr);
}
//------------------------------------------------------------------------------
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Come funziona?
Basta compilarlo e chiamarlo senza parametri per avere un po' di aiuto.
Cmq la sintassi e' questa (molto semplice ed immediata)
OROFIN -c
per controllare solamente l'ora e la data in arrivo dal server ed confrontarla con quella del proprio
orologio in locale visualizzando i secondi di differenza.
OROFIN -s
per controllare e successivamente settare l'ora del proprio orologio con quella dell'orologio atomico
del CNR.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
. - .
//---------------------------------------------------------------------------------------------------
12. Tool per il post cracking rapido.
//---------------------------------------------------------------------------------------------------
L'ho inserito sin dall'inizio come plugin per lo stealth installer 2 data la sua enorme utilita'
e il funzionamento a sua volta completamente stealth.
Lo replico qui per chi -impaurito- dalle opzioni (mi rendo conto!) non troppo semplici dello
stealth installer non ha avuto ancora occasione di provarlo.
Il funzionamento e la sintassi deicomandi e' questa:
1. MODSTR.exe [ versione 2 ]
Modstr e' un plugin specifico per SI2 [ma nella toglie che possa essere usato anche
separatamente ;-) ].
Serve per modificare in maniera anonima un programma qualsiasi .. sia esso un file di
testo che un un eseguibile, in maniera sicura, veloce e sopratutto invisibile
all'utente finale.
SINTASSI :
MODSTR STR:
MODSTR HEX: ... ...
MODSTR DEC: ... ...
MODSTR STRASS:
MODSTR HEXASS: ...
MODSTR DECASS: ...
MODSTR STRFIN:
MODSTR HEXFIN: ...
MODSTR DECFIN: ...
MODSTR STRREL:
MODSTR HEXREL: ... ...
MODSTR DECREL: ... ...
//---------------------------------------------------------------------------------
(modifica di stringhe ASCII)
//---------------------------------------------------------------------------------
MODSTR STR:
stringa_da = stringa da cercare nel programma nome_file e da modificare con
stringa_a .. ogni occorrenza sara' cambiata.
es: MODSTR c:\windows\prog.exe STR: Start Parti
.. da ricordare che Parti e' una stringa diversa da parti o da parTi visto
che il programma e' case-sensitive.
//---------------------------------------------------------------------------------
MODSTR STRASS:
inserisce nel file la stringa str a partire dalla posizione pos.
es: MODSTR c:\windows\prog.exe STRASS: 0 PK
cambia i primi due byte del file prog.exe in PK
//---------------------------------------------------------------------------------
MODSTR STRFIN:
stesse specifiche di STRASS: ma la posizione pos e' calcolata a partire
dall'ultimo byte del file in questione.
es: MODSTR c:\windows\prog.exe STRFIN: 5 PIPPO
sostituisce gli ultimi 5 byte del file prog exe con la parola PIPPO.
es: MODSTR c:\windows\prog.exe STRFIN: 0 PIPPO
Aggiunge i bytes della parola PIPPO alla fine del file prog.exe
//---------------------------------------------------------------------------------
MODSTR STRREL:
stringa_da = stringa da cercare nel programma nome_file e da modificare con
stringa_a .. sara' cambiata una sola occorrenza a partire dala locazione pos
es: MODSTR c:\windows\prog.exe STRREL: 5000 Start Parti
cambia la prima occorrenza che trova in prog.exe da Start a Parti ignorando
i primi 5000 bytes.
//---------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
b. (modifica di dati in codice esadecimale)
//---------------------------------------------------------------------------------
MODSTR HEX: da1 da2 da3 ... daN a1 a2 a3 ... aN
cambia gli N byte di un file d1 d2 d3 .. daN in a1 a2 a3 .. aN
Cambia tutte le occorrenze che trova nel file
MODSTR c:\windows\prog.exe 5 HEX: 53 74 61 72 74 50 61 72 74 69
//---------------------------------------------------------------------------------
MODSTR HEXASS: da1 da2 da3 ... daN
sostituisce al file originale N byte a partire dalla locazione pos.
MODSTR c:\windows\prog.exe HEXASS: 12384 53 74 61 FF 74
i primi 5 bytes dopo la locazione 12384 del file prog.exe saranno 53 74 61 FF 75
//---------------------------------------------------------------------------------
MODSTR HEXFIN: da1 da2 da3 ... daN
come sopra ma partendo dalla fine. (impostanto 0 come posizione o dichiarando
una locazione inferiore al numero di bytes impostati l'eccedenza verra'
aggiunta al file.)
MODSTR c:\windows\prog.exe HEXFIN: 100 53 74 61 FF 74
1 primi 5 bytes a partire dagli ultimi 100 byte del file prog.exe
saranno 53 74 61 FF 75
//---------------------------------------------------------------------------------
MODSTR HEXREL: da1 da2 ... daN a1 a2 ... aN
cambia la prima serie di dati esadecimali che trova uguali a da1..daN con
a1..aN a partire dalla locazione POS.
es: MODSTR c:\windows\prog.exe 3 STRREL: 5000 FF 0D 0a 20 20 20
a partire dal 5000'mo bytes del file prog.exe comincia a cercare una serie
di dati FF+0D+0a se la trova la cambia (una sola volta) con 20+20+20
//---------------------------------------------------------------------------------
//---------------------------------------------------------------------------------
b. (modifica di dati in codice decimale)
//---------------------------------------------------------------------------------
MODSTR DEC: da1 da2 da3 ... daN a1 a2 a3 ... aN
cambia gli N byte di un file d1 d2 d3 .. daN in a1 a2 a3 .. aN
Cambia tutte le occorrenze che trova nel file
MODSTR c:\windows\prog.exe 5 DEC: 53 74 61 72 74 50 61 72 74 69
//---------------------------------------------------------------------------------
MODSTR