[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    637
    Likes Received:
    246
    Reputations:
    42
    Нахрена такие сложности?
    Все делается двумя строчками
    Code:
    WinExec('taskkill /f /im filename.exe',sw_hide);
    WinExec('taskkill /f /fi "windowtitle eq ЗаголовокОкна*"',sw_hide);
     
  2. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    ВНЕЗАПНО, на Windows XP Home (а также некоторых Embedded) утилита taskkill отсутствует по умолчанию.

    И ещё...
    1. Запускать что-то из своего процесса, скрывая окно - заметно для антивирусов.
    2. В цикле создавать новые экземпляры процессов - затратно + тормоза.
    3. Утилита taskkill использует WMI - тормоза.
     
    #9522 binarymaster, 1 Mar 2014
    Last edited: 1 Mar 2014
  3. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    637
    Likes Received:
    246
    Reputations:
    42
    ВНЕЗАПНО CreateToolhelp32Snapshot отсутсвует в Windows 9x, раз уж мы тут начали обсуждать древние версии винды которые установлены на нескольких компьютерах во вселенной.
    Для каких антивирусов заметно? Зачем вам такие антивирусы, которые варнят скрытые окна, но пропускают отладчики и снифферы?
    Продайте уже наконец свой 286 процессор
    Читать выше

    Вывод: раз уж ты такой перфекционист, пиши на прерываниях и не пори херни про скорость работы
     
  4. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    1. taskkill можно удалить, т.к. это просто файл.
    2. Также его можно заблокировать системными политиками.
    3. XP относится к NT, про 9x не было разговора.
    4. Используя готовую программу, не зная сложного, знаний программирования особо не получите.
    5. Вам не понравился мой код, просто скажите это. Или лучше промолчите. Зачем переходить на личности?
     
  5. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    не нравится код, уж пардонте :)
    получать список процессов и искать в нем нужные приложения каждые 10 мс это конечно идея, но имхо лучше уж хукать создание процесса, чем вот так "рыскать"
    упоминалось про антивирусы, мол "палевно" запускать taskkill из своего процесса, но вот вызывать OpenProcess для "чужого" процесса, да даже "мессага" в чужое окно от недоверенного приложения ничуть не меньший грех для проактивки
    ну и про сложное, защититься от этого киллера можно чем-то подобным:
    Code:
    var
      dacl: TACL;
    begin
      ZeroMemory(@dacl, sizeof(TACL));
    
      if (InitializeAcl(dacl, sizeof(TACL), 2)) and (IsValidAcl(dacl)) then begin
    
        SetSecurityInfo(GetCurrentProcess, SE_KERNEL_OBJECT,
                                DACL_SECURITY_INFORMATION, nil, nil, @dacl, nil);
      end;
    ps: и напоследок с miniperl, httpd, HttpAnalyserStd это еще может пройти, но вот с олькой можно не пробовать, учитывая что к ней есть плагины для скрытия откуда только возможно, да и лучше наверное не убивать процессы, а просто отказываться работать с указанием причины, а то так грохнешь сервер mysql в "неподходящее" время, юзер обидится XD
     
    #9525 alexey-m, 2 Mar 2014
    Last edited: 2 Mar 2014
  6. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Конечно, мой код не претендует на место самого лучшего :)
    1. Насчёт мониторинга создания процессов при помощи хуков - вещь годная, но для такой прикладной задачи это по-моему чересчур.
    2. А вот мысль в сторону того, что можно случайно убить полезные процессы, верная. В своём коде я просто продублировал правила, которые пользователь DJ_TWIX привёл на картинке.
    3. Не вижу в вызове функции OpenProcess ничего преступного, тем более с явно указанным флагом PROCESS_TERMINATE, т.е. с полученным дескриптором другие действия, кроме заявленного, совершить не получится.
    4. Насчёт защиты через ACL, если не ошибаюсь, её легко можно обойти, если получить привилегии отладки.
    5. Относительно того кода, который предоставил пользователь #colorblind... я не вижу смысла программировать такие вещи на Delphi, можно просто написать bat-ник.
     
  7. Protocoler

    Protocoler Elder - Старейшина

    Joined:
    10 Oct 2012
    Messages:
    51
    Likes Received:
    54
    Reputations:
    81
    Как получить список подпапок в папке ? Использую такой код :
    Code:
    procedure ListFileDir(Path: string; FileList: TStrings);
     var
       SR: TSearchRec;
     begin
       if FindFirst(Path + '*.*', faDirectory, SR) = 0 then
       begin
         repeat
           if (SR.Attr = faDirectory) then
           begin
             FileList.Add(SR.Name);
           end;
         until FindNext(SR) <> 0;
         FindClose(SR);
       end;
     end;
    
    Но выдает список такого вида :
    .
    ..
    папка1
    папка2
    папка3
    папка4


    .
    ..
    папка

    .
    ..

    хотя по заданному пути находятся только такие папки :

    папка1
    папка2
    папка3
    папка4
     
  8. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    "." и ".." - это специальные каталоги, они не отображаются в проводнике.
    Точнее сказать, это не совсем каталоги - это ссылки. Одна точка - ссылка на текущий каталог, а две точки - ссылка на родительский каталог.

    Подробнее:
    http://ru.wikipedia.org/wiki/Каталог_(файловая_система)
     
  9. Protocoler

    Protocoler Elder - Старейшина

    Joined:
    10 Oct 2012
    Messages:
    51
    Likes Received:
    54
    Reputations:
    81
    это я понял, а как вывести только подпапки без лишней фигни ? )))
     
  10. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Легко :)
    Code:
    procedure ListFileDir(Path: string; FileList: TStrings);
    var
      SR: TSearchRec;
    begin
      if FindFirst(Path + '*.*', faDirectory, SR) = 0 then
      begin
        repeat
          if (SR.Attr = faDirectory) and
          (SR.Name <> '.') and (SR.Name <> '..') then
          begin
            FileList.Add(SR.Name);
          end;
        until FindNext(SR) <> 0;
        FindClose(SR);
      end;
    end;
     
  11. Protocoler

    Protocoler Elder - Старейшина

    Joined:
    10 Oct 2012
    Messages:
    51
    Likes Received:
    54
    Reputations:
    81
    Угу, да логично )) Но не выдает папки вообще, только файлы. Путь пробовал менять, убирал маску *.* , все также, это также убирал : (SR.Name <> '.') and (SR.Name <> '..') then

    Папки выдает только при атрибуте "любые файлы"
     
  12. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Try this:
    Code:
    procedure ListFileDir(Path: string; FileList: TStrings);
    var
      SR: TSearchRec;
    begin
      if FindFirst(Path + '*', faAnyFile, SR) = 0 then
      begin
        repeat
          if ((SR.Attr and faDirectory) = faDirectory) and
          (SR.Name <> '.') and (SR.Name <> '..') then
          begin
            FileList.Add(SR.Name);
          end;
        until FindNext(SR) <> 0;
        FindClose(SR);
      end;
    end;
    Сначала не заметил, нам ведь надо проверять только флаг faDirectory, а так получается, что мы исключали директории с другими установленными флагами.
     
    1 person likes this.
  13. sharki2411

    sharki2411 New Member

    Joined:
    21 Mar 2014
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Ребят, посоветуйте какой-нибудь простенький хэндбук по делфи. Ну и ссылочку, если можно)
     
  14. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    637
    Likes Received:
    246
    Reputations:
    42
    Каждому свое
    http://pascal-books.narod.ru/ebooks.htm
     
  15. sharki2411

    sharki2411 New Member

    Joined:
    21 Mar 2014
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    как программно подгрузить файл по ссылке, выполнить его код, ну и желательно затереть файлик?
     
  16. Nu11ers3t

    Nu11ers3t Member

    Joined:
    1 Aug 2013
    Messages:
    38
    Likes Received:
    25
    Reputations:
    19
    URLDownloadToFile из urlmon http://msdn.microsoft.com/en-us/library/ms775123%28v=vs.85%29.aspx
    И ShellExecute из Shell32 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx
    Далее DeleteFile из Kernel32 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363915%28v=vs.85%29.aspx
     
  17. #Smith

    #Smith New Member

    Joined:
    20 Jun 2010
    Messages:
    96
    Likes Received:
    2
    Reputations:
    0
    Не могу вспомнить.
    Как-то читал одну книжку про делфи.
    И там описывался символ для ввода числа в двоичке.

    Ну, например, для того, чтобы ввести 255 в шестнадцатиричке мы пишем символ доллара $FF, а был ещё какой-то символ для двоички. Но забыл. Всё перерыл и не могу вспомнить.

    Подскажите, кто знает.
     
  18. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    442
    Reputations:
    288
    на сколько я помню в делфи бинарное просто так нельзя писать. переводи.
     
  19. #Smith

    #Smith New Member

    Joined:
    20 Jun 2010
    Messages:
    96
    Likes Received:
    2
    Reputations:
    0
    Я тоже так думал, пока сам не увидел.
    Но вот забыл...
     
  20. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    637
    Likes Received:
    246
    Reputations:
    42
    Делфи не работает с двоичными константами и переменными. Не морочьте голову. Такая возможность есть в ассемблере, возможно си, но никак не паскаль и делфи.
     
Thread Status:
Not open for further replies.