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


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0393 ]   [ 16 queries used ]   [ Generated: 18.07.25, 06:28 GMT ]