Сейчас на форуме: (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Куда дальше? DOS.exe... |
Посл.ответ | Сообщение |
|
Создано: 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. Куда двигаться дальше? Подскажите! Тут оригинальный файл и распакованный. ![]() ![]() |
|
Создано: 18 августа 2010 15:23 · Личное сообщение · #2 31010 пишет: откуда на него выходит программа, я так и не понял. Там в листинге только строчки seg:xxxx и dseg:xxxx Как вы все привыкли к плоской памяти ![]() 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 ![]() |
|
Создано: 18 августа 2010 17:00 · Поправил: 31010 · Личное сообщение · #3 Вот подправил я файлик, а он при запуске пишет: "overlay not found". Что-то я упустил. Я так понимаю, что-то не хватает. И это что-то, наверно, могло потеряться при распаковке. Кто даст мыслю? Уже правленый файл: ![]() ![]() |
|
Создано: 18 августа 2010 20:42 · Личное сообщение · #4 |
|
Создано: 18 августа 2010 21:04 · Поправил: 31010 · Личное сообщение · #5 |
|
Создано: 18 августа 2010 22:29 · Поправил: 31010 · Личное сообщение · #6 |
|
Создано: 18 августа 2010 22:45 · Личное сообщение · #7 |
|
Создано: 19 августа 2010 09:53 · Личное сообщение · #8 31010 пишет: copy /b zzz.exe+qqq.ovr zzz1.exe сделал так, файл увеличился по размеру. но при запуске все равно пишет, что оверлей не найден. Может как-то вручную надо прикручивать? И еще вопрос: после распаковки с параметром удаления оверлея и просмотре информации о файле, unp411 пишет, что оверлей в файле есть! Его же надо удалять перед правкой ? Или нет? Или как? ![]() |
|
Создано: 19 августа 2010 11:33 · Поправил: neomant · Личное сообщение · #9 Поиск по формату оверлеев в EXE файлах ни к чему не приводит ![]() В заголовке есть поле, в котором указывается количество оверлеев, но где они распологаются и каков их размер - об этом история умалчивает. Как вариант можешь подебажить свою прогу на предмет подгрузки оверлея, а это происходит так: "MS DOS использует функцию EXEC для загрузки оверлеев. Эта функция, номер 4BH прерывания 21H, используется также для загрузки и запуска одной программы из другой, если поместить код 0. Если в AL поместить код 3, то тогда будет загружен оверлей. DS:DX должны указывать на строку, дающую путь к файлу оверлея, завершаемую байтом ASCII 0." ----- Следуй за белым кроликом ![]() |
|
Создано: 19 августа 2010 14:54 · Личное сообщение · #10 |
|
Создано: 19 августа 2010 15:15 · Личное сообщение · #11 Code:
Примерно так, если, конечно, не реализован свой загрузчик оверлея. То есть ставим бряк на 21h прерывание при условии равенства AX=4B03h. Затем дополнительно смотрим что у нас по DS:DX и трассируем функцию - что и откуда она берёт чтобы загрузить оверлей. ----- Следуй за белым кроликом ![]() |
|
Создано: 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:
таким образом танцуем с обработчиком sub_364C7 ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 20 августа 2010 08:06 · Личное сообщение · #13 А может ли быть такое: при распаковке адреса строк оверлея "сдвинуты в плюс" на разницу распакованного и упакованного тела файла? И обращения к оверлею происходят не к самому ему, а в пустоту или вообще к другим функциям, которые вообще ни при чем? Я сейчас не могу это посмотреть, т.к. не на том компе... В этом случае надо найти "обращения к оверлею" и поправить их. Я прав или нет? ![]() |
|
Создано: 20 августа 2010 08:54 · Личное сообщение · #14 |
|
Создано: 20 августа 2010 12:18 · Поправил: OKOB · Личное сообщение · #15 начало оверлея нужно перенести в файловое смещение 75400h, удалив 190 байт (сигнатура начала оверлея тоже MZ) ![]() ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 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? ![]() |
|
Создано: 20 августа 2010 15:17 · Поправил: neomant · Личное сообщение · #17 31010 пишет: И что значит сигнатура начала оверлея тоже MZ? Уууу. Учим матчасть. ----- Следуй за белым кроликом ![]() |
|
Создано: 20 августа 2010 15:41 · Личное сообщение · #18 |
|
Создано: 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 ![]() ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 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... |