Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.02.2012, 19:30
PRStudio PRStudio вне форума
Прохожий
 
Регистрация: 18.02.2012
Сообщения: 13
Репутация: 143
По умолчанию Вопрос по защите

Под раздачей курсовых работ взял себе антивирусную программу. Но просто сканировать файлы и сверять их по сигнатурам не интересно, поэтому я решил сделать секюрити систем. Отсюда я имею множество вопросов, на которые уже неделю ищу вразумительные ответы. И так, начну

1) Каким образом можно перехватить запускаемую пользователем программу и проанализировать ее, т.е. посадить ее в коробочку и посмотреть куда она пытается ссылаться и что пытается сделать.

2) Возможно ли просканировать оперативную память

3) Возможно ли перехватывать входящий интернет-траффик

И самое главное, можно ли это все делать не используя каких-либо дыр в ОС?

P.S. Я прошу изложения каких-либо алгоритмов (готовые решения для меня не так важны) как это можно реализовать, и по возможности изложения, в какую сторону копать.

Сейчас я "сканирую" WinAPI в поисках чего-нибудь полезного.
Ответить с цитированием
  #2  
Старый 18.02.2012, 20:09
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

1) Например, драйвер с перехватом API функции CreateProcess.
2) Да, можно. Все антивирусы это регулярно делают. Можно, например, влезать в память других процессов. Одно из направлений копания - ReadProcessMemory. Может понадобиться.
3) Можно. Как - не знаю.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 21.02.2012, 13:42
PRStudio PRStudio вне форума
Прохожий
 
Регистрация: 18.02.2012
Сообщения: 13
Репутация: 143
По умолчанию

Немножко разобрался с инжектом, при помощи модуля advApiHook.

Создал DLL, которая при инжектировании пишет какое-нибудь сообщение.

Однако возник вопрос, у меня получается внедрить свою DLL только в свой созданный процесс через CreateProcess (в этом случае мне выпадает мое сообщение из DLL-ки). Т.е. если я напрямую пытаюсь инжектировать свою библиотеку в какой-то процесс, то InjectDLL() возвращает TRUE, т.е. библиотека была внедрена, но при этом никаких действий (сообщение) не происходит.
Ответить с цитированием
  #4  
Старый 21.02.2012, 14:56
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Вставлю и свои 5 копеек:
3) http://rouse.drkb.ru/network.php там нижу есть пример сниффера - перехват входящих/исходящих пакетов

2)Приходит в голову только ReadProcessMemory

1)Есть функция PsSetCreateProcessNotifyRoutine которая позволяет выставить свою функцию, которая будет реагировать на запуск процесса. Но тут нужен свой драйвер. Насчет юзермода не знаю
Ответить с цитированием
  #5  
Старый 21.02.2012, 15:04
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,555
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

http://www.delphisources.ru/pages/so...antivirus.html
Ответить с цитированием
  #6  
Старый 21.02.2012, 20:25
PRStudio PRStudio вне форума
Прохожий
 
Регистрация: 18.02.2012
Сообщения: 13
Репутация: 143
По умолчанию

Спасибо всем, с этим, я думаю, проблем не возникнет.

Но вот сейчас я застрял на 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('Ошибка при инжектировании');

Этот код как бы работает, но не до конца. Мне пишет, что библиотека инжектирована, но при этом не запускаются сообщения из самой библиотеки, будто она не инжектировалась.

Собственно, прошу помощи, где косяк
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025