Сейчас на форуме: igorcauret, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Контрольная сумма файлов.
Посл.ответ Сообщение

Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 мая 2014 11:43
· Личное сообщение · #1

В общем вопрос следующий...
Знаю какие файлы проверяются на контрольные суммы
вот код:
Code:
  1. struct GameFile
  2. {
  3.          unsigned int         uiChecksum;
  4.          const char                  * szFile;
  5.          bool          bCompressed;
  6.          const char                  * szOutput;
  7.          bool          bDeleteAfterDecompress;
  8. }
  9. gameFiles[] =
  10. {
  11.          { 0x7C95AB5E, "..\edit\tables\StreamM2MP.bin",             false,               "",                                                  false },
  12.          //{ 0x319816C2, "sds\missionscript\freeraid_m2mp.sds",        false,          "",                                                      false },
  13.          { 0x1B8184BB, "mp\datafiles\0.m2mp",                     true,                 "mp\datafiles\gui.sds",            true },
  14.          { 0x7D1B7010, "mp\datafiles\1.m2mp",                     true,                 "mp\datafiles\gui-main.sds",           true },
  15.          { 0x2B2524F3, "mp\datafiles\2.m2mp",                     true,                 "mp\datafiles\tables.sds",               true },
  16.          { 0xAE2D4AF2, "mp\datafiles\3.m2mp",                     true,                 "mp\datafiles\ls-001.png",               true },
  17.          { 0x40D55F3F, "mp\datafiles\4.m2mp",                     true,                 "sds\skies\sky_m2mp.sds",                                   false },
  18. };
  19.  
  20. bool CGameFiles::CheckFiles( void )
  21. {
  22.          // Loop through all files that need checking
  23.          for( int i = 0; i < ARRAY_LENGTH( gameFiles ); i++ )
  24.          {
  25.                  // Does the file not exist?
  26.                  if( !SharedUtility::Exists( gameFiles[i].szFile ) )
  27.                  {
  28.                         // Set the last error
  29.                         SetLastError( String( "Can't find the file '%s'.", gameFiles[i].szFile ) );
  30.  
  31.                         return false;
  32.                  }
  33.  
  34.                  // Create the file checksum
  35.                  CFileChecksum pFileChecksum;
  36.  
  37.                  // Calculate the current file checksum
  38.                  pFileChecksum.Calculate( gameFiles[i].szFile );
  39.  
  40.                  // Does the file checksum not match?
  41.                  if( pFileChecksum.GetChecksum() != gameFiles[i].uiChecksum )
  42.                  {
  43.                         // Set the last error
  44.                         SetLastError( String( "The file '%s' has been modified.", gameFiles[i].szFile ) );
  45.  
  46.                         CLogFile::Printf( "File Error: '%s', expected checksum 0x%p, got 0x%p", gameFiles[i].szFile, gameFiles[i].uiChecksum, pFileChecksum.GetChecksum() );
  47.                         
  48.                         return false;
  49.                  }
  50.  
  51.                  // Does this file need decompressing?
  52.                  if( gameFiles[i].bCompressed )
  53.                  {
  54.                         // Decompress the file
  55.                         int iResult = CZlib::Decompress( gameFiles[i].szFile, gameFiles[i].szOutput );
  56.                         
  57.                         // Did the file fail to decompress?
  58.                         if( iResult != Z_OK )
  59.                         {
  60.                               // Set the last error
  61.                               SetLastError( String( "Failed to decompress the file %s. (Error: %d)", gameFiles[i].szFile, iResult ) );
  62.  
  63.                               return false;
  64.                         }
  65.  
  66.                         // Should we delete this file?
  67.                         if( gameFiles[i].bDeleteAfterDecompress )
  68.                         {
  69.                               // Push the file onto the delete queue
  70.                               m_deleteFiles.push_back( gameFiles[i].szOutput );
  71.                         }
  72.                  }
  73.          }
  74.  
  75.          return true;
  76. }


