Guest User

Untitled

a guest
Apr 17th, 2020
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.38 KB | None | 0 0
  1.  
  2. #include "StdAfx.h"
  3.  
  4. #include "AnticheatManager.h"
  5. #include "CheatQueueManager.h"
  6.  
  7. #include <AccCtrl.h>
  8. #include <Aclapi.h>
  9. #include <sddl.h>
  10.  
  11.  
  12. #include <XORstr.h>
  13.  
  14.  
  15.  
  16.  
  17.  
  18. #define THREAD_POISONED_ACCESS \
  19. THREAD_SUSPEND_RESUME | \
  20. THREAD_SET_CONTEXT | \
  21. THREAD_SET_INFORMATION | \
  22. THREAD_SET_THREAD_TOKEN | \
  23. THREAD_TERMINATE
  24.  
  25. #define PROCESS_POISONED_ACCESS \
  26. PROCESS_CREATE_THREAD | \
  27. PROCESS_VM_WRITE | \
  28. PROCESS_VM_READ | \
  29. PROCESS_VM_OPERATION | \
  30. PROCESS_SET_INFORMATION | \
  31. PROCESS_SET_LIMITED_INFORMATION | \
  32. PROCESS_QUERY_INFORMATION | \
  33. PROCESS_SUSPEND_RESUME | \
  34. PROCESS_CREATE_PROCESS
  35.  
  36. bool CAnticheatManager::BlockAccess(HANDLE hTarget)
  37. {
  38. std::string szSD =
  39. XOR("D:P"
  40. "(D;OICI;GA;;;BG)" /* Deny access to built-in guests */
  41. "(D;OICI;GA;;;AN)" /* ^ anonymous logon */
  42. "(D;OICI;GA;;;AU)" /* ^ authenticated users */
  43. "(D;OICI;GA;;;BA)" /* ^ administrators */
  44. "(D;OICI;GA;;;LA)" /* ^ Built-in Administrator */
  45. );
  46.  
  47. SECURITY_ATTRIBUTES sa = { 0 };
  48. sa.nLength = sizeof(sa);
  49. sa.bInheritHandle = FALSE;
  50.  
  51. if (!ConvertStringSecurityDescriptorToSecurityDescriptorA(szSD.c_str(), SDDL_REVISION_1, &(sa.lpSecurityDescriptor), NULL))
  52. {
  53. #ifdef _DEBUG
  54. TraceError("ConvertStringSecurityDescriptorToSecurityDescriptorA fail! Error: %u", GetLastError());
  55. #endif
  56. return false;
  57. }
  58.  
  59. if (!SetKernelObjectSecurity(hTarget, DACL_SECURITY_INFORMATION, sa.lpSecurityDescriptor))
  60. {
  61. #ifdef _DEBUG
  62. TraceError("SetKernelObjectSecurity fail! Error: %u", GetLastError());
  63. #endif
  64. return false;
  65. }
  66.  
  67. return true;
  68. }
  69.  
  70. bool CAnticheatManager::DenyProcessAccess()
  71. {
  72. typedef NTSTATUS(NTAPI* TRtlAddAccessDeniedAce)(PACL pAcl, DWORD dwAceRevision, ACCESS_MASK AccessMask, PSID pSid);
  73.  
  74. auto hNtdll = LoadLibraryA(XOR("ntdll.dll"));
  75. if (!hNtdll)
  76. return false;
  77.  
  78. auto lpRtlAddAccessDeniedAce = GetProcAddress(hNtdll, XOR("RtlAddAccessDeniedAce"));
  79. if (!lpRtlAddAccessDeniedAce)
  80. return false;
  81. auto RtlAddAccessDeniedAce = (TRtlAddAccessDeniedAce)lpRtlAddAccessDeniedAce;
  82.  
  83. SID pSid = { 0 };
  84. pSid.Revision = SID_REVISION;
  85. pSid.IdentifierAuthority = SECURITY_WORLD_SID_AUTHORITY;
  86. pSid.SubAuthorityCount = 1;
  87. pSid.SubAuthority[0] = SECURITY_WORLD_RID;
  88.  
  89. BYTE pBuffer[0x400] = { 0 };
  90.  
  91. auto pACL = (PACL)&pBuffer;
  92. pACL->AclRevision = ACL_REVISION;
  93. pACL->AclSize = sizeof(pBuffer);
  94. pACL->AceCount = 0;
  95.  
  96. auto ntStatus = RtlAddAccessDeniedAce(pACL, ACL_REVISION, PROCESS_POISONED_ACCESS, &pSid);
  97. if (!NT_SUCCESS(ntStatus))
  98. {
  99. #ifdef _DEBUG
  100. TraceError("RtlAddAccessDeniedAce fail! Error: %p", ntStatus);
  101. #endif
  102. return false;
  103. }
  104.  
  105. if (SetSecurityInfo(GetCurrentProcess(), SE_KERNEL_OBJECT, PROTECTED_DACL_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | UNPROTECTED_DACL_SECURITY_INFORMATION, 0, 0, pACL, 0) != ERROR_SUCCESS)
  106. {
  107. #ifdef _DEBUG
  108. TraceError("SetSecurityInfo fail! Error: %u", GetLastError());
  109. #endif
  110. return false;
  111. }
  112. return true;
  113. }
  114.  
  115. bool CAnticheatManager::DenyThreadAccess()
  116. {
  117. typedef NTSTATUS(NTAPI* TRtlAddAccessDeniedAce)(PACL pAcl, DWORD dwAceRevision, ACCESS_MASK AccessMask, PSID pSid);
  118.  
  119. auto hNtdll = LoadLibraryA(XOR("ntdll.dll"));
  120. if (!hNtdll)
  121. return false;
  122.  
  123. auto lpRtlAddAccessDeniedAce = GetProcAddress(hNtdll, XOR("RtlAddAccessDeniedAce"));
  124. if (!lpRtlAddAccessDeniedAce)
  125. return false;
  126. auto RtlAddAccessDeniedAce = reinterpret_cast<TRtlAddAccessDeniedAce>(lpRtlAddAccessDeniedAce);
  127.  
  128. SID pSid = { 0 };
  129. pSid.Revision = SID_REVISION;
  130. pSid.IdentifierAuthority = SECURITY_WORLD_SID_AUTHORITY;
  131. pSid.SubAuthorityCount = 1;
  132. pSid.SubAuthority[0] = SECURITY_WORLD_RID;
  133.  
  134. BYTE pBuffer[0x400] = { 0 };
  135.  
  136. auto pACL = (PACL)&pBuffer;
  137. pACL->AclRevision = ACL_REVISION;
  138. pACL->AclSize = sizeof(pBuffer);
  139. pACL->AceCount = 0;
  140.  
  141. auto ntStatus = RtlAddAccessDeniedAce(pACL, ACL_REVISION, THREAD_POISONED_ACCESS, &pSid);
  142. if (!NT_SUCCESS(ntStatus))
  143. {
  144. #ifdef _DEBUG
  145. TraceError("RtlAddAccessDeniedAce fail! Error: %p", ntStatus);
  146. #endif
  147. return false;
  148. }
  149.  
  150. if (SetSecurityInfo(GetCurrentThread(), SE_KERNEL_OBJECT, PROTECTED_DACL_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | UNPROTECTED_DACL_SECURITY_INFORMATION, 0, 0, pACL, 0) != ERROR_SUCCESS)
  151. {
  152. #ifdef _DEBUG
  153. TraceError("SetSecurityInfo fail! Error: %u", GetLastError());
  154. #endif
  155. return false;
  156. }
  157. return true;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment