Decrypt StringData.NOS


SUBMITTED BY: Guest

DATE: June 25, 2014, 6:59 p.m.

FORMAT: C++

SIZE: 2.9 kB

HITS: 1026

  1. /* @ NosTale Text File Extractor @ */
  2. //--INCLUDES--
  3. #include <iostream>
  4. #include <sstream>
  5. //--INCLUDES--
  6. //--Decrypt text file--
  7. int decryptnosfile(unsigned char *cData, unsigned int f_buffer, unsigned char *cOut, unsigned int &nOut)
  8. {
  9. static unsigned char table[] = { 0, 0x20,'-','.','0','1','2','3','4','5','6','7','8','9', 0x0d };
  10. unsigned int i, offset, len;
  11. unsigned char size, c;
  12. len = f_buffer;
  13. unsigned char *cBuffer;
  14. cBuffer = (unsigned char*)malloc(f_buffer + 1);
  15. memcpy(cBuffer, cData, f_buffer);
  16. offset = nOut = 0;
  17. while(offset < len)
  18. {
  19. if(cBuffer[offset] == 0xFFu)
  20. {
  21. offset++;
  22. *(cOut + nOut++) = 0x0d;
  23. continue;
  24. }
  25. size = cBuffer[offset++];
  26. i = 0;
  27. if ((size & 0x80U) == 0)
  28. {
  29. while ((i++ < size) && (offset < len))
  30. {
  31. *(cOut + nOut++) = (cBuffer[offset++] ^ 0x33U);
  32. }
  33. }
  34. else
  35. {
  36. size &= 0x7FU;
  37. while ((i < size) && (offset < len))
  38. {
  39. c = cBuffer[offset++];
  40. *(cOut + nOut++) = (table[(c & 0xF0U) >> 4]);
  41. if (table[c & 0x0FU] != 0)
  42. *(cOut + nOut++) = table[c & 0x0FU];
  43. i += 2;
  44. }
  45. }
  46. }
  47. free(cBuffer);
  48. return offset;
  49. }
  50. //--Decrypt text file--
  51. //--MAIN--
  52. void main()
  53. {
  54. std::string infile_name;
  55. unsigned int file_num, file_count, file_name_size, file_crypto_mode, file_size;
  56. FILE *inFile, *outFile;
  57. std::cout
  58. << " NTExtractor" << std::endl
  59. << " Write file name: ";
  60. std::cin >> infile_name;
  61. inFile = fopen(infile_name.c_str(),"rb");
  62. if(inFile == NULL)
  63. return;
  64. fread(&file_num, 1, 4, inFile);
  65. std::cout << file_num << " files found" << std::endl;
  66. for(auto i = 0; i < file_num; i++)
  67. {
  68. fread(&file_count, 1, 4, inFile);
  69. fread(&file_name_size, 1, 4, inFile);
  70. char *file_name = (char*)malloc(file_name_size+1);
  71. fread(file_name, 1, file_name_size, inFile);
  72. file_name[file_name_size] = 0;
  73. fread(&file_crypto_mode, 1, 4, inFile);
  74. fread(&file_size, 1, 4, inFile);
  75. unsigned char *file = (unsigned char*)malloc(file_size+1);
  76. fread(file, 1, file_size, inFile);
  77. file[file_size] = 0;
  78. std::cout << " File [" << file_count << "] '"<< file_name <<"' size: " << file_size / 1024 << "KB" << std::endl;
  79. outFile = fopen(file_name,"wb");
  80. unsigned char *file_decrypted = (unsigned char*)malloc(2*file_size);
  81. unsigned int file_decrypted_lenght = 0;
  82. decryptnosfile(file, file_size, file_decrypted, file_decrypted_lenght);
  83. fwrite(file_decrypted,1, file_decrypted_lenght,outFile);
  84. std::cout << " The file are decrypted and saved!" << std::endl;
  85. fclose(outFile);
  86. }
  87. fclose(inFile);
  88. std::cout << " Files extracted correctly" << std::endl;
  89. _sleep(1000);
  90. }
  91. //--MAIN--

comments powered by Disqus