Рефераты | Рефераты по информатике, программированию | Вызов функции в другом процессе | страница реферата 2 | Большая Энциклопедия Рефератов от А до Я
Большая Энциклопедия Рефератов от А до Я
  • Рефераты, курсовые, шпаргалки, сочинения, изложения
  • Дипломы, диссертации, решебники, рассказы, тезисы
  • Конспекты, отчеты, доклады, контрольные работы

  • Прототип вызываемой функции должен соответствовать прототипу функции потока.

    Кроме того, нужно иметь солидные права доступа к процессу-жертве:

    PROCESS_CREATE_THREAD для запуска потока.

    PROCESS_VM_READ для определения адреса.

    PROCESS_VM_OPERATION + PROCESS_VM_WRITE (разрешение на выделение памяти и запись в адресное пространство процесса) может пригодиться, если вы хотите передать вызываемой функции что-нибудь посущественнее, чем четыре байта.

    ПРИМЕЧАНИЕ

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

    Получение адреса загрузки DLL

    В общем случае, при помощи функций EnumProcessModules и GetModuleFileNameEx можно перебрать все загруженные в процесс-жертву модули, найти среди них нужный и получить адрес его загрузки.

    ПРИМЕЧАНИЕ

    Эти функции являются частью Process Status API (PSAPI), поэтому будут работать только в линейке Windows NT/2000/XP. Но поскольку мы уже и так используем CreateRemoteThread, терять нам нечего.

    Но если DLL внедрялась с помощью создания в процессе-жертве потока, поточной функцией которого является LoadLibrary, можно поступить проще. В этом случае код завершения потока является возвращаемым значением LoadLibrary, то есть как раз адресом загрузки DLL в процессе-жертве.

    ПРЕДУПРЕЖДЕНИЕ

    Вообще-то, как показывает практика, возвращаемое значение LoadLibrary – это не совсем адрес загрузки DLL. В некоторых случаях в младших битах находятся какие-то флаги. Например, при вызове функции LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE младший бит возвращаемого значения всегда будет установлен в 1.

    Выход достаточно прост: поскольку при загрузке модуля в адресном пространстве создаётся регион, а адреса начала регионов должны быть кратны 64К, для получения «настоящего» адреса загрузки нужно просто обнулить два младших байта.

    Получение адреса функции

    Есть два способа получить адрес функции: простой и для настоящих программистов. :)

    Простой способ

    Простой способ основан на том, что смещение начала функции от начала DLL – величина постоянная, от процесса не зависящая. Это значит, что если:

    загрузить в свой процесс ту же DLL;

    получить адрес нужной функции;

    вычесть из адреса функции адрес загрузки DLL;

    прибавить к получившемуся смещению адрес загрузки DLL в процессе-жертве,

    то получится адрес функции в процессе-жертве.


    Рекомендуем скачать другие рефераты по теме: банк рефератов 5 баллов, дипломная работа персонал.



    Предыдущая страница реферата | 1  2  3  4  5  6  7  8  9  10  11 |




    Поделитесь этой записью или добавьте в закладки

       




    Категории:



    Разделы сайта




    •