Advertisement
danmarculet

Untitled

May 28th, 2015
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. using namespace std;
  4.  
  5. BYTE buffer[65535], key[] = "BitDefender Test\0";
  6. DWORD bRead, bWrite, size, seed, functions[] = { 1, 2, 3, 1, 4 };
  7.  
  8. DWORD getRandom() {
  9.     DWORD nr = seed;
  10.     nr *= 214013;
  11.     nr += 2531011;
  12.     seed = nr;
  13.     nr >>= 16;
  14.     nr &= 32767;
  15.     return nr;
  16. }
  17.  
  18. BYTE ROR(BYTE ch, BYTE key) {
  19.     return (ch >> key) | (ch << (8 - key));
  20. }
  21.  
  22. BYTE f1(BYTE ch, DWORD keyIndex, BYTE prec) {
  23.     return ROR(ch, (key[keyIndex] + prec) % 8);
  24. }
  25.  
  26. BYTE f2(BYTE ch, DWORD keyIndex, BYTE prec) {
  27.     return (ch ^ key[keyIndex]) - prec;
  28. }
  29.  
  30. BYTE f3(BYTE ch, DWORD keyIndex, BYTE prec) {
  31.     return (ch - key[keyIndex]) + prec;
  32. }
  33.  
  34. BYTE f4(BYTE ch, DWORD keyIndex, BYTE prec) {
  35.     return (ch - key[keyIndex]) ^ prec;
  36. }
  37.  
  38. int main() {
  39.     BYTE prec;
  40.     DWORD i, random1, random2, aux, keyIndex;
  41.     HANDLE hFileR, hFileW;
  42.  
  43.     hFileR = CreateFile("out.txt", GENERIC_READ, 0, 0, 3, 0, 0);
  44.     size = GetFileSize(hFileR, 0);
  45.     ReadFile(hFileR, buffer, size, &bRead, 0);
  46.     buffer[size] = 0;
  47.     CloseHandle(hFileR);
  48.  
  49.     for (i = 0; i < 20; ++i) {
  50.         random1 = getRandom() % 5;
  51.         random2 = getRandom() % 5;
  52.         aux = functions[random1];
  53.         functions[random1] = functions[random2];
  54.         functions[random2] = aux;
  55.     }
  56.  
  57.     for (i = 0; i < 5; ++i)
  58.         printf("%d ", functions[i]);
  59.  
  60.     // ordinea functiilor pentru decriptare: 1 4 2 3 1
  61.     keyIndex = 0;
  62.     for (i = size; i > 0; --i) {
  63.         prec = buffer[i - 1];
  64.         buffer[i] = f1(buffer[i], keyIndex, prec);
  65.         buffer[i] = f3(buffer[i], keyIndex, prec);
  66.         buffer[i] = f2(buffer[i], keyIndex, prec);
  67.         buffer[i] = f4(buffer[i], keyIndex, prec);
  68.         buffer[i] = f1(buffer[i], keyIndex, prec);
  69.         ++keyIndex;
  70.         if (!key[keyIndex])
  71.             keyIndex = 0;
  72.     }
  73.     prec = 0;
  74.     buffer[i] = f1(buffer[i], keyIndex, prec);
  75.     buffer[i] = f3(buffer[i], keyIndex, prec);
  76.     buffer[i] = f2(buffer[i], keyIndex, prec);
  77.     buffer[i] = f4(buffer[i], keyIndex, prec);
  78.     buffer[i] = f1(buffer[i], keyIndex, prec);
  79.  
  80.     hFileW = CreateFile("in.txt", GENERIC_WRITE, 0, 0, 2, 0, 0);
  81.     WriteFile(hFileW, buffer, size, 0, 0);
  82.     CloseHandle(hFileW);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement