![]() |
|
|
#1
|
|||
|
|||
![]() Под раздачей курсовых работ взял себе антивирусную программу. Но просто сканировать файлы и сверять их по сигнатурам не интересно, поэтому я решил сделать секюрити систем. Отсюда я имею множество вопросов, на которые уже неделю ищу вразумительные ответы. И так, начну
![]() 1) Каким образом можно перехватить запускаемую пользователем программу и проанализировать ее, т.е. посадить ее в коробочку и посмотреть куда она пытается ссылаться и что пытается сделать. 2) Возможно ли просканировать оперативную память 3) Возможно ли перехватывать входящий интернет-траффик И самое главное, можно ли это все делать не используя каких-либо дыр в ОС? P.S. Я прошу изложения каких-либо алгоритмов (готовые решения для меня не так важны) как это можно реализовать, и по возможности изложения, в какую сторону копать. Сейчас я "сканирую" WinAPI в поисках чего-нибудь полезного. |
#2
|
||||
|
||||
![]() 1) Например, драйвер с перехватом API функции CreateProcess.
2) Да, можно. Все антивирусы это регулярно делают. Можно, например, влезать в память других процессов. Одно из направлений копания - ReadProcessMemory. Может понадобиться. 3) Можно. Как - не знаю. jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
|||
|
|||
![]() Немножко разобрался с инжектом, при помощи модуля advApiHook.
Создал DLL, которая при инжектировании пишет какое-нибудь сообщение. Однако возник вопрос, у меня получается внедрить свою DLL только в свой созданный процесс через CreateProcess (в этом случае мне выпадает мое сообщение из DLL-ки). Т.е. если я напрямую пытаюсь инжектировать свою библиотеку в какой-то процесс, то InjectDLL() возвращает TRUE, т.е. библиотека была внедрена, но при этом никаких действий (сообщение) не происходит. |
#4
|
|||
|
|||
![]() Вставлю и свои 5 копеек:
3) http://rouse.drkb.ru/network.php там нижу есть пример сниффера - перехват входящих/исходящих пакетов 2)Приходит в голову только ReadProcessMemory 1)Есть функция PsSetCreateProcessNotifyRoutine которая позволяет выставить свою функцию, которая будет реагировать на запуск процесса. Но тут нужен свой драйвер. Насчет юзермода не знаю |
#5
|
||||
|
||||
![]() |
#6
|
|||
|
|||
![]() Спасибо всем, с этим, я думаю, проблем не возникнет.
Но вот сейчас я застрял на injectDll() Как я уже говорил, если процесс создан не мной (если его создал не я через CreateProcess), то DLL как бы подгружается (функция injectDll возвращает TRUE), но ничего не делает, будто бы и не подгружалась. В DLL прописано выводить сообщение при подгрузке и отгрузке, а также в основании. Вот небольшой пример, как я пытаюсь инжектировать DLL: - - - - - - - - - - Рабочий пример (с CreateProcess из примеров модуля): Код:
var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; ZeroMemory(@StartInfo, SizeOf(TStartupInfo)); StartInfo.cb := SizeOf(TStartupInfo); CreateProcess(nil, 'notepad.exe', nil, nil, False, 0,nil, nil, StartInfo, ProcInfo); InjectDll(ProcInfo.hProcess, 'dll_name.dll'); Такая конструкция работает и при запуске notepad.exe я получаю все сообщения, прописанные в DLL. Но вот беда, мне абсолютно бесполезно создавать собственный процесс и в него внедрять свои же DLL. Хотелось бы внедрить библиотеку в чужой процесс. - - - - - - - Теперь то, как я пытаюсь вбить библиотеку в уже запущенный процесс. Код:
var processId:Dword; processHandle:THandle; // Пускай жертвой будет тот же самый notepad, только уже запущенный processId := GetProcessId('notepad.exe'); processHandle := OpenProcess(PROCESS_ALL_ACCESS,false,processId); if (InjectDll(processHandle ,'moja_dll.dll')) then ShowMessage('Как бы инжект') else ShowMessage('Ошибка при инжектировании'); Этот код как бы работает, но не до конца. Мне пишет, что библиотека инжектирована, но при этом не запускаются сообщения из самой библиотеки, будто она не инжектировалась. Собственно, прошу помощи, где косяк ![]() |