![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
Доброго времени суток
Реализовал перехват API-функций путем затирания первых байт родной функции командой перехода на подменяющую(свою) функцию. Протестил - все работает нормально. Код подменяющий АПИ-функции реализовал библиотечкой и насильно гружу ее в уже запущенную прогу. на обычном Блокноте эта технология работает отлично - никаких сбоев, когда Блокнот пытается сохранить файл, я нужным мне способом модифицирую сохраняемый файл и только после этого пишу его на диск. тестил на Paint`е - немного тормозит но все же работает так как нужно. Прога InfranView - при попытке чтения записи файла падает с грохотом - но это пока меня не очень огорчает. В вот в MS Word 2007 эффект от моей библиотеки сводится к нулю. Хотя Библиотека загружается корректно, и перехвачиваемые мною функции работы с файлами вызываются(т.е. Ворд их реально использует), НО файл сохраняется в не модифицированном виде. собсно вопрос: я перехватываю API функции: CreateFileA, CreateFileW, ReadFile, WriteFile, CloseHahdle и этого явно не достаточно чтобы заставить Ворд сейвить то что мне нужно... может кто подскажет, как можно обойти сей нюанс. Буду рад любому совету. Спасибо -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
Возьмите OllyDBG и посмотрите что там ворд делает. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
В порядке предположения - Word использует для чтения/записи своих файлов Ole Storage, так что перехват ReadFile & WriteFile нужно делать не в exe'нике Word'а, а в dll COM сервера, отвечающего за IStorage (Ole32.dll)
Это сообщение отредактировал(а) xvr - 28.7.2009, 10:58 |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
xvr какая разница, если это inproc сервер?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
такой способ перехвата подразумевает эксклюзивный доступ к функции, т.е., к ней нельзя обращаться сразу из нескольких потоков Добавлено через 5 минут и 33 секунды еще есть набор функций файл-мэппинга, которыми можно спокойно обойти Read/WriteFile Это сообщение отредактировал(а) GremlinProg - 28.7.2009, 11:40 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
shara
Почему бы не использовать detours.lib для перехвата WinAPI? |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Это зависит от способа перехвата. Вполне возможен перехват, при котором можно модифицировать адреса (или саму) в PLT, а не сами функции. Тогда будет разница, если для exe PLT модифицировали, а для dll - нет |
|||
|
||||
shara |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
xvr,
а можно уточнить в самом общем виде, как это делается?
есть такое... пока буду уповать на то, что файлы не будут одновременно сохраняться в двух или более потоках Добавлено через 9 минут и 25 секунд azesmcar, а detours.lib сможет "надуть" ворд? если перехватывать нужные API? -------------------- с точки зрения аэродинамики шмель не может летать |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Я использовал, ни одна программа не сдувалась. http://research.microsoft.com/en-us/projects/detours/ Это сообщение отредактировал(а) azesmcar - 29.7.2009, 07:02 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
В 'общем виде' лучше использовать detours.lib ![]() В подробностях - нужно найти модуль, экспортирующий нужные функции (например через TooHelp API) и парсить его таблицу импорта. По найденным адресам патчить код. Либо можно позвать LoadLibrary на нужный модуль (он вернет handle на уже загруженную библиотеку), а затем GetProcAddress. Дополнительно можно проверить, что если то, что вернул GetProcAddress состоит из jmp куда то, то пройти по этому адресу. После чего патчить. Это сообщение отредактировал(а) xvr - 29.7.2009, 12:06 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |