Загрузка DLL из памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем os1r1s, 3 фев 2008.

  1. os1r1s

    os1r1s New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2007
    Сообщения:
    10
    Привет всем!
    У меня задача написать функцию по загрузке DLL из блока памяти

    HMODULE LoadLibraryFromMemory(LPCTSTR szDLLPath, LPCVOID lpMem, DWORD dwSize);
    szDLLPath при этом может указывать на несуществующий файл.

    После отработки функции LoadLibraryFromMemory, служебные структуры процесса должны быть заполнены таким образом, чтобы GetModuleHandle и аналогичные функции возвращали корректное значение, будто бы DLL-ка действительно загружена, причем из szDLLPath

    Думаю захучить NtOpenFile, NtCreateFile и сымитировать существование файла szDLLPath. Но возникает ряд вопросов, как вернуть правильный PHANDLE? Корректное значение вернет GetModuleHandle или еще надо править структуры процесса?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    если модифицируешь PEB, тогда GetModuleHandle отработает вполне нормально.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Дык ModuleHandle - это указатель на адрес загрузки модуля
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    абзац
    http://free-lance.ru/blogs/view.php?tr=169638
     
  5. os1r1s

    os1r1s New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2007
    Сообщения:
    10
    Всем спасибо за ответы, решил задачу другим путем, сделав функциональность загрузчика и поправив PEB.
     
  6. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    os1r1s
    Перехватить GetModuleHandle не пробовал?
    А на какой Х в таком случае тебе здалось самостоятельно грузить длл если при этом ты формируешь запись в PEB? Не проще ли было LoadLibrary вызвать? Это раз. И два - такой метод не канает для 9х систем, такшто метод однобокий, да и не понятный как то. Проще было выделить память, скопировать туда длл пересчитать релоки, и вызвать альтернативную функцию инициализации. И никакова гемора.
     
  7. EvilPhreak

    EvilPhreak New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    154
    k3internal
    Надо грузить DLL из памяти. LoadLibrary грузит из файла (очевидно). Сохранить DLL в файл и сделать LoadLibrary, а потом поправить PEB - плохо. pMem - промапленный файл? Релоки сделаны? Файл на диске нужен, т.к. кто-то может сделать GetModuleFileNameEx, а он тогда вернет имя не существующего файла.
     
  8. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    EvilPhreak
    элементарно для этого есть TFakeDll доктора Головы, да и ещё куча рабочих примеров.