Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
О великий ДЕБУГЕР
SowerДата: Понедельник, 09 Марта 2009, 09:34 | Сообщение # 1
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Незнаю известно кому это (имею ввиду широкой публике), как можно еще определить версию проекта и изменить её, однако вот небольшая статья и небольшой проект в MMB! Жду ваших коментов! happy
Прикрепления: 8691438.zip (1.6 Kb) · mbd.rar (8.7 Kb)
 
DEMBELДата: Понедельник, 09 Марта 2009, 09:44 | Сообщение # 2
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
лучше на что нибудь полезное свои силы направь, тут кому надо он и сам все извлечет, изменит, распакует sl и все что захочет. а то будут потом баловаться все кому не лень...



Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
toizyДата: Понедельник, 09 Марта 2009, 09:48 | Сообщение # 3
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
В смысле версию? не понял...

Добавлено (09 Март 2009, 09:48)
---------------------------------------------
А! речь о версии exe? или я опять не попал...


Жизнь оказалась не такой уж и забавной, как поначалу...
 
SowerДата: Понедельник, 09 Марта 2009, 09:48 | Сообщение # 4
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Quote (toizy)
В смысле версию? не понял...

Ну версию MMB, где был сделан проект! mbd файла!!! biggrin


Сообщение отредактировал Grand - Понедельник, 09 Марта 2009, 09:49
 
DEMBELДата: Понедельник, 09 Марта 2009, 09:49 | Сообщение # 5
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
речь о версии проекта ммб



Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
toizyДата: Понедельник, 09 Марта 2009, 09:58 | Сообщение # 6
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
А, понял. Вот тут я выкладывал утилиту для тех же целей

Жизнь оказалась не такой уж и забавной, как поначалу...
 
SowerДата: Понедельник, 09 Марта 2009, 10:01 | Сообщение # 7
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Quote (toizy)
А, понял. Вот тут я выкладывал утилиту для тех же целей

Да знаю я! Почитать надо, что да как в txt файле! Я просто создал аналог в mbb!!!! biggrin
 
toizyДата: Понедельник, 09 Марта 2009, 10:03 | Сообщение # 8
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Кстати, в ридми написано, что если меняем версию 30 на более низкую, то нужно удалить строку Created... На самом деле, эта строка ни на что не влияет, и проект будет открыт как ни в чём не бывало. Зато можно случайно удалить кое-что нужное...

А идея сделать определитель версии и защищённости на ММВ интересная happy Щас я тебе маленько помогу


Жизнь оказалась не такой уж и забавной, как поначалу...
 
SowerДата: Понедельник, 09 Марта 2009, 10:04 | Сообщение # 9
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Quote (toizy)
Щас я тебе маленько помогу

Окей!
 
toizyДата: Понедельник, 09 Марта 2009, 17:08 | Сообщение # 10
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Не, прям щас не помогу - файл с моими заметками я оставил на домашнем компьютере. Схожу на обед, заберу

Добавлено (09 Март 2009, 17:07)
---------------------------------------------
Вот соответствие идентификаторов проекта версиям файла, смещения заголовка окна, пароля и флага защиты. Всё в коде делфи, но ты разберёшься.

Code
type TMBDVer = (
  {0} MMBuilder00,
  {1} MMBuilder5,
  {2} MMBuilder8,
  {3} MMBuilder10,
  {4} MMBuilder11,
  {5} MMBuilder13,
  {6} MMBuilder14,
  {7} MMBuilder15,
  {8} MMBuilder16,
  {9} MMBuilder17,
  {10} MMBuilder24,
  {11} MMBuilder25,
  {12} MMBuilder26,
  {13} MMBuilder27,
  {14} MMBuilder28,
  {15} MMBuilder29,
  {16} MMBuilder30);

var
   VerNum: array[TMBDVer] of string = (
  {0} '',
  {1} 'MMBuilder5',
  {2} 'MMBuilder8',
  {3} 'MMBuilder10',
  {4} 'MMBuilder11',
  {5} 'MMBuilder13',
  {6} 'MMBuilder14',
  {7} 'MMBuilder15',
  {8} 'MMBuilder16',
  {9} 'MMBuilder17',
  {10} 'MMBuilder24',
  {11} 'MMBuilder25',
  {12} 'MMBuilder26',
  {13} 'MMBuilder27',
  {14} 'MMBuilder28',
  {15} 'MMBuilder29',
  {16} 'MMBuilder30');

   VerDsc: array[TMBDVer] of string = (
  {0} 'Unknown (?)',
  {1} 'Unknown (MMBuilder5)',
  {2} 'Unknown (MMBuilder8)',
  {3} 'Unknown (MMBuilder10)',
  {4} '4.0\4.4',
  {5} '4.6\4.7',
  {6} '4.8.0.1\4.8.2\4.8.3',
  {7} 'Unknown (MMBuilder15)',
  {8} 'Unknown (MMBuilder16)',
  {9} '4.9.0.1',
  {10} 'Unknown (MMBuilder24)',
  {11} 'Unknown (MMBuilder25)',
  {12} 'Unknown (MMBuilder26)',
  {13} '4.9.5\4.9.6',
  {14} '4.9.7',
  {15} '4.9.8.5',
  {16} '4.9.8.13');

  CaptionOffset: array[TMBDVer] of DWORD = (
   {0} 0,
   {1} 11,
   {2} 47,
   {3} 52,
   {4} 52,
   {5} 56,
   {6} 56,
   {7} 56,
   {8} 56,
   {9} 56,
   {10} 56,
   {11} 56,
   {12} 56,
   {13} 56,
   {14} 56,
   {15} 56,
   {16} 56);

   PassOffset: array[TMBDVer] of DWORD = ( // пароль появился в версии 4.0 (?)
   {0} 0,
   {1} 0,
   {2} 0,
   {3} 0,
   {4} 16,
   {5} 16,
   {6} 16,
   {7} 16,
   {8} 16,
   {9} 16,
   {10} 16,
   {11} 16,
   {12} 16,
   {13} 16,
   {14} 16,
   {15} 16,
   {16} 16);

   PackedMBDOffset: array[TMBDVer] of DWORD = ( // SL - начиная с версии 4.6
   {0} 0,
   {1} 0,
   {2} 0,
   {3} 0,   
   {4} 0,   
   {5} 24,
   {6} 24,
   {7} 24,
   {8} 24,
   {9} 24,
   {10} 24,
   {11} 24,
   {12} 24,
   {13} 24,
   {14} 24,
   {15} 24,
   {16} 24);

Тут характеристики всех найденных мною версии ММВ, так что вперёд и с песнями.

Добавлено (09 Март 2009, 17:08)
---------------------------------------------
На всякий случай, вот кусок кода из дебаггера, процедура анализа файла. Приведу целиком, сам разберись, что к чему, тут не сложно

Code
function Analyze(FileName: string): Boolean;
var
   FLen: Byte;
   str: string;
   fs: PStream;
   MBDVer: string;
begin
   Result := False;
    
   // Очищаем запись
   MBDFile.Caption := '';
   MBDFile.Filename := '';
   MBDFile.HeaderLen := 0;
   MBDFile.Header := '';
   MBDFile.Offset := 0;
   MBDFile.PackedSize := 0;
   MBDFile.Password := '';
   MBDFile.SecureLayer := False;
   MBDFile.Size := 0;
   MBDFile.UnpackedSize := 0;
   MBDFile.Version := MMBuilder00;

   if not FileExists(Filename) then
   begin
     ShowMsg('Исходный файл не существует!', MB_OK or MB_ICONERROR or MB_TASKMODAL);
     Exit;
   end;
    
   MBDFile.Filename := Filename;
   MBDFile.Offset := GetImageSize(Filename);
   // Читаем поля версии
   if MBDFile.Offset <> 0 then FileVersionInfo(MBDFile.Filename);
   // Проверяем, сжат ли файл
   if MBDFile.Offset <> 0 then
   begin
     MBDFile.UPXStatus := usUnknown;
     str := GetDosOutput(GetStartDir + 'upx.exe', ' -t "' + Filename + '"');
     if FindInList(str, 'NotPackedException') then MBDFile.UPXStatus := usNotPacked else
       if FindInList(str, 'CantUnpackException') then MBDFile.UPXStatus := usUnknown else
         if FindInList(str, '[OK]') then MBDFile.UPXStatus := usPackedOk;
   end; //if

   fs := NewReadFileStream(Filename);
   MBDFile.Size := fs.Size;
   // Перемещаемся на смещение пректа
   fs.Position := MBDFile.Offset;
   // Читаем длину идентификатора и идентификатор
   fs.Read(MBDFile.HeaderLen, SizeOf(MBDFile.HeaderLen));
   SetLength(MBDVer, MBDFile.HeaderLen);
   fs.Read(MBDVer[1], MBDFile.HeaderLen);
   MBDFile.Header := MBDVer;
   // 1 ->
   if Copy(MBDVer, 1, 9) <> 'MMBuilder' then
     ShowMsg('Файл не является проектом MMB!', MB_OK or MB_ICONERROR or MB_TASKMODAL)
   else begin
     // Получаем версию проекта
     GetMBDVersion(MBDVer);
     //
     if MBDFile.Version = MMBuilder00 then
       ShowMsg('Файл имеет неподерживаемую версию!', MB_OK or MB_ICONERROR or MB_TASKMODAL)
     else begin
       Result := True;
       // Читаем флаг сжатия
       fs.Read(MBDFile.SecureLayer, SizeOf(MBDFile.SecureLayer));
       // Поправляем флаг, если используется версия 4.4
       if MBDFile.Version <= MMBuilder11 then MBDFile.SecureLayer := False;
       //
         if MBDFile.SecureLayer then
         begin
           // UnpackedSize, PackedSize
           try
             fs.Position := MBDFile.Offset + PackedMBDOffset[MBDFile.Version] - 8;
             fs.Read(MBDFile.UnpackedSize, SizeOf(MBDFile.UnpackedSize));
             fs.Read(MBDFile.PackedSize, SizeOf(MBDFile.PackedSize));
           finally end;
         end else begin
           // Получаем заголовок окна
           try
             fs.Position := MBDFile.Offset + CaptionOffset[MBDFile.Version];
             fs.Read(FLen, SizeOf(FLen));
             SetLength(MBDFile.Caption, FLen);
             fs.Read(MBDFile.Caption[1], FLen);
           finally end;

           // Пароль
           if MBDFile.Version >= MMBuilder11 then
           begin
             try
               // Получаем пароль
               fs.Position := fs.Position + PassOffset[MBDFile.Version];
               fs.Read(FLen, SizeOf(FLen));
               SetLength(MBDFile.Password, FLen);
               fs.Read(MBDFile.Password[1], FLen);
             finally end;

             // Декодируем пароль
             try
               MBDFile.Password := DecodePass(MBDFile.Password);
             finally end;
           end; //if             

         end; //if
     end; //if
   end; //if MBDFile.Version = MMBuilder00 then
   // <- 1

   fs.Free;
end;


Жизнь оказалась не такой уж и забавной, как поначалу...
 
SowerДата: Воскресенье, 26 Апреля 2009, 08:01 | Сообщение # 11
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Спасибо!

Добавлено (26 Апрель 2009, 08:01)
---------------------------------------------

Quote (Grand)
Спасибо!

Я вот погладел,и честно скажу, что почти нифига не понял (извните за выражения) в коде, но хотя есть озарение, toizy, можешь объяснить по порядку, хотябы основное, плизз help

ЗАРаНЕЕ СПАСИБО!!! :)

 
toizyДата: Воскресенье, 26 Апреля 2009, 10:08 | Сообщение # 12
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
А чё непонятного? Просто читаем файл в потоке по группам байт... и всё

Жизнь оказалась не такой уж и забавной, как поначалу...
 
  • Страница 1 из 1
  • 1
Поиск: