非常感谢大家那么支持我上一篇教程。

  1. void CAnitTP_AppDlg::OnBnClickedButtonAnit()
  2. {
  3.         DWORD pid = GetProcessIdByProcName(TEXT("DNF.exe"));
  4.         if (pid==0)
  5.         {
  6.                 MessageBox(TEXT("对不起,没有找到指定游戏进程.(DNF.exe)"), TEXT("操作失败"), MB_OK | MB_ICONERROR);
  7.                 return;
  8.         }
  9.         const BYTE code[8] = {0x90,0x90,0x90,0x90,0x90,0x55,0x8b,0xec};
  10.         const BYTE code2[13] = { 0xC3, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 ,0xE9};
  11.         
  12.         DWORD trds[521];
  13.         int trdcount=0;
  14.         trdcount=GetProcessThreadId(pid, trds);
  15.         LPVOID pEntryPoint=NULL;
  16.         BYTE buf[13];
  17.         HANDLE hThread;
  18.         for (int i = 0; i < trdcount;i++)
  19.         {
  20.                 pEntryPoint=GetThreadEntryPointById(trds[i]);
  21.                 ReadProcessMemoryEx(pid, pEntryPoint, buf, 8);
  22.                 TCHAR ModuleName[256];
  23.                 GetProcessThreadModuleNameByTid(pid, trds[i], ModuleName);
  24.                 
  25.                 if (memcmp(buf, code, 8) == 0 || lstrcmp(ModuleName, L"TenSLX.dll")==0)
  26.                 {
  27.                         hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, trds[i]);
  28.                         if (!hThread)continue;
  29.                         TerminateThread(hThread,0);
  30.                         CloseHandle(hThread);
  31.                         
  32.                 }
  33.                 
  34.                 ReadProcessMemoryEx(pid, (LPVOID)((int)pEntryPoint - 0xc), buf, 13);
  35.                 if (memcmp(buf, code2, 13) == 0)
  36.                 {
  37.                         hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, trds[i]);
  38.                         if (!hThread)continue;
  39.                         SuspendThread(hThread);
  40.                         CloseHandle(hThread);
  41.                 }
  42.         }
  43.         
  44.         byte code3[7] = { 0x6A, 0x08, 0x68, 0x00, 0x00, 0x00, 0x00 };
  45.         LPVOID pDbgUiRemoteBreakin = (LPVOID)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "DbgUiRemoteBreakin");   //调试用
  46.         memcpy(&code3[3], (LPVOID)((int)pDbgUiRemoteBreakin + 3), 4);
  47.         WriteProcessMemoryEx(pid, pDbgUiRemoteBreakin, code3, 7);
  48.         byte code4[6] = { 0x8b, 0xff, 0x55, 0x8b, 0xec, 0xff };
  49.         LPVOID pLdrInitializeThunk = (LPVOID)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "LdrInitializeThunk");  //DLL注入用
  50.         WriteProcessMemoryEx(pid, pLdrInitializeThunk, code4, 6);
  51.         MessageBox(TEXT("操作完毕,开始调试吧!"),TEXT("OK"),MB_OK|MB_ICONINFORMATION);
  52. }
复制代码

