На главную Наши проекты:
Журнал   ·   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
Страницы: (9) « Первая ... 4 5 [6] 7 8 ... Последняя » все  ( Перейти к последнему сообщению )  
> Запрет на удаление файлов , Как можно отследить удаление файлов через windows
    У кого еще не работает? :)
      Цитата
      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 Кбайт, скачиваний: 174)
                Вот для отлова 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 для програмистов - это так?...
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0451 ]   [ 15 queries used ]   [ Generated: 18.07.25, 00:54 GMT ]