файлы программы сравниваются с файлами которые запакованы в самодельный формат .m2mp
но опять же у меня есть алгоритм.
Code:
  1. nt def( FILE * src, FILE * dest, int level )
  2. {
  3.          int ret, flush;
  4.          unsigned have;
  5.          z_stream stream;
  6.          unsigned char in[CHUNK];
  7.          unsigned char out[CHUNK];
  8.  
  9.          stream.zalloc = Z_NULL;
  10.          stream.zfree = Z_NULL;
  11.          stream.opaque = Z_NULL;
  12.          ret = deflateInit( &stream, level );
  13.  
  14.          if( ret != Z_OK )
  15.                  return ret;
  16.  
  17.          do
  18.          {
  19.                  stream.avail_in = fread( in, 1, CHUNK, src );
  20.                  if( ferror( src ) )
  21.                  {
  22.                         (void)deflateEnd( &stream );
  23.                         return Z_ERRNO;
  24.                  }
  25.  
  26.                  flush = feof(src) ? Z_FINISH : Z_NO_FLUSH;
  27.                  stream.next_in = in;
  28.  
  29.                  do
  30.                  {
  31.                         stream.avail_out = CHUNK;
  32.                         stream.next_out = out;
  33.                         ret = deflate( &stream, flush );
  34.                         assert( ret != Z_STREAM_ERROR );
  35.                         have = CHUNK - stream.avail_out;
  36.                         if( fwrite( out, 1, have, dest ) != have || ferror(dest) )
  37.                         {
  38.                               (void)deflateEnd( &stream );
  39.                               return Z_ERRNO;
  40.                         }
  41.                  }
  42.                  while( stream.avail_out == 0 );
  43.  
  44.                  assert( stream.avail_in == 0 );
  45.          }
  46.          while( flush != Z_FINISH );
  47.  
  48.          assert( ret == Z_STREAM_END );
  49.  
  50.          (void)deflateEnd( &stream );
  51.          return Z_OK;
  52. }
  53.  
  54. int inf(FILE *source, FILE *dest)
  55. {
  56.     int ret;
  57.     unsigned have;
  58.     z_stream strm;
  59.     unsigned char in[CHUNK];
  60.     unsigned char out[CHUNK];
  61.  
  62.     strm.zalloc = Z_NULL;
  63.     strm.zfree = Z_NULL;
  64.     strm.opaque = Z_NULL;
  65.     strm.avail_in = 0;
  66.     strm.next_in = Z_NULL;
  67.     ret = inflateInit(&strm);
  68.  
  69.     if (ret != Z_OK)
  70.         return ret;
  71.  
  72.     do
  73.          {
  74.         strm.avail_in = fread(in, 1, CHUNK, source);
  75.  
  76.         if (ferror(source))
  77.                  {
  78.             (void)inflateEnd(&strm);
  79.             return Z_ERRNO;
  80.         }
  81.  
  82.         if (strm.avail_in == 0)
  83.             break;
  84.  
  85.         strm.next_in = in;
  86.  
  87.         do
  88.                  {
  89.             strm.avail_out = CHUNK;
  90.             strm.next_out = out;
  91.             ret = inflate(&strm, Z_NO_FLUSH);
  92.  
  93.             switch (ret)
  94.                         {
  95.             case Z_NEED_DICT:
  96.                 ret = Z_DATA_ERROR;
  97.             case Z_DATA_ERROR:
  98.             case Z_MEM_ERROR:
  99.                 (void)inflateEnd(&strm);
  100.                 return ret;
  101.             }
  102.  
  103.             have = CHUNK - strm.avail_out;
  104.  
  105.             if (fwrite(out, 1, have, dest) != have || ferror(dest))
  106.                         {
  107.                 (void)inflateEnd(&strm);
  108.                 return Z_ERRNO;
  109.             }
  110.         }
  111.                  while (strm.avail_out == 0);
  112.  
  113.     }
  114.          while (ret != Z_STREAM_END);
  115.  
  116.     (void)inflateEnd(&strm);
  117.     return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
  118. }
  119.  
  120. void zerr(int ret)
  121. {
  122.     fputs("Error: ", stderr);
  123.     switch (ret) {
  124.     case Z_ERRNO:
  125.         if (ferror(stdin))
  126.             fputs("error reading stdin\n", stderr);
  127.         if (ferror(stdout))
  128.             fputs("error writing stdout\n", stderr);
  129.         break;
  130.     case Z_STREAM_ERROR:
  131.         fputs("invalid compression level\n", stderr);
  132.         break;
  133.     case Z_DATA_ERROR:
  134.         fputs("invalid or incomplete deflate data\n", stderr);
  135.         break;
  136.     case Z_MEM_ERROR:
  137.         fputs("out of memory\n", stderr);
  138.         break;
  139.     case Z_VERSION_ERROR:
  140.         fputs("zlib version mismatch!\n", stderr);
  141.     }
  142. }
  143.  
  144. void CompressFile( const char * szFileName, const char * szOutputName )
  145. {
  146.          printf( "Compressing file %s...\n", szFileName );
  147.  
  148.          // Open the files
  149.          FILE * in = fopen( szFileName, "r" );
  150.          FILE * out = fopen( szOutputName, "w+" );
  151.  
  152.          // Enable binary mode
  153.          SET_BINARY_MODE( in );
  154.          SET_BINARY_MODE( out );
  155.  
  156.          // Deflate the file
  157.          def( in, out, Z_DEFAULT_COMPRESSION );
  158.  
  159.          // Close the files
  160.          fclose( in );
  161.          fclose( out );
  162. }
  163.  
  164. void DecompressFile( const char * szFileName, const char * szOutputName )
  165. {
  166.          printf( "Decompressing file %s...\n", szFileName );
  167.  
  168.          // Open the files
  169.          FILE * in = fopen( szFileName, "r" );
  170.          FILE * out = fopen( szOutputName, "w+" );
  171.  
  172.          // Enable binary mode
  173.          SET_BINARY_MODE( in );
  174.          SET_BINARY_MODE( out );
  175.  
  176.          // Inflate the file
  177.          inf( in, out );
  178.  
  179.          // Close the files
  180.          fclose( in );
  181.          fclose( out );
  182. }
  183.  
  184. int main( int argc, char **argv )
  185. {
  186.          // Compress
  187.          CompressFile( "original\gui.sds", "0.m2mp" );
  188.          CompressFile( "original\gui-main.sds", "1.m2mp" );
  189.          CompressFile( "original\tables.sds", "2.m2mp" );
  190.          CompressFile( "original\ls-001.png", "3.m2mp" );
  191.          CompressFile( "original\sky_m2mp.sds", "4.m2mp" );
  192.  
  193.          // Decompress
  194.          /*DecompressFile( "0.m2mp", "original\gui.sds" );
  195.          DecompressFile( "1.m2mp", "original\gui-main.sds" );
  196.          DecompressFile( "2.m2mp", "original\tables.sds" );
  197.          DecompressFile( "3.m2mp", "original\ls-001.png" );
  198.          DecompressFile( "4.m2mp", "original\sky_m2mp.sds" );*/
  199.  
  200.          return 1;
  201. }


