尤里复仇金钱修改
一個簡單的用c寫的外掛
寫這個外掛的原因是閑來無事玩玩紅警尤里,用ce生成的修改文件時靈時不靈,于是就想自己寫個。思路很簡單,用ce找到金錢的地址(*((int*)A83D4C+30C))),用Windowsapi改寫內存就行了。
主要用到的函數ReadProcessMemory、WriteProcessMemory
另外由于權限的問題,打開進程還需要一點技巧,直接copy網上的一段代碼。已經封裝成了函數,用起來很方便。
#include "tlhelp32.h" #include "windows.h"BOOL SetPrivilege(HANDLE hToken, // access token handleLPCTSTR lpszPrivilege, // name of privilege to enable/disableBOOL bEnablePrivilege // to enable or disable privilege) {TOKEN_PRIVILEGES tp;LUID luid;if ( !LookupPrivilegeValue( NULL, // lookup privilege on local systemlpszPrivilege, // privilege to lookup &luid ) ) // receives LUID of privilege{printf("LookupPrivilegeValue error: %u/n", GetLastError() ); return FALSE; }tp.PrivilegeCount = 1;tp.Privileges[0].Luid = luid;if ( bEnablePrivilege )tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;elsetp.Privileges[0].Attributes = 0;// Enable the privilege or disable all privileges.if ( !AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL) ){ printf("AdjustTokenPrivileges error: %u/n", GetLastError() ); return FALSE; } if (GetLastError() == ERROR_NOT_ALL_ASSIGNED){printf("The token does not have the specified privilege. /n");return FALSE;} return TRUE; }HANDLE GetProcessHandle(int nID) {HANDLE hToken;bool flag = OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken );if( !flag ){DWORD err = GetLastError();printf( "OpenProcessToken error:%d", err );}SetPrivilege( hToken, SE_DEBUG_NAME, true );CloseHandle(hToken);return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID); }HANDLE GetProcessHandle(LPCTSTR pName) {HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (INVALID_HANDLE_VALUE == hSnapshot){return NULL;}PROCESSENTRY32 pe = { sizeof(pe) };BOOL fOk;for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)){if (!strcmp(pe.szExeFile, pName)){CloseHandle(hSnapshot);return GetProcessHandle(pe.th32ProcessID);}}return NULL; }獲取進程handle只需HANDLE handle=GetProcessHandle("gamemd.exe");
接下來就是
int money; int adress; ReadProcessMemory(handle,(void*)0xA83D4C,&adress,4,NULL);獲取基地址 ReadProcessMemory(handle,(void*)(adress+0x30c),&money,4,NULL);讀取金錢 WriteProcessMemory(handle,(void*)(adress+0x30c),&money,4,NULL);修改金錢總結
- 上一篇: 《操作系统》OS学习(二):启动、中断、
- 下一篇: python自学网站需要多长时间-怎么自