Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Вниз

Как можно перехватить событие закрытия программы   Найти похожие ветки 

 
Ketmar ©   (2006-09-16 00:01) [80]

> [76] Eraser ©   (15.09.06 23:15)
так негламурненько.

> [78] Nemec ©   (15.09.06 23:18)
я лично имею в виду: "а как определили, что не внедрилось, или что ошибка"?


 
Nemec ©   (2006-09-16 07:26) [81]

>Ketmar
Выдает сообщение об ошибке при попытке записи по адресу 0


 
Nemec ©   (2006-09-16 09:41) [82]

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

EXE
{ Èäåÿ xShadow
áèáëèîòåêà advApiHook Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
program SecretKlient;

uses
 Windows, SysUtils,
 tlHelp32, psApi,
 advApiHook;

var
 sFile: DWord;
 Size: DWord;
 Buff: pointer;
 BytesReaded: DWord;

 HandlerSnapshot, HandlerProc: Thandle;
 Data: tagPROCESSENTRY32;
 Process: DWord;

 S, Path: String;
 BufPatch: Array [0..255] Of Char;
begin
 //Ïîëó÷èòü ñïèñîê ïðîöåññîâ
 HandlerSnapshot:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Data.dwSize:=sizeOf(data);
 If HandlerSnapshot>0
 then
 begin
   //ñ÷èòûâàåì Dll â ïàìÿòü
   sFile :=
     CreateFile("TestDll.dll",
                 GENERIC_READ, FILE_SHARE_READ,nil, OPEN_EXISTING, 0, 0);
   Size := GetFileSize(sFile, nil);
   GetMem(Buff, Size);
   ReadFile(sFile, Buff^, Size, BytesReaded, nil);
   CloseHandle(sFile);

   If Process32First(HandlerSnapshot, Data)
   then
   begin
     Repeat
       S:=Trim(ansiLowerCase(Data.szExeFile));
       HandlerProc:=OpenProcess(PROCESS_ALL_ACCESS,True,Data.th32ProcessID);
       GetModuleFileNameEx(HandlerProc,0,BufPatch,256);
       Path:=ansiLowerCase(BufPatch);
       if (Path<>"")and(Path[1]<>"?")
       then
         Path:=ExtractFileDir(Path)
       else
         Path:="";
       S:=ExtractFileName(S);
       If (Path <> "") //AND (Pos ("system32", Path)=0)
       Then
       begin
         //&#209;&#242;&#224;&#226;&#232;&#236; &#241;&#229;&#234;&#240;&#229;&#242;
         If S<>"secretklient.exe"
         Then
         begin
           Process:=GetProcessId(PChar(S));
           EnableDebugPrivilege();
           Process := OpenProcessEx(Process);
           Try
             InjectDllEx(Process, Buff);
           Except
           End;
         end;
       end;
     until not Process32Next(HandlerSnapshot,Data);
   end;
   FreeMem(Buff);
 end;
 CloseHandle(HandlerSnapshot);
end.

DLL
{ &#200;&#228;&#229;&#255; xShadow
&#225;&#232;&#225;&#235;&#232;&#238;&#242;&#229;&#234;&#224; advApiHook Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
library TestDll;

uses
 windows,
 advApiHook;

Var
 F: Boolean;
 Process: DWord;

begin
 F:=False;
 While Not F do
 begin
   {&#199;&#228;&#229;&#241;&#252; &#232;&#228;&#229;&#242; &#239;&#240;&#238;&#226;&#229;&#240;&#234;&#224;}
   {&#196;&#235;&#255; &#239;&#240;&#232;&#236;&#229;&#240;&#224;}
   Process:=GetProcessId("Notepad.exe");
   If Process=0
   Then
   begin
     MessageBox(0, "&#199;&#224;&#234;&#240;&#251;&#235;&#232; &#234;&#235;&#232;&#229;&#237;&#242;&#224;!", "&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;", MB_OK);
   end;
   Sleep (5000);
 end;
 ExitThread(0);
end.

>Eraser
Спасибо за подсказку по WMI, то что смог прочитать заинтересовался, но тема большая, требует изучения.

На этом ветку можно закрыть, а то это уже не ветка, а монстр.
Еще раз всем большое СПАСИБО!


 
xShadow ©   (2006-09-16 11:00) [83]


> Eraser

Не плохо, но бывает но. У меня к примеру на ноуте служба WMI отключена :) жрёт она не позволительно много.


> Nemec ©

Вообщем неплохо, но есть недочёты. Видимо недочитал ;) Качай смотри, переделал немного.
http://slil.ru/23128145


 
Nemec ©   (2006-09-16 11:28) [84]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-16 12:40) [85]

>xShadow
В таком виде работает, пришлось загрузить DLL в память, иначе не взять адрес для InjectDllEx. С DLL понятно,  для отладки было неудобно!!!

program SecretKlient;

uses
 Windows,
 SysUtils,
 tlHelp32,
 psApi,
 advApiHook;

var
sFile: DWord;
Size: DWord;
Buff: pointer;
BytesReaded: DWord;

HandlerSnapshot, HandlerProc: Thandle;
Data: tagPROCESSENTRY32;
Process: DWord;

S, Path: String;
BufPatch: Array [0..255] Of Char;
begin
//&#207;&#238;&#235;&#243;&#247;&#232;&#242;&#252; &#241;&#239;&#232;&#241;&#238;&#234; &#239;&#240;&#238;&#246;&#229;&#241;&#241;&#238;&#226;
EnableDebugPrivilege();
HandlerSnapshot:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
Data.dwSize:=sizeOf(data);
If HandlerSnapshot>0
then
begin
   //&#241;&#247;&#232;&#242;&#251;&#226;&#224;&#229;&#236; Dll &#226; &#239;&#224;&#236;&#255;&#242;&#252;
   sFile :=
     CreateFile("TestDll.dll",
                 GENERIC_READ, FILE_SHARE_READ,nil, OPEN_EXISTING, 0, 0);
   Size := GetFileSize(sFile, nil);
   GetMem(Buff, Size);
   ReadFile(sFile, Buff^, Size, BytesReaded, nil);
   CloseHandle(sFile);

  If Process32First(HandlerSnapshot, Data)
  then
  begin
    Repeat
      S:=Trim(ansiLowerCase(Data.szExeFile));
      HandlerProc:=OpenProcess(PROCESS_ALL_ACCESS,True,Data.th32ProcessID);
      if HandlerProc > 0 then
      Begin
         GetModuleFileNameEx(HandlerProc,0,BufPatch,256);
         Path:=ansiLowerCase(BufPatch);
         if (Path<>"")and(Path[1]<>"?")
         then
           Path:=ExtractFileDir(Path)
         else
           Path:="";
         S:=ExtractFileName(S);
         If Path <> "" Then
         begin
            {&#197;&#241;&#235;&#232; &#237;&#229; &#242;&#229;&#234;&#243;&#249;&#232;&#233; &#239;&#240;&#238;&#246;&#229;&#241;&#241;, &#239;&#238;&#242;&#238;&#236;&#243; &#247;&#242;&#238; &#229;&#241;&#235;&#232; &#226;&#237;&#229;&#228;&#240;&#255;&#242;&#252; &#226; &#242;&#229;&#234;&#243;&#249;&#232;&#233; &#239;&#240;&#238;&#246;&#229;&#241;&#241; &#238;&#248;&#232;&#225;&#234;&#224; &#231;&#224;&#239;&#232;&#241;&#232; &#239;&#238; &#224;&#228;&#240;&#229;&#241;&#243; 0}
            If S<>LowerCase("SecretKlient.exe")
            Then
            begin
              //&#209;&#242;&#224;&#226;&#232;&#236; &#241;&#229;&#234;&#240;&#229;&#242;
              Process:=GetProcessId(PChar(S));
              Process := OpenProcessEx(Process);
              If Process > 0
              Then
                InjectDllEx(Process, Buff);
            end;
         end;
      end;
    until not Process32Next(HandlerSnapshot,Data);
  end;
  CloseHandle(HandlerSnapshot);
end;

end.

Кстати сайт по ссылке открывается нерегулярно, в прошлый раз открылся, но при попытке закачки выдал ошибку! Поэтому я вообще не читал.

PS. Подскажи, как быть, сегодня поставил Opera, и теперь на любые действия под своей учетной записью на delphimaster требует пароль, а я его хоть убей не помню, когда заходил на сайт не думал, что долго на нем задержусь.


 
Eraser ©   (2006-09-16 13:18) [86]

> [83] xShadow ©   (16.09.06 11:00)
>
> > Eraser
>
> Не плохо, но бывает но. У меня к примеру на ноуте служба
> WMI отключена :) жрёт она не позволительно много.

дык её никода не поздно включить, можно прямо из приложения )

