Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.12.08;
Скачать: CL | DM;

Вниз

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

 
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 и прочие украшаторы ты никогда неслышал\невидел ?


 
Пит   (2013-05-30 21:49) [41]

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

Я не понимаю - поэтому пришел с вопросами. Лейтмотив ответов - "ты какой-то тупой, хватит задавать глупые вопросы". Ну ладно, ок.

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

Всем мир.


 
Rouse_ ©   (2013-05-30 21:57) [42]


> Пит   (30.05.13 21:49) [41]
> слушайте, вы какие-то агрессивные - честное слово, мне так
> сильно показалось.
>

Я просто не понимаю сути твоих вопросов.
Стараюсь ответить так чтобы это было понятно, но т.к. все нюансы я раскрыл в статьях - я просто не понимаю сути вопроса...


 
robt5   (2013-05-31 12:52) [43]


> Лейтмотив ответов - "ты какой-то тупой, хватит задавать глупые вопросы". Ну ладно, ок.

но ты сам спросил...

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

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


 
robt5   (2013-06-16 14:32) [44]

добавь там еще для меня про перехват при включенном УАКе


 
wl ©   (2013-06-16 15:24) [45]

интересно, MS когда нибудь откроет код виндовс? очень уж много они вкладываются в опенсорс, причем код от них очень неплохого качества


 
robt5   (2013-06-17 14:13) [46]


> wl ©   (16.06.13 15:24) [45]

нафига ?
чтобы стать УГ как линукс?



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

Текущий архив: 2013.12.08;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.008 c
15-1371673815
Юрий
2013-06-20 00:30
2013.12.08
С днем рождения ! 20 июня 2013 четверг


15-1371203547
Дмитрий СС
2013-06-14 13:52
2013.12.08
Logitech и Apple работают над джойстиком для iPhone и iPad


15-1371297794
_oxffff
2013-06-15 16:03
2013.12.08
Javapocalypse


15-1371501002
Юрий
2013-06-18 00:30
2013.12.08
С днем рождения ! 18 июня 2013 вторник


2-1361542859
ttt
2013-02-22 18:20
2013.12.08
WebBrowser