Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char** argv)
- {
- printf("\nelfcrypt - tool to decrypt/encrypt Entralink Forest data\n");
- if(argc != 3)
- {
- printf("\nUsage:\n");
- printf("elfcrypt.exe INFILE OUTFILE\nFilesize must be 2128 (0x850) bytes\n\n");
- printf("Save data offset:\n0x22C00 (BW)\n0x22A00 (B2W2)\n\n");
- return 0;
- }
- FILE *fp;
- fp = fopen(argv[1], "rb");
- if (!fp)
- {
- printf("\nFile loading failed!\n\n");
- return 0;
- }
- fseek (fp, 0, SEEK_END);
- int fSize = ftell(fp);
- rewind (fp);
- if(fSize != 0x850)
- {
- printf("\nWrong file size! Entralink Forest data should be 2128 (0x850) bytes.\n\n");
- return 0;
- }
- char *data;
- data = (char *)malloc(0x850);
- fread(data, 1, 0x850, fp);
- fclose(fp);
- unsigned long seed = ((data[0x84C] & 0xFF) + ((data[0x84D] & 0xFF) << 8) + ((data[0x84E] & 0xFF) << 16) + ((data[0x84F] & 0xFF) << 24));
- int x;
- unsigned int temp;
- for(x = 0; x < 0x426; x++)
- {
- seed = (0x41C64E6D * seed + 0x6073);
- temp = ((data[2*x] & 0xFF) + ((data[2*x+1] & 0xFF) << 8)) ^ (seed >> 16);
- data[2*x] = temp;
- data[2*x+1] = temp >> 8 ;
- }
- fp = fopen(argv[2], "wb+");
- if (!fp)
- {
- printf("\nWriting new file failed!\n\n");
- return 0;
- }
- fwrite(data, 1, 0x850, fp);
- free(data);
- fclose(fp);
- printf("\nDone!\n\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment