Advertisement
mchiappinam

[Source] - PointBlank Bypass + No-Exit

Jan 20th, 2013
2,467
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.25 KB | None | 0 0
  1. XTrap Bypass.exe: [C++]
  2.  
  3. //=======================================================================================================
  4. //=======================================================================================================
  5. //=======================================================================================================
  6. //=======================================================================================================
  7. //=======================================================================================================
  8. //=======================================================================================================
  9. //=======================================================================================================
  10. //=======================================================================================================
  11. //=======================================================================================================
  12. //=======================================================================================================
  13.  
  14. #include <stdio.h>
  15. #include <windows.h>
  16. #include <tlhelp32.h>
  17.  
  18. #define NT_SUCCESS(x) ((x) >= 0)
  19. #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004
  20. #define SystemHandleInformation 16
  21. #define ObjectBasicInformation 0
  22. #define ObjectNameInformation 1
  23. #define ObjectTypeInformation 2
  24. #define fcExp           0x4D9480
  25. #define BaseAddr        0x400000
  26.  
  27. typedef enum _THREAD_INFORMATION_CLASS {
  28.     ThreadBasicInformation,
  29.     ThreadTimes,
  30.     ThreadPriority,
  31.     ThreadBasePriority,
  32.     ThreadAffinityMask,
  33.     ThreadImpersonationToken,
  34.     ThreadDescriptorTableEntry,
  35.     ThreadEnableAlignmentFaultFixup,
  36.     ThreadEventPair,
  37.     ThreadQuerySetWin32StartAddress,
  38.     ThreadZeroTlsCell,
  39.     ThreadPerformanceCount,
  40.     ThreadAmILastThread,
  41.     ThreadIdealProcessor,
  42.     ThreadPriorityBoost,
  43.     ThreadSetTlsArrayAddress,
  44.     ThreadIsIoPending,
  45.     ThreadHideFromDebugger
  46. } THREAD_INFORMATION_CLASS, *PTHREAD_INFORMATION_CLASS;
  47.  
  48. typedef DWORD(NTAPI *_ZwSuspendProcess)(HANDLE hProcess);
  49. typedef DWORD(NTAPI *_ZwResumeProcess)(HANDLE hProcess);
  50. typedef DWORD(NTAPI *_ZwQueryInformationThread)(HANDLE ThreadHandle, THREAD_INFORMATION_CLASS ThreadInformationClass, PVOID ThreadInformation, ULONG ThreadInformationLength, PULONG ReturnLength);
  51. typedef DWORD(NTAPI *_NtQuerySystemInformation)(ULONG SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength);
  52. typedef DWORD(NTAPI *_NtDuplicateObject)(HANDLE SourceProcessHandle,HANDLE SourceHandle,HANDLE TargetProcessHandle,PHANDLE TargetHandle,ACCESS_MASK DesiredAccess,ULONG Attributes,ULONG Options);
  53. typedef DWORD(NTAPI *_NtQueryObject)(HANDLE ObjectHandle,ULONG ObjectInformationClass,PVOID ObjectInformation,ULONG ObjectInformationLength,PULONG ReturnLength);
  54.  
  55. typedef struct _UNICODE_STRING {
  56.     USHORT Length;
  57.     USHORT MaximumLength;
  58.     PWSTR Buffer;
  59. } UNICODE_STRING, *PUNICODE_STRING;
  60.  
  61. typedef struct _SYSTEM_HANDLE {
  62.     ULONG ProcessId;
  63.     BYTE ObjectTypeNumber;
  64.     BYTE Flags;
  65.     USHORT Handle;
  66.     PVOID Object;
  67.     ACCESS_MASK GrantedAccess;
  68. } SYSTEM_HANDLE, *PSYSTEM_HANDLE;
  69.  
  70. typedef struct _SYSTEM_HANDLE_INFORMATION {
  71.     ULONG HandleCount;
  72.     SYSTEM_HANDLE Handles[1];
  73. } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
  74.  
  75. typedef enum _POOL_TYPE {
  76.     NonPagedPool,
  77.     PagedPool,
  78.     NonPagedPoolMustSucceed,
  79.     DontUseThisType,
  80.     NonPagedPoolCacheAligned,
  81.     PagedPoolCacheAligned,
  82.     NonPagedPoolCacheAlignedMustS
  83. } POOL_TYPE, *PPOOL_TYPE;
  84.  
  85. typedef struct _OBJECT_TYPE_INFORMATION {
  86.     UNICODE_STRING Name;
  87.     ULONG TotalNumberOfObjects;
  88.     ULONG TotalNumberOfHandles;
  89.     ULONG TotalPagedPoolUsage;
  90.     ULONG TotalNonPagedPoolUsage;
  91.     ULONG TotalNamePoolUsage;
  92.     ULONG TotalHandleTableUsage;
  93.     ULONG HighWaterNumberOfObjects;
  94.     ULONG HighWaterNumberOfHandles;
  95.     ULONG HighWaterPagedPoolUsage;
  96.     ULONG HighWaterNonPagedPoolUsage;
  97.     ULONG HighWaterNamePoolUsage;
  98.     ULONG HighWaterHandleTableUsage;
  99.     ULONG InvalidAttributes;
  100.     GENERIC_MAPPING GenericMapping;
  101.     ULONG ValidAccess;
  102.     BOOLEAN SecurityRequired;
  103.     BOOLEAN MaintainHandleCount;
  104.     USHORT MaintainTypeList;
  105.     POOL_TYPE PoolType;
  106.     ULONG PagedPoolUsage;
  107.     ULONG NonPagedPoolUsage;
  108. } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
  109.  
  110. PVOID GetLibraryProcAddress(LPSTR LibraryName, LPSTR ProcName) {
  111.     return (PVOID)GetProcAddress(GetModuleHandleA(LibraryName), ProcName);
  112. }
  113.  
  114.  
  115. DWORD GetPIDbyName(char* szProcess)
  116. {
  117.     HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  118.     PROCESSENTRY32 PE;
  119.     PE.dwSize = sizeof(PE) ;
  120.     Process32First(hSnap, &PE);
  121.  
  122.     while (Process32Next(hSnap, &PE))
  123.     {
  124.         char Converted[100] = "\0";
  125.         wcstombs(Converted, PE.szExeFile, sizeof(Converted));
  126.         if (strcmp(Converted, szProcess) == 0)
  127.         {
  128.             return PE.th32ProcessID;
  129.         }
  130.     }
  131.     return 0;
  132. }
  133.  
  134. int SeDebugPrivilege(void)
  135. {
  136.     HANDLE hToken;
  137.     LUID Val;
  138.     TOKEN_PRIVILEGES tp;
  139.     OpenProcessToken(HANDLE(-1),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
  140.     LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Val);
  141.     tp.PrivilegeCount = 1;
  142.     tp.Privileges[0].Luid = Val;
  143.     tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  144.     AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof (tp), NULL, NULL);
  145.     CloseHandle(hToken);
  146.     return 1;
  147. }
  148.  
  149. DWORD GetModuleBaseAddress(DWORD PID, char* szModule)
  150. {
  151.     MODULEENTRY32 ME;
  152.     ME.dwSize = sizeof(ME);
  153.     HANDLE hSnapy = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
  154.     Module32First(hSnapy, &ME);
  155.     while (Module32Next(hSnapy, &ME))
  156.     {
  157.         char Converted[100] = "\0";
  158.         wcstombs(Converted, ME.szModule, sizeof(Converted));
  159.         if (strcmp(Converted, szModule) == 0)
  160.         {
  161.             return (DWORD)ME.hModule;
  162.         }
  163.     }
  164. }
  165.  
  166. DWORD GetModuleSize(DWORD PID, char* szModule)
  167. {
  168.     MODULEENTRY32 ME;
  169.     ME.dwSize = sizeof(ME);
  170.     HANDLE hSnapy = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
  171.     Module32First(hSnapy, &ME);
  172.     while (Module32Next(hSnapy, &ME))
  173.     {
  174.         char Converted[100] = "\0";
  175.         wcstombs(Converted, ME.szModule, sizeof(Converted));
  176.         if (strcmp(Converted, szModule) == 0)
  177.         {
  178.             return ME.modBaseSize;
  179.         }
  180.     }
  181. }
  182.  
  183. int CloseHandles(ULONG pid)
  184. {
  185. _NtQuerySystemInformation NtQuerySystemInformation = (_NtQuerySystemInformation)GetLibraryProcAddress("ntdll.dll", "NtQuerySystemInformation");
  186.     _NtDuplicateObject NtDuplicateObject = (_NtDuplicateObject)GetLibraryProcAddress("ntdll.dll", "NtDuplicateObject");
  187.     _NtQueryObject NtQueryObject = (_NtQueryObject)GetLibraryProcAddress("ntdll.dll", "NtQueryObject");
  188.  
  189.     DWORD status;
  190.     PSYSTEM_HANDLE_INFORMATION handleInfo;
  191.     ULONG handleInfoSize = 0x10000;
  192.     HANDLE processHandle;
  193.     ULONG i;
  194.     if (!(processHandle = OpenProcess(PROCESS_DUP_HANDLE, FALSE, pid))) {
  195.         printf("Could not open PID %d! (Don't try to open a system process.)\n", pid);
  196.         return 1;
  197.     }
  198.     handleInfo = (PSYSTEM_HANDLE_INFORMATION)malloc(handleInfoSize);
  199.     while ((status = NtQuerySystemInformation(
  200.         SystemHandleInformation,
  201.         handleInfo,
  202.         handleInfoSize,
  203.         NULL
  204.         )) == STATUS_INFO_LENGTH_MISMATCH)
  205.         handleInfo = (PSYSTEM_HANDLE_INFORMATION)realloc(handleInfo, handleInfoSize *= 2);
  206.     if (!NT_SUCCESS(status)) {
  207.         printf("NtQuerySystemInformation failed!\n");
  208.         return 1;
  209.     }
  210.     for (i = 0; i < handleInfo->HandleCount; i++) {
  211.         SYSTEM_HANDLE handle = handleInfo->Handles[i];
  212.         HANDLE dupHandle = NULL;
  213.         POBJECT_TYPE_INFORMATION objectTypeInfo;
  214.         PVOID objectNameInfo;
  215.         UNICODE_STRING objectName;
  216.         ULONG returnLength;
  217.         if (handle.ProcessId != pid)
  218.             continue;
  219.         if (!NT_SUCCESS(NtDuplicateObject(
  220.             processHandle,
  221.             (void*) handle.Handle,
  222.             GetCurrentProcess(),
  223.             &dupHandle,
  224.             0,
  225.             0,
  226.             0
  227.             ))) {
  228.             printf("[%#x] Error!\n", handle.Handle);
  229.             continue;
  230.         }
  231.  
  232.         objectTypeInfo = (POBJECT_TYPE_INFORMATION)malloc(0x1000);
  233.         if (!NT_SUCCESS(NtQueryObject(
  234.             dupHandle,
  235.             ObjectTypeInformation,
  236.             objectTypeInfo,
  237.             0x1000,
  238.             NULL
  239.             ))) {
  240.  
  241.             printf("[%#x] Error!\n", handle.Handle);
  242.             CloseHandle(dupHandle);
  243.             continue;
  244.         }
  245.         if (handle.GrantedAccess == 0x0012019f) {
  246.          
  247.  
  248.             free(objectTypeInfo);
  249.             CloseHandle(dupHandle);
  250.             continue;
  251.         }
  252.  
  253.         objectNameInfo = malloc(0x1000);
  254.         if (!NT_SUCCESS(NtQueryObject(
  255.             dupHandle,
  256.             ObjectNameInformation,
  257.             objectNameInfo,
  258.             0x1000,
  259.             &returnLength
  260.             ))) {
  261.             objectNameInfo = realloc(objectNameInfo, returnLength);
  262.             if (!NT_SUCCESS(NtQueryObject(
  263.                 dupHandle,
  264.                 ObjectNameInformation,
  265.                 objectNameInfo,
  266.                 returnLength,
  267.                 NULL
  268.                 ))) {
  269.                
  270.                 free(objectTypeInfo);
  271.                 free(objectNameInfo);
  272.                 CloseHandle(dupHandle);
  273.                 continue;
  274.             }
  275.         }
  276.         objectName = *(PUNICODE_STRING)objectNameInfo;
  277.             char Converted[100] = "\0";
  278.             wcstombs(Converted, objectTypeInfo->Name.Buffer, sizeof(Converted));
  279.             if (strcmp((CHAR*)Converted, "Thread") == 0)
  280.             {
  281.                  DuplicateHandle(processHandle, (void*)handle.Handle, NULL, NULL, 0, FALSE, 0x1);
  282.             }
  283.  
  284.         free(objectTypeInfo);
  285.         free(objectNameInfo);
  286.         CloseHandle(dupHandle);
  287.     }
  288.  
  289.     free(handleInfo);
  290.     CloseHandle(processHandle);
  291.     return 0;
  292. }
  293.  
  294. int main(int argc, CHAR* argv[])
  295. {
  296.     SetConsoleTitleA("XTrap Bypass Written by AceStryker");
  297.     printf("#########################################################\n");
  298.     printf("########### DarkProgramming XTrap Bypass ################\n");
  299.     printf("################################### For PointBlank ######\n");
  300.     printf("Written by AceStryker, Thanks Lacy ######################\n");
  301.     printf("noexit.dll - Written by AceStryker ######################\n");
  302.     printf("s0beit.dll - Written by Mr_S0beit  ######################\n");
  303.     printf("#########################################################\n\n");
  304.     DWORD PID = GetPIDbyName("PointBlank.exe");
  305.     if (PID == 0)
  306.     {
  307.         printf("Please open PointBlank first and then open me. \n");
  308.         system("PAUSE");
  309.         return 0;
  310.     }
  311.     printf("\nProcess ID: 0x%X [ %d ] \n", PID, PID);
  312.     printf("Suspending process... \n");
  313.     SeDebugPrivilege();
  314.     _ZwSuspendProcess ZwSuspendProcess = (_ZwSuspendProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwSuspendProcess");
  315.     HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
  316.     ZwSuspendProcess(hProc);
  317.     printf("Process Suspended succefully!!\nClosing threads...\n");
  318.     _ZwQueryInformationThread ZwQueryInformationThread = (_ZwQueryInformationThread)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwQueryInformationThread");
  319.     HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, PID);
  320.     THREADENTRY32 TE;
  321.     TE.dwSize = sizeof(TE);
  322.     Thread32First(hSnap, &TE);
  323.     DWORD BaseAddress = GetModuleBaseAddress(PID, "XTrapVa.dll");
  324.     DWORD BaseSize = GetModuleSize(PID, "XTrapVa.dll");
  325.     printf("XTrap BaseAddress: 0x%X \n", BaseAddress);
  326.     printf("XTrap Size: 0x%X [ %d ] \n", BaseSize);
  327.     while (Thread32Next(hSnap, &TE))
  328.     {
  329.         HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, TE.th32ThreadID);
  330.         DWORD Start;
  331.         ZwQueryInformationThread(hThread, ThreadQuerySetWin32StartAddress, &Start, sizeof(Start), NULL);
  332.         if (Start >= BaseAddress && Start <= BaseAddress+BaseSize)
  333.         {
  334.             TerminateThread(hThread, 8);
  335.         }
  336.         if (Start - (BaseAddr+fcExp) == 0x6110 | Start - (BaseAddr+fcExp) == 0x2190)
  337.         {
  338.             TerminateThread(hThread, 8);
  339.         }
  340.     }
  341.     CloseHandle(hSnap);
  342.     printf("Threads closed succefully! \nClosing handles...\n");
  343.     CloseHandles(PID);
  344.     printf("Handles closed succefully! \nPlease inject s0beit.dll and NoExit.dll\n");
  345.     CloseHandle(hProc);
  346.     system("PAUSE");
  347.     _ZwResumeProcess ZwResumeProcess = (_ZwResumeProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwResumeProcess");
  348.     hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
  349.     ZwResumeProcess(hProc);
  350.     printf("\n\nBye bye XTrap :) \n");
  351.     system("PAUSE");
  352.     return 0;
  353. }
  354.  
  355. //=======================================================================================================
  356. //=======================================================================================================
  357. //=======================================================================================================
  358. //=======================================================================================================
  359. //=======================================================================================================
  360. //=======================================================================================================
  361. //=======================================================================================================
  362. //=======================================================================================================
  363. //=======================================================================================================
  364. //=======================================================================================================
  365.  
  366. NoExit.dll: [Delphi]
  367.  
  368. //=======================================================================================================
  369. //=======================================================================================================
  370. //=======================================================================================================
  371. //=======================================================================================================
  372. //=======================================================================================================
  373. //=======================================================================================================
  374. //=======================================================================================================
  375. //=======================================================================================================
  376. //=======================================================================================================
  377. //=======================================================================================================
  378.  
  379. library NoExit;
  380. uses
  381.   Windows;
  382.  
  383. var
  384.   Place : Pointer;
  385.   ProtecaoAntiga : DWORD;
  386.   Written : cardinal;
  387.  
  388. procedure ExitProc(uExitCode : DWORD);stdcall;
  389. begin
  390. end;
  391.  
  392. function TerminateProc(Proc : THandle;uExitCode : DWORD) : DWORD;stdcall;
  393. begin
  394.   result := 8;
  395. end;
  396.  
  397. procedure HookThis(Lib, Func : String;CallBack : Pointer);
  398. begin
  399.   Place := GetProcAddress(LoadLibrary(PChar(Lib)), PChar(Func));
  400.   VirtualProtect(Place, 6, PAGE_READWRITE, ProtecaoAntiga);
  401.   PBYTE(DWORD(Place))^ := $E9;
  402.   PDWORD(DWORD(Place) + 1)^ := (DWORD(CallBack) - (DWORD(Place)) -5);
  403.   VirtualProtect(Place, 6, ProtecaoAntiga, ProtecaoAntiga);
  404. end;
  405.  
  406. begin
  407.   HookThis('ntdll.dll', 'RtlExitUserProcess', @ExitProc);
  408.   HookThis('ntdll.dll', 'ZwTerminateProcess', @TerminateProc);
  409. end.
  410.  
  411. //=======================================================================================================
  412. //=======================================================================================================
  413. //=======================================================================================================
  414. //=======================================================================================================
  415. //=======================================================================================================
  416. //=======================================================================================================
  417. //=======================================================================================================
  418. //=======================================================================================================
  419. //=======================================================================================================
  420. //=======================================================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement