KeInitializeSemaphore

July 26, 2010

Запомни Излесыч, последний параметр KeInitializeSemaphore знаковый. И проверка на достижение максимальной границы освобождений -  знаковое. И если задать -1 в качестве лимита, то будешь ловить сэпшены STATUS_SEMAPHORE_LIMIT_EXCEEDED на каждом KeReleaseSemaphore. Както так =\


com interface

July 14, 2010

на заметку
чтобы быстро востановить код юзающий COM-oбъекты нужно
- найти в сдк по riidу интерфейс (необязательно – можно найти где он реализован по rclsidу в реестре)
- потом подгрузить стандартную структуру этого интерфеса в иде с Vtbl на конце
- и пременять смещения это структуры в вызовах методов интерфейса
получится красиво

.text:0040980A lea edx, [esp+538h+pszFile]
.text:00409811 push edx ; pszFile
.text:00409812 push eax ; This
.text:00409813 call [ecx+IShellLinkWVtbl.SetPath

задача : понять окончательно как весь этот механизм работает + bho


tcc is sucks

June 26, 2010

Tiny C compiler (tcc) перестал радовать, как только понадобилось генерировать отладочные символы и map файл. Бе, реверсом собственной же проги заниматся не хочется. Компилятор годится лишь для мелкой работы, типа эксплойтов.  Правда не требует установки, что является единственным его плюсом.


Непонятки с MDL

May 11, 2010

Эксперименты с mdl и системными пулами показали следующее:

- NonPagedPool – после освобождения память возвращается в пул, но никуда не девается, по виртуальным адресам можно читать\писать. Когда строишь MDL для этого буфера и после освобождения получаешь новую ссылку на него (MmGetSystemAddressForMdlSafe), то она равна старому виртуальному адресу и доступна для обращения, что понятно, тк в DDK прямо сказано, что при использовании MmBuildMdlForNonPagedPool возвращается уже старый виртуальный адрес, а не создается новое отображение физических страниц на виртуальные.

- Если использовать MmBuildMdlForNonPagedPool над подкачиваемым буфером, возвращается (MmGetSystemAddressForMdlSafe) также старый адрес, который был валидным на момент вызова функции. Но ExFreePool полностю деммепирует (?) виртуальный адрес, и он становится невалидным.

- Если же нормальным образом залочить страницы вызовом MmProbeAndLockPages, то после ExFreePool MmGetSystemAddressForMdlSafe вернет новый виртуальный адрес на которые отобразятся нужные нам физические страницы.

Вобщем нужно изучить подробнее саму архитектуру памяти в x86 и реализацию менеджера памяти Windows для более полного и глубокого понимания картины. Но в общем случае понятно зачем mdl нужны и как их использовать.


Follow

Get every new post delivered to your Inbox.