Мамкин погромист-фрилансер итт. Вкатился на freelancer.com и первым заданием получил создание функции для существующего проекта на C# (хер его знает что там за проект, школоруткит может какой-то), суть такова: функция должна принимать имя процесса и результатом своей работы являть скрытие его из списка процессов в диспетчере задач, как минимум на Windows 7 x64. Я оч долго думал и в итоге пришел к следующему:- На Detours у меня денег нет, а бесплатный Detours не умеет в 64бит. Решений для C# вообще негусто оказалось - и правильно, он же не в нативный код а в MSIL собирает, как там хукать вообще?- Функции, с которыми надо работать (интернет советует NtQuerySystemInformation, мол это функция, которая получает инфу для таскмана, и если перехватить её вызов, сравнить аргумент с целевым именем, то в случае чего можно прервать её работу) в основном WinAPI-шные, C# с ними работает крайне неохотно (пробовал ShowWindow через DLLImport встроить, так там ещё enum SW_... потребовалось руками писать, ну или у меня руки из жопы просто), и лучше написать всё на плюсах, а потом встроить плюсовую библиотеку в код Windows.Forms на шарпе, из которого вызывать написанную мной функцию допустим void HideProc(string ProcName).Реквестирую всякую инфу по перехвату вызова функции, поскольку я тут курю интернет и понимаю, что нихуя не понимаю - ну хорошо, предположим в начале большинства WinAPI функций, в т.ч. нужной, есть инструкция, эквивалентная NOP, и туда можно вставить jmp [адрес-моего-обработчика-вызова] , но опыта и понимания, как это должно выглядеть, у меня нет - ну хорошо, taskman вызывает функцию NtQuerySystemInformation, из неё управление переходит в мою InterceptThis функцию, которая достает из стека предназначавшийся для NtQuery аргумент (имя процесса), сравнивает его с требуемым, и если они совпадают - то что тогда? Каким образом перехватчик прервет выполнение NtQuery? В общем нужна помощь знающих людей. С меня найденные в интернете сиськи.
>>849076 (OP)бамп
mhook
>>849087Большое спасибо. Под восьмеркой только что попробовал - на примере вылетела ошибка времени компиляции, мол неизвестная платформа, на восьмерке mhook работать не будет?
>>849081бамп
>>849076 (OP)Короче я не осилю это, собираюсь использовать сплайсинг для хука. Внимание вопрос - не возникнет ли у меня проблем на 64бит?
>>849129Надо пояснить. Нашел как получить адрес NtQuerySystemInformation, тыры-пыры, так вот у неё по идее вначале 40 бит свободных, в 32-битных системах их хватает на jmp[адрес], а в 64?
>>849098Все там работает. Вопрос в том, что инжектить тяжело.
>>849146Но как же уместить адрес в этих 5 байтах вначале функции? Извини, просто не понимаю ничего в этом.
>>849146Только что попробовал перезаписать нулевой байт NtQuery... NOP'ом - ошибка сегментации. ЧЯДНТ?
>>849164VirtualProtect?
>>849337Нет, просто я не знаю, как получить адрес процесса, например сидит этот taskmgr.exe в памяти, у него по нулевому адресу 4D5A, заголовок то бишь, чуть после него заглушка "This program cannot be run in DOS mode", так вот я не знаю как мне всё это прочитать.
>>849337Господи, что за хуету сморозил. В общем откопал статью на хабре https://habrahabr.ru/post/178393/ пытаюсь не запутаться.
>>849337Просто оказалось, что это был не нулевой адрес, а хунта какая-то непонятная.
>>849076 (OP)Пздц я даун. Прогресс таков:- сделал нахождение таскмана через tlhelp32'ные снапшоты процессов- открытие процесса с привилегиями на запись работает из-под администратора- успешно записал какую-то херню ему в виртуальное пространство, предварительно выделив там 100 килобайт (думаю этого хватит).
>>849773Написал DLL в пару строк, пытаюсь встроить в процесс. Всё ещё выделяю в нём память.