а что касается внедрения, все таки я бы был поосторожнее, а то потом юзерам прийдется долго отвечать на вопрос "Почему это после установки вашей программы, антивирус стал ругаться на все подряд?", эт не из воздуха пример, а из жизни :)


 
Nemec ©   (2006-09-16 15:22) [87]

> Eraser
Пока не ругается, даже Norton сам поражается, но молчит, если верить MS-REM метод довольно безопасный, если будет ругаться - это же не вирус, всегда можно отключить.
Не подскажешь ссылку на русское описание WMI, поискал в инете, общие понятия есть, но подробностей на русском не нашел.

>xShadow
С паролем все нормально.


 
Eraser ©   (2006-09-16 15:49) [88]

> [87] Nemec ©   (16.09.06 15:22)

русской литературы не знаю, к сожалению.. вот http://www.delphikingdom.com/asp/viewitem.asp?catalogid=698
самая лучшая статья на русском с хорошими примерами.


 
Ketmar ©   (2006-09-16 16:00) [89]

> [85] Nemec ©   (16.09.06 12:40)
эй, эй, монстры, вы что, грузите и мапите DLL руками, что ли? минуя виндовый загрузчик? если да -- то готовьтесь к "странным багам". и неработоспособности кучи API-функций.


 
Nemec ©   (2006-09-16 19:24) [90]