как мне проще будет обойти данную проверку? Кто что может посоветовать?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 31 мая 2014 12:12
· Личное сообщение · #2

битхак?
Code:
  1. if( pFileChecksum.GetChecksum() != gameFiles[i].uiChecksum )


-----
старый пень




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 мая 2014 12:18
· Личное сообщение · #3

а как я могу выйти на это через реверс?

Добавлено спустя 5 минут
Code:
  1. #include "CString.h"
  2. #include "SharedUtility.h"
  3.  
  4. #define  ADD_TEMPLATE(in, size)             Add((unsigned char *)&in, size)
  5.  
  6. static const unsigned int uiCrc32Table[256] =
  7. {
  8.          0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
  9.          0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
  10.          0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
  11.          0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
  12.          0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
  13.          0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
  14.          0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
  15.          0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
  16.          0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
  17.          0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
  18.          0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
  19.          0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
  20.          0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
  21.          0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
  22.          0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
  23.          0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
  24.          0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
  25.          0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
  26.          0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
  27.          0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
  28.          0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
  29.          0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
  30.          0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
  31.          0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
  32.          0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
  33.          0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
  34.          0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
  35.          0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
  36.          0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
  37.          0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
  38.          0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
  39.          0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
  40.          0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
  41.          0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
  42.          0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
  43.          0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
  44.          0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
  45.          0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
  46.          0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
  47.          0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
  48.          0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
  49.          0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
  50.          0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
  51.          0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
  52.          0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
  53.          0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
  54.          0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
  55.          0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
  56.          0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
  57.          0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
  58.          0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
  59.          0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
  60.          0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
  61.          0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
  62.          0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
  63.          0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
  64.          0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
  65.          0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
  66.          0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
  67.          0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
  68.          0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
  69.          0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
  70.          0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
  71.          0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
  72. };
  73.  
  74. class CChecksum
  75. {
  76.  
  77. private:
  78.  
  79.          unsigned int m_uiChecksum;
  80.  
  81. public:
  82.  
  83.          CChecksum( void )
  84.          {
  85.                  Reset( );
  86.          }
  87.  
  88.          bool operator == (CChecksum checksum)
  89.          {
  90.                  return (m_uiChecksum == checksum.m_uiChecksum);
  91.          }
  92.          
  93.          bool operator != (CChecksum checksum)
  94.          {
  95.                  return (m_uiChecksum != checksum.m_uiChecksum);
  96.          }
  97.          
  98.          void Reset( void )
  99.          {
  100.                  m_uiChecksum = ~0;
  101.          }
  102.  
  103.          unsigned int GetChecksum( void )
  104.          {
  105.                  return ~m_uiChecksum;
  106.          }
  107.  
  108.          void Add( unsigned char * ucData, unsigned int uiLength )
  109.          {
  110.                  for( unsigned int i = 0; i < uiLength; i++ )
  111.                  {
  112.                         m_uiChecksum = ((m_uiChecksum >> 8) ^ uiCrc32Table[(m_uiChecksum ^ ucData[i]) & 0xFF]);
  113.                  }
  114.          }
  115.  
  116.          void Add( const bool &bData )               { ADD_TEMPLATE(bData, sizeof(bool)); }
  117.          void Add( const char &cData )               { ADD_TEMPLATE(cData, sizeof(char)); }
  118.          void Add( const unsigned char &ucData )     { ADD_TEMPLATE(ucData, sizeof(unsigned char)); }
  119.          void Add( const short &sData )           { ADD_TEMPLATE(sData, sizeof(short)); }
  120.          void Add( const unsigned short &usData )    { ADD_TEMPLATE(usData, sizeof(unsigned short)); }
  121.          void Add( const int &iData )                   { ADD_TEMPLATE(iData, sizeof(int)); }
  122.          void Add( const unsigned int &uiData )          { ADD_TEMPLATE(uiData, sizeof(unsigned int)); }
  123.          void Add( const long &lData )               { ADD_TEMPLATE(lData, sizeof(long)); }
  124.          void Add( const unsigned long &ulData )     { ADD_TEMPLATE(ulData, sizeof(unsigned long)); }
  125.          void Add( const float &fData )           { ADD_TEMPLATE(fData, sizeof(float)); }
  126.          void Add( const double &dData )       { ADD_TEMPLATE(dData, sizeof(double)); }
  127.  
  128. };
  129.  
  130. class CFileChecksum : public CChecksum
  131. {
  132.  
  133. public:
  134.  
  135.          CFileChecksum( void ) : CChecksum( )
  136.          {
  137.  
  138.          }
  139.  
  140.          bool Calculate( String strFile )
  141.          {
  142.                  // Reset
  143.                  Reset( );
  144.  
  145.                  // Does the file not exist?
  146.                  if( !SharedUtility::Exists( strFile.Get() ) )
  147.                         return false;
  148.  
  149.                  // Open the file
  150.                  FILE * fFile = fopen( strFile.Get(), "rb" );
  151.                  
  152.                  // Did the file fail to open?
  153.                  if( !fFile )
  154.                         return false;
  155.  
  156.                  // Read the file data in 512 byte blocks
  157.                  unsigned int uiBytesRead = 0;
  158.                  unsigned char ucData[512];
  159.  
  160.                  while( (uiBytesRead = fread(ucData, 1, sizeof(ucData), fFile)) > 0 )
  161.                  {
  162.                         // Add the read data to the checksum
  163.                         Add( ucData, uiBytesRead );
  164.                  }
  165.  
  166.                  // Close the file
  167.                  fclose( fFile );
  168.  
  169.                  return true;
  170.          }
  171.  
  172. };


вот сам метод GetChecksum.



Ранг: 6.0 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 31 мая 2014 12:34
· Личное сообщение · #4

Мемори или хардвар брейкпоинт на доступ к данным из таблицы uiCrc32Table



Ранг: 53.9 (постоянный), 33thx
Активность: 0.050
Статус: Участник

Создано: 31 мая 2014 12:36
· Личное сообщение · #5

Ставьте брейк на чтение к константам которые используются или на api и сразу попадете на место использования.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 31 мая 2014 13:26
· Личное сообщение · #6

crc32 можно же легко обойти, дописав байт? или изменить какой-нибудь вроде даже утилитка была.
IDA + IDA_Signsrch

-----
[nice coder and reverser]





Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 31 мая 2014 13:27 · Поправил: Rainbow
· Личное сообщение · #7

JKornev пишет:
Мемори или хардвар брейкпоинт на доступ к данным из таблицы uiCrc32Table

deniskore пишет:
Ставьте брейк на чтение к константам которые используются или на api и сразу попадете на место использования.


PEiD + CryptoAnalyser plug покажет адресочки заветные




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 31 мая 2014 13:55
· Личное сообщение · #8

Cross references IDA Pro как бы тоже есть. Ищете константы, а потом обращения к массиву. А потом глазами сравниваете код в бинаре (в иде) и сорцы.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 мая 2014 14:39
· Личное сообщение · #9

