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

 eXeL@B —› Вопросы новичков —› Куда дальше? DOS.exe...
Посл.ответ Сообщение

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

Создано: 18 августа 2010 12:09 · Поправил: 31010
· Личное сообщение · #1

Имеется комплекс, состоящий из нескольких приложений, работающих в DOS. К нему по идее должен идти ключ MicroPhar, которого соответственно нет. Для некоторых приложений уже есть ломаные EXE. Но для работы возникла необходимость подключить еще одно приложение - RVCAD, которое при запуске пишет, что ключика-то нет: Key not present...! Бьюсь уже больше недели...
Что делал:
1. Запустил fa18 и узнал. чем запакован - EXEPACK v.5.31.009.
2. Пытался распаковать вручную, но видать опыта совсем мало...
3. Распаковывал unp411.
4. Загрузил в IDA (при анализе пишет: The input has extra infomation at the end (tail B4B58h)), нашел Key not present..., но откуда на него выходит программа, я так и не понял. Там в листинге только строчки seg:xxxx и dseg:xxxx.

Куда двигаться дальше? Подскажите!

Тут оригинальный файл и распакованный.

623c_18.08.2010_CRACKLAB.rU.tgz - RVCAD.rar




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 18 августа 2010 15:23
· Личное сообщение · #2

31010 пишет:
откуда на него выходит программа, я так и не понял. Там в листинге только строчки seg:xxxx и dseg:xxxx


Как вы все привыкли к плоской памяти . Есть сегмент dseg в котором нашлась искомая строчка по смещению в сегменте 382С. Вот от этого смещения и танцуем. Alt+B (Binary search) ищем 2С 38 и находим

seg060:14BB mov ax, 382Ch

Далее Alt+R - привязываем смещение к нашему сегменту dseg и получаем

seg060:14BB mov ax, offset aKeyNotPresentO ; "Key not present or not enabled for this"...

и так далее...

ниже еще такое же смещение и все время попадаем на эти участки при проверке переменной word_7BB24, которая находится выше самого сообщения. Теперь уже с нею по перекрестным ссылкам нужно бороться.

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 18 августа 2010 17:00 · Поправил: 31010
· Личное сообщение · #3

Вот подправил я файлик, а он при запуске пишет: "overlay not found". Что-то я упустил. Я так понимаю, что-то не хватает. И это что-то, наверно, могло потеряться при распаковке. Кто даст мыслю?
Уже правленый файл:

b3fe_18.08.2010_CRACKLAB.rU.tgz - RVCAD.rar




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 18 августа 2010 20:42
· Личное сообщение · #4

31010 пишет:
The input has extra infomation at the end (tail B4B58h)


Это и был оверлей. Нужно в исходном файле его отрезать и лепить к распакованному. Повезет если загрузчик оверлея считает его длинну от конца файла.

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 18 августа 2010 21:04 · Поправил: 31010
· Личное сообщение · #5

OKOB пишет:
Это и был оверлей. Нужно в исходном файле его отрезать и лепить к распакованному. Повезет если загрузчик оверлея считает его длинну от конца файла.


Подскажите, плиз, как это сделать или ссылку дайте, где почитать!!! Файлик-то DOS 16 бит...



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

Создано: 18 августа 2010 22:29 · Поправил: 31010
· Личное сообщение · #6

Хвост содрал с упакованного файла все той же UNP4.11. Сейчас надо его к новому файлу добавить... А как?




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 18 августа 2010 22:45
· Личное сообщение · #7

copy /b zzz.exe+qqq.ovr zzz1.exe

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 19 августа 2010 09:53
· Личное сообщение · #8

31010 пишет:
copy /b zzz.exe+qqq.ovr zzz1.exe


сделал так, файл увеличился по размеру. но при запуске все равно пишет, что оверлей не найден.
Может как-то вручную надо прикручивать?
И еще вопрос: после распаковки с параметром удаления оверлея и просмотре информации о файле, unp411 пишет, что оверлей в файле есть! Его же надо удалять перед правкой ? Или нет? Или как?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 19 августа 2010 11:33 · Поправил: neomant
· Личное сообщение · #9

Поиск по формату оверлеев в EXE файлах ни к чему не приводит.
В заголовке есть поле, в котором указывается количество оверлеев, но где они распологаются и каков их размер -
об этом история умалчивает. Как вариант можешь подебажить свою прогу на предмет подгрузки оверлея, а это
происходит так:
"MS DOS использует функцию EXEC для загрузки оверлеев. Эта функция, номер 4BH прерывания 21H, используется
также для загрузки и запуска одной программы из другой, если поместить код 0. Если в AL поместить код 3, то
тогда будет загружен оверлей. DS:DX должны указывать на строку, дающую путь к файлу оверлея, завершаемую
байтом ASCII 0."

-----
Следуй за белым кроликом




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

Создано: 19 августа 2010 14:54
· Личное сообщение · #10

Я или запутался или что-то опять не так. нет в файле команды 4Bh...




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 19 августа 2010 15:15
· Личное сообщение · #11

Code:
  1. MOV AH,4Bh
  2. MOV AL,3
  3. INT 21h

Примерно так, если, конечно, не реализован свой загрузчик оверлея.
То есть ставим бряк на 21h прерывание при условии равенства AX=4B03h.
Затем дополнительно смотрим что у нас по DS:DX и трассируем функцию - что и откуда она берёт чтобы загрузить оверлей.

-----
Следуй за белым кроликом





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 19 августа 2010 18:15 · Поправил: OKOB
· Личное сообщение · #12

neomant пишет:
если, конечно, не реализован свой загрузчик оверлея


тут манагер оверлея наверное сидит на Int 3Fh

а вообще снова танцуем от месажа

dseg:2DF1 aOverlayNotFoun db 0Dh,0Ah
dseg:2DF1 db 'Overlay not found',0Dh,0Ah,0

ищем F1 2D и попадаем в загрузчик где и открытие "самого себя" и сигнатурка файла проверяется и копание в заголовке с расчетом происходит

seg008:179D cmp word ptr [si], 'ZM'


а установка обработчика на прерывание 3Fh
Code:
  1. seg008:19CE                 mov     byte_7A972, 1
  2. seg008:19D3                 mov     di, offset byte_7BE59
  3. seg008:19D6                 mov     al, [di]
  4. seg008:19D8                 mov     byte_7A973, al
  5. seg008:19DB                 push    es
  6. seg008:19DC                 mov     ah, 35h
  7. seg008:19DE                 int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
  8. seg008:19DE                                         ; AL = interrupt number
  9. seg008:19DE                                         ; Return: ES:BX = value of interrupt vector
  10. seg008:19E0                 mov     word ptr dword_7A974, bx
  11. seg008:19E4                 mov     word ptr dword_7A974+2, es
  12. seg008:19E8                 mov     al, [di]
  13. seg008:19EA                 mov     dx, cs
  14. seg008:19EC                 mov     ds, dx
  15. seg008:19EE                 assume ds:seg008
  16. seg008:19EE                 mov     dx, offset sub_364C7
  17. seg008:19F1                 mov     ah, 25h
  18. seg008:19F3                 int     21h             ; DOS - SET INTERRUPT VECTOR
  19. seg008:19F3                                         ; AL = interrupt number
  20. seg008:19F3                                         ; DS:DX = new vector to be used for specified interrupt


таким образом танцуем с обработчиком sub_364C7

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 20 августа 2010 08:06
· Личное сообщение · #13

А может ли быть такое: при распаковке адреса строк оверлея "сдвинуты в плюс" на разницу распакованного и упакованного тела файла? И обращения к оверлею происходят не к самому ему, а в пустоту или вообще к другим функциям, которые вообще ни при чем? Я сейчас не могу это посмотреть, т.к. не на том компе... В этом случае надо найти "обращения к оверлею" и поправить их. Я прав или нет?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 20 августа 2010 08:54
· Личное сообщение · #14