功能函数头文件:

  1. #ifndef HANSHU
  2. #define HANSHU
  3. #include <TlHelp32.h>
  4. #include <psapi.h>
  5. #pragma comment(lib,"psapi.lib")
  6. typedef enum _THREADINFOCLASS {
  7.         ThreadBasicInformation,
  8.         ThreadTimes,
  9.         ThreadPriority,
  10.         ThreadBasePriority,
  11.         ThreadAffinityMask,
  12.         ThreadImpersonationToken,
  13.         ThreadDescriptorTableEntry,
  14.         ThreadEnableAlignmentFaultFixup,
  15.         ThreadEventPair_Reusable,
  16.         ThreadQuerySetWin32StartAddress,
  17.         ThreadZeroTlsCell,
  18.         ThreadPerformanceCount,
  19.         ThreadAmILastThread,
  20.         ThreadIdealProcessor,
  21.         ThreadPriorityBoost,
  22.         ThreadSetTlsArrayAddress,
  23.         ThreadIsIoPending,
  24.         ThreadHideFromDebugger,
  25.         ThreadBreakOnTermination,
  26.         MaxThreadInfoClass
  27. } THREADINFOCLASS;
  28. typedef struct _CLIENT_ID {
  29.         HANDLE UniqueProcess;
  30.         HANDLE UniqueThread;
  31. } CLIENT_ID;
  32. typedef CLIENT_ID *PCLIENT_ID;
  33. typedef struct _THREAD_BASIC_INFORMATION { // Information Class 0
  34.         LONG     ExitStatus;
  35.         PVOID    TebBaseAddress;
  36.         CLIENT_ID ClientId;
  37.         LONG AffinityMask;
  38.         LONG Priority;
  39.         LONG BasePriority;
  40. } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
  41. typedef LONG (__stdcall *fZwQueryInformationThread) (
  42.         IN HANDLE ThreadHandle,
  43.         IN THREADINFOCLASS ThreadInformationClass,
  44.         OUT PVOID ThreadInformation,
  45.         IN ULONG ThreadInformationLength,
  46.         OUT PULONG ReturnLength OPTIONAL
  47.         );
  48. fZwQueryInformationThread  ZwQueryInformationThread;
  49. DWORD GetProcessPidByWndName(LPCTSTR szWndName)
  50. {
  51.         HWND hWnd = FindWindow(NULL,szWndName);
  52.         if (IsWindow(hWnd))
  53.         {
  54.                 DWORD pid;
  55.                 GetWindowThreadProcessId(hWnd,&pid);
  56.                 return pid;
  57.         }
  58.         return 0;
  59. }
  60. DWORD GetProcessIdByProcName(LPCTSTR szProcName)
  61. {
  62.         HANDLE hSnapshot= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  63.         PROCESSENTRY32 pro;
  64.         pro.dwSize=sizeof(pro);
  65.         BOOL bMore=Process32First(hSnapshot,&pro);
  66.         while (bMore)
  67.         {
  68.                 if (lstrcmp(szProcName,pro.szExeFile)==0)
  69.                 {
  70.                         CloseHandle(hSnapshot);
  71.                         return pro.th32ProcessID;
  72.                 }
  73.                 bMore=Process32Next(hSnapshot,&pro);
  74.         }
  75.         CloseHandle(hSnapshot);
  76.         return 0;
  77. }
  78. BOOL ReadProcessMemoryEx(DWORD pid,LPVOID addr,LPVOID buffer,DWORD size)
  79. {
  80.         HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
  81.         if (hProcess==0)
  82.         {
  83.                 return FALSE;
  84.         }
  85.         BOOL bResult=ReadProcessMemory(hProcess,addr,buffer,size,NULL);
  86.         CloseHandle(hProcess);
  87.         return bResult;
  88. }
  89. BOOL WriteProcessMemoryEx(DWORD pid,LPVOID addr,LPVOID buffer,DWORD size)
  90. {
  91.         HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
  92.         if (hProcess==0)
  93.         {
  94.                 return FALSE;
  95.         }
  96.         BOOL bResult=WriteProcessMemory(hProcess,addr,buffer,size,NULL);
  97.         CloseHandle(hProcess);
  98.         return bResult;
  99. }
  100. int GetProcessThreadId(DWORD pid,DWORD *trds)
  101. {
  102.         HANDLE hSnapshot= CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,pid);
  103.         if (hSnapshot==INVALID_HANDLE_VALUE)
  104.                 return 0;
  105.         THREADENTRY32 trd;
  106.         trd.dwSize=sizeof(trd);
  107.         BOOL bMore=Thread32First(hSnapshot,&trd);
  108.         int i=0;
  109.         while (bMore)
  110.         {
  111.                 if (trd.th32OwnerProcessID==pid)
  112.                 {
  113.                         trds[i]=trd.th32ThreadID;
  114.                         i++;
  115.                 }
  116.                 bMore=Thread32Next(hSnapshot,&trd);
  117.         }
  118.         CloseHandle(hSnapshot);
  119.         return i;
  120. }
  121. LPVOID GetThreadEntryPointById(DWORD tid)
  122. {
  123.         HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid);
  124.         if (hThread==0)
  125.         {
  126.                 return NULL;
  127.         }
  128.         LPVOID Addr=NULL;
  129.         ZwQueryInformationThread=(fZwQueryInformationThread)GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")),"ZwQueryInformationThread");
  130.         ZwQueryInformationThread(hThread,ThreadQuerySetWin32StartAddress,&Addr,4,NULL);
  131.         CloseHandle(hThread);
  132.         return Addr;
  133. }
  134. BOOL GetProcessThreadModuleNameByTid(DWORD pid, DWORD tid, LPWSTR pszModuleName)
  135. {
  136.         HANDLE hProcess = NULL;
  137.         LPVOID pStart = NULL;
  138.         TCHAR tmpStr[256];
  139.         hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
  140.         if (!hProcess)return FALSE;
  141.         pStart = GetThreadEntryPointById(tid);
  142.         if (!pStart) return FALSE;
  143.         GetMappedFileName(hProcess, pStart, tmpStr, 256);
  144.         for (int i = lstrlen(tmpStr); i >0; i--)
  145.         {
  146.                 if (tmpStr[i]== '\\')
  147.                 {
  148.                         lstrcpy(pszModuleName, &tmpStr[i+1]);
  149.                         break;
  150.                 }
  151.         }
  152.         CloseHandle(hProcess);
  153.         return TRUE;
  154. }
  155. void TerminateThreadEx(DWORD tid,DWORD exitcode=0)
  156. {
  157.         HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid);        
  158.         if (hThread!=NULL)
  159.         {
  160.                 TerminateThread(hThread,exitcode);
  161.                 CloseHandle(hThread);
  162.         }
  163.         
  164. }
  165. BOOL EnableDebugPrivilege()  
  166. {  
  167.         HANDLE token;  
  168.         //提升权限   
  169.         if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token))  
  170.         {   
  171.                 return FALSE;  
  172.         }  
  173.         TOKEN_PRIVILEGES tkp;  
  174.         tkp.PrivilegeCount = 1;  
  175.         ::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);  
  176.         tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  
  177.         if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL))  
  178.         {  
  179.                 return FALSE;  
  180.         }  
  181.         CloseHandle(token);  
  182.         return TRUE;  
  183. }  
  184. #endif
