Расшифровка файлов

Тема в разделе "WASM.ASSEMBLER", создана пользователем Vladislaw, 30 июн 2011.

  1. Vladislaw

    Vladislaw New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2011
    Сообщения:
    7
    Нашел игры в которых соперники(фото девушек) зашифрованы в файлы *.sgdt частичное описание которого я нашел и даже смог реализавать доставание двух НЕзашифрованых изображений. Возможно ли по двум программам(дампы из Олли, снят протектор "ASPack 2.12 -> Alexey Solodovnikov") найти код отвечающий за дешифрование файла и загрузки картинок в память?

    Помогите кто может, могу выслать сами игры: запакованные(19 штук) и/или распакованные(2 штуки).
    Прикрепил сам файл соперника.

    Вот и частичное описание:

    Формат SGDT:
    4 байта сигнатуры
    4 байта - длина маленькой картинки
    N байт - маленькaя картинка (обычный JPEG)
    4 байта - длина первой большой картинки
    N байт - первая большая картинка (тоже обычный JPEG)
    далее идёт контрольная сумма (что-то нестандартное, типа суммы по модулю 9) первой половины файла и оставшиеся картинки в ЗАШИФРОВАННОМ виде. Шифрование по таблице длинной 176 байт с участием первой половины файла в качестве ключа (если я правильно понял, так как на асме это всё довольно запутано выглядит), так что без хорошего знания ассемблера там делать нечего.
    ACDSEE и прочие "хорошие" просмоторщики показывают первую картинку, так как умеют открывать файлы у которых JPEG начинается не с самого начала (они ищут первые FF D8).
     
  2. disasm

    disasm New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2011
    Сообщения:
    35
    и весь этот геммор из за фото девушек? Да вы батенька бооольной... идите на порносает и подрочите уже наконец!
     
  3. Vladislaw

    Vladislaw New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2011
    Сообщения:
    7
    дело не в голом теле, а в возможности создания самому таих соперников))) и просто алгоритм интересен.

    если уж на то пошло, то получить фото можно и играя.
     
  4. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Для загрузки, наверняка, какая-нибудь стандартная библиотека использована, а JPG-файлы, скорее всего созданы одним и тем же редактором, что должно дать приличный кусок plain text'a. Ключ шифрования, скорее всего, тоже один для всех изображений. И алго шифрования должно быть либо простым, либо стандартным, ибо явно не приоритетная для автора задача. Ну, и линк на закачку помог бы нетелепатам заценить ваши файлы.

    А вообще, такого хлама в сети немеряно и если вы каждый будете дешифровывать, то поиграть вам уже не придется :)
     
  5. Vladislaw

    Vladislaw New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2011
    Сообщения:
    7
    прикрепил пример файла.

    из даного в первом посте описании видно что вторая часть(после первых двух картинок) неплохо так зашифрована.
     
  6. Vladislaw

    Vladislaw New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2011
    Сообщения:
    7
  7. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Угу. Так я и думал. Возьмите еще девочек: http://www.multiupload.com/3GWO7O6K67

    ASPack, Borland C++ Builder, никакого стандартного крипто на беглый взгляд не просматривается. DeDe в помощь. Там есть парочка классов для работы с JPEG: TJPEGData (004834AC, 0048348C, 0048349C, 004834C4) и TJPEGImage (00483660 итд - offsets даны для рапакованного файла по ссылке). Я бы начал с них. Учтите, что JPEG - это потоковый формат, файлы, наверняка, читаются через TFileStream (или его наследников) и либо там переопределен метод, осуществляюший дешифровку, либо он вставлен между ним и методом обработки изображений.

    Программа, к слову, выглядит немыслимым убожеством - и по замыслу, и по исполнению.

    И да, самое важное: свои изображения там можно загружать совершенно легально, через меню, без всякой криптографии :)

    Upd1: Картинки, таки разнятся по заголовкам, поди из разных мест воровали.

    Upd2: Заглянул в ресурсы - там хранятся маски, накладываемые на изображение. Совершенно не знаком с Delphi, но уверен, что их можно либо сделать прозрачными, либо пропатчить так, чтобы не накладывались :)

    Кстати, при клике по иконке (100*100, первый файл в SGDT), приходим сюда: 00406C40 / procedure TMainForm.IntroClick()

    Начальное чтение SGDT-файлов идет здесь (00404098 LoadIcons(), длинная процедура, грузит в цикле все файлы из директории fsg_), как и ожидалось, через TFileStream (0040457C).

    Думаю, стоит вдумчиво пройти в отладчике всю эту процедуру 00406C40 TMainForm.IntroClick(), похоже, что разбор идет там. Кстати, попалось одно странное место (проверка каких-то сигнатур) - 00403FD4.

    Здесь, на всякий случай, map file от IDA: http://www.multiupload.com/OVDAXMGGKI
     
  8. Vladislaw

    Vladislaw New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2011
    Сообщения:
    7
    спасибо, буду смотреть
     
  9. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Вот еще в помощь - от автора формата (старая версия): http://vseznaylov.narod.ru/setupkns.exe
     
  10. Vladislaw

    Vladislaw New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2011
    Сообщения:
    7
    Конструктор я видел, но созданные им файлы не читаются в этих играх
     
  11. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Наверняка, пара констант поменялась. Уверен, что основное ядро осталось тем же. Да и, собственно, цена вопроса - добросовестно пройти в отладчике 2 функции - начальной загрузки (там где создается TFileStream) и отработку клика по иконке. В одной из них спрятана дешифровка, дальше уже работает компонент TJPEGImage. В карте памяти куча "говорящих" имен функций. Расставьте брэйки, будет понятен ход выполнения. Судя по крайне примитивному формату файла, шифрование там тоже должно быть "на уровне" :)

    TIP: я посмотрел на оф.сайте - там куча этих игр и картинок, начинка у всех должна быть одинакова. Возьмите самую маленькую по размеру игру - будет и быстрее, и проще. + Поиграйтесь в старом редакторе с заменой _одной_ картинки (третьей, четвертой ...) будет понятно, как строится заголовок, вряд ли он сильно поменялся. Попортьте _одну_ картинку - без изменения размера - станет яснее, где там (раньше была) контрольная сумма (если вообще есть - не верьте чужим описаниям, верьте своим глазам).

    Кроме того, на какой-нибудь помойке может заваляться и старая версия одной из игр, для которой сгодится старый конструктор - посмотрите, для начала, по этому же линку. Если найдете - будет полный учебный комплект. Потренируетесь, займетесь новой версией :)

    Upd:

    вот здесь сборник (почти) всех старых версий, в том числе и под этот конструктор: http://www.swdeluxe.narod.ru/games/erotic/sga/pagesga.htm
     
  12. Shunt

    Shunt New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2011
    Сообщения:
    1
    Мда...
     
  13. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Судя по отсутствию новых картинок, с отладчиком у TS еще хуже, чем с девушками :-(

    Выдалось время, погонял в отладчике. Смотрел и плакал... Если Delphi - это диагноз, то BCPPB - видимо, диагноз в квадрате. Какое-то бессмысленное ерзанье по файлу, десятки раз выполняются одни и те же (ненужные) действия, на всем печать быдлокодерства...

    Только один пример - дешифровка. Два вложенных цикла. Во внутреннем вызывается API получения размера файла - который НИ РАЗУ не меняется. Для среднего размера файла, внутренний цикл выполняется, примерно, ~1,000 раз. Во внешнем цикле тоже есть бессмысленные вызовы, но это уже не имеет значения.

    Формат примитивен до ужаса, внутри файлов куча какого-то мусора (обфускация такая?), первые две картинки лежат открыто, остальные зашифрованы (вместе с мусором) "одним куском" примитивным самодельным криптором (гамма выбирается по некоторому смещению из ~2K блока мусорных данных, какие-то перестановки байт, даже вникать не стал... хлам.

    Программа работает _только_ с новым форматом и _только_ на дешифровку: http://www.multiupload.com/EBVAIAGBXO

    Для интересующихся, псевдокод дешифратора (HR 1.1)

    Код (Text):
    1. int __cdecl Decryptor_401BE0(BYTE *pSrc, BYTE *pDst)
    2. {
    3.   DWORD dwSize; // eax@1
    4.   int v3; // ST00_4@1
    5.   int v4; // eax@1
    6.   BYTE *iBufPos; // ecx@2
    7.   BYTE *pData; // ebx@2
    8.   int iPos; // edi@2
    9.   int iIdx; // esi@2
    10.   int dwDstSize; // eax@2
    11.   WORD wTemp; // ST12_2@3
    12.   signed int dwDstSize2; // ST00_4@3
    13.   signed int iVar1; // eax@3
    14.   int iReminder; // eax@3
    15.   BYTE iVar2; // ST11_1@3
    16.   BYTE *v15; // ebx@8
    17.   int v16; // esi@8
    18.   int v17; // eax@8
    19.   int v18; // ecx@8
    20.   signed int iCnt; // [sp+10h] [bp-8h]@1
    21.   BYTE *pTempArr; // [sp+14h] [bp-4h]@1
    22.  
    23.   dwSize = TStream_GetSize(pDst);
    24.   pTempArr = (BYTE *)operator new__(dwSize);
    25.   TStream_SetPosition(pDst, 0, v3);
    26.   v4 = TStream_GetSize(pDst);
    27.   // TMemoryStream@SetSize_4538F0
    28.   (*(void (__fastcall **)(BYTE *, BYTE *, int))(*(_DWORD *)pDst + 4))(pDst, pTempArr, v4);
    29.   iCnt = 0;
    30.   do
    31.   {
    32.     iPos = TStream_GetSize(pDst) - 1;
    33.     dwDstSize = TStream_GetSize(pDst);
    34.     iBufPos = (BYTE *)176;
    35.     iIdx = (dwDstSize - 1) % 176 - 1;
    36.     pData = &pTempArr[iPos - 1];
    37.     while ( iPos > 0 && pSrc )
    38.     {
    39.       LOBYTE(wTemp) = pSrc[iIdx];
    40.       HIBYTE(wTemp) = *pData;
    41.       dwDstSize2 = TStream_GetSize(pDst);
    42.       iVar1 = iPos-- + wTemp;
    43.       iReminder = iVar1 % dwDstSize2;
    44.       iVar2 = pData[1];
    45.       pData[1] = pTempArr[iReminder];
    46.       iBufPos = pTempArr;
    47.       pTempArr[iReminder] = iVar2;
    48.       LOBYTE(iBufPos) = pSrc[iIdx--];
    49.       (pData--)[1] -= (unsigned __int8)iBufPos;
    50.       if ( iIdx < 0 )
    51.         iIdx = 175;
    52.     }
    53.     ++iCnt;
    54.   }
    55.   while ( iCnt < 5 );
    56.   TStream_SetPosition(pDst, 0, iBufPos);
    57.   v17 = TStream_GetSize(pDst);
    58.   // TMemoryStream@SetCapacity_456DA4
    59.   (*(void (__fastcall **)(BYTE *, BYTE *, int))(*(_DWORD *)pDst + 8))(pDst, pTempArr, v17);
    60.   TStream_SetPosition(pDst, 0, v18);
    61.   v16 = 0;
    62.   v15 = pTempArr;
    63.   while ( v16 < TStream_GetSize(pDst) )
    64.   {
    65.     *v15 = 0;
    66.     ++v16;
    67.     ++v15;
    68.   }
    69.   return _close((int)pTempArr);
    70. }
     
  14. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    К слову, сам SGDT decryptor лежит здесь (h**p://gazlan.narod.ru/toy_tools/bitch.rar).
     
    Коцит нравится это.
  15. Viderer

    Viderer New Member

    Публикаций:
    0
    Регистрация:
    28 май 2018
    Сообщения:
    1
    Кому лень искать дешифраторы и всякую фигню, вот готовые файлы изображений соперников http://depositfiles.com/files/r0ltt07x2
     
  16. zerodawn

    zerodawn Member

    Публикаций:
    0
    Регистрация:
    16 янв 2018
    Сообщения:
    94
    Посоны, мне лень искать лекарство от некрофилии. Дайте линк плиз ему.

    Ах да, вот: natribu.org
     
  17. Leopard

    Leopard New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2021
    Сообщения:
    14
    Несколько раз встречал в инете запросы на программу для просмотра SGDT файлов . Вот она готова ;)
     

    Вложения:

    • SGDT_Viewer.zip
      Размер файла:
      715,1 КБ
      Просмотров:
      650
  18. Leopard

    Leopard New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2021
    Сообщения:
    14