【vc++精品源码栏目提醒】:网学会员,鉴于大家对vc++精品源码十分关注,论文会员在此为大家搜集整理了“远程读写游戏内存VC带源码 - 编程语言”一文,供大家参考学习!
远程读写游戏内存 VC 带源码学习各种高级外挂制作技术,马上去百度搜索 魔鬼作坊,点击第一个站进入,快速成为做挂达人。
对于那些弹出游侠界面或暂停后就死掉的游戏,用类似的方法就可以修改了吧?!如果数值地址不是象 ra2 这样有多个,可在游戏中记下几个数值,然后写入一文件中,搜索时从文件中读取数值即可。
也可用键盘钩子记录按键,进行无界面动态输入。
-------------------------------------------------------------------------------------------------------------------------------------------------------取得游戏进程的句柄。
游戏中按下“”号键便来到这里有两种常用的方法:进程快照查找法和当前活动窗口法------------------------------------------------------------------------_GetProcessHandle proccomment 在调试时用这段代码取得游戏进程的句柄为好 LOCAL info:PROCESSENTRY32 LOCAL handle:HANDLE invoke CreateToolhelp32SnapshotTH32CS_SNAPPROCESS0 进程快照 mov handleeax mov info.dwSizesizeof PROCESSENTRY32 invoke Process32Firsthandleaddr info .repeat mov eaxF invoke lstrcmpiaddr info.szExeFileeax 比较是否为我们要找的进程名,不区分大小写 .if eax invoke CloseHandlehandle invoke MessageBoxNULLaddr info.szExeFileNULLMB_OK invoke OpenProcessPROCESS_ALL_ACCESSFALSEinfo.th32ProcessID jmp EXIT .endif invoke Process32Nexthandleaddr info .until eax invoke CloseHandlehandle xor eaxeaxEXIT: ret: db Game.exe0 通常情况下也可以用下面的方法取得游戏进程的句柄,但要注意…… LOCAL ProcessId invoke GetForegroundWindow 你必须确保当前窗口为游戏界面窗口这样才能正确取得游戏进程 ID lea edxProcessId invoke GetWindowThreadProcessIdeaxedx invoke OpenProcessPROCESS_ALL_ACCESSFALSEProcessId ret_GetProcessHandle endp------------------------------------------------------------------------第一遍搜索。
因是全程搜索,耗时几秒至十多秒(与玩家数多少有关)WinXP 中凭经验知道本游戏中钱数地址在 01000000h 至 0F600000 之间,搜此范围以减少用时------------------------------------------------------------------------_GetDataAddr proc uses esi edi hProcess:DWORDnum:DWORDhmem:DWORD LOCAL NListMemSizepListMemReadSize LOCAL mbi:MEMORY_BASIC_INFORMATION invoke EmptyWorkingSethProcess 减少游戏进程提交内存数,希望能减少搜索量,加快搜索速度 invoke SetProcessWorkingSetSizehProcess-1-1 不知是否有效愿听高手指导 invoke GlobalLockhmem 锁定保存搜索结果的内存 mov pListMemeax invoke GlobalSizehmem保存搜索结果的内存大小 mov ListMemSizeeax invoke ReadProcessMemoryhProcessADD_DATA1addr Nsizeof NNULL 不用手输入金钱数,从内存读取金钱数 mov ediN 保存金钱数,以便后面比较搜索,原理见前文 invoke GlobalAllocGMEM_FIXEDMEMSIZE 分配内存,为读取数据做准备 mov esieax 保存内存地址 mov ecxADD_DATA3_START 设置要搜索的内存地址范围开始处 .repeat 循环搜索游戏内存: invoke VirtualQueryExhProcessecxaddr mbisizeofMEMORY_BASIC_INFORMATION 返回页面虚拟信息 .if mbi.State MEM_COMMIT mbi.Protect PAGE_READWRITE 已提交且为可读写的区域,加速搜索 mov ReadSizeMEMSIZE 每次可读取的数据大小 .repeat 循环读取该内存区段中的数据 .if mbi.RegionSizeListMemSize 如果搜索到的结果较多,内存用完,要重新分配内存 push eax push ecx add eax1000h 追加4K内存 invoke GlobalReAllochmemeaxGMEM_MOVEABLE 重新分配内存原来的数据被复制过来 invoke GlobalLockeax mov pListMemeax 保存搜索结果的内存首地址 invoke GlobalSizehmem mov