Форум: "Начинающим";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];
Внизsysenter Найти похожие ветки
← →
Юзернейм (2011-09-21 05:23) [0]Добрый день.
Была у меня для XP функция на АСМе - PostMessage, написанная одним моим знакомым (поскольку я сам в АСМ не бум-бум).Function PmXP(hWnd:HWND; Msg:LongWord; wParam:WPARAM; lParam:LPARAM): dword; stdcall;
Begin
Try
asm
push LParam
push WParam
push Msg
push hWnd
mov eax, $11DB
lea edx, @done
push edx
push edx
mov edx, esp
sysenter
@done:
add esp, $14
mov Result, eax
end;
Except
end;
end;
Трабла в том, что на x64 это добро не работает...
Еще раз повторюсь - в АСМ абсолютный ноль.
Единственное, что смог накопать, это то, что нет sysenter в x64.
Может кто сможет помочь и подсказать, чем его в x64 заменить?
Или надо не только его менять?
← →
Ega23 © (2011-09-21 08:40) [1]Чем не устраивает native PostMessage?
← →
Сергей М. © (2011-09-21 10:28) [2]
> чем его в x64 заменить?
syscall
Но простой заменой не обойтись.
Да и действительно - к чему эти извращения, если можно преспокойно вызвать ф-цию нативную PostMessage ?
← →
Rouse_ © (2011-09-21 12:56) [3]Не работает потому что 11DB не верное значение в SDT, в Windows 7 например это будет 11FC.
Это первое, второе: в х64 вызов из 32 битных приложений должен происходить не через sysenter, а черезcall dword ptr fs:[$c0]
(т.н. WOW64_Reserved) и т.д. плюс не учитывается момент выравнивания стека, в разных ОС выравнивание может отличаться...
В итоге: используй лучше стандартную PostMessageW и не парься...
← →
Игорь Шевченко © (2011-09-21 14:03) [4]
> Трабла в том, что на x64 это добро не работает...
Трабла в том, что это убожище и в 32 должно быть выпилено
← →
Полвторого (2011-09-21 17:09) [5]Телепатор подсказывает, что так была реализована привязка к ОС без проверки версий…
← →
Rouse_ © (2011-09-21 19:29) [6]
> Полвторого (21.09.11 17:09) [5]
>
> Телепатор подсказывает, что так была реализована привязка к ОС
Первый-же сервиспак разложит такую привязку на коленке...
← →
Полвторого (2011-09-21 20:15) [7]
> Rouse_ © (21.09.11 19:29) [6]
Неужели в Винде номера системных вызовов меняются даже в пределах сервис-паков?!
← →
Игорь Шевченко © (2011-09-21 21:04) [8]
> Неужели в Винде номера системных вызовов меняются даже в
> пределах сервис-паков?!
Конечно
← →
Rouse_ © (2011-09-21 21:07) [9]не только в пределах сервис паков, любой патч заменяющий ntdll имеет право на сие действие, бо они там константами зашиты...
← →
Юзернейм (2011-09-23 00:03) [10][1][2]
Есть приложение блокирующее некоторые функции например PostMessage\GetPixels и т.п.
Данная функция успешно работала в x86, но как уже писал - в x64..........
[4] Почему?)
[5] Это не так. - Выше написал.
После запуска моего приложения оно инжектится запущенным процессом (тем в который необходимо посылать PostMessage).
Если установлен Outpost Firewall, то все ОК. Оутпост не дает инжектить.
А вот если без него, то все Post\Send отказываются работать.
P.S. Защитой от инжектинга никогда не интересовался и не занимался. бо думаю сложновато для меня будет...
← →
Игорь Шевченко © (2011-09-23 00:11) [11]
> [4] Почему?)
потому что в морг.
Номера системных функций в Win32k.sys 1) непостоянны б) недоступны
если
> Есть приложение блокирующее некоторые функции например PostMessage\GetPixels
> и т.п.
то надо начать с ответа на вопрос, а зачем оно блокирует
← →
Rouse_ © (2011-09-23 18:00) [12]Полноценная реализация твоей PmXP займет около 600-700 строчек кода,с объявлением структур, процедурой поиска валидного SDT индекса и собственно самой реализацией вызова с учетом особенностей ОС, как то сам вызов (int 2E/sysenter/wow65_reserved) так и выравнивание стэка.
Написать ее в принципе не сложно, но будет три минуса:
1. вряд ли ты поймешь саму реализацию, а стало быть не сможешь сопровождать код (а код без сопровождения первым делом нужно исключать из продукта)
2. на такой подход ругаются некоторые антивирусы детектирующие отсутствие вызова из третьего кольца по стандартной схеме (kernel-ntdll-ring0). Лечится это конечно просто, покупкой цифровой подписи и отправкой ключа разработчику антивируса, но само по себе затратно.
3. применение такого подхода в легальном коммерческом софте реально необходимо в крайне редких случаях. Если строить защиту ПО, то такой подход может быть оправдан, но не сам по себе а комплексный, т.е. твоя эмуляция одной АПИ сама по себе погоды не сделает, должна быть проведена достаточно трудоемкая работы квалифицированного программиста гарантирующая целостность ядра защиты, в том числе и этого кусочка кода, как части ее. В противном случае это будет ни что иное, как потраченное в пустую время.
Если пытаешься бороться с инжектирующим загрузчиком самостоятельно, то проще приобрести навесную защиту за 50 долларов и закрыть ей свой продукт, будет гораздо эффективнее.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c