Удалено модератором
Примечание: Offtopic


 
Ketmar ©   (2006-09-16 19:28) [91]

а мне вот WMI не нравится. понимаю, что это, в принципе, не оправдано -- но не нравится. в частности -- из-за COM, которое я на дух не перевариваю. %-)


 
Eraser ©   (2006-09-16 20:50) [92]

> [91] Ketmar ©   (16.09.06 19:28)

хех, так мне тоже по-душе больше стандартные WinAPI, но реальность такова, что до многох системных механизмов, кроме как через WMI не доберешся, не считая конечно KMD, но это еще сложнее, чем WMI :)

+ ко всему ВМАЙ позволяет использовать всю свою мощь на удаленных машинами, считаю это ключевым приемуществом :)


 
Ketmar ©   (2006-09-16 21:53) [93]

> [92] Eraser ©   (16.09.06 20:50)
да я ж не говорю, что оно плохо. я говорю, что мне не нравится. %-)


 
Nemec ©   (2006-09-16 22:46) [94]

>Eraser
Облазил весь сайт микрософта не могу понять как скачать WMI SDK или уже туплю в 3 ночи, подскажи как это сделать, а то он предлагает лить 300 с лишним метров.


 
Прочитавший ветку   (2006-09-16 22:58) [95]

Интересно, а к чему приведет такая ситуация ?
В моей программе кто-то подменил адрес SomeFunct.
Запоминаю в глобальной переменной pSomeFunc:=GetProcAddress.
Этот "кто-то" снимает перехват, а я, ни сном ни духом об этом,
пытаюсь использовать pSomeFunc ?


 
Eraser ©   (2006-09-16 23:35) [96]

> [94] Nemec ©   (16.09.06 22:46)

AFAIK его качать надо для NT4 без каких то сервис паков.
в 2K/XP необходимые ActiveX уже имеются.
> [95] Прочитавший ветку   (16.09.06 22:58)

перечитал 3 раза, так и не понял, что конкретно вы хотели сказать :)
можно то же самое, только более развернуто? )


 
Ketmar ©   (2006-09-16 23:45) [97]

> [95] Прочитавший ветку   (16.09.06 22:58)
а кто сказал, что надо перехватывать методом правки IAT? сплайсингом, сплайсингом.


 
Антибайт   (2006-09-17 02:15) [98]

А это спасёт от tskill?


 
Ketmar ©   (2006-09-17 03:38) [99]

> [98] Антибайт   (17.09.06 02:15)
если перехватить ZwTerminateXXX() -- спасёт %-)


 
Прочитавший ветку   (2006-09-17 10:49) [100]

