Друзья! Прежде всего, хотелось бы всех нас поздравить. Мелкомягкие приготовили нам сюрприз. Некоторые файлы *exe, идущие в комлекте с WINDOWS 7 имеют формат, ОТЛИЧНЫЙ от традиционного. Я взял такой файл notepad.exe и пытаюсь hiewом его подкорректировать, чтобы он выполнился на моей системе (WINDOWS XP) ...За общие советы заранее спасибо (типа не лезь со свиным рылом да в калашный ряд). Но хотелось бы побольше конкретики. Она же такова. Итак, файл notepad.exe Прежде всего правлю такие поля: IMAGE_FILE_HEADER.Machine (правлю на 14C) IMAGE_OPTIONAL_HEADER.Magic (правллю на 10b) IMAGE_OPTIONAL_HEADER.ImageBase (пралю на 400000h) То есть тупо делаю его похожим на файл стаого образца, описанный здесь http://www.wasm.ru/article.php?article=green2red02 Это продвигает меня в деле. После этого выполняется такой код: Код (Text): LoadLibrary (notepad.exe) Это уже кое-что. Но, конечно, никаким выполнением notepad.exe и не пахнет пока. А вот далше начинаются сюрпризы. Подсоединяюсь отладчиком OllyDbg к процессу, реализующему LoadLibrary и изучаю там PE закголовок notepad.exe, смотрю поле IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes Это количество директорий и оно РАВНО НУЛЮ. Кстати. Сам по себе факт меня не очень смущает, ибо новый отладчик может быть так реализован, что, например, опрделяет по-другому количество директорий. Например, так: Количество директорий равно 12h (Не 10h), узнаю я это так: во-первых, в hiew видно, где начинается таблица секций и расстояние между ней и полем IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes легко подсчитывается, это всё и занято под массив директорий, во-вторых, смотрю размер опционального заголовка. Это поле IMAGE_FILE_HEADER.SizeOfOptionalHeader и оно всегда равно E8 (Возьмите любой файл и посмотрите). Так, а в моём случае это поле равно F8. То есть прибавлено 10h байт. Учитывай, что под каждую директорию отведено 8 байт, получаем, что две директории прибавлены, тоо есть по факту их 12h Ну, ладно, эти все новшества я как-нибудь переживу. А вот что меня смущает. Я вручную правлю поле IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes (количество директорий) то есть исправляю на правильное 12h, (10, 9)- всяко разно. Но теперь файл уже не загружается (функция LoadLibrary возвращает ноль) Код (Text): Почему ? Значит, неверное значение 0 функция LoadLibrary проглатывает на раз, а при верном 12h отказывается работать! Ну, или предположения есть какие-нибудь? ...Мне, конечно даром сия прога не нужна как текстовый редактор, просто хочется поковыряться и выяснить. Спасибо.
Понимаешь, я его заразил... Я написал безобидный вирь, который патчит точку входа notepad.exe: вызывает messagebox.exe и завершает процесс и скинул его парню по аське, что бы тот пртестировал его у себя на windows 7, тот протестировал, ни фига не получилось и он скинул мне notepad.exe, но УЖЕ ЗАРАЖЁННЫЙ. И я начал в нём ковыряться. Тот парень есейчас НЕ в аське. Хотя, подчеркну, вирь безобидный. Как вариант: ребята, может, кто другой скинет notepad.exe от windows 7? ...А так- на, коли доверяешь. Можешь просто не выполнять его и всё. Или где точка входа пропиши сразу прыжок на ExitProcess. Выкладываю файл с пропатченными полями IMAGE_FILE_HEADER.Machine (правлю на 14C) IMAGE_OPTIONAL_HEADER.Magic (правллю на 10b) IMAGE_OPTIONAL_HEADER.ImageBase (пралю на 400000h) Дабы ты их не патчил,если у тебя XP. Смотри сразу количество директорий. ...И это я не умею выладывать... Вот ссылка на рапиде http://www.rapidshare.ru/ulsuccess.php?sid=93et97ojs5eop9cg9lg5f0if10
0x150: 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 У меня и в Win7 и в XPSP2, тоесть искомое кол-во директорий. http://www.sendspace.com/file/59sovq
XP-то ладно, а вот Win 7 в моём варианте- там ноли... Может такое быть, если Win 7 демо версия? Хотя, по идее простенький notepad.exe должен работать и на демоверсии. И поле это должно быть правильным.
Аналогично, вполне нормальный файл - 0x10 http://rapidshare.com/files/312004924/notepad.exe.html Скорее всего бажит "вирус".
Вирус не бажит. Во-первых, он нормально заражает мой notepad.exe Во-вторых, он нормально заразил твой notepad.exe И в том и другом случае вышеупомянутое поле осталось равно 10.То есть лишнего не патчит, а патчит только точку входа. Но твой notepad.exe на моём компе не запускается ни заражённый, ни чистый. То есть при заражении он проецируется в память как исполнимый и заражается (смотрел всё в том hiew), но не запукскается. Почему- ума не приложу. Но щас не об этом тема. ...Короче, чё думать-то? Получается, тот файл изначально был с нолями, где должно быть количество директорий. Что не помешало ему выгрузиться в память и заразиться (ну да, я же оперрировал всего лишь RVA точки входа, просто находил файловое смещение точки входа, отсчитывал его от значения, возвращённого MapViewOfFile (и прописывал туда код)). Видать, демо-версия. Блин. Предположение корявое, но других всё равно нет. Когда-нибудь, может, возвращусь к этой теме. Всем спасибо.
У тебя семёрка не х64 случаем (иначе зачем править Machine)? Почитай-ка лучше про формат PE+ ака PE64.
reverser Да не. Тоже сталкивался. notepad.exe на 7ке после upx-a отказывается работать, как и calc.exe хз почему.
reverser не у меня (у меня x32) а у того парня, чей notepad.exe я рассматриваю. Запросто может быть семёрка х64, но он в этом деле не шарит, ничё определённого сказать не может. Потому там и поля править приходится. Получается, два стандарта PE файлов. Плохо.
файл где? По какой спецификации это вобще можно редактировать? Тоже самое, что в любом другом форматированном файле поправить в хидере какое-то поле от балды. Эти поля генерит линкер в зависимости от архитектуры. Формат один. Значений поля Magic несколько. Совет: Удалить статьи. Прочитать спецификацию на формат файла, либо, хотя бы хидер в sdk посмотреть.
Совсем не от балды http://www.wasm.ru/article.php?article=green2red02 По поводу того, где файл, смотри сообщение номер 3