comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

RC4+ clase

  • 0 Respuestas
  • 1671 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Karcrack

  • *
  • Underc0der
  • Mensajes: 87
  • Actividad:
    0%
  • Reputación 0
  • Se siente observado ¬¬'
    • Ver Perfil
« en: Junio 16, 2013, 06:32:18 pm »
Código: C++
  1. #define SWAP(x,y) {x^=y;y^=x;x^=y;}
  2. /*
  3. *  AUTHOR : Karcrack
  4. *  DATE   : 100113
  5. *  PURPOSE: RC4+ C++ cipher/decipher.
  6. */
  7. template<unsigned int SIZE, class TYPE> struct myArr{
  8. private:
  9.     TYPE *data;
  10. public:
  11.     operator int(){
  12.         return (int)data;
  13.     }
  14.  
  15.     myArr& operator=(TYPE* rhs){
  16.         this->data = rhs;
  17.         return *this;
  18.     };
  19.  
  20.     TYPE& operator[](unsigned int idx){
  21.         return data[idx%SIZE];
  22.     };
  23. };
  24.  
  25. template <unsigned int KEY_SIZE>class RC4P{
  26. private:
  27.     unsigned int    i,
  28.                     j,
  29.                     size;
  30.  
  31.     myArr<256, char>     S;
  32.     myArr<KEY_SIZE, char>K;
  33. public:
  34.     RC4P(char S[], char K[], unsigned int size){
  35.         this->S     = S;
  36.         this->K     = K;
  37.         this->size  = size;
  38.     };
  39.     void calculate(char O[]){
  40.         //KSA
  41.         if(S==0 || K==0)
  42.             return;
  43.  
  44.         j = 0;
  45.         for(i = 0; i<256; i++)
  46.             S[i] = i;
  47.  
  48.         for(i = 0; i<256; i++){
  49.             j = j + S[i] + K[i];
  50.             SWAP(S[i], S[j])
  51.         };
  52.         //PRGA
  53.         unsigned int x = 0,
  54.                      a,
  55.                      b,
  56.                      c;
  57.         i = 0;
  58.         j = 0;
  59.         while(x<size){
  60.             i++;
  61.             a = S[i];
  62.             j+= a;
  63.             b = S[j];
  64.             S[i] = b;
  65.             S[j] = a;
  66.             c = S[i<<5 ^ j>>3] + S[j<<5 ^ i>>3];
  67.             O[x]^= (S[a+b] + S[c^0xAA]) ^ S[j+b];
  68.             x++;
  69.             i++;
  70.         };
  71.     };
  72. };

 
Ejemplo de uso:
Código: C++
  1. #pragma comment(linker, "/ENTRY:main")
  2. #include <Windows.h>
  3. #include "rc4p.cpp"
  4.  
  5. void main(){
  6.     char* S = (char*)LocalAlloc(GPTR, 256*sizeof(char));
  7.     char K[]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  8.  
  9.     char crypt[]= "karcrack";
  10.  
  11.     RC4P<sizeof(K)> r(S, K, sizeof(crypt));
  12.  
  13.     r.calculate(crypt);
  14.     r.calculate(crypt);
  15.  
  16.     LocalFree(S);
  17. }
« Última modificación: Febrero 08, 2014, 05:38:13 pm por Expermicid »
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

 

¿Te gustó el post? COMPARTILO!