Поясните, пожалуйста.
Почему, обычно, перехватывают Zw - функции, а не Nt ?


 
Ketmar ©   (2006-09-17 10:50) [101]

> [100] Прочитавший ветку   (17.09.06 10:49)
потому что Nt в конце-концов всё равно вызывают Zw.


 
Nemec ©   (2006-09-17 11:44) [102]

Удалено модератором
Примечание: Личная переписка


 
Eraser ©   (2006-09-17 13:12) [103]

> [102] Nemec ©   (17.09.06 11:44)

ссылку на что? я ж сказал - ничего качать не надо, все уже есть в системе.
если интересует под 9x/ME/NT4, то вот ссылка http://www.microsoft.com/downloads/details.aspx?FamilyID=7750e5d7-3903-4aa8-8fbd-f555a4939285&DisplayLang=en
одна из первых, которые вывел поиск по сайту M$.


 
Nemec ©   (2006-09-17 14:42) [104]

>Eraser
Все подобные ссылки переводят на
http://www.microsoft.com/library/errorpages/smarterror.aspx/404?aspxerrorpath=/downloads/details.aspx
Запросы WMI в системе работают это я заметил, еще один вопрос, как со всем этим работать из под делфи ведь в палитре компонентов нет ничего подобного, что можно почитать на эту тему?


 
Nemec ©   (2006-09-17 14:47) [105]

Удалено модератором
Примечание: Offtopic


 
Ketmar ©   (2006-09-17 14:51) [106]

Удалено модератором
Примечание: Offtopic


 
Eraser ©   (2006-09-17 15:10) [107]

у меня  http://www.microsoft.com/downloads/details.aspx?FamilyID=7750e5d7-3903-4aa8-8fbd-f555a4939285&DisplayLang=en
открывается без всяких mask as IE :) (Opera 9.0)


 
Nemec ©   (2006-09-17 15:37) [108]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 17:06) [109]

Удалено модератором
Примечание: Offtopic


 
Eraser ©   (2006-09-17 17:37) [110]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 18:10) [111]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 18:10) [112]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 18:13) [113]

>Eraser
А где я возьму Active DS Type Library (Version 1.0) и Microsoft WMI Scripting v1.1 Library (Version 1.1) из твоего примера у меня делфи их не показывает, а в статье которую ты дал сказано: установить WMI SDK;


 
Nemec ©   (2006-09-17 18:16) [114]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 19:55) [115]

Удалено модератором
Примечание: Offtopic


 
Eraser ©   (2006-09-17 20:18) [116]

> Жалко, что не скачался WMI SDK

он уже встроен в систему, всмысле Run-Time часть - остальное - заголовочные файлы, которые генерируются Делфи при установке ActiveX компонентов.


 
Nemec ©   (2006-09-17 22:56) [117]

>Eraser
Там много функций и объектов которые я до этого в глаза не видел, причем судя по примерам в статье тобой рекомендованой, параметрами методов являются тексты, так что в любом случае придется искать материал, попробую еще раз скачать WMI SDK, но уже MS Internet Explorer, может удастся. Не знаешь может где есть только документация, чтобы меньше качать?


 
Nemec ©   (2006-09-17 23:13) [118]

Удалено модератором
Примечание: Offtopic


 
Eraser ©   (2006-09-17 23:21) [119]

> [117] Nemec ©   (17.09.06 22:56)

вся документация тут msdn.com, посмотреть методы/свойства классов можно с пом. утилиты WMI CIM Studio.


 
Nemec ©   (2006-09-17 23:25) [120]

Удалено модератором
Примечание: Offtopic



Страницы: 1 2 3 4 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.69 MB
Время: 0.038 c
15-1173528716
Тим
2007-03-10 15:11
2007.04.01
Java для Opera 9.10


2-1173102470
Чайник
2007-03-05 16:47
2007.04.01
Максимальный размер статического массива


11-1153305248
DmiSb
2006-07-19 14:34
2007.04.01
Не получается через ADO открыть *.dbf


6-1161425591
Yegorchic
2006-10-21 14:13
2007.04.01
IdHTTP: сколько байт получено/отправлено


2-1173694820
Gyrus
2007-03-12 13:20
2007.04.01
Количество записей с Null полем





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский