Форум: "Прочее";
Текущий архив: 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 пятибайтовая
← →
p © (2013-05-27 22:55) [4]Из Рихтера про инжект
> Вызов CreateRemoteThread предполагает, что Kerne32.dll спроецирована
> в локальном процессе на ту же область памяти, что и в удаленном.
> Kernel32.dll используется всеми приложениями, и, как показывает
> опыт, система проецирует эту DLL в каждом процессе по одному
> и тому же адресу
А как быть если нужно инжектировать из x64 в 32 битный процесс, адрес Kernel32.dll в удаленном процессе будет уже не тот что в локальном
← →
p © (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, иначе не прокатит
← →
p © (2013-05-27 23:08) [6]Не факт что адрес функции LoadLibrary будет всегда по нужному адресу, даже если Kernel32.dll на месте
← →
p © (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 в своем процессе и инжект
> уже не сработает
А это мимо...
← →
p © (2013-05-27 23:39) [9]Ах нуда LoadLibrary вызовется то по любому
← →
Rouse_ © (2013-05-27 23:45) [10]
> p © (27.05.13 23:39) [9]
> Ах нуда LoadLibrary вызовется то по любому
Нет, я ошибся, а ты прав.
Тут в действительности важен способ перехвата в целевом приложении.
Если ты у себя перехватил таблицы импорта и экспорта, то на внедрение библиотеки это не повлияет, а вот если ты сделал сплайсинг - то правда твоя, ты сможешь задетектировать момент ее загрузки.
← →
p © (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 битное приложение правильное работающее в обеих средах.
← →
p © (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