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

 eXeL@B —› Вопросы новичков —› Распаковать Interface.dat
Посл.ответ Сообщение

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

Создано: 30 октября 2011 13:48
· Личное сообщение · #1

Есть электронная книга:
http://www.multiupload.com/YQ5RTOE9OJ

Есть Run.exe, написана на Delphi
И interface.dat, где хранятся файлы. Каком образом упаковано понять не могу, но там точно есть папки (html, jpg, jpg_) и файлы.

Пробовал DeDe для декомпиляции ехе, но знаний не хватает понять алгоритм.
Одно что понял, что все должно находится в папке Run, иначе программа закрывается.

Вопрос как распаковать interface.dat или хоть в какую сторону копать?



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

Создано: 30 октября 2011 13:50
· Личное сообщение · #2

Что интересно, файл interface.dat при архивации практически не сжимается, значит являет собой какой-то архив, но перебрал все известные мне - не помогло.
Run.exe вытягивает файлы на ходу.




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 30 октября 2011 14:19
· Личное сообщение · #3

отладчик, бряки на открытие-чтение из файла - далее по коду




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

Создано: 30 октября 2011 15:19 · Поправил: gazlan
· Личное сообщение · #4

volser пишет:
понять алгоритм


Вероятнее всего, нечто на основе ZLib (но не сама библиотека в "чистом" виде).
Натравить IDR и посмотреть дерево классов. Обратить внимание на TComprStream

fcf5_30.10.2011_EXELAB.rU.tgz - run.rar

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

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

Создано: 30 октября 2011 16:41
· Личное сообщение · #5

Ну этот класс TComprStream я нашел и пр помощи ДеДе.
Попробовал открыть файл при помощи zlib 1.23
Ошибка вылете здесь:

Code:
  1. function TDecompressionStream.Read(var Buffer; Count: Longint): Longint;
  2. begin
  3.   FZRec.next_out := @Buffer;
  4.   FZRec.avail_out := Count;
  5.   if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
  6.   while (FZRec.avail_out > 0) do
  7.   begin
  8.     if FZRec.avail_in = 0 then
  9.     begin
  10.       FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer));
  11.       if FZRec.avail_in = 0 then
  12.       begin
  13.         Result := Count - FZRec.avail_out;
  14.         Exit;
  15.       end;
  16.       FZRec.next_in := FBuffer;
  17.       FStrmPos := FStrm.Position;
  18.       Progress(Self);
  19.     end;
  20.     CCheck(inflate(FZRec, 0)); <--- Здесь ошибка
  21.   end;
  22.   Result := Count;
  23. end;


не хватает знаний асма, что бы понят в чем отличия этого метода в ехе

inflate думаю навряд что как-то правил, возвращает код -3,



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

Создано: 30 октября 2011 16:44
· Личное сообщение · #6

А есть обратная совместимость между ZLib 1.14-1.23? Может надо просто версию другую zlib взять?




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 30 октября 2011 17:50
· Личное сообщение · #7

Начни с отладчика С открытия файла, обрати внимание на:
Code:
  1. 0046E03B  XOR DWORD PTR SS:[EBP-8],49B17EF7
  2. 0046E042  XOR DWORD PTR SS:[EBP-C],B153FEBA

и как далее осуществляется распаковка.



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

Создано: 30 октября 2011 19:01
· Личное сообщение · #8

ладно, просто никогда ехе не дебажил ))

Какой дебагер для этого юзать? Тот что в делфи?




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 30 октября 2011 19:12
· Личное сообщение · #9

http://exelab.ru/download.php?action=get&n=OTY1



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

Создано: 30 октября 2011 19:53
· Личное сообщение · #10

А как узнать что лежит по адресу 49B17EF7, B153FEBA?
Пытался в вотче такое прописать [49B17EF7], говорит невозможно прочитать.




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 30 октября 2011 19:54
· Личное сообщение · #11

хмм =) это константы



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

Создано: 30 октября 2011 20:33
· Личное сообщение · #12

мда )) смотрю в книгу вижу фигу.
Может на пальцах подскажешь алгоритм?

я только понял что:

local2 := local2 xor 49B17EF7;
local3 := local3 xor B153FEBA;
local2 := local2 + local3;

потом вызов какой-то

if local2 = local3 then

и запутался )))




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

Создано: 31 октября 2011 00:15 · Поправил: gazlan
· Личное сообщение · #13

volser пишет:
Попробовал открыть файл при помощи zlib 1.23

Zip-stream начинается с маркера в позиции 08 (2 байта - метод компрессии - Best), перед ним 8 байт, в которых, возможно, хранится длина блока, unpacked size итп - надо разбираться. Если Zip-поток не зашифрован, то распаковку надо начинать с позиции 0Ah (подать блок в inflate). Различия между версиями ZLib есть, но после 1.04 - незначительные. С вероятностью 0.99 все, что упаковано версией 1.13 и старше, будет успешно распаковано последней версией ZLib.

Update.

НЕ зашифрован, спокойно распаковывается. Выделяем первый блок (с небольшим запасом - до следующего маркера 78 DA), суем в inflate - и voila!

UnDeflate v1.00 Beta 1 - Deflate data decompressor

Name: undf1001.zip
URL: ftp://ftp.sac.sk/pub/sac/pack/undf1001.zip
Size: 22917


3523_30.10.2011_EXELAB.rU.tgz - block.rar



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

Создано: 31 октября 2011 20:03
· Личное сообщение · #14

