· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Помогите с перехватом API!

Посл.отвђт Сообщенiе


Дата: Апр 18, 2004 00:31:26

Облазил всю статью по перехвату! Ну не получается, блин!
Подкиньте примеров плиз!


Дата: Апр 18, 2004 05:20:04 · Поправил: Quantum

В самой статье примеров предостаточно! Ну, и поиском по форуму воспользоваться не помешает.


Дата: Апр 18, 2004 16:46:26

Конкретно опиши проблему - получишь конкретный ответ. А примеров в статье действительно предостаточно.


Дата: Апр 18, 2004 17:40:39

Вообще на ASM-е код примеров не маленький. На счет inf-ы - эта штука не плохая:
Рихтер->глава 22->"Перехват API с использованием раздела импорта"


Дата: Апр 18, 2004 18:26:55

Вот тут выкорчевал из проги кусок. Как пример, думаю сгодится.
-No optimise
-No comment
-Перехватывает MessageBoxA@16

710003808__InterHk.rar


Дата: Апр 20, 2004 15:24:01

А как перехватить API sice понятно sys дает ему приоритет
едра ,а дальше ?


Дата: Апр 20, 2004 21:36:44 · Поправил: PavPS

Так это продолжение Твоей темы про то как это делает SoftIce, или просто, как это можно сделать еше каким нибудь способов, например, из ядра???


Дата: Апр 21, 2004 08:35:04

А как это можно сделать еше каким нибудь способов, например, из ядра ?:)


Дата: Апр 21, 2004 13:46:55 · Поправил: PavPS

Из очевидных знаю несколько (точнее пользовал), но они разные по сложности, опасности и надежности. Если не из ядра, то действительно приходится рыскать по таблице импорта, заменять на ф-ии в своей длл-ке которую перд этим аттачишь. Но каково разочарование, когда какой-то процесс тебя, при попытке OpenProcess@?? отсылает на ... т.к. нет прав; или еше хуже, когда тот же Wincmd импортирует только LoadLibrary@?? и GetProcAddress@?? (ну и еще чуть-чуть).
А в ядре воля... летишь высоко..., но сваливаешься сразу на #GP|#PF. В ядре, если ставить глобальный хук, то ессно целесообразнее его ставить в аресном пр-ве, которое проецируется на все процессы (в NT это верхние 2 Гб). Можно, конечно и по контекстам процессов полазить, поискать чё-нить, но это гемор, и влом.
Так вот те самые очевидные способы.
1) перехватить шлюз Int 2Eh
2) поправить адрес в таблице сервисов на свои
3) переправить на JMP первые байты в нужных библиотеках у нужных ф-й
Конечно, для этого код проги-перхватчика должен располагаться так же «наверху» в 0 кольце (хотя бы драйвер).
В большинстве случаев удается установить хук на мн-во API, из NTOSKRNL, HAL… (так, например, куча ф-й из kernel ссылается на NTDLL, и так же зачастую ч/з таблицу сервисов идет дальше). Чтобы узнать какие ф-ии так делают – только SoftIce (всмысле если нет больше inf-ы).
Но неожиданно подкрадутся куча проблем: опечатки, ошибки и недосмотры приведут к #GP. Возникнут проблемы с синхронизацией, скоростью и т.д.

З.Ы. Не смотря на кучу преград результат – действительно глобальный хук (ну до SoftIce-а далеко :))).


Дата: Апр 21, 2004 15:56:56

ОК C Эти понятно перебеваю экспокт и .т.д
но когда неможеш узнать процес тогда как ?

задача: в системе множество процессов , они вызывают одну
API функцию цель перехватить и откоректировать


Дата: Апр 21, 2004 16:59:41

Ну так иди в 0-е кольцо и хватай. А в чем собственно проблема (конечно же, если не в самом переходе ко "всевышнему")? Берешь, ставишь BPX EnumProcesses@?? :) и исследуешь, куда она идет, ну и типа там её и захватываешь. Если я не о том, то можно по подробнее о проблеме...?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063