Вопрос про PE-файл, про количество элементов в таблице директорий.

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 25 ноя 2009.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Друзья!
    Прежде всего, хотелось бы всех нас поздравить. Мелкомягкие приготовили нам сюрприз. Некоторые файлы *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):
    1. 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):
    1. Почему
    ? Значит, неверное значение 0 функция LoadLibrary проглатывает на раз, а при верном 12h отказывается работать! Ну, или предположения есть какие-нибудь?
    ...Мне, конечно даром сия прога не нужна как текстовый редактор, просто хочется поковыряться и выяснить.
    Спасибо.
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    amvoz
    Выложи файл.
     
  3. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Понимаешь, я его заразил...
    Я написал безобидный вирь, который патчит точку входа 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
     
  4. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    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
     
  5. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    XP-то ладно, а вот Win 7 в моём варианте- там ноли...
    Может такое быть, если Win 7 демо версия?
    Хотя, по идее простенький notepad.exe должен работать и на демоверсии. И поле это должно быть правильным.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Аналогично, вполне нормальный файл - 0x10
    http://rapidshare.com/files/312004924/notepad.exe.html
    Скорее всего бажит "вирус".
     
  7. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Вирус не бажит.
    Во-первых, он нормально заражает мой notepad.exe
    Во-вторых, он нормально заразил твой notepad.exe
    И в том и другом случае вышеупомянутое поле осталось равно 10.То есть лишнего не патчит, а патчит только точку входа.

    Но твой notepad.exe на моём компе не запускается ни заражённый, ни чистый. То есть при заражении он проецируется в память как исполнимый и заражается (смотрел всё в том hiew), но не запукскается. Почему- ума не приложу. Но щас не об этом тема.

    ...Короче, чё думать-то? Получается, тот файл изначально был с нолями, где должно быть количество директорий. Что не помешало ему выгрузиться в память и заразиться (ну да, я же оперрировал всего лишь RVA точки входа, просто находил файловое смещение точки входа, отсчитывал его от значения, возвращённого MapViewOfFile (и прописывал туда код)).

    Видать, демо-версия. Блин. Предположение корявое, но других всё равно нет. Когда-нибудь, может, возвращусь к этой теме. Всем спасибо.
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    тут уже ботнетом попахивает ))
     
  9. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Чего?
     
  10. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    У тебя семёрка не х64 случаем (иначе зачем править Machine)? Почитай-ка лучше про формат PE+ ака PE64.
     
  11. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    reverser
    Да не. Тоже сталкивался. notepad.exe на 7ке после upx-a отказывается работать, как и calc.exe
    хз почему.
     
  12. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    reverser не у меня (у меня x32) а у того парня, чей notepad.exe я рассматриваю. Запросто может быть семёрка х64, но он в этом деле не шарит, ничё определённого сказать не может.
    Потому там и поля править приходится. Получается, два стандарта PE файлов. Плохо.
     
  13. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    файл где?

    По какой спецификации это вобще можно редактировать?
    Тоже самое, что в любом другом форматированном файле поправить в хидере какое-то поле от балды.
    Эти поля генерит линкер в зависимости от архитектуры.

    Формат один. Значений поля Magic несколько.

    Совет: Удалить статьи. Прочитать спецификацию на формат файла, либо, хотя бы хидер в sdk посмотреть.
     
  14. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Asterix
    =)))
     
  15. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Совсем не от балды
    http://www.wasm.ru/article.php?article=green2red02

    По поводу того, где файл, смотри сообщение номер 3
     
  16. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
  17. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    Единственно-верный источник
     
  18. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Статья устарела, в ней нет значения IMAGE_FILE_MACHINE_AMD64 = 0x8664.