• STATISTIQUES
  • Il y a eu un total de 2 membres et 9017 visiteurs sur le site dans les dernières 24h pour un total de 9 019 personnes!


    Membres: 2 605
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [FR] PHP Débutant
    Apprendre le PHP par l'exemple, facilement et simplement. Réservé d'abord aux débutants....
    Programmation
    [EN] CS Tutoring Center
    Site de challenge spécialisé dans les challenges de programmation C++ et java cependant, d'autres langages pe...
    Challenges
    [EN] Security Traps
    Site de challenge qui prétend être construit non pas dans le but de parfaire vos connaissances, mais plutôt dan...
    Challenges
    [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] Chiffrer des fichiers en AES-256
27-06-2014, 13h08 (Modification du message : 27-06-2014, 22h36 par WizOut.)
Message : #1
WizOut Hors ligne
Black Slave Coder
*



Messages : 111
Sujets : 13
Points: 14
Inscription : Apr 2012
[C] Chiffrer des fichiers en AES-256
Yop le monde,

Je vous partage un script en C que j'ai fais en vitesse il y a quelques temps, qui permet de chiffrer/déchiffrer (Merci de la remarque gruik) vos fichiers
en utilisant l'algo AES-256, j'ai tous mis dans un zip, il y a uniquement le projet codeblocks pas de fichier exécutable dedans,
il y a forcement mieux et plus rapide en c++ (;

C'est juste pour le plaisir sachant qu'il existe openssl qui permet de faire ça bien mieux !

Bref si vous avez des remarques n’hésitez pas.

Code C :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "aes256.h"

// By Wiz
int main(int argc, char *argv[])
{

    int optch;
    extern int opterr;
    char format[] = "cCdD";
    opterr = 1;
    int choice = 0;

    printf("File's Crypter - AES 256\n\n");
    printf("Use : self mode(-c or -d) file key \n\n");
    printf("Ex : crypter.exe -c myfile.exe mykey\n\n");
    printf("Note : Parameter file don't be 'crypted.crypt' or 'uncrypted.crypt'\n\n");

    if (argc < 4) {
        exit(0);
    }

    while ((optch = getopt(argc, argv, format)) != -1) {
        switch (optch) {

            case 'c':
                if (strcmp(argv[2], "crypted.crypt") == 0) {
                    exit(0);
                } else {
                    choice = 'c';
                }
            break;

            case 'C':
                if (strcmp(argv[2], "crypted.crypt") == 0) {
                    exit(0);
                } else {
                    choice = 'C';
                }
            break;

            case 'd':
                if (strcmp(argv[2], "uncrypted.out") == 0) {
                    exit(0);
                } else {
                    choice = 'd';
                }
            break;

            case 'D':
                if (strcmp(argv[2], "uncrypted.crypt") == 0) {
                    exit(0);
                } else {
                    choice = 'D';
                }
            break;
        }
    }



    char pathFileSrc[100] = "";
    FILE* fileSrc = NULL;
    FILE* fileDest = NULL;
    aes256_context ctx;

    uint8_t buf[16] = {0};
    uint8_t key[32] = {0};
    unsigned char keyw[32] = {0};

    //char keyString[] = "";

    int currentChar = 0;
    int line = 0;
    int i;


    for (i = 0; i < sizeof(key); i++) {
        if (i < strlen(argv[3])) {
            keyw[i] = argv[3][i];
            key[i] = keyw[i];
        }
    }


    if (choice == 99 || choice == 67) {
        sprintf(pathFileSrc, argv[2]);
        fileSrc = fopen(pathFileSrc, "rb");
        fileDest = fopen("crypted.crypt", "ab+");
    }

    if (choice == 100 || choice == 68) {
        sprintf(pathFileSrc, argv[2]);
        fileSrc = fopen(pathFileSrc, "rb");
        fileDest = fopen("uncrypted.out", "ab+");
    }

    if (fileSrc == NULL) {
        printf("[-] Error file %s can't be open!\n", argv[2]);
    } else {
        printf("[+] File open !\n");

        do {

                currentChar = fgetc(fileSrc);
                if (line <= 15) {
                    buf[line] = currentChar;
                    printf("%02x ", currentChar);
                    line++;
                } else {
                    aes256_init(&ctx, key);
                    if (choice == 100 || choice == 68) {
                        aes256_decrypt_ecb(&ctx, buf);
                    } else if (choice == 99 || choice == 67) {
                        aes256_encrypt_ecb(&ctx, buf);
                    }
                    fwrite(buf, sizeof(char), 16, fileDest);
                    line = 0;
                    buf[line] = currentChar;
                    printf("%02x \n", currentChar);
                    line++;
                }

        } while (currentChar != EOF);

        aes256_done(&ctx);
        fclose(fileSrc);
        fclose(fileDest);
    }

    return 0;
}

 


Pièces jointes
.zip   aes256_wiz.zip (Taille : 19.99 Ko / Téléchargements : 1)
"Il existe deux choses infinies : l'univers et la bêtise humaine" Einstein.
PHP/MySQL (POO & PDO) : OK
HTML5/CSS3 : OK
JAVA : En cours
+1 (3) -1 (0) Répondre
27-06-2014, 13h15
Message : #2
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [C] Chiffrer des fichiers en AES-256
salut WizOut, merci du partage !

(27-06-2014, 13h08)WizOut a écrit : Je vous partage un script en C (...) qui permet de crypter/décrypter vos fichiers

chiffrer/déchiffrer* (j'ai modifié le titre du thread au passage)

Code C :

    if (argc < 4 || strcmp(argv[2], "crypted.crypt") == 0 && strcmp(argv[1], "-c") == 0 || strcmp(argv[2], "uncrypted.out") == 0 && strcmp(argv[1], "-d") == 0 || strcmp(argv[2], "crypted.crypt") == 0 && strcmp(argv[1], "-C") == 0 || strcmp(argv[2], "uncrypted.out") == 0 && strcmp(argv[1], "-D") == 0 ) {
        exit(0);
    }
 


pour tout le reste il y a getopt Wink
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (2) -1 (0) Répondre
27-06-2014, 14h19 (Modification du message : 27-06-2014, 14h22 par ark.)
Message : #3
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [C] Chiffrer des fichiers en AES-256
Ouais, getopt c'est quand même sacrement utile !!

Citation :Bref si vous avez des remarques n’hésitez pas.

Et bien je n’hésites pas ! :p

crypter ne se dit pas, et ça on ne le diras jamais assez ! (cf http://n-pn.fr/forum/showthread.php?tid=2397)

Bon, sinon, mis a part ça, tu devrais éviter d'utiliser AES en mode ECB, ECB présente des vulnérabilises lorsque l'on chiffre plus d'un bloc de données.
(Essaye ton truc sur le contenu d'une image (en conservant les headers, et qui contient un fond de couleur unie de préférence =)), tu te rendras vite compte du problème)

Et ensuite, lire ton fichier caractère par caractère, ça risque d’être sacrement long si tu t'attaques a des fichiers légèrement gros.

Voila voila, je crois que c'est tout ce que j'ai comme remarque =)
+1 (1) -1 (0) Répondre
27-06-2014, 22h40 (Modification du message : 27-06-2014, 22h40 par WizOut.)
Message : #4
WizOut Hors ligne
Black Slave Coder
*



Messages : 111
Sujets : 13
Points: 14
Inscription : Apr 2012
RE: [C] Chiffrer des fichiers en AES-256
Merci gruik, je vais modifier le code dès que je le pourrais
Et ark merci de l'infos je testerais ça ce soir Wink

EDIT: Voilà j'ai refais quelque chose de plus propre

@Ark ok j'ai vu ce que ça donnais avec l'algo sur une image Big Grin et j'ai compris...
"Il existe deux choses infinies : l'univers et la bêtise humaine" Einstein.
PHP/MySQL (POO & PDO) : OK
HTML5/CSS3 : OK
JAVA : En cours
+1 (0) -1 (0) Répondre
27-06-2014, 22h51
Message : #5
Ekroz Hors ligne
Membre actif
*



Messages : 77
Sujets : 13
Points: 43
Inscription : May 2013
RE: [C] Chiffrer des fichiers en AES-256
J'ai un peu de mal avec les implémentations à la mano comme ça, il suffit d'oublier un petit détail, même si le résultat est le même en apparence et ça devient unsecure.
Mais sinon très bon code, même si certains savent ce que je pense des standards de chiffrement. ^^
+1 (0) -1 (0) Répondre
26-07-2014, 22h51
Message : #6
Creaprog Hors ligne
Newbie
*



Messages : 1
Sujets : 0
Points: 0
Inscription : Nov 2013
RE: [C] Chiffrer des fichiers en AES-256
Bonsoir,

Pour ma part je pense que tu devrais remplacer printf par puts. Printft c'est assez haut niveau et présente des vulnérabilités.
+1 (0) -1 (0) Répondre
26-07-2014, 23h13 (Modification du message : 26-07-2014, 23h23 par b0fh.)
Message : #7
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
RE: [C] Chiffrer des fichiers en AES-256
Printf ne présente aucune vulnérabilité quand le premier argument est une constante. Et si il n'y a pas de substitutions, de toutes façons gcc le remplace automatiquement par un appel à puts.
+1 (1) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut