日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

CS起源pointermap找基址+工具函数测试

發(fā)布時(shí)間:2025/3/21 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CS起源pointermap找基址+工具函数测试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是我的愛好,但我不會(huì)用這些技術(shù)做越界的事情,希望您也是。
這是我的愛好,但我不會(huì)用這些技術(shù)做越界的事情,希望您也是。
這是我的愛好,但我不會(huì)用這些技術(shù)做越界的事情,希望您也是。

一、MemHackLib庫(kù)

參考casuallibrary項(xiàng)目,整了個(gè)閹割版,刪掉了我不會(huì)的C++語法,只保留了vector和模板函數(shù),這兩個(gè)工具還是很實(shí)用的。這個(gè)庫(kù)剛開始整,只有外部讀寫內(nèi)存的功能,以后慢慢加。

主函數(shù)
這里演示了庫(kù)的基本功能,獲取玩家基址,然后鎖血1000.其實(shí)庫(kù)的功能差不多就這些了,后期會(huì)加入AOB掃描的功能,然后適配一下64位,也沒什么別的了。

// MemHackLib.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。 //#include "MemHackLib.hpp"int main() {HANDLE hProcess = NULL;DWORD Pid = 0;OpenProcessWithName(_T("hl2.exe"), &hProcess, &Pid);HMODULE ServerDll = GetModuleBase(_T("server.dll"), Pid);uintptr_t LocalPlayer = GetObjectAddress(hProcess, (uintptr_t)ServerDll + 0x004F615C, { 0x14,0x20, 0xEB8, 0x0 });std::cout << "玩家基址:" << std::hex << LocalPlayer << std::dec << std::endl;while (1){int Health = 0;ExternalRead(hProcess, LocalPlayer + 0xE4, TRUE, &Health);if (Health != 1000){ExternalWrite(hProcess, LocalPlayer + 0xE4, TRUE, 1000);Sleep(100);}}CloseHandle(hProcess); }

MemHackLib.hpp