复制代码

 

关于Win7 x64下过TP保护(应用层)(转)jpg改rar

非常感谢大家那么支持我上一篇教程。

  1. void CAnitTP_AppDlg::OnBnClickedButtonAnit()
  2. {
  3.         DWORD pid = GetProcessIdByProcName(TEXT("DNF.exe"));
  4.         if (pid==0)
  5.         {
  6.                 MessageBox(TEXT("对不起,没有找到指定游戏进程.(DNF.exe)"), TEXT("操作失败"), MB_OK | MB_ICONERROR);
  7.                 return;
  8.         }
  9.         const BYTE code[8] = {0x90,0x90,0x90,0x90,0x90,0x55,0x8b,0xec};
  10.         const BYTE code2[13] = { 0xC3, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 ,0xE9};
  11.         
  12.         DWORD trds[521];
  13.         int trdcount=0;
  14.         trdcount=GetProcessThreadId(pid, trds);
  15.         LPVOID pEntryPoint=NULL;
  16.         BYTE buf[13];
  17.         HANDLE hThread;
  18.         for (int i = 0; i < trdcount;i++)
  19.         {
  20.                 pEntryPoint=GetThreadEntryPointById(trds[i]);
  21.                 ReadProcessMemoryEx(pid, pEntryPoint, buf, 8);
  22.                 TCHAR ModuleName[256];
  23.                 GetProcessThreadModuleNameByTid(pid, trds[i], ModuleName);
  24.                 
  25.                 if (memcmp(buf, code, 8) == 0 || lstrcmp(ModuleName, L"TenSLX.dll")==0)
  26.                 {
  27.                         hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, trds[i]);
  28.                         if (!hThread)continue;
  29.                         TerminateThread(hThread,0);
  30.                         CloseHandle(hThread);
  31.                         
  32.                 }
  33.                 
  34.                 ReadProcessMemoryEx(pid, (LPVOID)((int)pEntryPoint - 0xc), buf, 13);
  35.                 if (memcmp(buf, code2, 13) == 0)
  36.                 {
  37.                         hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, trds[i]);
  38.                         if (!hThread)continue;
  39.                         SuspendThread(hThread);
  40.                         CloseHandle(hThread);
  41.                 }
  42.         }
  43.         
  44.         byte code3[7] = { 0x6A, 0x08, 0x68, 0x00, 0x00, 0x00, 0x00 };
  45.         LPVOID pDbgUiRemoteBreakin = (LPVOID)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "DbgUiRemoteBreakin");   //调试用
  46.         memcpy(&code3[3], (LPVOID)((int)pDbgUiRemoteBreakin + 3), 4);
  47.         WriteProcessMemoryEx(pid, pDbgUiRemoteBreakin, code3, 7);
  48.         byte code4[6] = { 0x8b, 0xff, 0x55, 0x8b, 0xec, 0xff };
  49.         LPVOID pLdrInitializeThunk = (LPVOID)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "LdrInitializeThunk");  //DLL注入用
  50.         WriteProcessMemoryEx(pid, pLdrInitializeThunk, code4, 6);
  51.         MessageBox(TEXT("操作完毕,开始调试吧!"),TEXT("OK"),MB_OK|MB_ICONINFORMATION);
  52. }
复制代码

功能函数头文件:

  1. #ifndef HANSHU
  2. #define HANSHU
  3. #include <TlHelp32.h>
  4. #include <psapi.h>
  5. #pragma comment(lib,"psapi.lib")
  6. typedef enum _THREADINFOCLASS {
  7.         ThreadBasicInformation,
  8.         ThreadTimes,
  9.         ThreadPriority,
  10.         ThreadBasePriority,
  11.         ThreadAffinityMask,
  12.         ThreadImpersonationToken,
  13.         ThreadDescriptorTableEntry,
  14.         ThreadEnableAlignmentFaultFixup,
  15.         ThreadEventPair_Reusable,
  16.         ThreadQuerySetWin32StartAddress,
  17.         ThreadZeroTlsCell,
  18.         ThreadPerformanceCount,
  19.         ThreadAmILastThread,
  20.         ThreadIdealProcessor,
  21.         ThreadPriorityBoost,
  22.         ThreadSetTlsArrayAddress,
  23.         ThreadIsIoPending,
  24.         ThreadHideFromDebugger,
  25.         ThreadBreakOnTermination,
  26.         MaxThreadInfoClass
  27. } THREADINFOCLASS;
  28. typedef struct _CLIENT_ID {
  29.         HANDLE UniqueProcess;
  30.         HANDLE UniqueThread;
  31. } CLIENT_ID;
  32. typedef CLIENT_ID *PCLIENT_ID;
  33. typedef struct _THREAD_BASIC_INFORMATION { // Information Class 0
  34.         LONG     ExitStatus;
  35.         PVOID    TebBaseAddress;
  36.         CLIENT_ID ClientId;
  37.         LONG AffinityMask;
  38.         LONG Priority;
  39.         LONG BasePriority;
  40. } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
  41. typedef LONG (__stdcall *fZwQueryInformationThread) (
  42.         IN HANDLE ThreadHandle,
  43.         IN THREADINFOCLASS ThreadInformationClass,
  44.         OUT PVOID ThreadInformation,
  45.         IN ULONG ThreadInformationLength,
  46.         OUT PULONG ReturnLength OPTIONAL
  47.         );
  48. fZwQueryInformationThread  ZwQueryInformationThread;
  49. DWORD GetProcessPidByWndName(LPCTSTR szWndName)
  50. {
  51.         HWND hWnd = FindWindow(NULL,szWndName);
  52.         if (IsWindow(hWnd))
  53.         {
  54.                 DWORD pid;
  55.                 GetWindowThreadProcessId(hWnd,&pid);
  56.                 return pid;
  57.         }
  58.         return 0;
  59. }
  60. DWORD GetProcessIdByProcName(LPCTSTR szProcName)
  61. {
  62.         HANDLE hSnapshot= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  63.         PROCESSENTRY32 pro;
  64.         pro.dwSize=sizeof(pro);
  65.         BOOL bMore=Process32First(hSnapshot,&pro);
  66.         while (bMore)
  67.         {
  68.                 if (lstrcmp(szProcName,pro.szExeFile)==0)
  69.                 {
  70.                         CloseHandle(hSnapshot);
  71.                         return pro.th32ProcessID;
  72.                 }
  73.                 bMore=Process32Next(hSnapshot,&pro);
  74.         }
  75.         CloseHandle(hSnapshot);
  76.         return 0;
  77. }
  78. BOOL ReadProcessMemoryEx(DWORD pid,LPVOID addr,LPVOID buffer,DWORD size)
  79. {
  80.         HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
  81.         if (hProcess==0)
  82.         {
  83.                 return FALSE;
  84.         }
  85.         BOOL bResult=ReadProcessMemory(hProcess,addr,buffer,size,NULL);
  86.         CloseHandle(hProcess);
  87.         return bResult;
  88. }
  89. BOOL WriteProcessMemoryEx(DWORD pid,LPVOID addr,LPVOID buffer,DWORD size)
  90. {
  91.         HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
  92.         if (hProcess==0)
  93.         {
  94.                 return FALSE;
  95.         }
  96.         BOOL bResult=WriteProcessMemory(hProcess,addr,buffer,size,NULL);
  97.         CloseHandle(hProcess);
  98.         return bResult;
  99. }
  100. int GetProcessThreadId(DWORD pid,DWORD *trds)
  101. {
  102.         HANDLE hSnapshot= CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,pid);
  103.         if (hSnapshot==INVALID_HANDLE_VALUE)
  104.                 return 0;
  105.         THREADENTRY32 trd;
  106.         trd.dwSize=sizeof(trd);
  107.         BOOL bMore=Thread32First(hSnapshot,&trd);
  108.         int i=0;
  109.         while (bMore)
  110.         {
  111.                 if (trd.th32OwnerProcessID==pid)
  112.                 {
  113.                         trds[i]=trd.th32ThreadID;
  114.                         i++;
  115.                 }
  116.                 bMore=Thread32Next(hSnapshot,&trd);
  117.         }
  118.         CloseHandle(hSnapshot);
  119.         return i;
  120. }
  121. LPVOID GetThreadEntryPointById(DWORD tid)
  122. {
  123.         HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid);
  124.         if (hThread==0)
  125.         {
  126.                 return NULL;
  127.         }
  128.         LPVOID Addr=NULL;
  129.         ZwQueryInformationThread=(fZwQueryInformationThread)GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")),"ZwQueryInformationThread");
  130.         ZwQueryInformationThread(hThread,ThreadQuerySetWin32StartAddress,&Addr,4,NULL);
  131.         CloseHandle(hThread);
  132.         return Addr;
  133. }
  134. BOOL GetProcessThreadModuleNameByTid(DWORD pid, DWORD tid, LPWSTR pszModuleName)
  135. {
  136.         HANDLE hProcess = NULL;
  137.         LPVOID pStart = NULL;
  138.         TCHAR tmpStr[256];
  139.         hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
  140.         if (!hProcess)return FALSE;
  141.         pStart = GetThreadEntryPointById(tid);
  142.         if (!pStart) return FALSE;
  143.         GetMappedFileName(hProcess, pStart, tmpStr, 256);
  144.         for (int i = lstrlen(tmpStr); i >0; i--)
  145.         {
  146.                 if (tmpStr[i]== '\\')
  147.                 {
  148.                         lstrcpy(pszModuleName, &tmpStr[i+1]);
  149.                         break;
  150.                 }
  151.         }
  152.         CloseHandle(hProcess);
  153.         return TRUE;
  154. }
  155. void TerminateThreadEx(DWORD tid,DWORD exitcode=0)
  156. {
  157.         HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid);        
  158.         if (hThread!=NULL)
  159.         {
  160.                 TerminateThread(hThread,exitcode);
  161.                 CloseHandle(hThread);
  162.         }
  163.         
  164. }
  165. BOOL EnableDebugPrivilege()  
  166. {  
  167.         HANDLE token;  
  168.         //提升权限   
  169.         if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token))  
  170.         {   
  171.                 return FALSE;  
  172.         }  
  173.         TOKEN_PRIVILEGES tkp;  
  174.         tkp.PrivilegeCount = 1;  
  175.         ::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);  
  176.         tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  
  177.         if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL))  
  178.         {  
  179.                 return FALSE;  
  180.         }  
  181.         CloseHandle(token);  
  182.         return TRUE;  
  183. }  
  184. #endif
复制代码

相关文章: