home *** CD-ROM | disk | FTP | other *** search
/ The Elite Hackers Toolkit / TheEliteHackersToolkitVolume1_1998.rar / HACKERS.BIN / appcraks / CRYPTO31.ZIP / CRYPTO31.CPP next >
C/C++ Source or Header  |  1998-04-09  |  5KB  |  172 lines

  1. unsigned char block1[54] =
  2. { 0x35, 0xBC, 0x4F, 0x85, 0x9C, 0xF8, 0x33, 0x26, 0x83, 0x69, 0x99, 0x61, 0x7C, 0x7D, 0x44, 0x87, 
  3.     0x46, 0xD7, 0xC0, 0x7A, 0x23, 0x21, 0xDF, 0x23, 0x26, 0x66, 0x25, 0x67, 0x24, 0x2A, 0x4F, 0x4B, 
  4.     0x3E, 0x76, 0x64, 0x67, 0x40, 0x28, 0x20, 0x78, 0x9F, 0x35, 0xA7, 0x6E, 0x2D, 0xD8, 0x4B, 0x38, 
  5.     0xD1, 0x37, 0xE6, 0x40, 0x52, 0x23 };
  6.  
  7. unsigned char block2[116] =
  8. {    0x25, 0x59, 0xC6, 0x7A, 0x2F, 0x89, 0x48, 0x85, 0x26, 0x4F, 0x5E, 0x68, 0x25, 0xD6, 0x38, 0xA5, 
  9.     0x5D, 0xE6, 0x78, 0xE7, 0x39, 0x23, 0x70, 0x24, 0x5E, 0xA4, 0x2A, 0x35, 0xC6, 0x34, 0xE6, 0x37, 
  10.     0xDE, 0x85, 0x36, 0x2B, 0x79, 0xA2, 0x30, 0x68, 0x2A, 0x62, 0xF8, 0xB7, 0x2D, 0x23, 0x73, 0x69, 
  11.     0xA7, 0x64, 0xC6, 0x5B, 0x66, 0xA6, 0x3B, 0x6C, 0xA7, 0x69, 0x2A, 0x65, 0xA4, 0x72, 0xBE, 0x54, 
  12.     0x5E, 0xD0, 0xAF, 0x31, 0x83, 0x48, 0x23, 0xE9, 0x24, 0xDF, 0x5E, 0x87, 0xB7, 0x67, 0x35, 0x89, 
  13.     0x68, 0xBF, 0x66, 0x2B, 0x67, 0xDE, 0x69, 0xB6, 0x25, 0x6C, 0xD0, 0xB6, 0xC6, 0x6A, 0x42, 0x99, 
  14.     0x26, 0x40, 0x23, 0xFF, 0x5E, 0x58, 0xE7, 0xDE, 0x5A, 0x3D, 0xA5, 0x42, 0xDF, 0x70, 0x4E, 0x26, 
  15.     0x28, 0x99, 0xA9, 0x4D };
  16.  
  17. char block3[44] = "\0";
  18.  
  19. unsigned char key1[] = "#serB&nz|mfM1/5(!sd$Mq.{s]+sFjtKpzSdtzoXqmb^Al@dv:s?x/"; // [41BE18]
  20. unsigned char key2[] = "|b!pz*ls;rn|lf$vi^Axpe)rx5aic&9/2m5lsi4@0dmZw94cmqpfhw"; // [41BE50]
  21.  
  22. DWORD GetKey(CString &pwd)
  23. {
  24.   int i = 0;
  25.   DWORD val = 0;  
  26.   int pwdlen = pwd.GetLength();
  27.   DWORD code = 0;
  28.  
  29. // this keymaker is also used in the software registration
  30.  
  31.   while (i < pwdlen)
  32.   {
  33.     val = (key1[pwdlen+i] * pwd[i] * key2[i]);
  34.     i++;
  35.     val *= i;
  36.     code += val;
  37.   }
  38.   return code;
  39. }
  40.  
  41. DWORD GetNewKey(DWORD &key)
  42. {
  43.   register DWORD i = 0;
  44.  
  45.   i = (key * 4) + key;
  46.   i = (i * 4) + i;
  47.   i += key;
  48.   i = (i * 8) + key;
  49.   i <<= 8;
  50.   i -= key;
  51.   key = (i * 4) + key + 0x269EC3; // save for next use
  52.  
  53.   i = (key & 0x7FFF0000);
  54.   i >>= 0x10;
  55.   return (i);  // return a different value than key
  56. }
  57.  
  58. void GetCodeString(DWORD key) // generates block3[]
  59. {
  60.   int i = 0;
  61.   unsigned char ch = '\0';
  62.   char *ptr = block3;
  63.  
  64.   for (i = 0; i < 4; i++)
  65.   {
  66.     ch = (key & 0x000000FF);
  67.     wsprintf(ptr, "%02X ", ch);
  68.     key >>= 8;
  69.     ptr += 3;
  70.   }
  71.   ptr--;
  72.   for (i = 0; i < 11; i++)
  73.   {
  74.     wsprintf(ptr, "%02X ", block3[i]);
  75.     ptr += 3;
  76.   }
  77. }
  78.  
  79. void Encrypt(unsigned char buff[], unsigned long flen, DWORD key)
  80. {
  81.   register DWORD i = 0x2C, j = 0x16, k = 0x58, cnt = 0;
  82.   unsigned char tmpbyte = 0;
  83.   DWORD newkey = 0;
  84.  
  85.   for (cnt = 0; cnt < flen; cnt++)
  86.   {
  87.     if (i >= 116)
  88.       i = 0;
  89.     else
  90.       i++;
  91.  
  92.     if (j >= 0x2C) // 44
  93.       j = 0;
  94.     else
  95.       j++;
  96.  
  97.     if (k >= 0x36) // 54
  98.       k = 0;
  99.     else
  100.       k++;
  101.  
  102.     tmpbyte = (block1[k] | block2[i] | block3[j]);
  103.     buff[cnt] = buff[cnt] - tmpbyte;
  104.     newkey = GetNewKey(key);
  105.     __asm
  106.     { // easier to implement using Assembly language
  107.       mov eax, newkey
  108.       cdq
  109.       xor eax, edx
  110.       sub eax, edx
  111.       and eax, 000000FFh
  112.       xor eax, edx
  113.       sub eax, edx
  114.       xor ecx, ecx
  115.       mov cl, al
  116.       mov tmpbyte, cl
  117.     }
  118.     buff[cnt] += tmpbyte;
  119.   }
  120. }
  121.  
  122. void CCryptockDlg::OnEncrypt() 
  123. {
  124.   CFile infp, outfp;
  125.   CFileException err;
  126.   unsigned long flen = 0;
  127.   unsigned char *buff = NULL, header[264] = "\0";
  128.   DWORD key = 0, newkey = 0, tmpkey = 0;
  129.   CString password = "";
  130.  
  131.   GetDlgItemText(IDC_INFILE, infile);
  132.   GetDlgItemText(IDC_OUTFILE, outfile);
  133.   GetDlgItemText(IDC_PASSWORD, password);
  134.   key = GetKey(password);
  135.   key |= 0x06A30DE8;  // ***this is the Password's ID!!!
  136.  
  137.   newkey = key;  // preserve original 32bit key value
  138.   tmpkey = GetNewKey(newkey);
  139.   tmpkey += (GetNewKey(newkey) << 0x10);
  140.   tmpkey += key;   // ***this is the SIGNATURE!!!
  141.  
  142.   GetCodeString(key); // Generate block3[]
  143.   __asm // smaller code using Assembly language
  144.   {
  145.     lea ebx, header; // points to beginning of header
  146.     mov eax, tmpkey; // load 32-bit tmpkey into EAX
  147.     mov DWORD PTR [ebx], eax; // stored bytes in reverse order
  148.   }
  149.  
  150.   if (infp.Open(infile, CFile::modeRead | CFile::typeBinary, &err))
  151.   {
  152.     flen = infp.GetLength();
  153.     buff = new unsigned char [flen+1];
  154.     buff[0] = buff[flen] = '\0';
  155.     infp.Read(buff, flen);
  156.     if (outfp.Open(outfile,  CFile::modeCreate | CFile::modeWrite | CFile::typeBinary, &err))
  157.     {
  158.       outfp.Write("CryptoHdrBlk", 12);  //write header first
  159.       lstrcat((char *)header, infile);  //append file name
  160.       outfp.Write(header, 264);   // write next header info
  161.       Encrypt(buff, flen, key);   // starts encryption
  162.       outfp.Write(buff, flen);   // write encrypted data
  163.       outfp.Close();
  164.       MessageBox("Finished Encrypting File!");
  165.     }
  166.     delete [] buff;
  167.     initpath = infp.GetFilePath();
  168.     infp.Close();
  169.     initpath = initpath.Left(initpath.ReverseFind('\\')+1);
  170.   }
  171. }
  172.