#pragma once/* * 參考項(xiàng)目:https://github.com/CasualCoder91/CasualLibrary * 日期:2021年8月21日 * 作者:hambaga * * 我編寫這個(gè)庫(kù)時(shí)會(huì)兼容多字節(jié)字符集和Unicode字符集;也嘗試兼容64位,但沒有測(cè)試過,以后用這個(gè)庫(kù)開發(fā)64位外掛時(shí)會(huì)完善的。 * */#include <Windows.h> #include <iostream> #include <stdio.h> #include <TlHelp32.h> #include <tchar.h> #include <vector>// ---------------------------------------------------------------------------------------------------------------- // External hack, just use this api in a external program... // ----------------------------------------------------------------------------------------------------------------// Open process and return pid BOOL OpenProcessWithName(const TCHAR* ProcessName, HANDLE* Process, DWORD* Pid) {HANDLE hSnapshot;hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (INVALID_HANDLE_VALUE == hSnapshot){std::cerr << "CreateToolhelp32Snapshot failed, error code: " << GetLastError() << "\n";return FALSE;}PROCESSENTRY32 process;process.dwSize = sizeof(PROCESSENTRY32);BOOL first = Process32First(hSnapshot, &process);while (first){if (!_tcscmp(ProcessName, process.szExeFile)){*Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process.th32ProcessID);if (*Process != NULL){*Pid = process.th32ProcessID;return TRUE;}}first = Process32Next(hSnapshot, &process);}CloseHandle(hSnapshot);return FALSE; }// Get a dll address or main exe address. HMODULE GetModuleBase(const TCHAR* ModuleName, DWORD Pid) {HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, Pid);MODULEENTRY32 ModuleEntry;ModuleEntry.dwSize = sizeof(ModuleEntry);do{if (!_tcscmp(ModuleName, ModuleEntry.szModule)){CloseHandle(hSnapshot);return ModuleEntry.hModule;}} while (Module32Next(hSnapshot, &ModuleEntry));return NULL; }// Get an object address by specify some offsets. uintptr_t GetObjectAddress(HANDLE ProcessHandle, uintptr_t Address, const std::vector<uintptr_t>& Offsets) {for (size_t i = 0; i < Offsets.size(); i++){if (!ReadProcessMemory(ProcessHandle, (BYTE*)Address, &Address, sizeof(Address), NULL)){std::cerr << "ReadProcessMemory failed at reading " << std::hex << Address << "\n";}Address += Offsets[i];}return Address; }template <typename T> BOOL ExternalRead(HANDLE ProcessHandle, const uintptr_t& Address, BOOL ReadableCheck, T *ReadData) {if (ReadableCheck){MEMORY_BASIC_INFORMATION mbi;VirtualQueryEx(ProcessHandle, (LPCVOID)Address, &mbi, sizeof(mbi));if (!(mbi.State & MEM_COMMIT)){return FALSE;}} ReadProcessMemory(ProcessHandle, (LPBYTE)Address, ReadData, sizeof(T), NULL);return TRUE; }template <typename T> BOOL ExternalWrite(HANDLE ProcessHandle, const uintptr_t& Address, BOOL WritableCheck, T WriteData) {if (WritableCheck){MEMORY_BASIC_INFORMATION mbi;VirtualQueryEx(ProcessHandle, (LPCVOID)Address, &mbi, sizeof(mbi));if (!(mbi.State & MEM_COMMIT)){return FALSE;}if (mbi.Protect & (PAGE_GUARD | PAGE_NOCACHE | PAGE_NOACCESS | PAGE_READONLY)){if (!VirtualProtectEx(ProcessHandle, mbi.BaseAddress, mbi.RegionSize, PAGE_READWRITE, &mbi.Protect)) {return FALSE;}WriteProcessMemory(ProcessHandle, (LPBYTE*)Address, &WriteData, sizeof(T), NULL);DWORD dwOldProtect;VirtualProtectEx(ProcessHandle, mbi.BaseAddress, mbi.RegionSize, mbi.Protect, &dwOldProtect);return TRUE;}}WriteProcessMemory(ProcessHandle, (LPBYTE)Address, &WriteData, sizeof(T), NULL);return TRUE; }// ---------------------------------------------------------------------------------------------------------------- // Internal hack, just use this api in a dll, and use some other tool to inject this dll into the game... // ----------------------------------------------------------------------------------------------------------------

二、如何使用 pointermap 找玩家基址

如果您不知道什么是 指針掃描 ,建議您先看一下CE教程,把CE內(nèi)置的教程過一遍。pointermap我的理解是把多個(gè)指針掃描的結(jié)果放在一起比較,原理不清楚,反正效果就是篩選過程比普通指針掃描更快,搜出來的結(jié)果更少。下面演示一下CS起源怎么找基址,我這里用的是steam的CS起源,估計(jì)和破解版也沒什么區(qū)別。

2-1 找血量

只要找到血量,看看誰訪問/修改了血量,根據(jù)指令的偏移,就能找到玩家基址。開一局游戲吧:

找到十幾個(gè)地址,其中只有一個(gè)是真正的血量:

全部拉下來,用二分法修改+鎖定:

我這里將下半?yún)^(qū)這幾個(gè)鎖定成1000,如果我無敵了,說明真正的血量就是這里邊其中一個(gè),那么上半?yún)^(qū)的就可以刪掉了;否則,真正的血量就在上半?yún)^(qū),那么把下半?yún)^(qū)刪掉。重復(fù)這個(gè)步驟,可以快速找到真正的血量地址:


2-2 查偏移

看看誰訪問了血量:
如果你附加進(jìn)程CE崩潰了,只需設(shè)置一下使用VEH調(diào)試器即可:

現(xiàn)在我們知道血量的偏移是E4,那么玩家地址就是-E4,但是先不急,我們要找基址。待會(huì)再用這個(gè)E4。

2-3 生成 pointermap

找到血量后,右鍵生成pointermap:

生成pointermap1后,指針掃描:

選擇 use pointer map,使用剛才生成的pointermap1:

