Внедрение в PE. Немного нужны пояснения

Тема в разделе "WASM.WIN32", создана пользователем DUDEintA, 27 июн 2011.

  1. DUDEintA

    DUDEintA New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2011
    Сообщения:
    2
    Доброго времени суток.

    Пишу программу, внедряющуюся в PE файл, создавая дополнительную секцию кода в конце.
    Читал статьи Касперского тут: http://www.insidepro.com/kk/018/018r.shtml
    В принципе, все понятно, только вот остается вопросы:

    1) Как использовать свои данные? Помещать их в секцию кода? Т.е. даже простейшая программа, выводящая Message Box, потребует создания константы с текстом сообщения в секции данных.

    2) Как собственно вызвать Message Box? Мне нужно убедиться, что в таблице импорта есть GetProcAddress, и собственно вызывать так: GetProcAddress (..."MessageBox"...), затем использовать этот адрес для вызова.


    И вообще, правильно ли я понимаю алгоритм внедрения:
    1) Допустим, программа (X-code, пользуясь терминами статьи) уже написана. Достаем ее секцию кода из .exe, пишем как последнюю секцию файла.
    2) Анализируем таблицу импорта, убеждаемся, что там есть "GetProcAdderss"
    3) Переделываем OEP на 1-ю команду новой секции кода
    4) Добавляем в конец jmp на старую OEP
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    еще можно использовать LoadLibraryA/GetProcAddress.

    Вообще механизмов очень много. Касперски описал только общие идеи.
    Очень советую почитать документацию на формат PE.
    смотря на сколько вы хотите изменить начальный файл. Если просто начинаете, это то да, можно в добавленную секцию Вашего кода.

    Вообще иногда сканируют таблицу импорта и вызовы делают не через GEtPRocAddress
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
  4. 0xJace

    0xJace New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2010
    Сообщения:
    54
    Не обязательно. Можно найти базу kernel32 в адресном пространстве процесса, и через таблицу экспорта добраться до GetProcAddress. Т.е. поиск адреса GetProcAddress разбивается на две задачи:
    1. Поиск базы kernel32. Тут несколько способов.
    2. Парсинг таблицы экспорта и вычисление адреса GetProcAddress.

    P.S. Тему наверное надо было в разделе WASM.VIROLOGY создавать.
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    DUDEintA
    И вообще-то неплохо усечь, что Крис Касперски и Касперский - это разные люди :)
    Это оттого что много спрашиваешь и мало читаешь. Твои вопросы освещены в статьях и на форуме уже в 100-й раз задаются.
     
  6. DUDEintA

    DUDEintA New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2011
    Сообщения:
    2
    Спасибо большое за ссылки.

    Меня это особо не волнует. Говорилось об авторе статьи.