delfirewallrule.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include <stdio.h>
  2. #include <Windows.h>
  3. #include <netfw.h>
  4. #include "delfirewallrule.h"
  5. #include "beacon.h"
  6. #pragma comment(lib, "comsuppw.lib")
  7. #pragma comment(lib, "Ole32.lib")
  8. #pragma comment(lib, "OleAut32.lib")
  9. HRESULT RemoveFirewallRule(BSTR ruleName) {
  10. HRESULT hr = S_OK;
  11. INetFwPolicy2 *pNetFwPolicy2 = NULL;
  12. INetFwRules *pRules = NULL;
  13. // Initialize COM.
  14. hr = OLE32$CoInitializeEx(NULL, COINIT_MULTITHREADED);
  15. if (FAILED(hr)) goto Cleanup;
  16. // Create an instance of the firewall settings manager.
  17. IID CLSIDNetFwPolicy2 = {0xe2b3c97f, 0x6ae1, 0x41ac, {0x81, 0x7a, 0xf6, 0xf9, 0x21, 0x66, 0xd7, 0xdd}};
  18. IID IIDINetFwPolicy2 = {0x98325047, 0xc671, 0x4174, {0x8d, 0x81, 0xde, 0xfc, 0xd3, 0xf0, 0x31, 0x86}};
  19. hr = OLE32$CoCreateInstance(&CLSIDNetFwPolicy2, NULL, CLSCTX_INPROC_SERVER, &IIDINetFwPolicy2, (void**)&pNetFwPolicy2);
  20. if (FAILED(hr)) goto Cleanup;
  21. // Retrieve the firewall rules collection.
  22. hr = pNetFwPolicy2->lpVtbl->get_Rules(pNetFwPolicy2, &pRules);
  23. if (FAILED(hr)) goto Cleanup;
  24. // Remove the rule.
  25. hr = pRules->lpVtbl->Remove(pRules, ruleName);
  26. if (FAILED(hr)) goto Cleanup;
  27. Cleanup:
  28. if (pRules) pRules->lpVtbl->Release(pRules);
  29. if (pNetFwPolicy2) pNetFwPolicy2->lpVtbl->Release(pNetFwPolicy2);
  30. OLE32$CoUninitialize();
  31. return hr;
  32. }
  33. int go(char *args, int len) {
  34. HRESULT hr;
  35. datap parser;
  36. WCHAR *w_ruleName = "";
  37. BeaconDataParse(&parser, args, len);
  38. w_ruleName = BeaconDataExtract(&parser, NULL);
  39. BSTR ruleName = OLEAUT32$SysAllocString(w_ruleName);
  40. hr = RemoveFirewallRule(ruleName);
  41. if (SUCCEEDED(hr)) {
  42. BeaconPrintf(CALLBACK_OUTPUT, "[+] Firewall rule removed successfully.\n");
  43. } else {
  44. BeaconPrintf(CALLBACK_ERROR, "Failed to remove the firewall rule with error code: 0x%08lx\n", hr);
  45. }
  46. OLEAUT32$SysFreeString(ruleName);
  47. return 0;
  48. }