Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Поиск шпионских программ

Delphi , Программа и Интерфейс , Приложения чужие

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

Code:



// Поиск значения типа DWORD в указанном процессе
// paul_shmakov@mail.ru
//
program search;
{©Drkb v.3(2007): www.drkb.ru}
 
{$APPTYPE CONSOLE}
 
uses Windows, SysUtils;
 
var
ProcessID: DWord;
ProcessHandle: THandle;
Mbi: TMemoryBasicInformation;
Addr: DWord;
Value: DWord;
I: Cardinal;
Buf: PChar;
BytesRead: DWord;
begin
if ParamCount < 2 then
begin
WriteLn('Usage: search.exe processid value');
Exit;
end;
 
ProcessID := StrToInt(ParamStr(1));
WriteLn('Process id: ' + IntToStr(ProcessID));
 
Value := StrToInt(ParamStr(2));
WriteLn('Value to search: ' + IntToStr(Value));
 
//
// Открываем процесс
//
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ or
PROCESS_VM_OPERATION, false, ProcessID);
 
if ProcessHandle <> 0 then
try
Addr := 0;
 
//
// Перечисляем все регионы виртуальной памяти процесса
//
while VirtualQueryEx(ProcessHandle, Pointer(Addr), Mbi, SizeOf(Mbi)) <> 0 do
begin
 // Uncomment чтобы увидеть список регионов, найденых в адресном пространстве
 // WriteLn('region: ' + IntToHex(Integer(Mbi.BaseAddress), 8) +
 //   ' size: ' + IntToStr(Mbi.RegionSize));
 
 //
 // Если региону выделена память, и регион не является "сторожевым" (как вершина стека),
 // то читаем этот регион
 //
 if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then
 begin
   //
   // Это демонстрационная программа, поэтому здесь выделяется буфер под весь регион.
   // Регион может быть достаточно большим, поэтому лучше читать его блоками для экономии
   // памяти. Но здесь для простоты алгоритма вся оптимизация похерена.
   //
   GetMem(Buf, Mbi.RegionSize);
   try
    //
    // Читаем весь регион в выделенный буфер
    //
    if ReadProcessMemory(ProcessHandle, Mbi.BaseAddress, Buf,
      Mbi.RegionSize, BytesRead) then
    begin
     //
     // Ищем значение типа DWORD в буфере
     //
     for I := 0 to BytesRead - SizeOf(Value) do
     begin
      if PDWord(@Buf[I])^ = Value then
       // Найдено, выводим
       WriteLn('Value ' + IntToStr(Value) + ' found at ' +
        IntToHex(Integer(Cardinal(Mbi.BaseAddress) + I), 8));
     end;
    end
    else
     WriteLn('Failed to read process memory ' + IntToStr(GetLastError));
 
   finally
    FreeMem(Buf);
   end;
 end;
 
 // Вычисляем адрес следуюшего региона
  Addr := Addr + Mbi.RegionSize;
end;
 
finally
CloseHandle(ProcessHandle);
end
else
WriteLn('Failed to open process');
end.
 
а вот программа, в которой ведем поиск для примера:
 
program someprog;
 
{$APPTYPE CONSOLE}
 
uses SysUtils;
 
var
SomeValue: Integer;
begin
SomeValue := 12345;
WriteLn('One variable of this program has a value ' + IntToStr(SomeValue));
WriteLn('Press any key to exit');
ReadLn;
end.
 

Автор Rouse_

Взято из http://forum.sources.ru

Статья Поиск шпионских программ раздела Программа и Интерфейс Приложения чужие может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Приложения чужие ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
18.04.2024 22:26:58/0.033145189285278/0