На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Запрет на удаление файлов , Как можно отследить удаление файлов через windows
    Как можно отловить процесс удаление файлов под windows, и если можно запретить програмно удаление файлов некоторого типа или просто нескольких произвольных файлов. Например при запущеной программе, при попытке удаления файла или папки выведется msgbox c надписью "не тронь!".
    Сообщение отредактировано: Du-Xa -
      Нужно перехватить АПИшную функцию DeleteFile()...
        А можно ,пожалуйста, простенький примерчик.
          Для контроля одного процесса я могу подкинуть, а вот для всей системы вцелом, наверное, .alex даст =) мэй би
            Ну дайти тогда хотябы для одного процесса.
              С те бя идет!
              DLL:
              ExpandedWrap disabled
                library Mouse_mes;
                 
                uses
                  sysutils,
                  windows,
                  messages;
                 
                type
                   TImageImportDescriptor=packed record
                    OriginalFirstThunk    : DWORD;
                    TimeDateStamp         : DWORD;
                    ForwarderChain        : DWORD;
                    Name                  : DWORD;
                    FirstThunk            : DWORD;
                  end;
                  PImageImportDescriptor=^TImageImportDescriptor;
                 
                var filename:array[0..max_path-1] of char;
                    hook:HHook=0;
                    PEHeader:PImageNtHeaders;
                    ImageBase:cardinal;
                 
                function MyHookProcedure(hWnd: HWND; lpText, lpCaption: PWideChar; uType: UINT): Integer;
                stdcall;
                begin
                  result:=MessageBoxA(0, 'Notepad', 'my hook', 0);
                  //Но уже через нашу табл. импорта
                end;
                 
                procedure ProcessImports(PImports:PImageImportDescriptor);
                    Var
                        PImport:PImageImportDescriptor;
                        PRVA_Import:LPDWORD;
                        ProcAddress:pointer;
                        Temp_Cardinal:cardinal;
                    begin{1}
                      ProcAddress:=GetProcAddress(GetModuleHandle('USER32.DLL'), 'MessageBoxA');
                      PImport:=PImports;
                      while PImport.Name<>0 do
                        begin{2}
                          PRVA_Import:=LPDWORD(pImport.FirstThunk+ImageBase);
                          while PRVA_Import^<>0 do
                          begin{3}
                            if PPointer(PRVA_Import)^=ProcAddress
                               then
                                 begin{4}
                                   VirtualProtect(PPointer(PRVA_Import),4,PAGE_READWRITE,Temp_Cardinal);
                                   PPointer(PRVA_Import)^:=@MyHookProcedure; //пишем свою...
                                   VirtualProtect(PPointer(PRVA_Import),4,Temp_Cardinal,Temp_Cardinal);
                                 end;{1}
                            Inc(PRVA_Import);
                          end;{2}
                       Inc(PImport);
                   end;{3}
                end;{4}
                 
                procedure DllEntryPoint(reson:longint);stdcall;
                begin
                 case reson of
                  DLL_PROCESS_ATTACH:
                     begin
                      DisableThreadLibraryCalls(hInstance);
                      ZeroMemory(@FileName, SizeOf(FileName));
                      GetModuleFileName(GetModuleHandle(nil), @FileName, SizeOf(FileName));
                 
                         if Pos('NOTEPAD.EXE',AnsiUpper(@FileName))<>0 then //сейчас я хочу попробовать все это дело надо  нотепадом
                          begin
                           ImageBase:=GetModuleHandle(nil);
                           PEHeader:=pointer(int64(ImageBase)+PImageDosHeader(ImageBase)._lfanew);//pe header
                           ProcessImports(pointer(PEHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress+ImageBase));
                          end;
                      end;
                  end;
                end;
                 
                function nexthook(code:integer;wParam,lParam:longint):longint;stdcall;
                begin
                  result:=callnexthookex(hook,code,wParam,lParam);
                end;
                 
                procedure sethook(flag:bool);export; stdcall;
                begin
                 if flag then
                    hook:=setwindowshookex(wh_getmessage,@nexthook,hInstance,0)
                 else
                   begin
                    unhookwindowshookex(hook);
                    hook:=0;
                   end;
                end;
                 
                exports sethook;
                 
                begin
                DLLProc:=@DllEntryPoint;
                DllEntryPoint(DLL_PROCESS_ATTACH)
                end.

              EXE:
              ExpandedWrap disabled
                program Project2;
                uses windows;
                 
                var
                   sethook:procedure(flag:bool)stdcall;
                   hDll:hModule;
                 
                begin
                  hDll:=LoadLibrary('Mouse_mes.dll');
                 
                  @sethook:=GetProcAddress(hDll, 'sethook');
                 
                  sethook(true);
                  messagebox(0,'Не закрывай, пока идет работа','',0);
                  sethook(false);
                  FreeLibrary(hDll);
                 
                end.

              Думаю сам разберешься, что там надо заменить, если что то спрашивай
              и готовь .... ээээ ммм, ладно шутю =)
                Цитата
                xZero, 4.01.04, 20:25
                и готовь .... ээээ ммм, ладно шутю =)

                Да правильно-правильно, пусть готовит :)
                  А можно ли не просто отловить процесс, а еще и запретить его выполнение. Кстати а в каком модуле лежит эта замечательная функция DeleteFile?
                  Готовлю! :rolleyes:
                  Сообщение отредактировано: Du-Xa -
                    ExpandedWrap disabled
                      function DeleteFile(const FileName: string): Boolean;
                      begin
                      {$IFDEF MSWINDOWS}
                        Result := Windows.DeleteFile(PChar(FileName));
                      {$ENDIF}
                      {$IFDEF LINUX}
                        Result := remove(PChar(FileName)) <> -1;
                      {$ENDIF}
                      end;

                    Прости, не понял что надо!
                    Если хочешь остановить процесс - Terminate используй!

                    Добавлено в :
                    ExpandedWrap disabled
                      const
                      {$IFDEF MSWINDOWS}
                        advapi32  = 'advapi32.dll';
                        kernel32  = 'kernel32.dll';
                        mpr       = 'mpr.dll';
                        {$EXTERNALSYM version}
                        version   = 'version.dll';
                        comctl32  = 'comctl32.dll';
                        gdi32     = 'gdi32.dll';
                        opengl32  = 'opengl32.dll';
                        user32    = 'user32.dll';
                        wintrust  = 'wintrust.dll';
                        msimg32   = 'msimg32.dll';
                       
                       
                      function DeleteFile; external kernel32 name 'DeleteFileA';


                    Отсюда точно понятно где храгится.
                      А если я прокручу эту функцию для всех текущих процессов, у меня компютер не задымится, или она не требует много ресурсов?
                      И как поступить с Terminate? Application.Terminate; - понимаю, а здесь как?
                        Я че-то немогу понять - что тебе надо?
                        Ты хочешь убить какой-то процесс? Если да, то используй
                        ExpandedWrap disabled
                          TerminateProcess
                          The TerminateProcess function terminates the specified process and all of its threads.
                           
                          BOOL TerminateProcess(
                            HANDLE hProcess, // handle to the process
                            UINT uExitCode   // exit code for the process
                          );
                           
                          Parameters
                          hProcess
                          Handle to the process to terminate.
                          Windows NT: The handle must have PROCESS_TERMINATE access.
                           
                          uExitCode
                          Specifies the exit code for the process and for all threads terminated as a result of this call. Use the GetExitCodeProcess function to retrieve the process's exit value. Use the GetExitCodeThread function to retrieve a thread's exit value.
                          Return Values
                          If the function succeeds, the return value is nonzero.
                           
                          If the function fails, the return value is zero. To get extended error information, call GetLastError.
                           
                          Remarks
                          The TerminateProcess function is used to unconditionally cause a process to exit. Use it only in extreme circumstances. The state of global data maintained by dynamic-link libraries (DLLs) may be compromised if TerminateProcess is used rather than ExitProcess.
                           
                          TerminateProcess causes all threads within a process to terminate, and causes a process to exit, but DLLs attached to the process are not notified that the process is terminating.
                           
                          Terminating a process causes the following:
                           
                          All of the object handles opened by the process are closed.
                          All of the threads in the process terminate their execution.
                          The state of the process object becomes signaled, satisfying any threads that had been waiting for the process to terminate.
                          The states of all threads of the process become signaled, satisfying any threads that had been waiting for the threads to terminate.
                          The termination status of the process changes from STILL_ACTIVE to the exit value of the process.
                          Terminating a process does not cause child processes to be terminated.
                           
                          Terminating a process does not necessarily remove the process object from the system. A process object is deleted when the last handle to the process is closed.
                           
                          Windows CE: Windows CE does not support exit codes for processes, so the uExitCode parameter is ignored.
                           
                          QuickInfo
                            Windows NT: Requires version 3.1 or later.
                            Windows: Requires Windows 95 or later.
                            Windows CE: Requires version 1.0 or later.
                            Header: Declared in winbase.h.
                            Import Library: Use kernel32.lib.

                        Или ты имел в виду что-то другое?!
                          Цитата
                          xZero, 4.01.04, 19:09
                          а вот для всей системы вцелом, наверное, .alex даст =) мэй би

                          Просто в длл не делай проверку на то, что это notepad.exe, вот и будет тебе для всей системы. Хотя комп децл залипать будет ;) Но можно по другому - "просто" перехватывать эту функцию в kernel32.dll, для 9х могу дать пример на С++, а вот для линейки NT дрова писать надо, я этим никогда не занимался, но примеров в инете навалом, например на http://www.codeproject.com
                          Сообщение отредактировано: .alex -
                            .alex, кинь мне.
                              Да мне для Melleniuma хватит, я не хочу писать супер прогу, я всего лишь хочу защитить мой компьютер от друзей, которые скоро соберутся у меня и будут тыкать на все подряд, но без компьютера тоже незьзя, музыка вся там -> скучно будет. Вот по этому Вас и мучаю вопросами.
                              И всеже я не понял как похоронить этот процесс. Ну например как нам получить Handle процесса удаления файла? И кстати при удалении папки с файлами система использует этуже функцию многократно или нет, может у нее есть другие способы, а то они и папками покосить могут.
                              И разве мы не перехватываем удаление в Kernel32.dll или я что-то путаю?
                              Сообщение отредактировано: Du-Xa -
                                Сам не пробовал! Попробуй как сказал .alex убрать проверку на имя файла, и переоформи мою MyHookProc для DeleteFile (например), а резалт оставь пустой.

                                Мне кажется для твоих целей можно придумать что то не такое извращенское!!!
                                  Цитата
                                  Du-Xa, 4.01.04, 22:05
                                  я всего лишь хочу защитить мой компьютер от друзей, которые скоро соберутся у меня и будут тыкать на все подряд, но без компьютера тоже незьзя, музыка вся там -> скучно будет.

                                  Может лучше друзьям по рукам надавать, чтобы не тыкали во всё подряд, или локер для клавиатуры поставить, на этом сайте даже пример вроде есть или просто клавиатуру вытащить - любой из способов будет намного проще! :blink:
                                  Цитата
                                  Du-Xa, 4.01.04, 22:05
                                  И разве мы не перехватываем удаление в Kernel32.dll или я что-то путаю?

                                  В случае с хуком мы переписываем таблицу импорта в каждом процессе, а в kernel32.dll нужно будет переписывать таблицу экспортов, для этого нужно снять с неё защиту, а для этого нужно ...бла-бла-бла..., короче много чего сделать нужно...
                                  Цитата
                                  .alex, 4.01.04, 21:33
                                  .alex, кинь мне.

                                  Время нет, ибо сессии в двух универах не за горами, так что бери BO2K и читай process_hop.cpp ;)
                                  Сообщение отредактировано: .alex -
                                    Подскажите все-таки что делать с Terminate.
                                    Этот изврещенский вариант, мне кажется, наиболее подходящий все-таки!
                                      Я тоже не до конца вкурил, что ты хочешь делать с "Terminate" :blink:
                                      Ты наверно хочешь шоб процесс вылетал как только он вызовет DeleteFile(), а? Если да то напиши просто ExitProcess(0) в MyHookProcedure() и процесс упадёт, т.к. длл загружена в его адресное пространство...
                                      Сообщение отредактировано: .alex -
                                        Делаю так "
                                        function MyHookProcedure(hWnd: HWND; lpText, lpCaption: PWideChar; uType: UINT): Integer;
                                        stdcall;
                                        begin
                                        Windows.ExitProcess(0);
                                        end;"

                                        Убираю это:
                                        "if Pos('NOTEPAD.EXE',AnsiUpper(@FileName))<>0 then " - ничего не идет.

                                        Удаляю файлы и ничего не пишется и не отменяется!
                                        Сообщение отредактировано: Du-Xa -
                                          Если ты перехватываешь DeleteFile, то надо ведь в MyHookProc() переопределить параметры - а ты их оставил от МессаджБокса!
                                            Пишу так:
                                            ExpandedWrap disabled
                                              function MyHookProcedure(const FileName:string): boolean;
                                              stdcall;
                                              begin
                                                MessageBoxA(0, 'Удаляй файлы у себя дома', 'Предупреждение', 0);
                                                Windows.ExitProcess(0);
                                                result:=true;
                                              end;

                                            И не идет. Я так понял, что в MyHookProcedure перейдут все параметры от DeleteFile(), правильно?
                                              Или там все делается не так?
                                                Цитата
                                                Du-Xa, 5.01.04, 14:14
                                                Или там все делается не так?

                                                А ты ProcessImports() изменил, ась? Нужно сделать чтобы она адрес не MessageBox() искала, а адрес DeleteFile()?
                                                ЗЫ. учти, что DeleteFile() лежит в kernel32.dll, а не в user32.dll...

                                                Добавлено в :
                                                Вот тебе переделанная длл'ка, у меня всё работает, ловит вызов DeleteFileA(), надеюсь перехват DeleteFileW() сам сделаешь, если конечно тебе это понадобится...
                                                ExpandedWrap disabled
                                                   
                                                  library Mouse_mes;
                                                  uses
                                                    sysutils,
                                                    windows,
                                                    messages;
                                                   
                                                  type
                                                      TImageImportDescriptor=packed record
                                                      OriginalFirstThunk: DWORD;
                                                      TimeDateStamp: DWORD;
                                                      ForwarderChain: DWORD;
                                                      Name: DWORD;
                                                      FirstThunk: DWORD;
                                                      end;
                                                   
                                                      PImageImportDescriptor=^TImageImportDescriptor;
                                                   
                                                  var
                                                      hook: HHook = 0;
                                                      PEHeader:PImageNtHeaders;
                                                      ImageBase:cardinal;
                                                   
                                                  function MyHookProcedure(lpFileName: PChar): boolean;stdcall;
                                                  begin
                                                      MessageBox(HWND(nil), 'DeleteFile(): call', 'Bla-bla', MB_OK);
                                                      ExitProcess(0);
                                                      result := FALSE;
                                                  end;
                                                   
                                                  procedure ProcessImports(PImports:PImageImportDescriptor);
                                                  var
                                                      PImport:PImageImportDescriptor;
                                                      PRVA_Import:LPDWORD;
                                                      ProcAddress:pointer;
                                                      Temp_Cardinal:cardinal;
                                                  begin{1}
                                                      ProcAddress := GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'DeleteFileA');
                                                      PImport:=PImports;
                                                      while PImport.Name <> 0 do
                                                      begin{2}
                                                      PRVA_Import:=LPDWORD(pImport.FirstThunk+ImageBase);
                                                      while PRVA_Import^ <> 0 do
                                                      begin{3}
                                                      if PPointer(PRVA_Import) ^= ProcAddress then
                                                          begin{4}
                                                              VirtualProtect(PPointer(PRVA_Import),4,PAGE_READWRITE,Temp_Cardinal);
                                                              PPointer(PRVA_Import)^:=@MyHookProcedure;
                                                              VirtualProtect(PPointer(PRVA_Import),4,Temp_Cardinal,Temp_Cardinal);
                                                          end;{1}
                                                      Inc(PRVA_Import);
                                                      end;{2}
                                                      Inc(PImport);
                                                      end;{3}
                                                  end;{4}
                                                   
                                                  procedure DllEntryPoint(reson:longint);stdcall;
                                                  begin
                                                      case reson of
                                                      DLL_PROCESS_ATTACH:
                                                          begin
                                                              DisableThreadLibraryCalls(hInstance);
                                                              ImageBase := GetModuleHandle(nil);
                                                              PEHeader := pointer(int64(ImageBase) + PImageDosHeader(ImageBase)._lfanew);//pe header
                                                              ProcessImports(pointer(PEHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress+ImageBase));
                                                          end;
                                                      end;
                                                  end;
                                                   
                                                  function nexthook(code:integer;wParam,lParam:longint):longint;stdcall;
                                                  begin
                                                      result:=callnexthookex(hook,code,wParam,lParam);
                                                  end;
                                                   
                                                  procedure sethook(flag:bool);export; stdcall;
                                                  begin
                                                      if flag then
                                                          hook:=setwindowshookex(wh_getmessage,@nexthook,hInstance,0)
                                                      else
                                                      begin
                                                          unhookwindowshookex(hook);
                                                          hook:=0;
                                                      end;
                                                  end;
                                                   
                                                  exports sethook;
                                                  begin
                                                      DLLProc:=@DllEntryPoint;
                                                      DllEntryPoint(DLL_PROCESS_ATTACH)
                                                  end.
                                                  Ну, что, так работает?
                                                    Нет! У меня так-же было. Я просто забыл об этом упомянуть. Может Millenium DeleteFile() NT'шную использует и без драйверов действительно не обойтись?
                                                    Сообщение отредактировано: Du-Xa -
                                                      Цитата
                                                      Du-Xa, 5.01.04, 17:32
                                                      Нет! У меня так-же было. Я просто забыл об этом упомянуть. Может Millenium DeleteFile() NT'шную использует и без драйверов действительно не обойтись?

                                                      При чём тут драйвера? У меня в ХР всё нормально работает...
                                                      Сообщение отредактировано: .alex -
                                                        Странно. А почему тогда у меня не работает! Проверил на 3 раза. Может в exe'шнике дело?
                                                        Хотя вряд ли, что ему надо-то. Нажимаю Del и файлы удаляются!
                                                        Хотя погодьте. А чем отличается DeleteFileA() от DeleteFileW()?
                                                        Сообщение отредактировано: Du-Xa -
                                                          Одна Ansi, вторая Wide
                                                            А когда я нажимаю Del какая из них используется? А когда "Удалить" в меню выбираю?
                                                            Сообщение отредактировано: Du-Xa -
                                                              Цитата
                                                              Du-Xa, 5.01.04, 21:00
                                                              А когда "Удалить" в меню выбираю?

                                                              Возможно в меню используется не DeleteFile(), SHFileOperation() - попробуй перехватить её ;)
                                                              У меня в ФАРе работает...
                                                                А у меня DeleteFileA даже в фаре не работает.
                                                                И кстати SHFileOperation() откуда эта функция и какие параметры ей нужно передавать?
                                                                Сообщение отредактировано: Du-Xa -
                                                                  ExpandedWrap disabled
                                                                    {$EXTERNALSYM SHFileOperation}
                                                                    function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;
                                                                    {$EXTERNALSYM SHFileOperationA}
                                                                    function SHFileOperationA(const lpFileOp: TSHFileOpStructA): Integer; stdcall;
                                                                    {$EXTERNALSYM SHFileOperationW}
                                                                    function SHFileOperationW(const lpFileOp: TSHFileOpStructW): Integer; stdcall;
                                                                     
                                                                     
                                                                    shell32 = 'shell32.dll';
                                                                    function SHFileOperation; external shell32 name 'SHFileOperationA';


                                                                  И неужели было самому поглядеть лень?
                                                                    Цитата Du-Xa,5.01.04, 22:58
                                                                    А у меня DeleteFileA даже в фаре не работает.

                                                                    Странно, у меня всё работает, вот тебе скриншот (обрати внимание на иконку MessageBox'a в трее - она ФАРовская)
                                                                    Прикреплённый файлПрикреплённый файлdel.jpg (152.25 Кбайт, скачиваний: 284)
                                                                      Цитата xZero,6.01.04, 12:41
                                                                      ExpandedWrap disabled
                                                                        {$EXTERNALSYM SHFileOperation}
                                                                        function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;
                                                                        {$EXTERNALSYM SHFileOperationA}
                                                                        function SHFileOperationA(const lpFileOp: TSHFileOpStructA): Integer; stdcall;
                                                                        {$EXTERNALSYM SHFileOperationW}
                                                                        function SHFileOperationW(const lpFileOp: TSHFileOpStructW): Integer; stdcall;
                                                                         
                                                                         
                                                                        shell32 = 'shell32.dll';
                                                                        function SHFileOperation; external shell32 name 'SHFileOperationA';


                                                                      И неужели было самому поглядеть лень?

                                                                      А откудова эти цитаты Вы берете?
                                                                        ExpandedWrap disabled
                                                                           
                                                                          {*******************************************************}
                                                                          {                                                       }
                                                                          {       Borland Delphi Run-time Library                 }
                                                                          {       Win32 Shell API Interface Unit                  }
                                                                          {                                                       }
                                                                          {       Copyright (c) 1985-1999, Microsoft Corporation  }
                                                                          {                                                       }
                                                                          {       Translator: Borland Software Corporation        }
                                                                          {                                                       }
                                                                          {*******************************************************}
                                                                           
                                                                          unit ShellAPI;


                                                                        Добавлено в :
                                                                        Не посчитайте за рекламу! =)

                                                                        Добавлено в :
                                                                        Т.е., в основном, это:
                                                                        Цитата
                                                                        ShellAPI.pas
                                                                        Windows.pas
                                                                          И всеже она у меня не работает. Можете мне исходники с Exe выслать пожалуйста.
                                                                            Цитата Du-Xa,6.01.04, 17:39
                                                                            И всеже она у меня не работает. Можете мне исходники с Exe выслать пожалуйста.

                                                                            Как это исходник c .exe?
                                                                            У тебя какая ось?
                                                                              У меня Windows Mellenium Edition. А исходник с EXE это исходник + откомпилированный файл(лучше без RunTime).
                                                                              Сообщение отредактировано: Du-Xa -
                                                                                .alex кинь ему ты, пожалуста, т.к. у тебя вроде как уже откомпилено =)
                                                                                  Цитата
                                                                                  xZero, 7.01.04, 23:40
                                                                                  .alex кинь ему ты, пожалуста, т.к. у тебя вроде как уже откомпилено =)

                                                                                  Не пойму зачем? Чем мои откомпиленные .ехе/.длл будут отличаться от его, сорс то один?
                                                                                    Попробую Windows98 поставлю. Может что в Melleniume глючит.
                                                                                      Windows98 ничего не пошло тоже!
                                                                                        ыыыыыы
                                                                                        Что-то ты явно не так делаешь!!!
                                                                                          У меня всё работает, только я заметил глюки
                                                                                          1) Не перехватывает LoadLibraryA
                                                                                          2) Если функция вызывается из запакованного exe(например UPX'om)
                                                                                          тогда хук не срабатывает
                                                                                            Да действительно я паковал Exe AsPack'ом, но с незапакованым ничего не идет тоже! Специально перекомпилировал ради такого случая! Запускаю в Far'е жду окошка и удаляю не закрывая окошка, через Far. Пробовал удалять мимо корзины, эфект тотже!
                                                                                              2 Du-Xa тогда попробуй поставь хук на MessageBoxA и проверб вообще у тебя работает или нет
                                                                                                Так: у меня XP
                                                                                                пробовал ловить и Боксы и LoadLibrary и DeleteFile - все ловится!
                                                                                                Пробовал паковать (UPX) - все ловится =(
                                                                                                В чем проблема? Что вы паковали?
                                                                                                  Andrey_Kun: знаешь, самое обидное то, что MessageBoxA у меня ловится, а DeleteFileA нет!!! Лучше бы наоборот!
                                                                                                    Цитата
                                                                                                    Du-Xa, 13.01.04, 20:24
                                                                                                    ...самое обидное то, что MessageBoxA у меня ловится, а DeleteFileA нет!!! Лучше бы наоборот!

                                                                                                    Мистика :blink:
                                                                                                      Ну выложи сюда, то что ты компилил!!! Может и прям мистика? =(
                                                                                                        А у меня такое предложение давайте так. Du-Xa выкладывает свой код, а xZero свой.
                                                                                                        А там и разберёмся ;)
                                                                                                          Обижаешь - я свой давно выложил!!!
                                                                                                            Для уверенности, что файл удаляется именно перехватываемой ф-ей, например, DeleteFileA, сделай вторую прогу в которой по клику напиши что-то вроде DeleteFile(PChar('C:\MyTestFil.Txt'));
                                                                                                            Вот и проверишь!
                                                                                                              2 xZero: он вроде уже так и делал. Только я непойму одного. Потвоему коду у меня не ставится хуки на файлы которые запакованы UPX
                                                                                                                Удалял я far'ом файл!
                                                                                                                Попробовал я вариант DeleteFile(PChar('C:\MyTestFil.Txt')); Конечно на диск С кинул файл MyTestFil.Txt. Но ничего не ловится!!!
                                                                                                                А по поводу моего кода, дак я его получил путем нажатия клавиш Cntl + C на коде xZero.
                                                                                                                Так что ошибки исключены.
                                                                                                                  У меня также не срабатывает, а именно не выполняется вот это условие
                                                                                                                  ExpandedWrap disabled
                                                                                                                        if PPointer(PRVA_Import)^ = ProcAddress then
                                                                                                                    Вот так вот. Оказывается не у одного меня не работает. А у Вас тоже не WindowsXP?
                                                                                                                      Цитата Song @ 17.01.04, 06:40
                                                                                                                      У меня также не срабатывает, а именно не выполняется вот это условие
                                                                                                                      ExpandedWrap disabled
                                                                                                                            if PPointer(PRVA_Import)^ = ProcAddress then

                                                                                                                      Точно, мистика какая-то! Ладно, завтра еще раз попробую!

                                                                                                                      Добавлено в :
                                                                                                                      Цитата Du-Xa @ 17.01.04, 18:11
                                                                                                                      Вот так вот. Оказывается не у одного меня не работает. А у Вас тоже не WindowsXP?

                                                                                                                      ыыыы
                                                                                                                      Да, вроде, как XP написано =(

                                                                                                                      Добавлено в :
                                                                                                                      Миша, а ты под какую ось тестил?
                                                                                                                        В XP. Других нет.

                                                                                                                        Добавлено в :
                                                                                                                        Судя по всему здесь что-то не учтено и ОС здесь не при чём.
                                                                                                                          xZero: Ну и как? Попробовал?
                                                                                                                            Цитата Du-Xa @ 21.01.04, 17:16
                                                                                                                            xZero: Ну и как? Попробовал?

                                                                                                                            Нет! Сессия, блин, в разгаре!!!
                                                                                                                              Мужики, чё вы парню все мОзги запарили? ;) Он же говорит - защитить от друзей.
                                                                                                                              Делай так! Пишешь малюсенькую программулину, которая просто напросто открывает все твои нужные файлы и постоянно держит их открытыми. Поставь её в автозагрузку или в реестр в Run. При запуске системы твоя прога откроет все твои ценнейшие файлы, и при попытке удалить какой-либо из них, сама система скажет: "Не тронь!". :D
                                                                                                                              Проблемы-то нет фактически. ;)
                                                                                                                                Да. Вот только что? У меня работает
                                                                                                                                  Цитата DrUnkard @ 23.01.04, 01:29
                                                                                                                                  Мужики, чё вы парню все мОзги запарили? ;) Он же говорит - защитить от друзей.
                                                                                                                                  Делай так! Пишешь малюсенькую программулину, которая просто напросто открывает все твои нужные файлы и постоянно держит их открытыми. Поставь её в автозагрузку или в реестр в Run. При запуске системы твоя прога откроет все твои ценнейшие файлы, и при попытке удалить какой-либо из них, сама система скажет: "Не тронь!". :D
                                                                                                                                  Проблемы-то нет фактически. ;)

                                                                                                                                  Во-первых: дело в том, что мы его предупреждали о выборе метода, но он все же пошел этим!
                                                                                                                                  Во-вторых: а что, если ему надо сберечь очень много файлов, то этот способ несколько извратен! (опять, таки, имхо).
                                                                                                                                  В-3: конечно, можно прдумать что-ниюудь и по проще!!! Но кому как .... =(
                                                                                                                                    А если ему надо файлы защитить от удаления, но при этом можно было бы их послушать (мп3-шки) или посмотреть (ави-шки) в плеерах?
                                                                                                                                      Одно другому не мешает. ;)
                                                                                                                                      Система запрещает только изменение открытого другим процессом файла и его удаление. А читать ты его можешь хоть сотней разных приложений. :P
                                                                                                                                        Вы отвлекаеетесь от темы. Раз уже есть код, может всётаки его доделать
                                                                                                                                          Цитата DrUnkard @ 23.01.04, 21:26
                                                                                                                                          Одно другому не мешает. ;)
                                                                                                                                          Система запрещает только изменение открытого другим процессом файла и его удаление. А читать ты его можешь хоть сотней разных приложений. :P

                                                                                                                                          Мне надо защитить свои 17Gb музыки. Что мог уже на болванки по скидал, денег больше не осталось.
                                                                                                                                          А друзья прийдут через 3 дня. Поэтому проблема для меня глобальна.
                                                                                                                                          А в общем на моем винчестере кроме музыки ничего важного уже не осталось.
                                                                                                                                          Просто обидно терять, то, что накапливалось годами.
                                                                                                                                            Мда, a в формате МР3 - это примерно 2000 песен. Твои друзья не вандалы, случаем? Я бы перед их приходом, просто изъял шнур питания компа, запрятал его на балконе под снег - и спал бы спокойно. :D
                                                                                                                                              Пример с DeleteFile() работает, проверенно на примере программкой:
                                                                                                                                              AssignFile(f,'file.txt'); ReWrite(f); CloseFile(f); //Создадим файл
                                                                                                                                              DeleteFile('file.txt'); //Удалим файл

                                                                                                                                              Но в Виндовс (Win98 и WinXP) это не проходит => IMHO, файлы в Винде удаляются по SHFileOperationA(W?) из SHELL32.DLL...

                                                                                                                                              Отсюда вопрос: А как паставить хук на нее?

                                                                                                                                              Добавлено в :
                                                                                                                                              Пример на DeleteFile() работает, бесспорно. Проверено программкой:
                                                                                                                                              AssignFile(f,'file.txt'); ReWrite(f); CloseFile(f); // Создадим файл
                                                                                                                                              DeleteFile('file.txt'); //Удалим (попытаемся) файл

                                                                                                                                              Но в Виндовс (Win98 и WinXP) это не проходит... + Появление характерного окошка (с задержкой на подготовку списка):

                                                                                                                                              +-----------------------------+
                                                                                                                                              | Удаление: |
                                                                                                                                              | |
                                                                                                                                              | [..ProgressBar....][Отмена] |
                                                                                                                                              +-----------------------------+

                                                                                                                                              Наводит на мысль об использовании SHFileOperationA() (SHFileOperationW()?) из SHELL32.DLL. Но только как на нее хук повесить грамотно...
                                                                                                                                              Кто подскажет?
                                                                                                                                                я пробовал таким же способ как и на DeleteFileA - ничего не выходит
                                                                                                                                                  Так же не получится - у нее параметры совсем другие! :)
                                                                                                                                                    Неужели никто ничего умного не добавит? :)
                                                                                                                                                      У меня даже с этим Rewrite(f); ... DeleteFile("name.txt") все равно ничего не идет. Удаляю что хочу.
                                                                                                                                                      Думал в Exe не подгружается Dll попробовал загрузить статично. Результат тот же.
                                                                                                                                                      Одно значит - либо я не то списал(Ctrl+C - Shift+Ins), либо Delphi у меня плохие Dll создает(проверял, отличные dll!). Но описанный выше пример с DeleteFileA ничего не сбережет на моем компьютере!
                                                                                                                                                      Попробовал даже Sleep(3000); поставить между Close(f) и Deletefile("name.txt") - Файл создается и отлично удаляется!
                                                                                                                                                      Почему же все-таки у меня не идет, а у всех идет этот пример :blink: :angry: :(
                                                                                                                                                      Если бы он работал, то этот алгоритм я думаю на многое можно было бы применить!!!
                                                                                                                                                      Не знаю что добавить. Кто может обьясните, пожалуйста, почему у меня на MsgBox хук ставится а на DeleteFileA нет, хотя не у кого больше проблем нет с этой функцией, кстати и на SHFileOperationA() у меня хук тоже не работает.
                                                                                                                                                      Гости прийдут сегодня и все!!!
                                                                                                                                                      Сообщение отредактировано: Du-Xa -
                                                                                                                                                        Слушай, а ты точно ничего не перепутал? У меня все отлично компилится и работает!
                                                                                                                                                        Вот исходники и компилированный проект.
                                                                                                                                                        В сообщении "Не закрывать, пока идет работа!" кнопку Ок не давить, пока удаляешь файлы (т.е. не закрывать). Да чего я объясняю, все итак понятно.

                                                                                                                                                        Кстати, а как ты хук на SHFileOperationA ставишь? Там же целая структура есть..

                                                                                                                                                        Кроме того, замечено, что DLL'ка как-то не сразу выгружается: Файл (DLL) не удалялась пару минут...

                                                                                                                                                        2All: Ну кто же знает, как поставить хук на SHFileOperationA?

                                                                                                                                                        Добавлено в :
                                                                                                                                                        Кстати, компилино в Delphi 7...
                                                                                                                                                        Прикреплённый файлПрикреплённый файлDeleteFileHook.zip (31.53 Кбайт, скачиваний: 154)
                                                                                                                                                          У кого еще не работает? :)
                                                                                                                                                            Цитата
                                                                                                                                                            ZShell, 27.01.04, 01:23
                                                                                                                                                            Слушай, а ты точно ничего не перепутал?

                                                                                                                                                            ? :)
                                                                                                                                                            Ну я ж даже строку указал, которая не выполняется.
                                                                                                                                                            Нетрудно понять, что без неё хук не сработает, т.к. он ставится после этого условия.
                                                                                                                                                              У меня не работает
                                                                                                                                                                У меня тоже не работает!!!
                                                                                                                                                                  Хм.... А у вас не работает и мой откомпилиный пример?
                                                                                                                                                                  Тогда почему у меня все работает ?! XP Professional, Microsoft Windows XP [Версия 5.1.2600], Delphi 7.

                                                                                                                                                                  Добавлено в :
                                                                                                                                                                  Да! Ну как там насчет хука на SHFileOperationA?
                                                                                                                                                                  Сообщение отредактировано: ZShell -
                                                                                                                                                                    Вот, хотел поэкспериментировать (может, мне с Делфи повезло), ан нет, вот пример, компилиный в Delphi3 Client/Server (с исходником, пришлось немного изменить, правда) - работает отлично!

                                                                                                                                                                    Добавлено в :
                                                                                                                                                                    Оба примера (компилиный в Delphi 3 и Delphi 7 (есть еще и 5, но это уже борщ:)) ОТЛИЧНО РАБОТАЮТ в Win98SE/WinME/WinXP - проверено лично, а врать мне резону нет!
                                                                                                                                                                    Т.е. это не должно зависить ни от компилятора, ни от ОСи. Но все же можно попробовать компилировать исходник для Delphi 3 в Delphi 7 - вдруг заработает? (У меня компилится и работает).

                                                                                                                                                                    Опять таки при условии использования ИМЕННО функции DeleteFileA(), например:

                                                                                                                                                                    procedure TForm1.Button1Click(Sender: TObject);
                                                                                                                                                                    var f: File;
                                                                                                                                                                    begin
                                                                                                                                                                    AssignFile(f,'file.txt');
                                                                                                                                                                    ReWrite(f);
                                                                                                                                                                    CloseFile(f);
                                                                                                                                                                    DeleteFile('file.txt');
                                                                                                                                                                    end;

                                                                                                                                                                    А теперь давайте всем миром навалимся на SHFileOperationA - IMHO, она используется чаще и, отсюда следует, ее применение гораздо интереснее (перехваты не только удаления, реализованного в Виндовс, но копирования и перемещения файлов!!).

                                                                                                                                                                    Добавлено в :
                                                                                                                                                                    Оба примера (компилиный в Delphi 3 и Delphi 7 (есть еще и 5, но это уже борщ:)) ОТЛИЧНО РАБОТАЮТ в Win98SE/WinME/WinXP - проверено лично, а врать мне резону нет!
                                                                                                                                                                    Т.е. это не должно зависить ни от компилятора, ни от ОСи. Но все же можно попробовать компилировать исходник для Delphi 3 в Delphi 7 - вдруг заработает? (У меня компилится и работает).

                                                                                                                                                                    Опять таки при условии использования ИМЕННО функции DeleteFileA(), например:

                                                                                                                                                                    procedure TForm1.Button1Click(Sender: TObject);
                                                                                                                                                                    var f: File;
                                                                                                                                                                    begin
                                                                                                                                                                    AssignFile(f,'file.txt');
                                                                                                                                                                    ReWrite(f);
                                                                                                                                                                    CloseFile(f);
                                                                                                                                                                    DeleteFile('file.txt');
                                                                                                                                                                    end;

                                                                                                                                                                    А теперь давайте всем миров навалимся на SHFileOperationA - ее использование гораздо более широко, да и она-то как раз и является "стандартной удалялкой файлов в Винде". А как вам еще и перехват копирования и переноса файлов?!

                                                                                                                                                                    Добавлено в :
                                                                                                                                                                    (Я не тормоз, это у меня инет такой!;))
                                                                                                                                                                    Прикреплённый файлПрикреплённый файлFileDeleteHookD3_31kb_.zip (31.11 Кбайт, скачиваний: 149)
                                                                                                                                                                      Вот для отлова SHFileOperationA:
                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                        library Mouse_mes;
                                                                                                                                                                        uses
                                                                                                                                                                          sysutils,
                                                                                                                                                                          windows,
                                                                                                                                                                          messages,
                                                                                                                                                                          shellapi;
                                                                                                                                                                         
                                                                                                                                                                        type
                                                                                                                                                                            TImageImportDescriptor=packed record
                                                                                                                                                                            OriginalFirstThunk: DWORD;
                                                                                                                                                                            TimeDateStamp: DWORD;
                                                                                                                                                                            ForwarderChain: DWORD;
                                                                                                                                                                            Name: DWORD;
                                                                                                                                                                            FirstThunk: DWORD;
                                                                                                                                                                            end;
                                                                                                                                                                         
                                                                                                                                                                            PImageImportDescriptor=^TImageImportDescriptor;
                                                                                                                                                                         
                                                                                                                                                                        var
                                                                                                                                                                            hook: HHook = 0;
                                                                                                                                                                            PEHeader:PImageNtHeaders;
                                                                                                                                                                            ImageBase:cardinal;
                                                                                                                                                                         
                                                                                                                                                                        //function MyHookProcedure(lpFileName: PChar): boolean;stdcall;
                                                                                                                                                                        function MyHookProcedure(const lpFileOp: TSHFileOpStructA): Integer; stdcall;
                                                                                                                                                                        begin
                                                                                                                                                                            MessageBox(HWND(nil), 'DeleteFile(): call', 'Bla-bla', MB_OK);
                                                                                                                                                                            ExitProcess(0);
                                                                                                                                                                            result := 0;
                                                                                                                                                                        end;
                                                                                                                                                                         
                                                                                                                                                                        procedure ProcessImports(PImports:PImageImportDescriptor);
                                                                                                                                                                        var
                                                                                                                                                                            PImport:PImageImportDescriptor;
                                                                                                                                                                            PRVA_Import:LPDWORD;
                                                                                                                                                                            ProcAddress:pointer;
                                                                                                                                                                            Temp_Cardinal:cardinal;
                                                                                                                                                                        begin{1}
                                                                                                                                                                            ProcAddress := GetProcAddress(GetModuleHandle('shell32.dll'), 'SHFileOperationA');
                                                                                                                                                                            PImport:=PImports;
                                                                                                                                                                            while PImport.Name <> 0 do
                                                                                                                                                                            begin{2}
                                                                                                                                                                            PRVA_Import:=LPDWORD(pImport.FirstThunk+ImageBase);
                                                                                                                                                                            while PRVA_Import^ <> 0 do
                                                                                                                                                                            begin{3}
                                                                                                                                                                            if PPointer(PRVA_Import) ^= ProcAddress then
                                                                                                                                                                                begin{4}
                                                                                                                                                                                    VirtualProtect(PPointer(PRVA_Import),4,PAGE_READWRITE,Temp_Cardinal);
                                                                                                                                                                                    PPointer(PRVA_Import)^:=@MyHookProcedure;
                                                                                                                                                                                    VirtualProtect(PPointer(PRVA_Import),4,Temp_Cardinal,Temp_Cardinal);
                                                                                                                                                                                end;{1}
                                                                                                                                                                            Inc(PRVA_Import);
                                                                                                                                                                            end;{2}
                                                                                                                                                                            Inc(PImport);
                                                                                                                                                                            end;{3}
                                                                                                                                                                        end;{4}
                                                                                                                                                                         
                                                                                                                                                                        procedure DllEntryPoint(reson:longint);stdcall;
                                                                                                                                                                        begin
                                                                                                                                                                            case reson of
                                                                                                                                                                            DLL_PROCESS_ATTACH:
                                                                                                                                                                                begin
                                                                                                                                                                                    DisableThreadLibraryCalls(hInstance);
                                                                                                                                                                                    ImageBase := GetModuleHandle(nil);
                                                                                                                                                                                    PEHeader := pointer(int64(ImageBase) + PImageDosHeader(ImageBase)._lfanew);//pe header
                                                                                                                                                                                    ProcessImports(pointer(PEHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress+ImageBase));
                                                                                                                                                                                end;
                                                                                                                                                                            end;
                                                                                                                                                                        end;
                                                                                                                                                                         
                                                                                                                                                                        function nexthook(code:integer;wParam,lParam:longint):longint;stdcall;
                                                                                                                                                                        begin
                                                                                                                                                                            result:=callnexthookex(hook,code,wParam,lParam);
                                                                                                                                                                        end;
                                                                                                                                                                         
                                                                                                                                                                        procedure sethook(flag:bool);export; stdcall;
                                                                                                                                                                        begin
                                                                                                                                                                            if flag then
                                                                                                                                                                                hook:=setwindowshookex(wh_getmessage,@nexthook,hInstance,0)
                                                                                                                                                                            else
                                                                                                                                                                            begin
                                                                                                                                                                                unhookwindowshookex(hook);
                                                                                                                                                                                hook:=0;
                                                                                                                                                                            end;
                                                                                                                                                                        end;
                                                                                                                                                                         
                                                                                                                                                                        exports sethook;
                                                                                                                                                                        begin
                                                                                                                                                                            DLLProc:=@DllEntryPoint;
                                                                                                                                                                            DllEntryPoint(DLL_PROCESS_ATTACH)
                                                                                                                                                                        end.

                                                                                                                                                                      Все тоже самое!

                                                                                                                                                                      Добавлено в :
                                                                                                                                                                      Exe для проверки:
                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                        uses ShellAPI;
                                                                                                                                                                        function SimpleCopyFiles(_pfrom,_pto: string): boolean;
                                                                                                                                                                        var
                                                                                                                                                                        lpFileOp: TSHFILEOPSTRUCT;
                                                                                                                                                                        begin
                                                                                                                                                                        with lpFileOp do
                                                                                                                                                                        begin
                                                                                                                                                                        Wnd:=form1.handle;
                                                                                                                                                                        wFunc:=FO_COPY;
                                                                                                                                                                        pFrom:=PChar(_pfrom);
                                                                                                                                                                        pTo:=PChar(_pto);
                                                                                                                                                                        fFlags:=0;
                                                                                                                                                                        fFlags:=(fFlags OR FOF_RENAMEONCOLLISION);
                                                                                                                                                                        end;
                                                                                                                                                                        if SHFileOperation(lpFileOp)<>0 then Result:=FALSE
                                                                                                                                                                        else Result:=TRUE;
                                                                                                                                                                        end;
                                                                                                                                                                         
                                                                                                                                                                        onClick:
                                                                                                                                                                        SimpleCopyFiles('aaa', 'bbb');
                                                                                                                                                                        :ZShell
                                                                                                                                                                        Нет. И все-таки этот пример у меня не работает...
                                                                                                                                                                          :xZero
                                                                                                                                                                          А вот пример с SHFileOperationA идет без проблем если использую указанный пример. Но если копирую через систему, то не работает. Видать там всеже не эта функция используется. Может кто знает.
                                                                                                                                                                          Хотя меня интересует скорее процес удаления :D А может я и ошибаюсь насчет системы.
                                                                                                                                                                          Кстати попробовал половить другие функции!!! Все ловится кроме DeleteFileA ->>> Паралокс! B)

                                                                                                                                                                          Добавлено в :
                                                                                                                                                                          Знаете. Хотя сейчас мне это уже не нужно(Слава богу музыка осталась цела), я все равно хочу добраться до истины.... Тема та довольно интересная.
                                                                                                                                                                            Тема очень интересная. Сейчас кстати проверю код xZero
                                                                                                                                                                              Может еще SHFileOperationW использоваться.. Или у него еще родственные функции есть...
                                                                                                                                                                                Прикольно... Эксперименты с SHFileOperation привели у меня к следующему:

                                                                                                                                                                                SHFileOperationA сработала 1 раз, поймав удаление файла с длинным именем. И это с учетом того, что я гонял файлы туда-сюда, удалял и создавал их средствами системы (WinXP) по многу раз. Т.е. что-то тут не так, раз хук срабатывает "раз на миллион".

                                                                                                                                                                                SHFileOperationW (с использованием WideChar) не сработала ни разу! Хотя, может, я мало пробовал. Но мы же боремся за срабатывание с первого раза, не так ли?

                                                                                                                                                                                Люди, у кого есть MSDN, что там про нее пишуть? На microsoft лезть не хочу - тормозит ужасно! ;)
                                                                                                                                                                                  SHFileOperationW у меня тоже не работает. А кстати что такое MSDN?
                                                                                                                                                                                    Возможно, не успевает поймать все, т.к. липнет к эксплореру".

                                                                                                                                                                                    Добавлено в :
                                                                                                                                                                                    Цитата Du-Xa @ 29.01.04, 16:34
                                                                                                                                                                                    А кстати что такое MSDN?

                                                                                                                                                                                    Все, о чем мы говорили в этой ветке - может это неи то, с чего надо начинать?

                                                                                                                                                                                    Может я неправильно выразлся! Но я хотел сказать, что на протяжении этой ветки никто из нас ни разу не открыл спецификацию ре файлов и не поглядел её, ни кто не попытался поизучать подобные темы, поискав их в инете - верно?

                                                                                                                                                                                    Мы будем изучать это, такими шагами, очень и очень долго! Может мы постараемся все понять с нуля!? А то мы просто изменяем в данном коде одно, два слова и пытаемся дождаться когда же он заработает - верно?
                                                                                                                                                                                      Вы правы. Мы стоим на одном месте, меняя слова, но не понимая сути. Но я еще нигде не видел инфы по этому поводу, и по этому здесь и задал такой вопрос. Я с hook'ами некогда не работал раньше, и вот понадобилось. MSDN часто слышал это слово, понимаю примерно так: описание windows функций, типа огромная библиотека по windows для програмистов - это так?...
                                                                                                                                                                                        На Microsоft лезть опасно, там сейчас вирус ходит :ph34r:
                                                                                                                                                                                          Цитата Andrey_Kun @ 31.01.04, 10:43
                                                                                                                                                                                          На Microsоft лезть опасно, там сейчас вирус ходит :ph34r:

                                                                                                                                                                                          А там эту MSDN скачать можно или она уж очень-очень большая...
                                                                                                                                                                                          Кстати а что он делает этот вирус-не трой ли, а то у меня у сайта почему-то кем то пароль сменился.
                                                                                                                                                                                          Я парился неделю, просил админов выслать мне новый на другой ящик.
                                                                                                                                                                                            Цитата Du-Xa @ 31.01.04, 15:39
                                                                                                                                                                                            А там эту MSDN скачать можно или она уж очень-очень большая.

                                                                                                                                                                                            На ваделенке можно. 1,6 гектара. Качай.. :D
                                                                                                                                                                                              Для начала, что бы не создавать новой ветки, можно сюда бросать все статьи на тему перехвата и хуков (лучше ссылки). Когда каждый из нас с десяток статей прочитает и перепробует все что в них написано, то можно будет пробовать самому. Так же по этой теме нам неоюходимо описание формата испольняемых фалов. Так что уже можно начинать.
                                                                                                                                                                                                Предлогаю всем начать заливать на http://forum.sources.ru/ MSDN.
                                                                                                                                                                                                Не весь конечно, но по чуть четь, кто сколько сможет. :lol:
                                                                                                                                                                                                  А зачем заливать, если можно с Microsoft с таким же успехом прочитать. Может лучше ссылки на интересные странички пооставлять с этого MSDN?
                                                                                                                                                                                                    Кстати у меня при использовании хука на SHFileOperation комп летал, поэтому мне не верится что это может быть тормоз системы.
                                                                                                                                                                                                      Короче в коде гдето есть ошибка, это польбому
                                                                                                                                                                                                      Кстати а с С++ коды никто переводить на Делфи не пробовал? :ph34r:
                                                                                                                                                                                                        Какие коды, любые, пробовал. Но я в си не силен.
                                                                                                                                                                                                          Ну... Может и так. Но зачем нам, например, спецификация ЕХЕ для перехвата WinAPI? Или я не совсем понимаю что-то..
                                                                                                                                                                                                            Цитата
                                                                                                                                                                                                            ZShell, 2.02.04, 07:49
                                                                                                                                                                                                            Но зачем нам, например, спецификация ЕХЕ для перехвата WinAPI? Или я не совсем понимаю что-то..
                                                                                                                                                                                                            Не совсем. А как ты их собрался перехватывать не зная, что и куда писать и ваще не зная как устроен РЕ файл? :blink:
                                                                                                                                                                                                              2 Alex а ты можешь чтонибудь поконкретнее посоветовать
                                                                                                                                                                                                                Цитата
                                                                                                                                                                                                                Andrey_Kun, 2.02.04, 13:47
                                                                                                                                                                                                                2 Alex а ты можешь чтонибудь поконкретнее посоветовать

                                                                                                                                                                                                                А что советовать, хер его знает, у меня всё нормально работает, я даже скиншот давал, попросил друга проверить - у него то работает, то - нет. (кстати у меня тоже только в ФАРе работает ;)) В разделе WinApi есть такая же тема от Demo_S, но там тоже всё глухо - короче непонятно, толь винда функции другие какие-нибудь вызывает, то ли не для всех процессов хук ставится. ИМХО мужно делать не так, т.е. не таблицы импортов править в каждом процессе, а таблицу экспорта в kernel32.dll, как это сделать знаю только для 9х, и то геммора полно, а для лигнейки НТ нужно драйвер писать - пример нужно искать...
                                                                                                                                                                                                                  Alex: А для 9x не подбросищь примерчик?
                                                                                                                                                                                                                    Цитата Song,4.01.04, 20:50
                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                    xZero, 4.01.04, 20:25
                                                                                                                                                                                                                    и готовь .... ээээ ммм, ладно шутю =)

                                                                                                                                                                                                                    Да правильно-правильно, пусть готовит :)

                                                                                                                                                                                                                    ИЮХК[CODE]
                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                    Цитата


                                                                                                                                                                                                                      GigABytE: Спасибо. Я все понял.
                                                                                                                                                                                                                      Сообщение отредактировано: Du-Xa -
                                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                                        Du-Xa, 2.02.04, 18:13
                                                                                                                                                                                                                        Alex: А для 9x не подбросищь примерчик?

                                                                                                                                                                                                                        Его ещё сделать надо, завтра постараюсь...
                                                                                                                                                                                                                        ЗЫ. Я не Alex, а .alex...
                                                                                                                                                                                                                        Сообщение отредактировано: .alex -
                                                                                                                                                                                                                          Буду очень благодарен .alex
                                                                                                                                                                                                                            Короче засада, я часа 3 убил на создание примера, а он собака не работает! В общем, всё перехватывается на ура, т.е. если создать свою прогу которая вызывает DeleteFile() – то всё отлично ловится, но ни для ФАРа, ни для Explorer’a, ни нехера не работает!!! Я смотрел с помощь ApiSpy’я работу ФАРа и Explorer’a, и ваще офигел – они не вызывают ни DeleteFile(), ни SHFileOperation() (хотя «грузят» их с помощью GetProcAddress()), и ваще никакой какой-либо другой функции которая может удалить файл, хотя все другие функции для работы с файлами, такие как CreateFile()/ReadFile()/…, они вызывают и используют. Надо думать…
                                                                                                                                                                                                                            ЗЫ. Попробую спросить на RSDN
                                                                                                                                                                                                                              2 Alex ты свой пример скинь на сайт
                                                                                                                                                                                                                                Цитата
                                                                                                                                                                                                                                Andrey_Kun, 4.02.04, 05:46
                                                                                                                                                                                                                                2 Alex ты свой пример скинь на сайт

                                                                                                                                                                                                                                Пожалуйста.
                                                                                                                                                                                                                                ЗЫ. в коде подробные комментарии
                                                                                                                                                                                                                                ЗЫЫ. работает только для 9х!
                                                                                                                                                                                                                                Сообщение отредактировано: .alex -

                                                                                                                                                                                                                                Прикреплённый файлПрикреплённый файлHiJack_DeleteFile.zip (33.25 Кбайт, скачиваний: 156)
                                                                                                                                                                                                                                  Короче, вот что мне ответили на RSDN:
                                                                                                                                                                                                                                  Цитата

                                                                                                                                                                                                                                  Ищи в разделе Shell Extensions тему "Copy Hook Handlers".
                                                                                                                                                                                                                                  Normally, users and applications can copy, move, delete, or rename folders with few restrictions. By implementing a copy hook handler, you can control whether or not these operations take place. For instance, implementing such a handler allows you to prevent critical folders from being renamed or deleted.

                                                                                                                                                                                                                                  ЗЫ. Так что дерзай...
                                                                                                                                                                                                                                  ЗЗЫ. надеюсь MSDN у тебя есть? :)
                                                                                                                                                                                                                                  Сообщение отредактировано: .alex -
                                                                                                                                                                                                                                    A kak otlavlivatj sobsenija pri instalacii menja interesuet kakie faili kuda kupirujutsa i cto propisalosj v registr
                                                                                                                                                                                                                                      Цитата HELL @ 18.02.04, 07:07
                                                                                                                                                                                                                                      A kak otlavlivatj sobsenija pri instalacii menja interesuet kakie faili kuda kupirujutsa i cto propisalosj v registr

                                                                                                                                                                                                                                      RegMon, FileMon + source
                                                                                                                                                                                                                                        Не совсем понял дайте хотябы какой-то кусочек программы на делфи что бы отловить событие на копирование(если ето тоже самое что и при инсталяции и будет ли она различать копирую я файл или ето инсталяция)
                                                                                                                                                                                                                                        ПЛИЗ-З-З
                                                                                                                                                                                                                                          RegMon, FileMon это такие утилиты, которые помогают отловить работу с файлами (и) или реестром.
                                                                                                                                                                                                                                          Есть еще рульная прога regshot. сравнивает реестр до и после инсталяции проги, находит отличия.
                                                                                                                                                                                                                                          Хотя такая утилита есть где-то в винде встроенная.
                                                                                                                                                                                                                                          А насчет разницы копирования и инсталяции, то filemon'у все пофигу. Он смотрит с какими файлами ты общаешся и по какому смещению вот и все.
                                                                                                                                                                                                                                            Тоесть если прога будет запущена и будет постоянно просматривать какие файлы куда переместились то она не различит толи я скопировал грппу файлов толи я происталировал программу
                                                                                                                                                                                                                                              2 DuXa реально работает LockFile
                                                                                                                                                                                                                                                А если мне нужно свою дату для проги придумать, то что мне отлавливать?
                                                                                                                                                                                                                                                думал procedure GetLocalTime(var lpSystemTime: TSystemTime);
                                                                                                                                                                                                                                                Но не работает.
                                                                                                                                                                                                                                                Хочу чтобы 2Gis(Карта города) думала что я ее запускаю в прошлом году и в ней бы работали все функции (поиск).
                                                                                                                                                                                                                                                  просто перед запуском меняешь тек. дата, а после меняешь обратно
                                                                                                                                                                                                                                                    Не. Функциями проги я буду пользоваться во время всей её работы, и при этом там всякие word'ы работать правильно не будут (а может что-нибудь shareware по хитрее сделанное). Дату вставлю, забуду что левая и капут. Мне нужно чтобы эта ерунда не мешала другим прогам.
                                                                                                                                                                                                                                                      Я СДЕЛАЛ ЭТО, :wub: не то что вы подумали
                                                                                                                                                                                                                                                      Прикреплённый файлПрикреплённый файлno_del.zip (18.17 Кбайт, скачиваний: 227)
                                                                                                                                                                                                                                                        2 Скачали, Работает? Кстати это только для НТ\ХР\2000
                                                                                                                                                                                                                                                          Цитата Andrey_Kun @ 31.03.04, 03:15
                                                                                                                                                                                                                                                          2 Скачали, Работает? Кстати это только для НТ\ХР\2000

                                                                                                                                                                                                                                                          А где *.pas, *.dpr?
                                                                                                                                                                                                                                                            При у даление файла появляться диалог!
                                                                                                                                                                                                                                                            Е сли класс окна=диалог и текст начинаеться с 'Вы дествительно хотите удалить...' то закрыть этот диалог!:D Может ещё чтонибудь отследить можно. ;)
                                                                                                                                                                                                                                                              Цитата tigrix @ 31.03.04, 09:02
                                                                                                                                                                                                                                                              При у даление файла появляться диалог!
                                                                                                                                                                                                                                                              Е сли класс окна=диалог и текст начинаеться с 'Вы дествительно хотите удалить...' то закрыть этот диалог!:D Может ещё чтонибудь отследить можно. ;)

                                                                                                                                                                                                                                                              А что случится если это окно не появляется? =)
                                                                                                                                                                                                                                                                я вас чего то не пойму. Просто функция DeleteFileA перехваьтывается и при удалении файла выдаётся мсжбокс "Не надо удалять .. файл"
                                                                                                                                                                                                                                                                  2 Andrey_kun: работает, выдает msg и не удаляется.
                                                                                                                                                                                                                                                                    в 2000 ???
                                                                                                                                                                                                                                                                      Не :huh: не пашет у меня Xp :( :( !!!
                                                                                                                                                                                                                                                                        Скачал, набираю в windows commandere команду del имя_файла, так вот удаляет и нет проблем, вот, потом нажимаю DELETE в нем же (windows commander) появляется сообщение, что удалять не надо, а файл все равно удаляется :( . В итоге работает только по SHIFT+DELETE, не удаляется. вот.
                                                                                                                                                                                                                                                                          2 Andrey_Kun: у меня Вин2000, пытался удалить через командную строку, эксплорером, вин_командером (с шифтом и без) - результат один: "НЕ УДАЛЯЕТСЯ", "ОТКЗАНО В ДОСТУПЕ".
                                                                                                                                                                                                                                                                            Значит работает у большинства. Просто он исп. другие АПИ. Но главное сама система перехвата работает ;)
                                                                                                                                                                                                                                                                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                                                                                                                                                            0 пользователей:


                                                                                                                                                                                                                                                                            Рейтинг@Mail.ru
                                                                                                                                                                                                                                                                            [ Script execution time: 0,2247 ]   [ 16 queries used ]   [ Generated: 3.05.24, 07:34 GMT ]