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

 WASM Phorum —› WASM.WIN32 —› Закрыть хендл в чужом процессе

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


Дата: Июл 21, 2004 17:46:33

Такой вопрос: как закрыть хендл в чужом процессе?

Версия 1: только внедрясь в этот процес, повесить ddl-ку например.

Версия 2: через DuplicateHandle а затем CloseHandle.

А еще, как это делает Руссинович в ProcessExplorer? Я покопаю, подскажите куда лучше копать?


Дата: Июл 21, 2004 18:39:06

через DuplicateHandle а затем CloseHandle нифига невыйдет (насколько я знаю) поскольку это будет что то вроде копии и ты закроеш только копию.Можно попробовать перехватить хэндл хуком при работе процеса и закрыть его.Если глубже копануть то у каждого процеса есть своя база данных handle_database.ищи там


Дата: Июл 21, 2004 20:50:37

Если речь идет о Windows NT / 2k / XP / Server 2003 (т.е. о тех ОС, где реализован CreateRemoteThread), внедрение DLL необязательно. Достаточно передать адрес API CloseHandle (в процессе-"жертве") как стартовый адрес потока и хэндл как параметр.


Дата: Июл 21, 2004 22:03:24

ч/з DuplicateHandle не выдеть. При этой ф-ии в таблице объектов для target-процесса создается новый объект с почти такими же св-ми, измененными отчасти (например access) и дл янего увеличивается ReferenceCount. При закрытии этого хэндла кол-во ссылок==0 и этот эбъект удалаяется, но никак не исходный, а именно дубликат.


Дата: Июл 22, 2004 00:04:25

VOOrDOOluck и PavPS, вы заблуждаетесь. Anatoliy, ProcessExplorer закрывает чужие хендлы именно через DuplicateHandle. На сайте лежит WinObjEx. Если запустить его с ключом -s (запуск с правами Local System), то он закроет хендл в любом процессе. Делает он это примерно так:
hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, uProcessId );
if ( hProcess != NULL ) {

    if ( FALSE != DuplicateHandle(hProcess, (HANDLE) h, NtCurrentProcess(), 
        &hObject, 0, FALSE, DUPLICATE_CLOSE_SOURCE) ) {

        // Close duplicated handle
        CloseHandle(hObject);
    }

    CloseHandle(hProcess);
}


PavPS, дубликат хендла создается именно в процессе, вызвавшем DuplicateHandle. В процессе-жертве никаких новых хендлов не появляется, а тот, на который натравлена DuplicateHandle закрывается.


Дата: Июл 22, 2004 00:09:57 · Поправил: PavPS

Очччень извиняюсь... лоханулся... :(

Перепутал малость :)


Дата: Июл 22, 2004 10:24:34

Спасибо всем за советы. Уже начинаю пробовать. :)


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