非常感谢大家那么支持我上一篇教程。
- void CAnitTP_AppDlg::OnBnClickedButtonAnit()
- {
- DWORD pid = GetProcessIdByProcName(TEXT("DNF.exe"));
- if (pid==0)
- {
- MessageBox(TEXT("对不起,没有找到指定游戏进程.(DNF.exe)"), TEXT("操作失败"), MB_OK | MB_ICONERROR);
- return;
- }
- const BYTE code[8] = {0x90,0x90,0x90,0x90,0x90,0x55,0x8b,0xec};
- const BYTE code2[13] = { 0xC3, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 ,0xE9};
- DWORD trds[521];
- int trdcount=0;
- trdcount=GetProcessThreadId(pid, trds);
- LPVOID pEntryPoint=NULL;
- BYTE buf[13];
- HANDLE hThread;
- for (int i = 0; i < trdcount;i++)
- {
- pEntryPoint=GetThreadEntryPointById(trds[i]);
- ReadProcessMemoryEx(pid, pEntryPoint, buf, 8);
- TCHAR ModuleName[256];
- GetProcessThreadModuleNameByTid(pid, trds[i], ModuleName);
- if (memcmp(buf, code, 8) == 0 || lstrcmp(ModuleName, L"TenSLX.dll")==0)
- {
- hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, trds[i]);
- if (!hThread)continue;
- TerminateThread(hThread,0);
- CloseHandle(hThread);
- }
- ReadProcessMemoryEx(pid, (LPVOID)((int)pEntryPoint - 0xc), buf, 13);
- if (memcmp(buf, code2, 13) == 0)
- {
- hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, trds[i]);
- if (!hThread)continue;
- SuspendThread(hThread);
- CloseHandle(hThread);
- }
- }
- byte code3[7] = { 0x6A, 0x08, 0x68, 0x00, 0x00, 0x00, 0x00 };
- LPVOID pDbgUiRemoteBreakin = (LPVOID)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "DbgUiRemoteBreakin"); //调试用
- memcpy(&code3[3], (LPVOID)((int)pDbgUiRemoteBreakin + 3), 4);
- WriteProcessMemoryEx(pid, pDbgUiRemoteBreakin, code3, 7);
- byte code4[6] = { 0x8b, 0xff, 0x55, 0x8b, 0xec, 0xff };
- LPVOID pLdrInitializeThunk = (LPVOID)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "LdrInitializeThunk"); //DLL注入用
- WriteProcessMemoryEx(pid, pLdrInitializeThunk, code4, 6);
- MessageBox(TEXT("操作完毕,开始调试吧!"),TEXT("OK"),MB_OK|MB_ICONINFORMATION);
- }
功能函数头文件:
- #ifndef HANSHU
- #define HANSHU
- #include <TlHelp32.h>
- #include <psapi.h>
- #pragma comment(lib,"psapi.lib")
- typedef enum _THREADINFOCLASS {
- ThreadBasicInformation,
- ThreadTimes,
- ThreadPriority,
- ThreadBasePriority,
- ThreadAffinityMask,
- ThreadImpersonationToken,
- ThreadDescriptorTableEntry,
- ThreadEnableAlignmentFaultFixup,
- ThreadEventPair_Reusable,
- ThreadQuerySetWin32StartAddress,
- ThreadZeroTlsCell,
- ThreadPerformanceCount,
- ThreadAmILastThread,
- ThreadIdealProcessor,
- ThreadPriorityBoost,
- ThreadSetTlsArrayAddress,
- ThreadIsIoPending,
- ThreadHideFromDebugger,
- ThreadBreakOnTermination,
- MaxThreadInfoClass
- } THREADINFOCLASS;
- typedef struct _CLIENT_ID {
- HANDLE UniqueProcess;
- HANDLE UniqueThread;
- } CLIENT_ID;
- typedef CLIENT_ID *PCLIENT_ID;
- typedef struct _THREAD_BASIC_INFORMATION { // Information Class 0
- LONG ExitStatus;
- PVOID TebBaseAddress;
- CLIENT_ID ClientId;
- LONG AffinityMask;
- LONG Priority;
- LONG BasePriority;
- } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
- typedef LONG (__stdcall *fZwQueryInformationThread) (
- IN HANDLE ThreadHandle,
- IN THREADINFOCLASS ThreadInformationClass,
- OUT PVOID ThreadInformation,
- IN ULONG ThreadInformationLength,
- OUT PULONG ReturnLength OPTIONAL
- );
- fZwQueryInformationThread ZwQueryInformationThread;
- DWORD GetProcessPidByWndName(LPCTSTR szWndName)
- {
- HWND hWnd = FindWindow(NULL,szWndName);
- if (IsWindow(hWnd))
- {
- DWORD pid;
- GetWindowThreadProcessId(hWnd,&pid);
- return pid;
- }
- return 0;
- }
- DWORD GetProcessIdByProcName(LPCTSTR szProcName)
- {
- HANDLE hSnapshot= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- PROCESSENTRY32 pro;
- pro.dwSize=sizeof(pro);
- BOOL bMore=Process32First(hSnapshot,&pro);
- while (bMore)
- {
- if (lstrcmp(szProcName,pro.szExeFile)==0)
- {
- CloseHandle(hSnapshot);
- return pro.th32ProcessID;
- }
- bMore=Process32Next(hSnapshot,&pro);
- }
- CloseHandle(hSnapshot);
- return 0;
- }
- BOOL ReadProcessMemoryEx(DWORD pid,LPVOID addr,LPVOID buffer,DWORD size)
- {
- HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
- if (hProcess==0)
- {
- return FALSE;
- }
- BOOL bResult=ReadProcessMemory(hProcess,addr,buffer,size,NULL);
- CloseHandle(hProcess);
- return bResult;
- }
- BOOL WriteProcessMemoryEx(DWORD pid,LPVOID addr,LPVOID buffer,DWORD size)
- {
- HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
- if (hProcess==0)
- {
- return FALSE;
- }
- BOOL bResult=WriteProcessMemory(hProcess,addr,buffer,size,NULL);
- CloseHandle(hProcess);
- return bResult;
- }
- int GetProcessThreadId(DWORD pid,DWORD *trds)
- {
- HANDLE hSnapshot= CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,pid);
- if (hSnapshot==INVALID_HANDLE_VALUE)
- return 0;
- THREADENTRY32 trd;
- trd.dwSize=sizeof(trd);
- BOOL bMore=Thread32First(hSnapshot,&trd);
- int i=0;
- while (bMore)
- {
- if (trd.th32OwnerProcessID==pid)
- {
- trds[i]=trd.th32ThreadID;
- i++;
- }
- bMore=Thread32Next(hSnapshot,&trd);
- }
- CloseHandle(hSnapshot);
- return i;
- }
- LPVOID GetThreadEntryPointById(DWORD tid)
- {
- HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid);
- if (hThread==0)
- {
- return NULL;
- }
- LPVOID Addr=NULL;
- ZwQueryInformationThread=(fZwQueryInformationThread)GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")),"ZwQueryInformationThread");
- ZwQueryInformationThread(hThread,ThreadQuerySetWin32StartAddress,&Addr,4,NULL);
- CloseHandle(hThread);
- return Addr;
- }
- BOOL GetProcessThreadModuleNameByTid(DWORD pid, DWORD tid, LPWSTR pszModuleName)
- {
- HANDLE hProcess = NULL;
- LPVOID pStart = NULL;
- TCHAR tmpStr[256];
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
- if (!hProcess)return FALSE;
- pStart = GetThreadEntryPointById(tid);
- if (!pStart) return FALSE;
- GetMappedFileName(hProcess, pStart, tmpStr, 256);
- for (int i = lstrlen(tmpStr); i >0; i--)
- {
- if (tmpStr[i]== '\\')
- {
- lstrcpy(pszModuleName, &tmpStr[i+1]);
- break;
- }
- }
- CloseHandle(hProcess);
- return TRUE;
- }
- void TerminateThreadEx(DWORD tid,DWORD exitcode=0)
- {
- HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid);
- if (hThread!=NULL)
- {
- TerminateThread(hThread,exitcode);
- CloseHandle(hThread);
- }
- }
- BOOL EnableDebugPrivilege()
- {
- HANDLE token;
- //提升权限
- if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token))
- {
- return FALSE;
- }
- TOKEN_PRIVILEGES tkp;
- tkp.PrivilegeCount = 1;
- ::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL))
- {
- return FALSE;
- }
- CloseHandle(token);
- return TRUE;
- }
- #endif
jpg改rar
非常感谢大家那么支持我上一篇教程。
- void CAnitTP_AppDlg::OnBnClickedButtonAnit()
- {
- DWORD pid = GetProcessIdByProcName(TEXT("DNF.exe"));
- if (pid==0)
- {
- MessageBox(TEXT("对不起,没有找到指定游戏进程.(DNF.exe)"), TEXT("操作失败"), MB_OK | MB_ICONERROR);
- return;
- }
- const BYTE code[8] = {0x90,0x90,0x90,0x90,0x90,0x55,0x8b,0xec};
- const BYTE code2[13] = { 0xC3, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 ,0xE9};
- DWORD trds[521];
- int trdcount=0;
- trdcount=GetProcessThreadId(pid, trds);
- LPVOID pEntryPoint=NULL;
- BYTE buf[13];
- HANDLE hThread;
- for (int i = 0; i < trdcount;i++)
- {
- pEntryPoint=GetThreadEntryPointById(trds[i]);
- ReadProcessMemoryEx(pid, pEntryPoint, buf, 8);
- TCHAR ModuleName[256];
- GetProcessThreadModuleNameByTid(pid, trds[i], ModuleName);
- if (memcmp(buf, code, 8) == 0 || lstrcmp(ModuleName, L"TenSLX.dll")==0)
- {
- hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, trds[i]);
- if (!hThread)continue;
- TerminateThread(hThread,0);
- CloseHandle(hThread);
- }
- ReadProcessMemoryEx(pid, (LPVOID)((int)pEntryPoint - 0xc), buf, 13);
- if (memcmp(buf, code2, 13) == 0)
- {
- hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, trds[i]);
- if (!hThread)continue;
- SuspendThread(hThread);
- CloseHandle(hThread);
- }
- }
- byte code3[7] = { 0x6A, 0x08, 0x68, 0x00, 0x00, 0x00, 0x00 };
- LPVOID pDbgUiRemoteBreakin = (LPVOID)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "DbgUiRemoteBreakin"); //调试用
- memcpy(&code3[3], (LPVOID)((int)pDbgUiRemoteBreakin + 3), 4);
- WriteProcessMemoryEx(pid, pDbgUiRemoteBreakin, code3, 7);
- byte code4[6] = { 0x8b, 0xff, 0x55, 0x8b, 0xec, 0xff };
- LPVOID pLdrInitializeThunk = (LPVOID)GetProcAddress(GetModuleHandle(_T("ntdll.dll")), "LdrInitializeThunk"); //DLL注入用
- WriteProcessMemoryEx(pid, pLdrInitializeThunk, code4, 6);
- MessageBox(TEXT("操作完毕,开始调试吧!"),TEXT("OK"),MB_OK|MB_ICONINFORMATION);
- }
功能函数头文件:
- #ifndef HANSHU
- #define HANSHU
- #include <TlHelp32.h>
- #include <psapi.h>
- #pragma comment(lib,"psapi.lib")
- typedef enum _THREADINFOCLASS {
- ThreadBasicInformation,
- ThreadTimes,
- ThreadPriority,
- ThreadBasePriority,
- ThreadAffinityMask,
- ThreadImpersonationToken,
- ThreadDescriptorTableEntry,
- ThreadEnableAlignmentFaultFixup,
- ThreadEventPair_Reusable,
- ThreadQuerySetWin32StartAddress,
- ThreadZeroTlsCell,
- ThreadPerformanceCount,
- ThreadAmILastThread,
- ThreadIdealProcessor,
- ThreadPriorityBoost,
- ThreadSetTlsArrayAddress,
- ThreadIsIoPending,
- ThreadHideFromDebugger,
- ThreadBreakOnTermination,
- MaxThreadInfoClass
- } THREADINFOCLASS;
- typedef struct _CLIENT_ID {
- HANDLE UniqueProcess;
- HANDLE UniqueThread;
- } CLIENT_ID;
- typedef CLIENT_ID *PCLIENT_ID;
- typedef struct _THREAD_BASIC_INFORMATION { // Information Class 0
- LONG ExitStatus;
- PVOID TebBaseAddress;
- CLIENT_ID ClientId;
- LONG AffinityMask;
- LONG Priority;
- LONG BasePriority;
- } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
- typedef LONG (__stdcall *fZwQueryInformationThread) (
- IN HANDLE ThreadHandle,
- IN THREADINFOCLASS ThreadInformationClass,
- OUT PVOID ThreadInformation,
- IN ULONG ThreadInformationLength,
- OUT PULONG ReturnLength OPTIONAL
- );
- fZwQueryInformationThread ZwQueryInformationThread;
- DWORD GetProcessPidByWndName(LPCTSTR szWndName)
- {
- HWND hWnd = FindWindow(NULL,szWndName);
- if (IsWindow(hWnd))
- {
- DWORD pid;
- GetWindowThreadProcessId(hWnd,&pid);
- return pid;
- }
- return 0;
- }
- DWORD GetProcessIdByProcName(LPCTSTR szProcName)
- {
- HANDLE hSnapshot= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
- PROCESSENTRY32 pro;
- pro.dwSize=sizeof(pro);
- BOOL bMore=Process32First(hSnapshot,&pro);
- while (bMore)
- {
- if (lstrcmp(szProcName,pro.szExeFile)==0)
- {
- CloseHandle(hSnapshot);
- return pro.th32ProcessID;
- }
- bMore=Process32Next(hSnapshot,&pro);
- }
- CloseHandle(hSnapshot);
- return 0;
- }
- BOOL ReadProcessMemoryEx(DWORD pid,LPVOID addr,LPVOID buffer,DWORD size)
- {
- HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
- if (hProcess==0)
- {
- return FALSE;
- }
- BOOL bResult=ReadProcessMemory(hProcess,addr,buffer,size,NULL);
- CloseHandle(hProcess);
- return bResult;
- }
- BOOL WriteProcessMemoryEx(DWORD pid,LPVOID addr,LPVOID buffer,DWORD size)
- {
- HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
- if (hProcess==0)
- {
- return FALSE;
- }
- BOOL bResult=WriteProcessMemory(hProcess,addr,buffer,size,NULL);
- CloseHandle(hProcess);
- return bResult;
- }
- int GetProcessThreadId(DWORD pid,DWORD *trds)
- {
- HANDLE hSnapshot= CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,pid);
- if (hSnapshot==INVALID_HANDLE_VALUE)
- return 0;
- THREADENTRY32 trd;
- trd.dwSize=sizeof(trd);
- BOOL bMore=Thread32First(hSnapshot,&trd);
- int i=0;
- while (bMore)
- {
- if (trd.th32OwnerProcessID==pid)
- {
- trds[i]=trd.th32ThreadID;
- i++;
- }
- bMore=Thread32Next(hSnapshot,&trd);
- }
- CloseHandle(hSnapshot);
- return i;
- }
- LPVOID GetThreadEntryPointById(DWORD tid)
- {
- HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid);
- if (hThread==0)
- {
- return NULL;
- }
- LPVOID Addr=NULL;
- ZwQueryInformationThread=(fZwQueryInformationThread)GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")),"ZwQueryInformationThread");
- ZwQueryInformationThread(hThread,ThreadQuerySetWin32StartAddress,&Addr,4,NULL);
- CloseHandle(hThread);
- return Addr;
- }
- BOOL GetProcessThreadModuleNameByTid(DWORD pid, DWORD tid, LPWSTR pszModuleName)
- {
- HANDLE hProcess = NULL;
- LPVOID pStart = NULL;
- TCHAR tmpStr[256];
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
- if (!hProcess)return FALSE;
- pStart = GetThreadEntryPointById(tid);
- if (!pStart) return FALSE;
- GetMappedFileName(hProcess, pStart, tmpStr, 256);
- for (int i = lstrlen(tmpStr); i >0; i--)
- {
- if (tmpStr[i]== '\\')
- {
- lstrcpy(pszModuleName, &tmpStr[i+1]);
- break;
- }
- }
- CloseHandle(hProcess);
- return TRUE;
- }
- void TerminateThreadEx(DWORD tid,DWORD exitcode=0)
- {
- HANDLE hThread=OpenThread(THREAD_ALL_ACCESS,FALSE,tid);
- if (hThread!=NULL)
- {
- TerminateThread(hThread,exitcode);
- CloseHandle(hThread);
- }
- }
- BOOL EnableDebugPrivilege()
- {
- HANDLE token;
- //提升权限
- if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token))
- {
- return FALSE;
- }
- TOKEN_PRIVILEGES tkp;
- tkp.PrivilegeCount = 1;
- ::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL))
- {
- return FALSE;
- }
- CloseHandle(token);
- return TRUE;
- }
- #endif