Навряд это маркер 78 DA
Протестировал, UnDeflate нормально распаковывает с 11 по 16987 символы.
Если меньше, то виснет и генерит большой файл, если больше, то все равно результат не меняется, дальше просто отрубает.




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 31 октября 2011 20:48
· Личное сообщение · #15

Длина первого блока поксорена в первых двух байтах (плюс что-то еще), константы выше.



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

Создано: 02 ноября 2011 21:49
· Личное сообщение · #16

Что значит поксорена в первых двух байтах?
Так?
inStream.Read(long, 4);
long := long xor $49B17EF7;
long := long and $FFFF;

что-то не сходится...




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 02 ноября 2011 23:13
· Личное сообщение · #17

в двух двордах т.е. =) сорри
http://falinc.narod.ru/Stuns.zip - вот еще стунс попробуй, картинки вроде все распаковывает.

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

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

Создано: 03 ноября 2011 02:25
· Личное сообщение · #18

Прикольная прога, но тоже только первый блок преодолела )), потом нагенерило тучу файликов




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

Создано: 04 ноября 2011 21:03
· Личное сообщение · #19

volser пишет:
если больше, то все равно результат не меняется, дальше просто отрубает


Разумеется. Inflate доходит до конца сжатого потока и останавливается. Судя по контексту, похоже на каталог собственной файловой системы. IMHO, дальше требуется не гадание с Undeflate, а вдумчивый анализ кода в отладчике: сопоставить каталог с файлом данных, определить границы файлов, попытаться сначала сдампить RAW-blocks, затем расшифровывать/распаковывать по отдельности (внешними утилитами). Если все ОК, писать собственный распаковщик. Совершенно необязательно, чтобы все блоки обрабатывлись одинаково. Возможно, например, что каталог незашифрован, а все остальные блоки - зашифрованы. Debugger is your best friend!




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 04 ноября 2011 22:11
· Личное сообщение · #20

вернулись к сообщению №2



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

Создано: 05 ноября 2011 01:38 · Поправил: Qbik
· Личное сообщение · #21

http://aluigi.altervista.org/mytoolz/offzip.zip

A very useful tool to unpack the zip (zlib/gzip/deflate) data contained in any type of file included raw files, packets, zip archives, executables and everything else.
it's needed only to specify the offset where the zip data starts or using the useful -S search options able to find any possible zip block contained in the provided file.
there are also other options for extracting all the zip blocks which have been found or dumping them as in their original compressed form.
it's also possible to choose a windowBits value for scanning both the zlib (RFC1950) and deflate (RFC1951) blocks (for example -z -15 for common zip files and so on).
the files will be dumped with a guessed extension that can be useful for their quick identification.
how to dump all the zlib compressed files in an archive:
- offzip.exe -a input_archive output_folder 0
how to dump all the deflate compressed files in an archive:
- offzip.exe -z -15 -a input_archive output_folder 0

Рипает все что пожато Zlib'om внутри архива. На выходе получилось 1200+ файлов.

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

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

Создано: 07 ноября 2011 00:06
· Личное сообщение · #22

Вау Все распаковало, правда имена файлов не правильные, а это проблема ((

имена файлов находятся в первом блоке, этот offzip скинул этот блок в файл 00000008.dat
там имена файлов и скорее всего смещение и размер. Буду этот блок ковырять



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

Создано: 07 ноября 2011 00:25
· Личное сообщение · #23

первые 48 байт первого блока не понятно что.
Потом на каждый файл выделяется 80 байт,
из них 64 байта имя файла, а 8 пока не понятно что, наверное смещение



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

Создано: 07 ноября 2011 00:48
· Личное сообщение · #24

в блоке 80 байт:
64 - имя
8 - ?
8 - размер файла




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 ноября 2011 10:51
· Личное сообщение · #25

Пользуйся кнопкой "Правка", не создавай сообщения подряд.



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

Создано: 07 ноября 2011 12:37 · Поправил: Tyra
· Личное сообщение · #26

volser пишет:
в блоке 80 байт:
64 - имя
8 - ?
8 - размер файла

8 - ? = начало и конец запакованного блока !
Все файлы названы по начальному блоку смещения в оригинальном файле.
Для соответствия со смещениями из 00000008.dat Вычитай из имени файла 425D.
Размер будет соотвествовать.



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

Создано: 07 ноября 2011 14:46
· Личное сообщение · #27

volser пишет:
Вау Все распаковало, правда имена файлов не правильные, а это проблема ((

Ну имена там предоставлены ввиде смещения файла, по скольку универсальный распаковщик



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

Создано: 08 ноября 2011 00:10 · Поправил: volser
· Личное сообщение · #28

Все разобрал, кроме как определить размер первого блока сжатый. Вроде и байты уже все использовал в первых 8 байтах зашифрован размер не сжатый. потом идет этот блок, а где он закачивается не пойму как определить
Что пропустил?

Сори, уже все понял получилось все извлечь. Всем большое спасибо!



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

Создано: 09 января 2012 19:14
· Личное сообщение · #29

volser у меня очень похожая программа и я хотел вытащить оттуда все файлы, но у меня не получается. Можете помочь?
Ссылка.: www.megaupload.com/?d=UDYN5OQM
Там также все файлы находятся в interface.dat. А запуск самок криги через Run.exe




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 09 января 2012 19:40
· Личное сообщение · #30

mcvova
В запросы на взлом с этим.
Тема закрыта за нарушение п.3 правил форума.


 eXeL@B —› Вопросы новичков —› Распаковать Interface.dat
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати