1. Pascal / Говнокод #21306

    −51

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    procedure AddTask(const taskname:widestring; const filename:widestring);
    begin
      shellexecutew(0,'OPEN','schtasks.exe', pwidechar('/create /tn "\mytaskname)))" /tr "\"'+filename+'\"" /SC ONCE /ST 00:00 /RL HIGHEST /F'),nil,0);
    end;
    
    function FindTask(run:boolean=false):boolean;
    
    function ParseCommand(text:string):string;
    begin
      Result:=parsestr('<Command>', text,'</Command>');
      Result:=StringReplace(Result,'"','',[rfReplaceAll]); // AnsiExtractQuotedStr очень глюкавая.
    end;
    
    var
      TaskService: ITaskService;
      Folder: ITaskFolder;
      Tasks: IRegisteredTaskCollection;
      Task: IRegisteredTask;
      RTask:IRunningTask;
      i: Integer;
      Path:string;
    begin
      result:=false;
      if (Succeeded(CoInitialize(nil))) then
      begin
        if (Failed(CoCreateInstance(CLSID_TaskScheduler, nil, CLSCTX_INPROC_SERVER, IID_ITaskService, TaskService))
        or (Failed(TaskService.Connect(Null, Null, Null, Null)))) then
        begin
          CoUninitialize();
          TaskService := nil;
        end;
      end;
    
      if not assigned(taskservice) then exit;
    
      TaskService.GetFolder('\', folder);
      if Folder <> nil then
      begin
        Folder.GetTasks(0, tasks);
        if Tasks <> nil then
        begin
          if Tasks.Count > 0 then
          begin
            for i:=1 to Tasks.Count do
            begin
              Task:=Tasks.Item[i];
              if Task <> nil then
              begin
                 if widesametext(task.Name,AppTaskName) then
                begin
                  Path:=ParseCommand(Task.XML);
                  if not widesametext(Path, ParamStr(0)) then
                  begin
                    folder.DeleteTask(task.Name,0);
                    break;
                  end;
                  if run then
                  begin
                    Task.Run('', rtask);
                    Sleep(5000); // задержка необходима, иначе обращение к Task обрушит прогу с сообщением "нет ни одного выполняющегося экземпляра задачи"
                    Result:=(rTask.State=TASK_STATE_RUNNING);
                    break;
                  end
                  else
                  begin
                    result:=true;
                    break;
                  end;
                end;
                Task:=nil;
              end;
            end;

    Хуйна.

    Запостил: voodoodal16, 30 Сентября 2016

    Комментарии (16) RSS

    • показать все, что скрытоОчень хитрожопая штука, с помощью которой один раз получив админские права, можно флудить и троллить от админа, не запрашивая повышения.
      Ответить
    • показать все, что скрытоКак это работает?
      Ответить
      • показать все, что скрытоТупо добавляет задачу в планировщик.
        Ответить
        • показать все, что скрытоТупо добавил тебе за щеку, проверяй.
          Ответить
        • показать все, что скрытоПланировщик не нужен. Я слежу, чтобы эта служба была выключена, потому что с ней всё тормозит.
          Ответить
        • показать все, что скрытоНасколько я понимаю, задачи Планировщика хранятся в папке Windows\Tasks, с расширением *.JOB; этот код не создаёт *.JOB-файлов. Может, какой-то другой планировщик?
          Ответить
          • показать все, что скрыто
            function StringToWideString(const s: string): LPCWSTR;
            var
              wsBuffer: PWideChar;
            begin
              GetMem(wsBuffer, 1024);
              Result := StringToWideChar(s, wsBuffer, Length(s) + 1);
              //FreeMem(wsBuffer);
            end;
            
            procedure AddTaskToBoot;
            var
              SchedulingAgent: ITaskScheduler;
              pIPersistFile: IPersistFile;
              Task: ITask;
              WorkItem: IUnknown;
              piNewTrigger: Word;
              ITTrigger: ITaskTrigger;
              TaskTrig: TTaskTRIGGER;
              tmpGUID, tmpGUID2: TGUID;
              User: string;
              N: Cardinal;
            begin
              ActiveX.CoInitialize(nil);
              ActiveX.CoCreateInstance(CLSID_CSchedulingAgent, nil, CLSCTX_INPROC_SERVER, IID_ITaskScheduler, SchedulingAgent);
              tmpGUID := IID_ITask;
              SchedulingAgent.Delete(StringToWideString('Example'));
              tmpGUID := CLSID_CTask;
              tmpGUID2 := IID_IScheduledWorkItem;
              SchedulingAgent.NewWorkItem(StringToWideString('Example'), tmpGUID, tmpGUID2, WorkItem);
              Task := ITask(WorkItem);
              Task.SetApplicationName(StringToWideString(Application.ExeName));
              SetLength(User, 255);
              GetUserName(PChar(User), N);
              User := Copy(User, 1, N - 1);
              Task.SetAccountInformation(StringToWideString(User), nil);
              Task.SetFlags(TASK_FLAG_RUN_ONLY_IF_LOGGED_ON);
              Task.SetMaxRunTime(INFINITE);
              Task.CreateTrigger(piNewTrigger, ITTrigger);
              ZeroMemory(@TaskTrig, sizeof(TASK_TRIGGER));
              TaskTrig.cbTriggerSize := sizeof(TASK_TRIGGER);
              TaskTrig.wBeginYear := 2001;
              TaskTrig.wBeginMonth := 8;
              TaskTrig.wBeginDay := 7;
              TaskTrig.wEndYear := 2005;
              TaskTrig.wEndMonth := 8;
              TaskTrig.wEndDay := 7;
              TaskTrig.wStartHour := 16;
              TaskTrig.wStartMinute := 0;
              TaskTrig.TriggerType := TASK_EVENT_TRIGGER_AT_LOGON;
              ITTrigger.SetTrigger(@TaskTrig);
              Task.QueryInterface(IID_IPersistFile, pIPersistFile);
              pIPersistFile.Save(nil, true);
              ActiveX.CoUninitialize;
            end;


            Вот этот код добавляет Job.
            Ответить
        • показать все, что скрытоДля разового запуска или регулярно? В чем смысл?
          Ответить
    • показать все, что скрытоКакой багор)))))))))))))))))))))
      Ответить
    • показать все, что скрытоОфтопик: ещё BITS (т. наз. фоновую интеллектуальную службу передачи файлов) покопай.

      https://yandex.ru/blog/punto/6286

      Ходят слухи, что с помощью неё научились автоматически восстанавливать удалённые пользователем трояны.
      Ответить

    Добавить комментарий