Буду пытаться, пасибо всем за подсказки, буду отписываться по мере прогресса, так как у меня только багаж теории и почти отсутствует практика, думаю на это уйдет время.

Добавлено спустя 3 минуты
я на правильном пути?)

Добавлено спустя 4 минуты
Скрин: http://yadi.sk/d/SwjiP3pSRnfLp



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 31 мая 2014 19:26 · Поправил: dosprog
· Личное сообщение · #10

Klo пишет:
Добавлено спустя 4 минуты
Скрин: http://yadi.sk/d/SwjiP3pSRnfLp

Холодно.
То контрольная сумма в РЕ заголовке .EXE.
Заполняется линкером и нигде не используется, кроме как в драйверах.
Ну, антивирусы ещё могут её проверять. Поэтому лучше обнулять её.
Или пересчитывать после изменения в файле.

Тут же сказали, нужно найти адрес таблицы gameFiles[] = {{ 0x7C95AB5E, ....
и поставить в отладчике брейкпоинт на обращение по этому адресу.



| Сообщение посчитали полезным: Klo


Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 31 мая 2014 23:50
· Личное сообщение · #11

Посмотрите обсуждение здесь: RENG.RU



Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 июня 2014 19:31
· Личное сообщение · #12

dosprog пишет:
Холодно.
То контрольная сумма в РЕ заголовке .EXE.
Заполняется линкером и нигде не используется, кроме как в драйверах.
Ну, антивирусы ещё могут её проверять. Поэтому лучше обнулять её.
Или пересчитывать после изменения в файле.

Тут же сказали, нужно найти адрес таблицы gameFiles[] = {{ 0x7C95AB5E, ....
и поставить в отладчике брейкпоинт на обращение по этому адресу.

не могли бы вы мне скинуть пару статеек на эту тему, а то все таки я новичке, заранее благодарен.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 03 июня 2014 20:43 · Поправил: dosprog
· Личное сообщение · #13

Klo пишет:
не могли бы вы мне скинуть пару статеек на эту тему, а то все таки я новичке, заранее благодарен.


Неясно, какая тема интересует.
Если формат PE.EXE - то вот .
Ну, а тюторы Риккардо Нарвахи, по которым многие разбираются - тут и продолжение тут





Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 июня 2014 20:48
· Личное сообщение · #14

dosprog пишет:
Неясно, какая тема интересует.

как найти адрес константы, хотел бы почитать про это



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 03 июня 2014 21:04 · Поправил: dosprog
· Личное сообщение · #15

В общем, тюторы в помощь. (Пост #13)






Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 03 июня 2014 23:19
· Личное сообщение · #16

Hellspawn

> у меня есть алгоритм.
> .m2mp

> Мемори или хардвар брейкпоинт

> IDA

> контрольная сумма в РЕ заголовке .EXE.

Наркоманы не ?

Klo

Ответ вам дали во втором посте. Врятле написанное на этом говно будет юзать векторные таблицы запиленные на результат раскодировки. У них для этого мало мозга.




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 04 июня 2014 00:50
· Личное сообщение · #17

Klo пишет:
найти адрес константы


CryptoCheckers



Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 ноября 2014 19:33
· Личное сообщение · #18

Code:
  1. CRC32 :: 001AC650 :: 101AD450
  2. CRC32 :: 001ACA50 :: 101AD850
  3. CRC32 :: 001ACE50 :: 101ADC50
  4. CRC32 :: 001AD280 :: 101AE080
  5. CRC32 :: 001AD8B0 :: 101AE6B0
  6. CRC32 :: 001AE970 :: 101AF770
  7. CRC32 :: 001AEEF8 :: 101AFCF8
  8. CRC32 :: 001AF3F8 :: 101B01F8
  9. CRC32 :: 001AF868 :: 101B0668
  10. CRC32 :: 001AFE48 :: 101B0C48
  11. CRC32 :: 001B0248 :: 101B1048
  12. CRC32 :: 001B0710 :: 101B1510
  13. CRC32 :: 001B0B38 :: 101B1938
  14. CRC32 :: 001B0FB0 :: 101B1DB0
  15. CRC32 :: 001B13C8 :: 101B21C8
  16. CRC32 :: 001B1818 :: 101B2618
  17. CRC32 :: 001B1E70 :: 101B2C70
  18. CRC32 :: 001B22F0 :: 101B30F0
  19. CRC32 :: 001B26F0 :: 101B34F0
  20. CRC32 :: 001B2BD0 :: 101B39D0
  21. CRC32 :: 001B30B8 :: 101B3EB8
  22. CRC32 :: 001B34B8 :: 101B42B8
  23. CRC32 :: 001B38B8 :: 101B46B8
  24. CRC32 :: 001B3CE0 :: 101B4AE0
  25. CRC32 :: 001B41F8 :: 101B4FF8
  26. CRC32 :: 001B4650 :: 101B5450
  27. CRC32 :: 001B4AA0 :: 101B58A0
  28. CRC32 :: 001B4EA0 :: 101B5CA0
  29. CRC32 :: 001B5658 :: 101B6458
  30. CRC32 :: 001B5A78 :: 101B6878
  31. CRC32 :: 001B5EC0 :: 101B6CC0
  32. CRC32 :: 001B64A0 :: 101B72A0
  33. CRC32 :: 001B68C0 :: 101B76C0
  34. CRC32 :: 001B6CF0 :: 101B7AF0
  35. CRC32 :: 001B7178 :: 101B7F78
  36. CRC32 :: 001B75D0 :: 101B83D0
  37. CRC32 :: 001B7A30 :: 101B8830
  38. CRC32 :: 001B7E38 :: 101B8C38
  39. CRC32 :: 001B8238 :: 101B9038
  40. CRC32 :: 001B8638 :: 101B9438
  41. CRC32 :: 001B8C48 :: 101B9A48
  42. CRC32 :: 001B9150 :: 101B9F50
  43. CRC32 :: 001B9628 :: 101BA428
  44. CRC32 :: 001B9B28 :: 101BA928
  45. CRC32 :: 001B9F28 :: 101BAD28
  46. CRC32 :: 001BA618 :: 101BB418
  47. CRC32 :: 001BAA38 :: 101BB838
  48. CRC32 :: 001BAF08 :: 101BBD08
  49. CRC32 :: 001BB348 :: 101BC148
  50. CRC32 :: 001BB888 :: 101BC688
  51. CRC32 :: 001BBC88 :: 101BCA88
  52. CRC32 :: 001BC090 :: 101BCE90
  53. CRC32 :: 001BC490 :: 101BD290
  54. CRC32 :: 001BC8C8 :: 101BD6C8
  55. CRC32 :: 001BCCC8 :: 101BDAC8
  56. CRC32 :: 001BD0C8 :: 101BDEC8
  57. CRC32 :: 001BD4C8 :: 101BE2C8
  58. CRC32 :: 001BD900 :: 101BE700
  59. CRC32 :: 001BDE98 :: 101BEC98
  60. CRC32 :: 001BE3C8 :: 101BF1C8
  61. CRC32 :: 001BEAA0 :: 101BF8A0
  62. CRC32 :: 001BEF00 :: 101BFD00
  63. CRC32 :: 001BF300 :: 101C0100
  64. CRC32 :: 001BF700 :: 101C0500
  65. CRC32 :: 001BFB10 :: 101C0910
  66. CRC32 :: 001C0120 :: 101C0F20
  67. CRC32 :: 001C0720 :: 101C1520
  68. CRC32 :: 001C0CF8 :: 101C1AF8
  69. CRC32 :: 001C1170 :: 101C1F70
  70. CRC32 :: 001C1660 :: 101C2460
  71. CRC32 :: 001C1AA8 :: 101C28A8
  72. CRC32 :: 001C1ED8 :: 101C2CD8
  73. CRC32 :: 001C2310 :: 101C3110
  74. CRC32 :: 001C2800 :: 101C3600
  75. CRC32 :: 001C2DD0 :: 101C3BD0
  76. CRC32 :: 001C3350 :: 101C4150
  77. CRC32 :: 001C3840 :: 101C4640
  78. CRC32 :: 001C3C40 :: 101C4A40
  79. CRC32 :: 001C40C8 :: 101C4EC8
  80. CRC32 :: 001C44D0 :: 101C52D0
  81. CRC32 :: 001C48D0 :: 101C56D0
  82. CRC32 :: 001C4CD0 :: 101C5AD0
  83. CRC32 :: 001C5150 :: 101C5F50
  84. CRC32 :: 001C5710 :: 101C6510
  85. CRC32 :: 001C5E58 :: 101C6C58
  86. CRC32 :: 001C62C0 :: 101C70C0
  87. CRC32 :: 001C66C0 :: 101C74C0
  88. CRC32 :: 001C6AD8 :: 101C78D8
  89. CRC32 :: 001C6F50 :: 101C7D50
  90. CRC32 :: 001C7350 :: 101C8150
  91. CRC32 :: 001C7750 :: 101C8550
  92. CRC32 :: 001C7B50 :: 101C8950
  93. CRC32 :: 001C7F50 :: 101C8D50
  94. CRC32 :: 001C8360 :: 101C9160
  95. CRC32 :: 001C8760 :: 101C9560
  96. CRC32 :: 001C8BA0 :: 101C99A0
  97. CRC32 :: 001C8FC0 :: 101C9DC0
  98. CRC32 :: 001C93C0 :: 101CA1C0
  99. CRC32 :: 001C97D0 :: 101CA5D0
  100. CRC32 :: 001C9BE0 :: 101CA9E0
  101. CRC32 :: 001C9FF0 :: 101CADF0
  102. CRC32 :: 001CA448 :: 101CB248
  103. CRC32 :: 001CA8E0 :: 101CB6E0
  104. CRC32 :: 001CACE8 :: 101CBAE8
  105. CRC32 :: 001CB140 :: 101CBF40
  106. CRC32 :: 001CB550 :: 101CC350
  107. CRC32 :: 001CB990 :: 101CC790
  108. CRC32 :: 001CBDB8 :: 101CCBB8
  109. CRC32 :: 001CC1D0 :: 101CCFD0
  110. CRC32 :: 001CC5E8 :: 101CD3E8
  111. CRC32 :: 001CCA28 :: 101CD828
  112. CRC32 :: 001CCE30 :: 101CDC30
  113. CRC32 :: 001CD248 :: 101CE048
  114. CRC32 :: 001CD680 :: 101CE480
  115. CRC32 :: 001CDA80 :: 101CE880
  116. CRC32 :: 001CDE80 :: 101CEC80
  117. CRC32 :: 001CE290 :: 101CF090
  118. CRC32 :: 001CE848 :: 101CF648
  119. CRC32 :: 001D14E8 :: 101D22E8



Просканил, нашел константы, что дальше?




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 18 ноября 2014 22:28
· Личное сообщение · #19

Долго же вы сканили , аж 3 месяца...

-----
Everything is relative...




Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 18 ноября 2014 22:28
· Личное сообщение · #20

Быстро вы..
Я только покурить сходить успел




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 18 ноября 2014 22:33
· Личное сообщение · #21

Klo
читайте книгу http://beginners.re



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 18 ноября 2014 23:36
· Личное сообщение · #22

reversecode пишет:
читайте книгу

дык это ещё года на три ...



Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 ноября 2014 00:26
· Личное сообщение · #23

Да не) Я тогда забил на это, вот щас время появилось, решил не создавать новую тему


 eXeL@B —› Вопросы новичков —› Контрольная сумма файлов.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати