| Сейчас на форуме: 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. | 








 Для печати