指定一下最后一個(gè)偏移 E4

選擇PTR文件保存路徑后,開始掃描

第一次掃描結(jié)束,重啟游戲,CE不關(guān)。


第二次啟動(dòng)游戲,用二分法找到血量。

生成pointermap :

第二次指針掃描,有幾個(gè)地方要設(shè)置,首先要使用剛才生成的pointermap2,然后勾選compare result,與上次游戲的pointermap1對(duì)比,設(shè)置地址為上次游戲的血量地址,然后開始掃描:

得到了18000個(gè)結(jié)果,第一次是16萬個(gè):

再來一次,重啟游戲,找到血量:

生成pointermap3:

指針掃描,使用pointermap3,和前兩個(gè)pointermap對(duì)比:

開始掃描:

得到了13000個(gè)結(jié)果:

似乎再重復(fù)也沒什么大變化了,找?guī)讉€(gè)偏移少的試試:


只要找到一個(gè)可以用的就行了,結(jié)果越少越準(zhǔn)確。

總結(jié)

以上是生活随笔為你收集整理的CS起源pointermap找基址+工具函数测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美日韩中文在线 | 久久99深爱久久99精品 | 中文字幕在线2021 | 久久99在线 | 91se在线 | 中文久久字幕 | jizz久久 | 天天看a| 神马午夜888 | 少妇高潮一区二区三区 | 日本91网站 | 我们的2018在线观看免费高清 | 国产乱子伦视频一区二区三区 | 国产小视频一区 | 国产一区免费观看 | 婷婷91 | 午夜偷拍福利 | 国产不卡在线观看视频 | 日韩精品一区二区在线视频 | 成人av动漫 | 亚洲一区影视 | 性欧美在线观看 | 色吧在线观看 | 好吊日精品视频 | 精品久久久无码中文字幕 | 神马午夜91 | 久久九九久精品国产免费直播 | 欧美日韩二区三区 | 秋霞在线视频观看 | 亚洲国产成人va在线观看天堂 | 欧美美女性生活 | 高潮又黄又刺激 | 狠狠插av | 国产精品久久久久一区二区三区 | 在线视频一二区 | 欧美一区二区视频在线观看 | 色啪视频 | 日韩少妇中文字幕 | 午夜成人鲁丝片午夜精品 | 天天插天天摸 | 北条麻妃在线一区 | 黄色一级网 | 伊人99热 | 黑人黄色录像 | 胖女人毛片 | 亚洲在线综合 | 男生操女生免费网站 | 重囗味sm一区二区三区 | 日韩一页 | 欧美性xxxxx极品娇小 | 影音先锋男人资源网站 | 超碰自拍 | 国产一二三区精品 | 岛国av网站| 91网在线看 | 蜜乳av 懂色av 粉嫩av | 色婷婷香蕉在线一区二区 | 日韩一区二区三区四区在线 | www.一区二区| 亚洲综合影院 | 久久黄色录像 | av亚州 | 日韩人妻精品一区二区三区 | 网站在线免费观看 | 国产主播在线一区 | 亚洲 欧美 日韩 在线 | 日本高清视频在线观看 | 日本在线精品视频 | 国语av| 一级大片儿 | 久热这里只有 | 人妻丝袜一区 | av图片在线 | 久久久久久1 | 爱爱的免费视频 | 露胸app| www.青青草| 草女人视频 | 中文字幕av日韩 | 成人在线看片 | 精品国产黄色 | 福利所第一导航 | 欧美性猛交xxxx乱大交hd | av中出在线| 先锋影音制服丝袜 | jizz毛片| 久久蜜桃av| 自拍偷拍第5页 | 免费日本黄色 | 亚洲天堂一区在线观看 | 最近国语视频在线观看免费播放 | 免费观看美女裸体网站 | 露胸app| 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 欧美日韩亚洲免费 | 精品国产xxx | 精品无码久久久久久久久果冻 | 麻豆视频免费网站 | 欧美熟妇乱码在线一区 |