Replying to [C] Creiamo un Crypter

  • Create account

    • Nickname:
  • Enter your Post

    •              
           
       
      FFUpload  Huppy Pick colour  HTML Editor  Help
      .
    •      
       
      Clickable Smilies    Show All
      .
  • Clickable Smilies

    • :huh:^_^:o:;):P:D:lol::B)::rolleyes:-_-<_<:)
      :wub::angry::(:unsure::wacko::blink::ph34r::alienff::cry::sick::shifty::woot:
      <3:XD:*_*:];P:XP:(:=)X):D:>.<>_<
      =_=:|:?3_3:p:;_;^U^*^^*:=/::*::b::f:

  •   

Last 10 Posts [ In reverse order ]

  1. Posted 28/2/2013, 15:29
    Vediamo insieme come creare un semplicissimo Crypter che codifica un file eseguendo operazioni matematiche. Il tutto sarà molto semplice e non costituirà un vero e proprio algoritmo.

    Iniziamo con le funzioni di base: il nostro programma dovrà leggere i dati da un file e inviare ogni singolo carattere alla funzione crypt(), che eseguirà funzioni matematiche, basandosi anche sulla posizione pari/dispari del nostro carattere. Per prima cosa, per trasformare un carattere nel corrispettivo int si usa, anche se pratica sconsigliata:
    CODICE
    int intCh = char ch - '0';

    ove ch è il nostro carattere. Per prima cosa creiamo il nostro main, che prende dei dati da riga di comando (il nome del file) e legge tutto il contenuto; non commento il codice presupponendo che siate già abbastanza esperti:
    CODICE
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #define false 0
    #define true !false

    /* Per il preprocessore ho messo la definizione di true e false, ove per false si intende 0 e per true qualunque numero diverso da 0 */

    int main(int argc, char *argv[]) {
           printf("##################\n");
           printf("# Saffon Crypter #\n");
           printf("##################\n\n");
           if(argc != 2) {
                   printf("[WARNING] Usage %­s filename\n", argv[0]);
           }
           else {
                   printf("Crypting...\n");
           FILE *file = fopen( argv[1], "r" );
           if ( file == 0 )
           {
               printf( "[WARNING] Unable to open the file!\n" );
           }
           else
           {
               int x;
               FILE *new = fopen("crypted.txt","w");
               while  ( ( x = fgetc( file ) ) != EOF )
               {
                   /* codice per il crypting */
               }
               fclose(file);
               fclose(new);
               printf("\n\a[DONE] Created file crypted.txt.\n");
           }
           }
    }


    Creiamo una funzione di crypting che esegua le quattro operazioni sul nostro carattere
    CODICE
    int even = false;

    int crypt(char ch) {
           int intCh = ch - '0';
           intCh *= 32;
           intCh += intCh - 13;
           if(even == true) {
                   intCh /= 3;
           }
           else {
                   intCh *= 2;
           }
           return abs(intCh);
    }


    e possiamo aggiungere la riga
    CODICE
    fprintf(new, "%d", crypt(x));

    al codice precedente.

    Codice finale:
    CODICE
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #define false 0
    #define true !false

    int even = false;

    int crypt(char ch) {
           int intCh = ch - '0';
           intCh *= 32;
           intCh += intCh - 13;
           if(even == true) {
                   intCh /= 3;
           }
           else {
                   intCh *= 2;
           }
           return abs(intCh);
    }

    int main(int argc, char *argv[]) {
           printf("##################\n");
           printf("# Saffon Crypter #\n");
           printf("##################\n\n");
           if(argc != 2) {
                   printf("[WARNING] Usage %­s filename\n", argv[0]);
           }
           else {
                   printf("Crypting...\n");
           FILE *file = fopen( argv[1], "r" );
           if ( file == 0 )
           {
               printf( "[WARNING] Unable to open the file!\n" );
           }
           else
           {
               int x;
               FILE *new = fopen("crypted.txt","w");
               while  ( ( x = fgetc( file ) ) != EOF )
               {
                   fprintf(new, "%d", crypt(x));
               }
               fclose(file);
               fclose(new);
               printf("\n\a[DONE] Created file crypted.txt.\n");
           }
           }
    }


    I più esperti avranno capito che questo non è assolutamente un algoritmo di criptazione valido: si può intenderlo come una base o uno stimolo a fare di meglio, o come un metodo di offuscamento.

    Quale è ora la sfida? Riuscire a creare un programma che farà l'inverso ^.^
    Nel pacchetto qua sotto troverete, oltre al programma creato, anche due tools con relativo sorgente: ctoi e itoc, appunto per convertire un carattere nel corrispettivo int e poter fare delle prove.

    Download

Review the complete topic (launches new window)