Доброго времени. Ребята подскажите каким образом я могу правильно подкорректировать размер ImageBase exe-файла без вреда на его запуск.?? Например: у меня есть exe c базой 0х1314 мне нужно подправить на 0х0040 Посоветуйте, не обязательно программным путем, можно теорией... Спасибо. зы:сори,если не туда запостил...)
Если у ехе файла нету релоков то нету тривиального метода корекции ехе без вреда на его запуск. Поиск по форуму кейворды: конверт ехе в длл и.т.д.
Пример: есть EXE с базой в 0x400000 я использую в своей программе код типа: Код (Text): CreateThread(NULL, 0, &MyThreadProc, NULL, 0, &Thread); где функция "MyThreadProc" имеет адрес 0x406400 под дизасмом это выглядит как Код (Text): push 0x401000 ; Thread address push 0 push 0 push 0x406400 ; MyThreadProc address push 0 push 0 call CreateThread или же так, тоже самое только на другой лад...(для примера) Код (Text): mov eax, 0x401000 ; Thread address push eax push 0 push 0 mov eax, 0x406400 ; MyThreadProc address push eax push 0 push 0 call CreateThread На примере думаю видно, что используются абсолютные (это вроде так называется =\ запамятовал что-то) смещения, так вот, если менять ImageBase, то прийдётся менять ручками код в частях которого каким либо боком учавствует ImageBase... реализовать можно, но не за один вечер. +кажется мне что ещё много чего обдумать надо будет. Жесть кароче
Как такой вариант? Внедряем в исходный экзешник, код, который, перед началом выполнения, выделит память по старому базовому адресу, скопирует туда тело нашей программы, затем подправит кой-какие поля в PEB-е и, наконец, передаст управление по адресу: точка входа + старый ImageBase.
2 Extranger Думал я уже так...Но тут уже имеем дело с антивирусами...=\ Такс не очь подходит... Может есть еще какие-нить варианты?? %)
Еще не пробовал, но теоретически можно создать дескриптор с требуемой базой в LDT и загрузить его селектор в CS. Естественно, надо помнить о том, что внешние ф-ии в .dll, например, такого подвоха не ожидают и надо об этом позаботиться (разобрав таблицу импорта и вставив свои переходники, корректнирующие сегментные регистры). Но это пока только теоретически .
Extranger Релоки применяются загрузчиком. Не исключено, что он вам в проге все перековеркает. Имхо, проще разобраться с релоками и применить/поправить их. Если релоков нет - или через ж, или не получится.
это случайно требуется не для сокрытия пинча и других лоадеров с базой 13140000 от каспера, который их всех по базе и палит?
_basmp_ А никто и не призывает использовать данный прием, если дело касается файлов, у которых существуют таблица перемещаемых элементов. Просто релоки в экзешниках встречаются не так что б уж очень часто, а потому велика вероятность того, что у _stub_ как раз один из тех файлов, изменить базу которого, можно только через ж.
2msoft - нет. спасибо ребята за ответы offtop: заметил что даже на обычный HelloWord с базой 0х1314 ругается Avira...