• // Code source : crack en C++ \\

    //---------------------------------------- Licence ------------------------------------------
    //
    //Auteur : Pifoman
    //Email : pifoman@yahoo.com
    //Adresse site : http://crackinfrance.free.fr
    //Url redirection : www.geocities.com/mitonnes
    //Date source : 28/09/2004
    //Version source : 1.1
    //Langage : C++
    //Compilateur : dev C++ 4 build 10/09/2000 (gratuit)
    //Adresse téléchargement : http://www.telecharger.com ou http://www.bloodshed.net/devcpp.html
    //Compilation : Windows XP édition familiale
    //Tests : Windows XP édition familiale / Windows 98
    //Type licence : libre. Vous pouvez copier et distribuer cette source
    // si vous laissez les lignes concernant la licence.
    // //------------------------------------------------------------------------------------------- //------------------------------ Instructions de compilation -------------------------------- // // Avant compilation du code // // 1/ Ouvrez STARTCLN.EXE dans Resource Hacker (version 3.4) // Faites action->Enregistrer toutes les ressources pour récupérer l'icône du programme Start clean // // 2/ Définissez un nouveau projet vide dans dev c++ // File->New Project->Empty Project // // 3/ Définissez un répertoire de travail au lancement de DevCpp.exe (dev c++) // Par exemple C:/Documents and Settings/inconnu/Bureau/Start Clean/ // // 4/ Copiez cette page (CTRL A CTRL C) dans Untitled1 (le fichier ouvert qui est vide) // // 5/ Définissez le fichier de resources // Vous devez définir un fichier de ressources dans lequel vous spécifiez l'icône à utiliser et le chemin du fichier info.htm // Ce fichier s'appelle par défaut Rsrc.rc et vous y accéder dans le menu Project->Edit Resource File de dev c++. // Copiez le contenu suivant en adaptant le chemin (supprimez les // devant 500 et texte) // // 500 ICON "C:/Documents and Settings/inconnu/Bureau/Start Clean/icon.ico" // TEXTE BINARY "C:/Documents and Settings/inconnu/Bureau/Start Clean/infos_original.htm" // // 6/ Cocher l'option "Do not create a console" dans Project->Project option // // 7/ Compilez et lancez par CTRL F10 // //------------------------------------------------------------------------------------------- //---------------------------- Compression de l'exécutable compilé -------------------------- // // 1/ Après compilation avec dev c++ vous obtenez Project 1.exe // 2/ Téléchargez UPX (j'utilise la version 0.72) sur http://www.exetools.com/compressors.htm // 3/ Mettez upx.exe dans votre répertoire de travail // 4/ Créez un fichier compress.bat dans votre répertoire de travail (enlevez les //) // // @echo off // del Crack.exe // upx -9 -oCrack.exe "Project 1.exe" // echo Crack pour Start Clean v1.2>file_id.diz // pause // // 5/ Double-cliquez sur compress.bat // 6/ Votre crack est maintenant de taille réduite (vous divisez la taille du crack par 4) // 7/ Vous pouvez le zipper et le diffuser sur internet :) // //------------------------------------------------------------------------------------------- //------------------------------------- Rendu graphique -------------------------------------

    <script type="text/javascript">document.write("")</script>

    //-------------------------------------------------------------------------------------------- //--------------------------------------- Code source ---------------------------------------- //Inclusion des bibliothèques #include <windows.h> #include <stdio.h> // pour sprintf //Déclaration des fonctions (autres que winmain) //Ici c'est inutile car winmain est à la fin du fichier //Quand on entre dedans il connait les fonctions définies avant puisque le fichier est lu de haut en bas // Variables globales char * nom_application = "Start Clean v1.2"; char * titre_application = "Crack pour Start Clean v1.2"; char cle_registre[] = "Start Clean"; char adresse_site_editeur[] = "http://www.nom_editeur.com"; char adresse_site_pifoman[] = "http://www.geocities.com/mitonnes/"; char adresse_mail[] = "pifoman@yahoo.com"; char titre_mail[] = "Remarques sur votre crack "; char corps_mail[] = "Bonjour"; char * date_crack = "24/09/2004"; char * date_prog = "20/05/1999"; char * fichier_infos = "infos.htm"; char * titre_boite_dialogue = "Sélectionner le fichier"; // Dimensions long largeur_fenetre = 330; long hauteur_fenetre = 270; long ordonnee_edit = 70; long ordonnee_static1 = 35; long ordonnee_static2 = ordonnee_static1+20; long ordonnee_static3 = ordonnee_static2+20; long ordonnee_static4 = ordonnee_static3+20; long ordonnee_static5 = ordonnee_static4+20; long ordonnee_static6 = ordonnee_static5+20; long ordonnee_static7 = ordonnee_static6+20; long abscisse_text_1 = 50; long abscisse_text_2 = 185; long ordonnee_checkbox = 160; long ordonnee_bouton = 190; long hauteur_bouton = 23; long largeur_bouton = 60; RECT titre = {0,10,largeur_fenetre,23}; //left,top,right,bottom RECT bienvenue = {abscisse_text_1,ordonnee_static2,abscisse_text_1 +80,ordonnee_static2+20}; //left,top,right,bottom RECT auteur = {abscisse_text_2,ordonnee_static2,abscisse_text_2 + 80,ordonnee_static2+20}; //left,top,right,bottom RECT icone = {largeur_fenetre * 85 / 100,35,largeur_fenetre * 85 / 100 +16 , 35+16}; //16x16 = dimension icône long point_gauche_fenetre = (GetSystemMetrics(SM_CXFULLSCREEN)-largeur_fenetre)/2 ; // On centre horizontalement la fenêtre du crack au lancement long point_haut_fenetre = (GetSystemMetrics(SM_CYFULLSCREEN)-hauteur_fenetre)/2 ; // On centre verticalement la fenêtre du crack au lancement bool checkbox = true; // Etat du bouton checkbox 1 par défaut (true = coché) bool verifier_integrite = true; //Paramétrages de l'application //Tableau des nom représentatifs des fichiers char * nom_fichiers[] = { "Start Clean v1.2", }; //Tableau des noms de fichiers exécutables char * liste_fichiers[] = { "STARTCLN.EXE", }; //Tableau des réglages des filtres sur la sélection des fichiers quand on cherche le programme à craquer char * liste_filtres[] = { "Start Clean v1.2 (STARTCLN.EXE)\0STARTCLN.EXE\0\0", }; //Tableau des modifications à effectuer sur le programme //Tableau structuré avec offset / valeur long matrice0[][5] = { {0x5DE,0x50}, {0x5DF,0x90}, {0x5E0,0x90}, {0x5E1,0x90}, {0x5E2,0x90}, }; //Tableau des taille des fichiers long taille_fichiers[] = { 31744, }; //Tableau des tailles des matrices long taille_matrices[] = {5}; //Somme des octets du fichiers pour vérifier l'intégrité long somme_octets[] = { 2151373, }; //Numéro du fichier à craquer (si on a une liste). Ici on n'a qu'un fichier) int numero_fichier_a_craquer=0; //Pour le debug : demande l'affichage de la somme des octet du fichier sélectionné bool afficher_somme=0; //Fin des paramétrages de l'application HWND hwnd; // Pointeur vers notre fenêtre
    HWND hwndButton1; // 1 ier bouton
    HWND hwndButton2; // 2 ieme bouton
    HWND hwndButton3; // 3 ieme bouton
    HWND hwndCheckBox1; // 1 iere boite à cocher



    char chemin_exe[100]; char chaine[100]; char chaine2[100]; char chemin_nom_exe[100]; char res[100]; HICON hBmp; RECT rc,rc2; HINSTANCE hThisInstance; // Déclarations nécessaires pour le choix de la police HDC hdc; LOGFONT lf; HFONT hfont; HFONT hfontOld; char f[32]={"Courier New"}; // Type de la police choisie /***********************************************************
    * *
    * Les fonctions *
    * *
    ***********************************************************/





    // Fonction qui ouvre le site web donné dans la variable adresse (adresse_site_editeur ou adresse_site_pifoman) // Retour : aucun mais ouvre la page web demandée du site dans le navigateur void site(char adresse[], bool mon_site) { if (mon_site) {sprintf(adresse,"%s?Crack pour %s",adresse,nom_application);} ShellExecute(NULL,"open",adresse,NULL,NULL,SW_SHOWNORMAL); } // Fonction qui affiche les infos // Retour : aucun void infos() { FILE * pFile = fopen(fichier_infos,"wb"); //On copie la ressource dans un fichier infos.htm que l'on ouvre ensuite if (pFile!=NULL) { static HINSTANCE hGlobInstance = NULL; static HGLOBAL hresource; static char *ptexte; // On charge une ressource binaire enregistrée sous le nom TEXTE dans Rsrc.rc hresource=LoadResource(hGlobInstance,FindResource(hGlobInstance,"TEXTE","BINARY")); ptexte=(char*) LockResource(hresource); fputs(ptexte,pFile); fclose(pFile); ShellExecute(NULL,"open",fichier_infos,NULL,NULL,SW_SHOWNORMAL); } else { MessageBox(NULL, "Impossible de créer le fichier d'informations.", nom_application, MB_OK|MB_ICONERROR); } } // Fonction qui envoie un mail au destinataire désigné par adresse_mail // Retour : aucun void mail() { sprintf(chaine, "mailto:%s?subject=%s%s&body=%s",adresse_mail,titre_mail,nom_application,corps_mail); ShellExecute(NULL,"open",chaine,NULL,NULL,SW_SHOWNORMAL); } // Fonction d'extraction du chemin de désinstallation de l'éxécutable à partir de la clé trouvée dans le registre // Fonction utilisée par GetFileAttributes (et lire_registre qui n'est pas utilisée) // Retour : chemin de l'éxécutable formaté char * extraire(char * ch) { int k=0; int debut=0,fin=0,guillemet_suivant=1; for (int i=0 ;ch[i] ;i++) { //if (ch[i]==' ') {debut=i+1;} //if ((ch[i]=='"' || ch[i]=='\'') && guillemet_suivant) {debut=i+1;guillemet_suivant=0;} //if (ch[i]=='\\') {fin=i;} if (ch[i]=='\\' || ch[i]=='/') {fin=i;} } for (int i=debut ;i<=fin ;i++) { res[k]=ch[i]; k++; } return res; } // Fonction qui lit le chemin d'accès de l'application exécutable depuis la clé uninstall du registre // Retour : valeur du chemin // Statut : non utilisée dans le programme; je la laisse pour information char * lire_registre() { HKEY hKey; DWORD dwLen = 255; char dwKeyEn[255]={'\0'}; sprintf(chaine,"SOFTWARE\\Microsoft\\windows\\CurrentVersion\\Uninstall\\%s",cle_registre); RegOpenKey(HKEY_LOCAL_MACHINE,chaine,&hKey); RegQueryValueEx(hKey,"UninstallString", NULL, NULL, (LPBYTE)&dwKeyEn, &dwLen); RegCloseKey(hKey); //On met le chemin trouvé dans chemin_exe sprintf(chemin_exe,"%s", extraire(dwKeyEn)); //On met le chemin de l'exécutable à vide car il n'y qu'une seule clef pour les applications installées dans le registre //sprintf(chemin_exe,"%s", ""); //Si l'extraction du registre renvoie un chaine vide on n'ajoute pas le nom de l'exe if(chemin_exe[0]=='\0') {sprintf(chaine,"%s", chemin_exe);} else {sprintf(chaine,"%s%s", chemin_exe,liste_fichiers[0]);} //MessageBox(NULL,chaine,"valeur de la clé du registre + liste_fichiers[0]",MB_OK); return chaine; } // Fonction qui dessine des objets sur la fenêtre principale // Retour : aucun void dessiner(HWND hwnd) { //Définition des variables de la fonction PAINTSTRUCT ps; HDC hdc; // Début du dessin hdc = BeginPaint (hwnd, &ps); // Initialisation de la structure LOGFONT ZeroMemory(&lf, sizeof(LOGFONT)); strcpy(lf.lfFaceName,f); lf.lfHeight = 14; lf.lfWidth = 7; lf.lfWeight = 0; lf.lfItalic = 0; lf.lfUnderline = 0; lf.lfEscapement= 0; // Création de la fonte hfont = CreateFontIndirect(&lf); hfontOld = (HFONT)SelectObject(hdc, hfont); // On récupère la taille de la fenêtre et on la met dans rc GetClientRect (hwnd, &rc); // L'arrière plan du dessin sera de la même couleur que le fond de la fenêtre qui est de couleurs rgb valant 0xCC,0xCC,0xCC // SetBkColor(hdc,RGB(0xCC,0xCC,0xCC)); SetBkMode(hdc,TRANSPARENT); // on ecrit en marron SetTextColor(hdc, RGB(128,00,00)); // on dessine le titre de l'application sur une seule ligne en l'alignant au centre DrawText(hdc, titre_application, -1, &titre, DT_SINGLELINE | DT_CENTER | DT_VCENTER); // on écrit en bleu navy SetTextColor(hdc, RGB(0,0,128)); // On dessine le texte dans la partie gauche de la fenêtre // On dessine dans le rectangle nommé bienvenue le mot cracker sur une seule ligne et aligné à gauche DrawText(hdc, "Cracker", -1, &bienvenue, DT_SINGLELINE | DT_LEFT); // La fonction strlen calcule la taille d'une chaine strlen est l'abbréviation de string length en anglais TextOut (hdc, abscisse_text_1,ordonnee_static3,"Date du crack",strlen("Date du crack")); TextOut (hdc, abscisse_text_1,ordonnee_static4,"Fichier cible",strlen("Fichier cible")); TextOut (hdc, abscisse_text_1,ordonnee_static5,"Taille fichier",strlen("Taille fichier")); TextOut (hdc, abscisse_text_1,ordonnee_static6,"Date fichier",strlen("Date fichier")); // on écrit en bleu noir SetTextColor(hdc, RGB(0,0,0)); // On dessine le texte dans la partie droite de la fenêtre // On dessine dans le rectangle nommé auteur le nom Pifoman sur une seule ligne et aligné à gauche DrawText(hdc, "Pifoman", -1, &auteur, DT_SINGLELINE | DT_LEFT); TextOut (hdc, abscisse_text_2,ordonnee_static3,date_crack,strlen(date_crack)); TextOut (hdc, abscisse_text_2,ordonnee_static4,liste_fichiers[numero_fichier_a_craquer],strlen(liste_fichiers[numero_fichier_a_craquer])); //on convertit la taille du fichier en une chaîne nommée chaine; %ld est le type (long decimal) de la variable taille_fichiers[numero_fichier_a_craquer] sprintf(chaine,"%ld octets",taille_fichiers[numero_fichier_a_craquer]); TextOut (hdc, abscisse_text_2,ordonnee_static5,chaine,strlen(chaine)); TextOut (hdc, abscisse_text_2,ordonnee_static6,date_prog,strlen(date_prog)); // On écrit en vert. // Les 3 paramètres de RGB vont de 0 à 255 pour régler dans le hdc le red,le green et le blue et déterminer la couleur choisie SetTextColor(hdc, RGB(0,128,128)); // On écrit le texte à coté de la case à cocher TextOut (hdc, largeur_fenetre * 20 / 100,ordonnee_checkbox+1,"Copie",strlen("Copie")); // Charger une icône située dans les ressource sous le numéro 500 // Remplacer le mot ICON par BITMAP pour charger une image de type bitmap à la place de l'icône HICON hBmp = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(500), IMAGE_ICON, 0, 0, 0); DrawState(hdc,NULL,NULL,(LPARAM)hBmp,(WPARAM)NULL,icone.left,icone.top,0,0,DST_ICON); // Fin du dessin EndPaint (hwnd, &ps); } // Fonction qui calcule la somme tous les octets du fichiers // Retour : booléen qui dit si la somme est égale à celle attendue bool verification_integrite_fichier(char * f,int numero_fichier_a_craquer) { FILE * pFile=fopen(f,"rb"); long i=0; long somme=0; // On somme tous les octets du fichier f while(i<taille_fichiers[numero_fichier_a_craquer]) { somme+=fgetc(pFile); i++; } fclose(pFile); // Si la somme des octets est demandée à l'affichage on l'affiche if(afficher_somme) { char chaine3[100]; sprintf(chaine3, "Somme octets de %s = %ld.", liste_fichiers[numero_fichier_a_craquer] , somme); MessageBox(hwnd, chaine3 , nom_application ,MB_OK|MB_ICONINFORMATION); } // On retourne à la fonction appelante (la fonction ecrire) un booleen qui dit si la somme // calculée est égale à la somme attendue return (somme==somme_octets[numero_fichier_a_craquer]); } // Fonction qui écrit dans les fichiers listés dans liste_fichiers // Retour : aucun void ecrire(int numero_fichier_a_craquer) { FILE * pFile; int nb_erreurs_fichier=0; // Chaine contenant la dernière erreur rencontrée char derniere_erreur[200]; // On détermine le nom donné au fichier de sauvagarde ici un fichier .bak sprintf(chaine2, "%s.bak", chemin_nom_exe); // Si le fichier existe et est en lecture seule on retire enlève la protection en écriture if ((GetFileAttributes(extraire(chemin_nom_exe)) == FILE_ATTRIBUTE_DIRECTORY ) && (GetFileAttributes(chemin_nom_exe) | FILE_ATTRIBUTE_READONLY)) { SetFileAttributes(chemin_nom_exe, FILE_ATTRIBUTE_NORMAL); } // On ouvre le fichier chemin_nom_exe en mode lecture binaire (read/binary) avec création si le fichier n'existe pas (+) pFile = fopen(chemin_nom_exe,"rb+"); // Si l'ouverture en mode lecture binaire a réussi if (pFile!=NULL) { // Obtenir la taille du fichier. fseek (pFile , 0 , SEEK_END); long Taille_reelle_fichier = ftell (pFile); rewind (pFile); if (Taille_reelle_fichier==taille_fichiers[numero_fichier_a_craquer]) { //On initialise la variable erreur_somme int erreur_somme=0; // Si la case est cochée on vérifie l'intégrité des fichiers if(verifier_integrite) { if (!verification_integrite_fichier(chemin_nom_exe,numero_fichier_a_craquer)) { // Si la verification d'intégrité sur le fichier rend faux on lève une exception nb_erreurs_fichier++; // On empile l'erreur trouvée dans la variable derniere_erreur sprintf(derniere_erreur, "Le fichier %s est déja cracké ou a été modifié !",liste_fichiers[numero_fichier_a_craquer]); // On spécifie qu'une erreur est apparue dans la calcul de la somme // En C tout ce qui n'est pas égal à 0 est vrai erreur_somme=1; } } // On écrit dans le fichier // ->; si on ne demande pas de vérification d'intégité du fichier // ->; s'il n'y a pas d'erreurs une fois la vérification de la somme du fichier effectuée if(!verifier_integrite || (verifier_integrite && erreur_somme==0)) { // On fait une copie de sauvegarde du fichier si le bouton checkbox1 est coché if(checkbox) { CopyFile(chemin_nom_exe,chaine2,0); } for(int j=0;j<taille_matrices[numero_fichier_a_craquer];j++) { int octet; // On examine le fichier à craquer et on écrit la valeur de l'octet matrice0[j][1] à l'offset matrice0[j][0] dans le fichier repéré par le pointeur pFile switch (numero_fichier_a_craquer) { case 0: // On positionne le curseur d'écriture au début du fichier repéré par le pointeur pFile fseek (pFile,matrice0[j][0],SEEK_SET); octet = matrice0[j][1]; break; } // On écrit dans le fichier à la position matrice[j][0] la valeur de la variable octet fputc(octet,pFile); } } } //fin du bloc Taille_reelle else { // Si la taille n'est pas bonne on lève une exception nb_erreurs_fichier++; // On empile l'erreur dans la pile nommée derniere_erreur sprintf(derniere_erreur, "La taille du fichier est incorrecte.\n%s aurait dû faire %ld octets.\nCe n'est probablement pas la bonne version.",liste_fichiers[numero_fichier_a_craquer],taille_fichiers[numero_fichier_a_craquer]); } // On ferme le fichier ouvert avec succès fclose(pFile); } else { // Si une erreur apparaît à l'ouverture du fichier on lève une exception nb_erreurs_fichier++; if(GetFileAttributes(extraire(chemin_nom_exe)) != FILE_ATTRIBUTE_DIRECTORY) { // Si le chemin d'accès du fichier est introuvable on renvoie une erreur sprintf(derniere_erreur, "Le chemin d'accès spécifié est introuvable."); } else { // Sinon le fichier est déja utilisé auquel cas il est inaccessible. On renvoie à ce moment une erreur sprintf(derniere_erreur, "Le fichier %s est inaccessible.",liste_fichiers[numero_fichier_a_craquer]); } } if(nb_erreurs_fichier==0) { // Si aucune erreur rencontrée on affiche ce message MessageBox(hwnd,"Le programme est maintenant cracké.\nVous pouvez saisir n'importe quel code d'enregistrement.",nom_application,MB_OK|MB_ICONINFORMATION); } else { //Sinon on affiche la dernière erreur rencontrée. MessageBox(hwnd,derniere_erreur,nom_application,MB_OK|MB_ICONERROR); } } // Fonction qui ouvre la boite de dialogue de sélection de fichiers // Retour : chaine correspondant au chemin d'accès + nom du fichier sélectionné void selection_fichier(HWND hwnd,long numero_fichier) { OPENFILENAME ofn; char szFileName[MAX_PATH]; ZeroMemory(&ofn, sizeof(ofn)); szFileName[0] = 0; ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.lpstrFilter = liste_filtres[numero_fichier]; ofn.lpstrTitle = titre_boite_dialogue; // szFileName = le fichier avec son chemin qui a été sélectionné dans la boite de dialogue ofn.lpstrFile = szFileName; ofn.lpstrInitialDir = chemin_exe; ofn.nMaxFile = MAX_PATH; ofn.lpstrDefExt = "exe"; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; //Ouverture de la boîte de dialogue avec les paramètres précédents GetOpenFileName(&ofn); //Chemin + nom du fichier sélectionné dans la variable chaine sprintf(chemin_nom_exe, "%s", szFileName); //Si aucun fichier n'a été sélectionné on ne fait rien if (chemin_nom_exe[0]!='\0') ecrire(numero_fichier_a_craquer); } /***********************************************************
    * *
    * Composants minimum de l'application graphique *
    * *
    ***********************************************************/






    // Cette fonction est appelée par la fonction windows DispatchMessage( ) LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) // pointeur des messages
    { // Evénement déclenché lors du coloriage des composants statics du groupe // WM signifie Windows Message case WM_CTLCOLORSTATIC: { // On déclare les variables que l'on va utiliser HDC hdcStatic = (HDC)wParam; HDC hdc = (HDC)wParam; HBRUSH g_hbrBackground; // On fixe la couleur de fond des composant de la même couleur que le fond de la fenêtre g_hbrBackground = CreateSolidBrush(RGB(0xCC,0xCC,0xCC)); SetTextColor(hdcStatic, RGB(50,50,255)); SetBkMode(hdcStatic, TRANSPARENT); return (LONG)g_hbrBackground; } break; // Evénement déclenché quand la fenêtre doit être redessinée case WM_PAINT: dessiner(hwnd); break; // Evénement déclenché lorsque la souris bouge sur le fenêtre case WM_MOUSEMOVE: // Déclaration d'un point static POINT MousePos; // Récupération de la position du pointeur de la souris GetCursorPos(&MousePos); // Transformation des coordonnées absolues de la souris en coordonnées relatives à la fenêtre de l'application ScreenToClient(hwnd,&MousePos); // Si l'utilisateur passe au dessus des rectangles nommés icone, bienvenue et auteur on change le curseur par une main if(MousePos.x>=icone.left && MousePos.x<=icone.right && MousePos.y<=icone.bottom && MousePos.y>=icone.top || MousePos.x>=bienvenue.left && MousePos.x<=bienvenue.right && MousePos.y<=bienvenue.bottom && MousePos.y>=bienvenue.top || MousePos.x>=auteur.left && MousePos.x<=auteur.right && MousePos.y<=auteur.bottom && MousePos.y>=auteur.top) { const long HandCursor = 32649; HCURSOR hCursor = SetCursor(LoadCursor(hThisInstance,MAKEINTRESOURCE(HandCursor))); ShowCursor(TRUE); } break; // Evénement déclenché lorsque le bouton gauche de la souris est pressé (LBUTTON = left button) case WM_LBUTTONDOWN: // Si l'utilisateur clique sur le rectangle nommé bienvenue on ouvre le site du cracker if(MousePos.x>=bienvenue.left && MousePos.x<=bienvenue.right && MousePos.y<=bienvenue.bottom && MousePos.y>=bienvenue.top) {site(adresse_site_pifoman,true);} // Si l'utilisateur clique sur l'icône on ouvre le site de l'éditeur du logiciel if(MousePos.x>=icone.left && MousePos.x<=icone.right && MousePos.y<=icone.bottom && MousePos.y>=icone.top) {site(adresse_site_editeur,false);} // Si l'utilisateur clique sur le rectangle nommé auteur on envoie un mail au cracker if(MousePos.x>=auteur.left && MousePos.x<=auteur.right && MousePos.y<=auteur.bottom && MousePos.y>=auteur.top) {mail();} break; // Evénement déclenché lorsque l'on ferme la fenêtre case WM_DESTROY: DeleteFile(fichier_infos); // On efface le fichier d'infos PostQuitMessage(0); // On envoie un message WM_QUIT à la pile break; // Evénement déclenché lorsqu'une commande est envoyée case WM_COMMAND: // si l'utilisateur fait un clic sur le bouton checkbox1 on transforme en coché on non l'état du bouton. if ((LOWORD(wParam) == 5)) { if(SendMessage(hwndCheckBox1,BM_GETCHECK,checkbox,0)==BST_CHECKED) {checkbox=true;} else {checkbox=false;} } // si l'utilisateur fait un clic sur le bouton n°2 ou ouvre la boîte de sélelection de fichier if ((LOWORD(wParam) == 2) && (HIWORD(wParam) == BN_CLICKED)) {selection_fichier(hwnd,numero_fichier_a_craquer);} // si l'utilisateur fait un clic sur le bouton n°3 ou ouvre le fichier d'infos if ((LOWORD(wParam) == 3) && (HIWORD(wParam) == BN_CLICKED)) {infos();} // si l'utilisateur fait un clic sur le bouton n°3 ou ferme le programme if ((LOWORD(wParam) == 4) && (HIWORD(wParam) == BN_CLICKED)) {PostMessage(hwnd, WM_CLOSE, 0, 0);} break; // Evénement déclenché lorsqu'une touche du clavier est pressée case WM_KEYDOWN: switch (wParam) { case VK_ESCAPE: // Si la touche échappe est pressée DeleteFile(fichier_infos); // On efface le fichier d'infos PostQuitMessage(0); } break; // Pour les messages qu'on ne traite pas default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; } //Point d'entrée du programme (équivaut à la procédure main en C) int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { MSG messages; // Variable contenant les messages de l'application
    WNDCLASSEX wincl; // Structure de données pour windowclass

    // Structure de la fenêtre

    wincl.hInstance = hThisInstance; wincl.lpszClassName = "WindowsApp"; wincl.lpfnWndProc = WindowProcedure; // Cette fonction est appelée par windows
    wincl.style = CS_HREDRAW|CS_VREDRAW; // Réagir au demande de redessinage
    wincl.cbSize = sizeof(WNDCLASSEX); wincl.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(500)); wincl.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(500), IMAGE_ICON, 16, 16, 0); // Le curseur par défaut est la flèche wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; // Pas de menu
    wincl.cbClsExtra = 0; // Pas d'octets supplémentaires après la classe window
    wincl.cbWndExtra = 0; // structure or the window instance

    // Fixons la couleur de fond de la fenêtre
    wincl.hbrBackground = CreateSolidBrush(RGB(0xCC, 0xCC, 0xCC)); // Enregistrons la classe window, si échec quittons le programme if(!RegisterClassEx(&wincl)) return 0; // Initialisation de la structure LOGFONT ZeroMemory(&lf, sizeof(LOGFONT)); strcpy(lf.lfFaceName,f); lf.lfHeight = 14; lf.lfWeight = 0; lf.lfItalic = 0; lf.lfEscapement=0; lf.lfQuality = PROOF_QUALITY; // Céation de la fonte hfont = CreateFontIndirect(&lf); hfontOld = (HFONT)SelectObject(hdc, hfont); // La classe est enregistrée , créons le programme // Créons la fenêtre principale hwnd = CreateWindowEx( 0, // Extended possibilites for variation
    "WindowsApp", // Nom de la classe
    nom_application, // Titre de la fenêtre
    WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, // Style de la fenêtre
    point_gauche_fenetre, // coordonnée gauche du coin supérieur gauche de la fenêtre point_haut_fenetre, // coordonnée du haut du coin supérieur gauche de la fenêtre //CW_USEDEFAULT, Windows decide de la position de la fenêtre
    //CW_USEDEFAULT, Windows decide de la position de la fenêtre
    largeur_fenetre, // Largeur de la fenêtre en pixels
    hauteur_fenetre, // hautre de la fenêtre en pixels
    HWND_DESKTOP, // La fenêtre est fille du bureau
    NULL, // Pas de menu
    hThisInstance, // Pointeur de l'instance du programme
    NULL // Pas de données pour la création de la fenêtre
    ); // Créons le bouton 1 // Rectangle de coordonnées x coin supérieur gauche, y coin supérieur droit, largeur, hauteur hwndButton1 = CreateWindow ( "button", "Crack", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP | BS_FLAT, largeur_fenetre* 15 / 100 , ordonnee_bouton , largeur_bouton, hauteur_bouton, hwnd, (HMENU) 2, hThisInstance, NULL ); // On fixe la police du bouton à celle qu'on vient de définir SendMessage(hwndButton1,WM_SETFONT,(WPARAM)CreateFontIndirect (&lf),MAKELPARAM (TRUE,0)); // Créons le bouton 2 nommé infos hwndButton2 = CreateWindow ( "button", "Infos", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_FLAT, largeur_fenetre * 43 / 100, ordonnee_bouton, largeur_bouton, hauteur_bouton, hwnd, (HMENU) 3, hThisInstance, NULL ); // On fixe la police du bouton à celle qu'on vient de définir SendMessage(hwndButton2,WM_SETFONT,(WPARAM)CreateFontIndirect (&lf),MAKELPARAM (TRUE,0)); // Créons le bouton 3 nommé Fermé hwndButton3 = CreateWindow ( "Button", "Fermer", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_FLAT, largeur_fenetre * 70 / 100 , ordonnee_bouton, largeur_bouton, hauteur_bouton, hwnd, (HMENU) 4, hThisInstance, NULL ); // On fixe la police du bouton à celle qu'on vient de définir SendMessage(hwndButton3,WM_SETFONT,(WPARAM)CreateFontIndirect (&lf),MAKELPARAM (TRUE,0)); // Créons le bouton checkBox 1 hwndCheckBox1 = CreateWindow ( "button", "", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, largeur_fenetre * 15 / 100 , ordonnee_checkbox, 13, 13, hwnd, (HMENU) 5, hThisInstance, NULL ); // On envoie un message pour initialiser l'état du bouton radio (coché ou non) : valeur booléenne de checkbox SendMessage(hwndCheckBox1, BM_SETCHECK, checkbox, 0); // Rendre la fenêtre visible à l'écran ShowWindow(hwnd, nFunsterStil); // Démarrer la boucle de messages // Elle fonctionnera jusqu'à ce que GetMessage() retourne 0 while(GetMessage(&messages, NULL, 0, 0)) { // Traduire les messages clé virtuel en messages avec caractères TranslateMessage(&messages); // Envoyer les messages à la fonction WindowProcedure DispatchMessage(&messages); } // Le programme retourne la valeur 0 // C'est la valeur donnée par la fonction PostQuitMessage( ) return messages.wParam; } //--------------------------------------------------------------------------------------------

    votre commentaire


    Suivre le flux RSS des articles de cette rubrique
    Suivre le flux RSS des commentaires de cette rubrique