Advertisement
Guest User

Veliant

a guest
Dec 18th, 2011
951
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.23 KB | None | 0 0
  1. // Key generator for keygen tPODt
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <time.h>
  7.  
  8. typedef unsigned long ULONG;
  9. typedef unsigned short USHORT;
  10.  
  11. char szEnterName[40];
  12.  
  13. ULONG keys[2];
  14.  
  15. ULONG HashName(ULONG *puName)
  16. {
  17.     size_t i;
  18.     ULONG hash = 0;
  19.  
  20.     for (i = 0; i < 10; i++)
  21.         hash ^= puName[i];
  22.     return (0x00280000 | (hash >> 16)) ^ hash;
  23. }
  24.  
  25. int MulTable[] = { 3, 5, 7, 13 };
  26.  
  27. void GenConst(ULONG puKeys[2], ULONG uHash)
  28. {
  29.     size_t x, i;
  30.     puKeys[0] = puKeys[1] = 0;
  31.     ULONG uMask[3] = { 0, 0, 0 };
  32.     // Генерируем спаренные позиции
  33.     i = 0;
  34.     while (uMask[2] != 0xF)
  35.     {
  36.         x = rand() % 4;
  37.         if (!((uMask[2] >> x) & 1))
  38.         {
  39.             switch (i)
  40.             {
  41.                 case 0: puKeys[0] |= MulTable[x] << 4;  uMask[0] |= (1 << x); break;
  42.                 case 1: puKeys[0] |= MulTable[x] << 8;  uMask[0] |= (1 << x); break;
  43.                 case 2: puKeys[1] |= MulTable[x] << 20; uMask[1] |= (1 << x); break;
  44.                 case 3: puKeys[1] |= MulTable[x] << 24; uMask[1] |= (1 << x); break;
  45.             }
  46.             i++;
  47.             uMask[2] |= (1 << x);
  48.         }
  49.     }
  50.     // Генерируем оставшиеся множители
  51.     // Первый ключ
  52.     i = 0;
  53.     while (uMask[0] != 0xF)
  54.     {
  55.         x = rand() % 4;
  56.         if (!((uMask[0] >> x) & 1))
  57.         {
  58.             switch (i)
  59.             {
  60.                 case 0: puKeys[0] |= MulTable[x];       break;
  61.                 case 1: puKeys[0] |= MulTable[x] << 12; break;
  62.             }
  63.             i++;
  64.             uMask[0] |= (1 << x);
  65.         }
  66.     }
  67.     // Старшая часть = зеркальное отражение младшей
  68.     puKeys[0] |=  puKeys[0]              << 28;
  69.     puKeys[0] |= (puKeys[0] >> 4  & 0xF) << 24;
  70.     puKeys[0] |= (puKeys[0] >> 8  & 0xF) << 20;
  71.     puKeys[0] |= (puKeys[0] >> 12 & 0xF) << 16;
  72.  
  73.     // Второй ключ
  74.     i = 0;
  75.     while (uMask[1] != 0xF)
  76.     {
  77.         x = rand() % 4;
  78.         if (!((uMask[1] >> x) & 1))
  79.         {
  80.             switch (i)
  81.             {
  82.                 case 0: puKeys[1] |= MulTable[x] << 16; break;
  83.                 case 1: puKeys[1] |= MulTable[x] << 28; break;
  84.             }
  85.             i++;
  86.             uMask[1] |= (1 << x);
  87.         }
  88.     }
  89.     // Младшая часть = зеркальное отражение старшей
  90.     puKeys[1] |= (puKeys[1] >> 16 & 0xF) << 12;
  91.     puKeys[1] |= (puKeys[1] >> 20 & 0xF) << 8;
  92.     puKeys[1] |= (puKeys[1] >> 24 & 0xF) << 4;
  93.     puKeys[1] |=  puKeys[1] >> 28;
  94. }
  95.  
  96. int main(int argc, char *argv[])
  97. {
  98.     ULONG hash;
  99.     USHORT crc, code[6];
  100.     int i;
  101.     memset(&szEnterName, 0, 40);
  102.     srand(time(NULL));
  103.     printf("Enter your name: ");
  104.     scanf("%s", (char *)&szEnterName);
  105.     hash = HashName((ULONG *) & szEnterName);
  106.     // Выводим десяток ключей
  107.     for (i =0; i< 10; i++)
  108.     {
  109.         // Генерируем необходимые KEY1 и KEY2
  110.         GenConst(keys, hash);
  111.         // Обращаем их по найденному алгоритму
  112.         keys[0] = (keys[0] + 0x798134)   ^ 0x9F827364;
  113.         keys[1] = (keys[1] ^ 0x4637A819) - 0x871623;
  114.         // Расчитываем блоки ключа
  115.         crc = rand() % 255;
  116.         code[0] = (keys[0] >> 16 ^ hash) & 0xFFFF;
  117.         code[1] = (keys[0] ^ hash) & 0xFFFF;
  118.         code[2] = (keys[1] >> 16 ^ hash) & 0xFFFF;
  119.         code[3] = (keys[1] ^ hash) & 0xFFFF;
  120.         code[4] = hash & 0xFFFF;
  121.         code[5] = ((crc & 0xFF) << 8) | (crc ^ 0x5B);
  122.         printf("Your key: %04x-%04x-%04x-%04x-%04x-%04x\n", code[0], code[1], code[2], code[3], code[4], code[5]);
  123.     }
  124.     return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement