Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1316667091
JamesQ
2011-09-22 08:51
2012.01.01
Word+Delphi


15-1315941054
Медвежонок Пятачок
2011-09-13 23:10
2012.01.01
кургинян о 911 как бы совсем без конспирологии


2-1316502373
i2e
2011-09-20 11:06
2012.01.01
ShortString - max 255 символов. А String?


15-1315859385
Юрий
2011-09-13 00:29
2012.01.01
С днем рождения ! 13 сентября 2011 вторник


2-1317089272
я
2011-09-27 06:07
2012.01.01
Имитация нажатия клавиш





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский