Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.12.08;
Скачать: [xml.tar.bz2];

Вниз

Пакет статей по перехвату.   Найти похожие ветки 

 
Rouse_ ©   (2013-05-27 18:36) [0]

Вчера закончил вторую статью по нюансам перехвата вызовов функций.

Остался не рассмотренным такой аспект, как Windows Detours http://research.microsoft.com/en-us/projects/detours/

Это скажем так все то что я рассказывал в предыдущих статьях + немного функционала отладчика (для трассировки) но реализовано в виде отдельной библиотеки с соответствующим API и рекомендуется Microsoft тем, кто хочет использовать механизм перехвата, но не хочет разбираться во всех тонкостях.

Так вот об чем я...
Тема Detours интересует кого нибудь?

ЗЫ: предыдущие 2 статьи:
http://alexander-bagel.blogspot.ru/2013/01/intercept.html
http://alexander-bagel.blogspot.ru/2013/05/intercept2.html


 
Дмитрий СС   (2013-05-27 19:18) [1]

А если первыми двумя байтами функции будет near jump, все условия выполняются: 5 нопов и 2х байтная инструкция, а работать из другого места инструкция уже не будет.


 
Rouse_ ©   (2013-05-27 19:22) [2]


> Дмитрий СС   (27.05.13 19:18) [1]
> А если первыми двумя байтами функции будет near jump, все
> условия выполняются: 5 нопов и 2х байтная инструкция, а
> работать из другого места инструкция уже не будет.

Верно, ибо оффсет от базы идет, но таких экспортируемых функций в природе я не встречал :)


 
Rouse_ ©   (2013-05-27 19:22) [3]

Только не NEAR, а SHORT JMP, NEAR пятибайтовая


 
©   (2013-05-27 22:55) [4]

Из Рихтера про инжект


> Вызов CreateRemoteThread предполагает, что Kerne32.dll спроецирована
> в локальном процессе на ту же область памяти, что и в удаленном.
>  Kernel32.dll используется всеми приложениями, и, как показывает
> опыт, система проецирует эту DLL в каждом процессе по одному
> и тому же адресу


А как быть если нужно инжектировать из x64 в 32 битный процесс, адрес Kernel32.dll в удаленном процессе будет уже не тот что в локальном


 
©   (2013-05-27 23:04) [5]

По поводу CreateRemoteThread

MSDN


> CreateRemoteThread fails if the target process is in a different
> session than the calling process.


Начаная с Vista нужно использовать RtlCreateUserThread или NtCreateThreadEx, иначе не прокатит


 
©   (2013-05-27 23:08) [6]

Не факт что адрес функции LoadLibrary будет всегда по нужному адресу, даже если Kernel32.dll на месте


 
©   (2013-05-27 23:17) [7]

Достаточно перехватить LoadLibrary в своем процессе и инжект уже не сработает


 
Rouse_ ©   (2013-05-27 23:34) [8]


> p ©   (27.05.13 22:55) [4]
> Из Рихтера про инжект
> А как быть если нужно инжектировать из x64 в 32 битный процесс

В этом случае нужно использовать шлюз FS:[C0] для переключения.
Но это слишком сложная тема, боюсь даже если я ее опишу очень подробно - ее оценят максимум два-три человека из читателей моего блога.


> Начаная с Vista нужно использовать RtlCreateUserThread или
> NtCreateThreadEx, иначе не прокатит

Это пока что избыточно.


> Не факт что адрес функции LoadLibrary будет всегда по нужному
> адресу, даже если Kernel32.dll на месте

Хм, видимо понимаешь нюансы :)


> Достаточно перехватить LoadLibrary в своем процессе и инжект
> уже не сработает

А это мимо...


 
©   (2013-05-27 23:39) [9]

Ах нуда LoadLibrary вызовется то по любому


 
Rouse_ ©   (2013-05-27 23:45) [10]


> p ©   (27.05.13 23:39) [9]
> Ах нуда LoadLibrary вызовется то по любому

Нет, я ошибся, а ты прав.
Тут в действительности важен способ перехвата в целевом приложении.
Если ты у себя перехватил таблицы импорта и экспорта, то на внедрение библиотеки это не повлияет, а вот если ты сделал сплайсинг - то правда твоя, ты сможешь задетектировать момент ее загрузки.


 
©   (2013-05-27 23:46) [11]


> В этом случае нужно использовать шлюз FS:[C0] для переключения.
>
> Но это слишком сложная тема, боюсь даже если я ее опишу
> очень подробно - ее оценят максимум два-три человека из
> читателей моего блога.


Просто CreateToolhelp32Snapshot->TModuleEntry32 + смотреть ExportTable Kernel32


 
Rouse_ ©   (2013-05-27 23:49) [12]


> p ©   (27.05.13 23:46) [11]

Нет, все проще. Можно реализовать код который будет работать в 32 битном и 64 битном режиме. И за его переключение отвечает данный шлюз.
Грубо, если постараться мы можем написать полноценное 32/64 битное приложение правильное работающее в обеих средах.


 
©   (2013-05-27 23:53) [13]


> Rouse_ ©   (27.05.13 23:49) [12]


Не все смогут постараться, мне кажет. проще
> p ©   (27.05.13 23:46) [11]


 
Дмитрий С ©   (2013-05-28 00:10) [14]


> вот если ты сделал сплайсинг - то правда твоя, ты сможешь
> задетектировать момент ее загрузки.

В коде внедрения потока достаточно легко проверить функцию LoadLibrary и в случае чего починить ее:)


 
Rouse_ ©   (2013-05-28 00:47) [15]

без базы? тут эта... антивирусы очень плохо реагируют на инжект более чем 14 байт


 
Rouse_ ©   (2013-05-28 00:49) [16]

зы: ну я уж не говорю о том что старт нити должен начаться с той функции которую собираемся искать


 
robt5   (2013-05-29 15:54) [17]

Удалено модератором


 
Rouse_ ©   (2013-05-29 16:46) [18]


> robt5   (29.05.13 15:54) [17]

как скажешь...


 
robt5   (2013-05-29 17:19) [19]


> Rouse_ ©   (29.05.13 16:46) [18]

не я серьезно
и сразу ссылки дай откуда качать, ато у них там как-то мутно с этим было помница, по подписке или чтото вроде того


 
robt5   (2013-05-29 17:23) [20]

и про х64 обязательно и перехват сом объектов


 
megavoid ©   (2013-05-29 17:38) [21]

Microsoft Detours интересен, но он дорогой, зараза ((


 
Rouse_ ©   (2013-05-29 17:43) [22]


> robt5   (29.05.13 17:19) [19]
> не я серьезно

Так и я серьезно...
хм, а чего пост то грохнули - вроде нормальный был...


 
Rouse_ ©   (2013-05-29 17:45) [23]


> robt5   (29.05.13 17:23) [20]
> и про х64 обязательно и перехват сом объектов

с этим сложнее, не на чем эксперементировать


> megavoid ©   (29.05.13 17:38) [21]
> Microsoft Detours интересен, но он дорогой, зараза ((

там есть "экспресс"


 
Rouse_ ©   (2013-05-29 18:21) [24]

Хм, глянул на него цену - нифига они задрали ценник.
Года полтора назад в районе 75 тыщ была стоимость, а щас 325 тыр :)))

http://www.microsoftstore.com/store/msru/ru_RU/pdp/productID.278141600


 
Пит   (2013-05-29 20:49) [25]

Розыч, а нафига вообще этот hot patch сделали?

Зачем предусмотрели вариант, что функцию будут перехватывать, у меня просто все таки крен в сторону злоумышленных всяких действий, а то так то нафига?


 
Rouse_ ©   (2013-05-29 21:39) [26]

Для отладки конечно. Все это только для отладочных целей, то что этим всем пользуются и во вредоносном коде - только следствие.
Собственно HotPatch, это только маленькая верхушка айсберга. Так у MS целый комплекс для нормальной отладки есть, символы, удаленка и прочее..


 
Пит   (2013-05-29 22:52) [27]


> Для отладки конечно

а для отладки чего? Можешь вот привести пример?


 
Rouse_ ©   (2013-05-29 22:53) [28]


> Пит   (29.05.13 22:52) [27]

Любой программы использующей их библиотеки. HotPatch то только в MS библиотеках применен :)


 
ProgRAMmer Dimonych ©   (2013-05-30 00:24) [29]

2 Rouse_

Там бы опечатки поправить :(

P.S. Чтобы этот пост был не таким бесполезным, подкину по теме HotPatch ссылочку на Реймонда Чена: http://blogs.msdn.com/b/oldnewthing/archive/2011/09/21/10214405.aspx


 
Пит   (2013-05-30 00:35) [30]


> Любой программы использующей их библиотеки. HotPatch то
> только в MS библиотеках применен :)

ну вот я и не понимаю.
Если я делаю программу - то у меня исходники, почти всегда есть встроенные средства отладки, совмещенные с позиционированием по исходному коду - удобно.

А тут про что речь?


 
Rouse_ ©   (2013-05-30 10:16) [31]


> А тут про что речь?

Про все в сумме, помимо отладчика существуют мониторы вызова функций с целью логирования, профилировщики работающие на их базе и т.п. Все это используется при отладке.


 
Пит   (2013-05-30 13:56) [32]

Розыч, ты как будто игнорируешь принципиальный вопрос. Если я разработчик - то у меня нативные исходники и вся эта фигня мне просто не впилась.

Если же я "отлаживаю" чужую программу - вопрос, зачем? Внести исправления в неё, сделать патч? )


 
Rouse_ ©   (2013-05-30 16:51) [33]


> вся эта фигня мне просто не впилась.

Забудь - тебе это не нужно, раз за столько лет не понял...


 
Пит   (2013-05-30 16:57) [34]


> Забудь - тебе это не нужно, раз за столько лет не понял.
> ..

ну то, что я лошара последний - это каждый знает.

Но я поэтому и тянусь к знаниям, Розыч. И никак понять не могу. Перехват функций - да, прикольно, сам делал по Рихтеру. Но зачем MS помогает в этом деле? Я вот и хочу понять, мож ты пример приведешь. Пока что в силу своего скудоумия я вижу только что-то из разряда "Функции, подготовленные к перехвату затем,чтобы их можно было легко перехватывать".

Но вот какую жизненную задачу это решает то? Ну хоть своими словами, для идиотов.


 
Rouse_ ©   (2013-05-30 17:07) [35]


> Но зачем MS помогает в этом деле?

Ну, когда устроюсь в MS, тогда и смогу ответить почему она помогает.
А так вопрос не по адресу.


 
robt5   (2013-05-30 17:57) [36]


> Пит   (30.05.13 16:57) [34]

перехват апи функций это тож самое что наследовние\переопределение методов во всяких ООП


 
Пит   (2013-05-30 20:27) [37]


> А так вопрос не по адресу.

то есть, зачем сделали Hot Patch технологию в результате непонятно?

Просто ты сам написал:


> существуют мониторы вызова функций с целью логирования,
> профилировщики работающие на их базе и т.п. Все это используется
> при отладке.

я так понял используется при отладке тобой. Поэтому и подумал, что ты используешь это при отладке, вот я и хотел узнать - в чем смысл отладки?


> перехват апи функций это тож самое что наследовние\переопределение
> методов во всяких ООП

интересное мнение.
Допустим, я хочу изменить поведение функции CreateWindow.
Предлагается написать некий модуль, который будет встраиваться во все процессы и там перехватывать вызов CreateWindow? Что-то не слышал я о таких рекомендациях MS...


 
Rouse_ ©   (2013-05-30 20:42) [38]


> я так понял используется при отладке тобой. Поэтому и подумал,
>  что ты используешь это при отладке, вот я и хотел узнать
> - в чем смысл отладки?

Мих, ты и статьи читал и я сам писал, но в итоге ты задаешь вопрос на который я не знаю как ответить.
Ну хорошо, давай я как еврей отвечу вопросом на вопрос. Ты профилировщики и мониторы во время отладки применяешь?

Ну к примеру ты реализуешь что-то под Soap или WebDav и для анализа логики работы тебе нужно на руках иметь валидный обмен данными, чтобы понять где именно произошел отлуп на авторизации.

Если тебе нужна эта информация, что ты будешь делать в первую очередь?


> интересное мнение.

Это не "интересное мнение", это суть...

Ты не внимательно читал эти главы:
http://alexander-bagel.blogspot.ru/2013/01/intercept.html#subclassing
http://alexander-bagel.blogspot.ru/2013/01/intercept.html#vmt


> Предлагается написать некий модуль, который будет встраиваться
> во все процессы и там перехватывать вызов CreateWindow?

Опять мимо, ткни пальцем где предлагается встраиваться во все процессы?
Обе статьи как раз описывают перехват в конкретном приложении и только в конце первой показывается как это сделать глобально...


 
Rouse_ ©   (2013-05-30 20:58) [39]

Да кстати вот тебе один из живых примеров.
Года три назад мы меняли формат обновления данных, и нужно было саппортить более старые версии хрен знает какой давности, но они держали базы данных залоченными.
В инсталяторе был модуль детектирования запущенной старой версии программы, я отключал активные версии ПО от залоченого файла (закрывая хэндлы, благо ПО было рассчитано на данный маневр) и ставил перехват на чтение/открытие файла (где оно хотело переподключится), после чего спокойно обновлял базу.
В заключающей итерации перехват снимался и приложение спокойно производило реинициализацию баз.


 
robt5   (2013-05-30 21:41) [40]


> Пит   (30.05.13 20:27) [37]

то есть про "легендарные" Stardock WindowBlinds и прочие украшаторы ты никогда неслышал\невидел ?



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2013.12.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.006 c
15-1370957500
EuSet
2013-06-11 17:31
2013.12.08
указание Out параметра зануляет переменную?


8-1233672337
salamander
2009-02-03 17:45
2013.12.08
Как сделать повтор звука в компоненте MediaPlayer?


2-1361713536
HEND
2013-02-24 17:45
2013.12.08
Адресс элемента динамического массива


15-1371235593
Леша Диман
2013-06-14 22:46
2013.12.08
Мазилла. Сохранить открытые вкладки.


15-1371318845
Пит
2013-06-15 21:54
2013.12.08
Управление пользователями Firebird





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский