deltaskscheduler.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <taskschd.h>
  4. #include <combaseapi.h>
  5. #include "deltaskscheduler.h"
  6. #include "beacon.h"
  7. BOOL DeleteScheduledTask(wchar_t* taskName, wchar_t* host) {
  8. BOOL actionResult = FALSE;
  9. HRESULT hr = S_OK;
  10. hr = OLE32$CoInitializeEx(NULL, COINIT_MULTITHREADED);
  11. if (FAILED(hr)) return actionResult;
  12. IID CTaskScheduler = {0x0f87369f, 0xa4e5, 0x4cfc, {0xbd,0x3e,0x73,0xe6,0x15,0x45,0x72,0xdd}};
  13. IID IIDITaskService = {0x2faba4c7, 0x4da9, 0x4013, {0x96, 0x97, 0x20, 0xcc, 0x3f, 0xd4, 0x0f, 0x85}};
  14. ITaskService *pTaskService = NULL;
  15. hr = OLE32$CoCreateInstance(&CTaskScheduler, NULL, CLSCTX_INPROC_SERVER, &IIDITaskService, (void**)&pTaskService);
  16. if (FAILED(hr)) {
  17. //MSVCRT$printf("Failed to create ITaskService: %x\n", hr); //DEBUG
  18. OLE32$CoUninitialize();
  19. return actionResult;
  20. }
  21. VARIANT Vhost;
  22. VARIANT VNull;
  23. OLEAUT32$VariantInit(&Vhost);
  24. OLEAUT32$VariantInit(&VNull);
  25. Vhost.vt = VT_BSTR;
  26. Vhost.bstrVal = OLEAUT32$SysAllocString(host);
  27. hr = pTaskService->lpVtbl->Connect(pTaskService, Vhost, VNull, VNull, VNull);
  28. if (FAILED(hr)) {
  29. //MSVCRT$printf("ITaskService::Connect failed: %x\n", hr); //DEBUG
  30. pTaskService->lpVtbl->Release(pTaskService);
  31. OLE32$CoUninitialize();
  32. return actionResult;
  33. }
  34. ITaskFolder* pTaskFolder = NULL;
  35. BSTR folderPathBstr = OLEAUT32$SysAllocString(L"\\");
  36. hr = pTaskService->lpVtbl->GetFolder(pTaskService, folderPathBstr, &pTaskFolder);
  37. if (FAILED(hr)) {
  38. //MSVCRT$printf("ITaskService::GetFolder failed: %x\n", hr); //DEBUG
  39. pTaskService->lpVtbl->Release(pTaskService);
  40. OLE32$CoUninitialize();
  41. OLEAUT32$SysFreeString(folderPathBstr);
  42. return actionResult;
  43. }
  44. OLEAUT32$SysFreeString(folderPathBstr);
  45. hr = pTaskFolder->lpVtbl->DeleteTask(pTaskFolder, taskName, 0);
  46. if (FAILED(hr)) {
  47. BeaconPrintf(CALLBACK_ERROR, "Failed to delete the scheduled task with error code: %x\n", hr);
  48. } else {
  49. BeaconPrintf(CALLBACK_OUTPUT, "[+] Scheduled task '%ls' deleted successfully!\n", taskName);
  50. actionResult = TRUE;
  51. }
  52. pTaskFolder->lpVtbl->Release(pTaskFolder);
  53. pTaskService->lpVtbl->Release(pTaskService);
  54. OLEAUT32$VariantClear(&Vhost);
  55. OLEAUT32$VariantClear(&VNull);
  56. OLE32$CoUninitialize();
  57. return actionResult;
  58. }
  59. int go(char *args, int len) {
  60. BOOL res = NULL;
  61. datap parser;
  62. WCHAR *taskName;
  63. WCHAR *hostName = L"";
  64. BeaconDataParse(&parser, args, len);
  65. taskName = BeaconDataExtract(&parser, NULL);
  66. hostName = BeaconDataExtract(&parser, NULL);
  67. res = DeleteScheduledTask(taskName, hostName);
  68. return 0;
  69. }