Может. Прав.

-----
Следуй за белым кроликом





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 20 августа 2010 12:18 · Поправил: OKOB
· Личное сообщение · #15

начало оверлея нужно перенести в файловое смещение 75400h, удалив 190 байт (сигнатура начала оверлея тоже MZ)

c641_20.08.2010_CRACKLAB.rU.tgz - RVCAD1.RAR

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 20 августа 2010 14:59 · Поправил: 31010
· Личное сообщение · #16

OKOB пишет:
начало оверлея нужно перенести в файловое смещение 75400h, удалив 190 байт (сигнатура начала оверлея тоже MZ)

А откуда взялось смещение 75400h? В исходном файле оверлей начинается с 47А00h. Я удалил все нули с этого адреса до начала оверлея. При запуске пишет кучу ошибок: Процессор NTVDM обнаружил недопустимую инструкцию. CS:0000 IP:xxxx OP:YY YY YY YY YY
А твой файл запускается, но запускается только из командной строки, а не из оболочки, и запускается некорректно: на экран, как и положено, выводится оболочка программы, но
1. В оболочке присутствует командная строка DOS,
2. Нет управления программой ни с клавиатуры, ни мышкой.

И что значит сигнатура начала оверлея тоже MZ?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 20 августа 2010 15:17 · Поправил: neomant
· Личное сообщение · #17

31010 пишет:
И что значит сигнатура начала оверлея тоже MZ?

Уууу. Учим матчасть.
Mark Zbikowski

-----
Следуй за белым кроликом




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

Создано: 20 августа 2010 15:41
· Личное сообщение · #18

Спасибо за разъяснения. Сигнатуру MZ я оставил в оверлее как и было. Но почему смещение должно быть 75400h? Как получилось это смещение? И почему файл ОКОВазапускается только из командной строки и в оболочке она присутствует, хотя и не должна.?




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 20 августа 2010 15:44
· Личное сообщение · #19

Возьми функцию seg008:1719 LoadOverlay из листинга и данные из заголовков запакованного и распакованного тобой файлов (поля оверлей, длина заголовка в параграфах, длина образа в станицах, байт на последней старнице...) и посчитай положение оверлея в обеих случаях.

31010 пишет:
И что значит сигнатура начала оверлея тоже MZ


Да то и означает, что каждый из 25 блоков оверлея (в цепочке) начинается с заголовка ЕХЕ файла.
В запакованном файле по смещениям 47A00h, 4A600h, 4CE00h, 4F800h, 51E00h, 54400h, 56A00h, 58E00h, 5B400h, 5FA00h, 61C00h, 65000h, 66600h, 69200h, 6AC00h, 6EA00h, 72C00h, 76000h, 7A600h, 7DA00h, 81E00h, 85200h, 86400h, 88C00h, 8AE00h


06e5_20.08.2010_CRACKLAB.rU.tgz - OvrMngr.lst

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 21 августа 2010 17:34 · Поправил: 31010
· Личное сообщение · #20

Орешек тверд, но все же мы не привыкли отступать...
Для меня он, конечно твердоват. Где-то все таки я ошибаюсь. Прошу подсказать, на каком этапе( а может и на нескольких)?
1. Распаковал файл с помощью unp411. Т.е. не снимал ни дамп, ни восстанавливал утерянные данные, как пишется в статьях...
2. Сдвинули оверлей на 190 кБ, я так и не понял, как посчитать смещение: где это (поля оверлей, длина заголовка в параграфах, длина образа в станицах, байт на последней старнице...) и посчитай положение оверлея в обеих случаях.? можно поподробнее?
3. В программе
а) после всех проверок cmp word_7BB24, 0 изменил jne на jn и наоборот.
б) пробовал менять единицу на ноль в строчке
dseg:3814 word_7BB24 dw 1 ; DATA XREF: sub_4E3F6+17Cr
Прошу совета и не судите строго, я все таки новичек!


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


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