G3NG4R

BWB2W2 elfcrypt

Oct 31st, 2015
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.33 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char** argv)
  5. {
  6.     printf("\nelfcrypt - tool to decrypt/encrypt Entralink Forest data\n");
  7.     if(argc != 3)
  8.     {
  9.         printf("\nUsage:\n");
  10.         printf("elfcrypt.exe INFILE OUTFILE\nFilesize must be 2128 (0x850) bytes\n\n");
  11.         printf("Save data offset:\n0x22C00 (BW)\n0x22A00 (B2W2)\n\n");
  12.         return 0;
  13.     }
  14.  
  15.     FILE *fp;
  16.     fp = fopen(argv[1], "rb");
  17.     if (!fp)
  18.     {
  19.         printf("\nFile loading failed!\n\n");
  20.         return 0;
  21.     }
  22.  
  23.     fseek (fp, 0, SEEK_END);
  24.     int fSize = ftell(fp);
  25.     rewind (fp);
  26.  
  27.     if(fSize != 0x850)
  28.     {
  29.         printf("\nWrong file size! Entralink Forest data should be 2128 (0x850) bytes.\n\n");
  30.         return 0;
  31.     }
  32.  
  33.     char *data;
  34.     data = (char *)malloc(0x850);
  35.     fread(data, 1, 0x850, fp);
  36.     fclose(fp);
  37.  
  38.     unsigned long seed = ((data[0x84C] & 0xFF) + ((data[0x84D] & 0xFF) << 8) + ((data[0x84E] & 0xFF) << 16) + ((data[0x84F] & 0xFF) << 24));
  39.  
  40.     int x;
  41.     unsigned int temp;
  42.     for(x = 0; x < 0x426; x++)
  43.     {
  44.         seed = (0x41C64E6D * seed + 0x6073);
  45.         temp = ((data[2*x] & 0xFF) + ((data[2*x+1] & 0xFF) << 8)) ^ (seed >> 16);
  46.  
  47.         data[2*x] = temp;
  48.         data[2*x+1] = temp >> 8 ;
  49.     }
  50.  
  51.     fp = fopen(argv[2], "wb+");
  52.     if (!fp)
  53.     {
  54.         printf("\nWriting new file failed!\n\n");
  55.         return 0;
  56.     }
  57.  
  58.     fwrite(data, 1, 0x850, fp);
  59.     free(data);
  60.     fclose(fp);
  61.  
  62.     printf("\nDone!\n\n");
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment