Сейчас на форуме: bartolomeo, asfa, _MBK_ (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› SEH etc. |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 09 ноября 2011 21:15 · Личное сообщение · #1 Здрасти Такая вот задача. Есть ссылка. Нужно по этой ссылке прочитать значение так, чтобы всё не упало. Юзермод. Сразу скажу что ставить сех не годно - код вне модуля. Посему скажу требования: 1. Код вне модулей, сех мы юзать не можем. 2. Про никакие модуля мы ничего не знаем, соответственно VEH мы заюзать не можем. 3. Всякие апи не доступны - про модуля ничего не известно. 4. Авер за нами следит, соответственно мы не можем дёрнуть то, что нельзя. Предлагайте решение. ![]() |
|
Создано: 09 ноября 2011 21:59 · Поправил: ARCHANGEL · Личное сообщение · #2 Через PEB добираемся до базы ntdll.dll. В секции .data ищем место, где есть нули, и пишем туда кодес с сех-обработчиком. Запись в секцию дата разрешена по дефолту: ![]() делаем call на записанный код и либо читаем, либо нет, и попадаем в обработчик. В любом случае имеем безопасную функцию. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 09 ноября 2011 22:08 · Поправил: bowrouco · Личное сообщение · #3 |
|
Создано: 09 ноября 2011 22:13 · Поправил: ARCHANGEL · Личное сообщение · #4 bowrouco А этот код, который мы куда-то внедрили - на его внедрение есть какие-то ограничения? Ну, там, размер, ограничения по вызову API (типа, нельзя вызывать ничего из dll, кроме натива)? Добавлено: И что значит всякие АПИ не доступны, почему это? ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 10 ноября 2011 01:21 · Личное сообщение · #5 |
|
Создано: 10 ноября 2011 08:21 · Поправил: PE_Kill · Личное сообщение · #6 |
|
Создано: 10 ноября 2011 10:41 · Личное сообщение · #7 |
|
Создано: 10 ноября 2011 12:23 · Поправил: PE_Kill · Личное сообщение · #8 |
|
Создано: 10 ноября 2011 12:37 · Личное сообщение · #9 |
|
Создано: 10 ноября 2011 12:41 · Личное сообщение · #10 |
|
Создано: 10 ноября 2011 12:48 · Личное сообщение · #11 |
|
Создано: 10 ноября 2011 13:32 · Личное сообщение · #12 |
|
Создано: 10 ноября 2011 13:40 · Личное сообщение · #13 Airenikus Ничего я не тролю. В ядре проще, можно както так: Code:
Но ядро это ядро, а в юзермоде всё заблочено защитой. Посему там сложнее чтото подобное провернуть. ![]() |
|
Создано: 10 ноября 2011 22:39 · Личное сообщение · #14 |
|
Создано: 10 ноября 2011 23:06 · Личное сообщение · #15 |
|
Создано: 11 ноября 2011 00:32 · Личное сообщение · #16 ну берём первый попавшийся сервис NtAddAtom номер 8: Code:
80000002 --- нет такого 0 --- есть Если подставлять address не в param3, а в param1, то можно проверять, доступна ли память на запись ![]() |
|
Создано: 11 ноября 2011 00:42 · Поправил: bowrouco · Личное сообщение · #17 vptrlx Code:
Не будет оно работать. Тока не предлагайте искать стабы по имени, это не годно. Вдобавок STATUS_DATATYPE_MISALIGNMENT(80000002) обычно вертается при проверке выравнивания ссылки, тоесть до обращения к памяти. ![]() |
|
Создано: 11 ноября 2011 00:54 · Поправил: vptrlx · Личное сообщение · #18 bowrouco пишет: STATUS_DATATYPE_MISALIGNMENT(80000002) Ой, сорри, ночь на дворе. Да, сначала стоит выровнять. Тогда C0000005 возвращается. bowrouco пишет: Не будет оно работать. Тока не предлагайте искать стабы по имени, это не годно. Ну либо придумать сервис, который во всех осях одинаковый номер имеет [я сюда куда-то глянул http://hex.pp.ua/service-descriptor-table.php, до висты у AddAtom'а такой номер], либо ось отличить по вторичным признакам /для того же AddAtom'а надо всего лишь отличить семёрку от остальных/, у Вас с этим проблем быть не должно ![]() Либо даже третий вариант: вызывать сервисы по очереди с номерами для всех осей. Тогда (при удачном выборе) либо все вернут ошибку, либо по крайней мере один отработает успешно. ![]() |
|
Создано: 11 ноября 2011 01:00 · Личное сообщение · #19 |
|
Создано: 11 ноября 2011 01:39 · Личное сообщение · #20 bowrouco пишет: Можно ведь попасть на какуюнибудь NtShutdownSystem vptrlx пишет: (при удачном выборе) Стоит заранее номера выбрать, чтобы ничего критичного не произошло. bowrouco пишет: Кстати как аргументы в ядерный стек копируются ? это вы к тому, что можно попробовать передать проверяемый адрес как адрес юзермодного стека? ![]() |
|
Создано: 11 ноября 2011 01:46 · Личное сообщение · #21 |
|
Создано: 11 ноября 2011 01:55 · Личное сообщение · #22 |
|
Создано: 11 ноября 2011 02:09 · Поправил: bowrouco · Личное сообщение · #23 vptrlx Почему же упадёт, не думаю. Смотрите, вот код копирующий аргументы в ядерный стек: Code:
Видно что в ядре сервис пройдёт без проблем(ну пока не учитываем кодовый селектор, тут не важно). Ссылка на аргументы передаётся в регистре Edx. При копировании на инструкции KiSystemServiceCopyArguments возникнет #PF. Вот часть его: Code:
Проверяется адрес фолта(таких мест несколько). Если он на инструкции, копирующей аргументы, то фолт откатывается и возвращается STATUS_ACCESS_VIOLATION. Аргуметны копируется двордами, число их описано в сст. Посему гранулярноть - 4 байта. Подойдёт почти любой сервис. Проще взять тот, который получает на вход хэндл. Причём без лишних аргументов, первый NtAlertThread. Его можно определить по возвращаемому статусу. Также если усечь буфер с аргументами, то можно определить число аргументов любого сервиса. Тоесть код: Code:
Годится в юзермоде для проверки доступности 4-х байт на чтение. ![]() |
|
Создано: 11 ноября 2011 02:21 · Поправил: vptrlx · Личное сообщение · #24 |
|
Создано: 11 ноября 2011 02:36 · Личное сообщение · #25 |
|
Создано: 11 ноября 2011 10:50 · Личное сообщение · #26 |
|
Создано: 11 ноября 2011 11:01 · Личное сообщение · #27 |
|
Создано: 11 ноября 2011 13:38 · Личное сообщение · #28 |
|
Создано: 11 ноября 2011 21:08 · Личное сообщение · #29 PE_Kill С сисколами ничего не будет. Стек восстанавливается в переданное значение. Хотя можно подобрать подходящий сервис. Интересно будет на ваше решение взглянуть. Хотя сразу скажу что скока живёт NT всегда юзали инты, а не сисколы. У последних кривая реализация. Так уж случилось что ядро кодили люди не особо далёкие. ![]() |
|
Создано: 12 ноября 2011 20:46 · Личное сообщение · #30 |
. 1 . 2 . 3 . >> |
![]() |
eXeL@B —› Вопросы новичков —› SEH etc. |