Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Отслеживание загрузки dll в память процесса

13.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ранее я уже рассказывал, как можно легко и просто получить список динамических библиотек, загруженных в ваш процесс. Сегодня расскажу о возможности отслеживания загрузки и выгрузки DLL. Начиная с Windows Vista, появилась функция LdrRegisterDllNotification. С ее помощью в приложении регистрируется callback-функция, которая будет вызываться каждый раз, как только в ваше приложение будет загружена DLL или какая-то DLL будет выгружена из его адресного пространства. Установка обработчика выполняется одной командой:
  1.         ; Зарегистрировать обработчик загрузки и выгрузки DLL
  2.         invoke  LdrRegisterDllNotification,0,LdrDllNotification,NULL,Cookie
  3.         or      eax,eax
  4.         jnz     loc_error
Важное замечание. Как показала практика, в callback-функции не должно быть никаких открытий окон, вывода сообщений и прочих взаимодействий с интерфейсом. Это может привести к зацикливанию и падению приложения во время загрузки UI-библиотек.
  1. LDR_DLL_NOTIFICATION_REASON_LOADED   = 1
  2. LDR_DLL_NOTIFICATION_REASON_UNLOADED = 2
  3.  
  4. struct NOTIFICATION_DATA
  5.     Flags       dd ?
  6.     FullDllName dd ?
  7.     BaseDllName dd ?
  8.     DllBase     dd ?
  9.     SizeOfImage dd ?
  10. ends
  11.  
  12. proc LdrDllNotification NotificationReason:DWORD,\
  13.         NotificationData:DWORD,Context:DWORD
  14.  
  15.         pusha
  16.         mov     eax,[NotificationReason]
  17.         ; EAX -> действие с DLL
  18.         ; LDR_DLL_NOTIFICATION_REASON_LOADED = загружена
  19.         ; LDR_DLL_NOTIFICATION_REASON_UNLOADED = выгружена
  20.  
  21.         ; Получить полный путь до файла DLL
  22.         mov     eax,[NotificationData]
  23.         mov     eax,[eax+NOTIFICATION_DATA.FullDllName]
  24.         mov     eax,[eax+4]
  25.         ; EAX -> полное имя файла DLL
  26.  
  27.         ; Получить базовый адрес DLL
  28.         mov     eax,[NotificationData]
  29.         mov     eax,[eax+NOTIFICATION_DATA.DllBase]
  30.         ; EAX -> DllBase библиотеки
  31.  
  32.         popa
  33.         ret
  34. endp
При каждом вызове в callback-функцию передается причина вызова - загрузка или выгрузка DLL, а также заполненная структура NOTIFICATION_DATA, в которой содержится полный путь и имя файла библиотеки, базовый адрес загрузки и размер загружаемого образа. Зная эти данные, можно проверить, что за DLL пытаются подгрузить в наш процесс и принять соответствующие меры. Например, при попытке подгрузить в процесс модуль мониторинга, можно отключить некоторые ветки алгоритма или исказить выдаваемые данные, а можно просто завершить работу приложения. Если пойти дальше, то теоретически можно даже модифицировать в памяти загруженную библиотеку, нейтрализовав в ней то, чего она не должна делать с вашим процессом. Просторы для фантазии безграничны.

Читать статью целиком »
Просмотров: 74 | Комментариев: 0

Исследование защиты игры "Шахматный конь"

11.05.2021 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот игры "Шахматный конь"

"Шахматный конь" - классическая головоломка, в которой надо фигурой коня обойти все клетки шахматной доски, причем на каждой клетке можно побывать только один раз. Игрушка требует регистрацию, хотя вроде никаких ограничений в ней нет. Ну ничего, лишний раз разомнем пальцы.

Читать статью целиком »
Просмотров: 180 | Комментариев: 4

Поздравляю с Днем Победы!

09.05.2021 | Категория: Всякая всячина | Автор: ManHunter

Поздравляю с Днем Победы!

9 мая 1945 года закончилась Великая Отечественная война. Эта победа - символ чести, мужества, отваги и доблести наших отцов, дедов и прадедов. Но в тоже время это горечь потерь и утрат. Благодаря подвигу наших героев мы имеем мирное небо над головой, поэтому мы не забудем их никогда! И пусть больше ни одному поколению в будущем не придется испытать тяготы войны. С праздником всех вас, с Днем Победы!

Просмотров: 63 | Комментариев: 1

Как узнать состояние и размеры панели задач Windows

05.05.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для получения рабочей области экрана, доступной вашему приложению, может потребоваться определение положения и размера панели задач. Управлять положением и состоянием панели задач пользователь может через меню свойств или через апплет настроек. А для получения всех необходимых данных надо воспользоваться функцией SHAppBarMessage. Но сперва структура и несколько констант, которые будут нам нужны для работы.
  1. struct APPBARDATA
  2.     cbSize           dd ?
  3.     hwnd             dd ?
  4.     uCallbackMessage dd ?
  5.     uEdge            dd ?
  6.     rc               RECT
  7.     lParam           dd ?
  8. ends
  9.  
  10. ABM_GETSTATE = 4
  11. ABM_GETTASKBARPOS = 5
С помощью сообщения ABM_GETTASKBARPOS получаем положение и размеры панели задач:
  1.         mov     [abd.cbSize],sizeof.APPBARDATA
  2.         invoke  SHAppBarMessage,ABM_GETTASKBARPOS,abd
  3.         ; [abd.uEdge] -> положение панели задач
  4.         ; 0 = слева
  5.         ; 1 = сверху
  6.         ; 2 = справа
  7.         ; 3 = снизу
  8.         ; [abd.rc] -> координаты Панели задач
Но тут надо понимать, что на экране могут присутствовать другие панели, которые также отнимают полезную площадь экрана. Для точного определения доступной области пользуйтесь функцией GetMonitorInfo.

Читать статью целиком »
Просмотров: 121 | Комментариев: 0

Лангустины на гриле с имбирно-чесночным соусом

03.05.2021 | Категория: А еще я туда ем! | Автор: ManHunter

Лангустины на гриле с имбирно-чесночным соусом

Лангустины - разновидность омаров - отличный выбор для всех любителей морепродуктов. А приготовленные на гриле в сочетании с пикантным маринадом они превратятся во вкуснейшее блюдо.

Читать статью целиком »
Просмотров: 165 | Комментариев: 4

prev 01 02 03 04 05 06 07 08 09 ... 327
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0214 сек.) / Память: 4.75 Mb
Наверх