Ответы пользователя по тегу DLL
  • Как получить HMODULE импортированой dll без LoadLibraryA() или GetModuleHandleA()?

    Взять адрес ExitProcess и пройтись по страницам влево поискать в начале страниц PE-заголовок, по идее его адрес и должен быть HMODULE, но я не настоящий бинарщик.
    Ответ написан
    2 комментария
  • Каким образом функции из dll получают управление?

    При динамической линковке код не "сваливается" в один сегмент, как это обычно происходит при статической линковке, в динамической библиотеке есть сегмент кода, у каждой библиотеки он свой. Каждая динамическая библиотека отображается в определенную область адресного пространства процесса, необязательно последовательную. Те страницы адресного пространства, куда отображается кодовый сегмент библиотеки помечаются как исполняемые. Функция получает управление в момент вызова, адрес по которому функция расположена определяется вызывающей функцией либо через таблицу импорта, которая заполняется в процессе динамической линковки, либо через непосредственный вызов GetProcAddr.
    Ответ написан
    2 комментария
  • Динамические библиотеки под windows?

    В средах разработки Microsoft и совместимых функции при статической линковке по умолчанию не попадают в таблицу экспорта динамической библиотеки, чтобы они попали в таблицу экспорта (и могли быть вызваны снаружи) необходимо их объявить как dllexport. Т.е. dllexport говорит линковщику, что этот символ необходимо поместить в таблицу экспорта.

    Первый вопрос не очень понятен, .lib нужен для того, чтобы динамическую библиотеку можно было подключать к другому проекту так же как статическую, без ручных импортов и LoadLibrary.
    Ответ написан
  • Антивирусы могут распознавать в DLL-файлах угрозы?

    Возможно, ты путаешь анализ файла и анализ процесса.
    DLL и EXE имеют одинаковый формат (PE executable), поэтому на уровне анализа файла DLL практически ничем не отличается от анализа EXE. Ищутся известные сигнатуры - хеши, последовательности байт или поведенческие, например определенная последовательность или сочетание инструкций или системных вызовов. Декомпиляция нужна только для ручного анализа. Сможет или не сможет антивирус распознать угрозу зависит от того, будет ли нужная сигнатура или эвристика в базах. Для анализа поведения на уровне файла может применяться что-то типа псевдо-выполнения кода, но это не то же самое, что анализ процесса, при котором в реальном времени перехватываются и анализируются системные вызовы, в частности к каким файлам и какое обращение идет.
    Ответ написан
    3 комментария
  • Можно ли получить дескриптор файла из памяти?

    С точки зрения системы, динамическая линковка это больше процесс работы со страницами памяти, чем с файлом, он очень похож на работу с файлом подкачки. У процесса нет файловых хэндлов на динамические библиотеки, процесс работает с базовым адресом библиотеки в адресном пространстве. Хэндлы "спрятаны" внутри системы, поэтому подсунуть их в процесс динамической линковки вы не можете. Для динамической линковки недостаточно просто отобразить содержимое файла в память.
    Чтобы реализовать функциональность эквивалентную динамической линковке, вам придется провести процесс динамической линковки вручную: т.е. отобразить нужную часть PE-файла на память, установить для нее необходимые аттрибуты (например пометить код как исполняемый), подгрузить необходимые DLL и заполнить таблицу импорта и вызвать DLLMain. Пример кода, который это делает можно найти, например, здесь:
    https://www.codeproject.com/Tips/430684/Loading-Wi...
    При этом, возможно, придется обходить какие-либо дополнительные защитные механизмы в новых версиях Windows и объяснять антивирусам что у вас нет плохих намерений.

    Если хочется исключить именно операцию открытия файла, и при этом не жалко память - можно выделить память и скопировать содержимое "псевдо-DLL" в буфер памяти из .data вместо отображения файла в память. Использовать имеющееся отображение .data в памяти чтобы провести динамическую линковку непосредственно в нем не получится.
    Ответ написан
    1 комментарий
  • Как сделать входную точку в DLL?

    Смотря как вы инжектите DLL, при обычной загрузке выполняется DllMain().
    Ответ написан
    Комментировать
  • Как внедрить dll файл в процесс lsass.exe?

    Инжектите-то как, через CreateRemoteThread?
    Нужно либо использовать SeDebugPrivilege
    https://support.microsoft.com/en-us/help/131065/ho...
    либо запускать свое приложение с правами локальной системы, это можно сделать через шедулер или установив приложение как сервис.
    И DLL и приложение должны быть 64-битными (для 64-битного lsass.exe), общий порядок есть здесь.
    Ответ написан
    5 комментариев
  • Как решить ошибку на windows xp с ненайденной точкой входа в процедуру EventRegister из библиотеки advapi32.dll?

    Согласно документации:
    https://msdn.microsoft.com/en-us/library/windows/d...
    EventRegister поддерживается только в Vista и выше. Но вы разберитесь какой именно процесс пытается его использовать. Если это ChromeDriver - то последние версии Chrome не поддерживают XP, попробуйте найти старую версию ChromeDriver, в которой XP еще поддерживается.
    Ответ написан
    Комментировать
  • Как динамически загрузить DLL из памяти в QT?

    Все эти функции необходимы чтобы отобразить образ файла в адресное пространство и провести динамическую линковку. Если у вас уже образ DLL находится в памяти, вам не нужно его отображать и эти функции просто не нужны. Необходимо слинковать таблицу импорта (если там что-то есть), это не сложная операция, и пометить память как исполняемую через VirtualProtect. Но место, разумеется, надо выделять так, чтобы библиотека была загружена по границе страницы, например через VirtualAlloc.

    с QT это никак не связано.
    Ответ написан
    Комментировать
  • Как узнать какие функции доступны в dll?

    dumpbin -exports example.dll
    но в общем случае ничего не делать, т.к. помимо функции надо знать какие у нее аргументы и какие соглашения вызова используются, что в принципе не всегда возможно.
    Ответ написан
    Комментировать
  • Статическое связывание в PE-программе windows?

    При динамической линковке через таблицы импорта/экспорта сразу вычисляются адреса символов и заносятся в таблицу импорта, поэтому необходимости дополнительно хранить базовый адрес нет.
    Ответ написан
    Комментировать