冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 520|回覆: 0
打印 上一主題 下一主題

[開源] WirteAddressOffset , WriteBytes , Write2Byte , Write8Byte ,WriteFloat

  [複製鏈接]

192

主題

10

好友

2485

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
286196
帖子
1238
主題
192
精華
0
積分
2485
楓幣
4972
威望
1944
存款
0
贊助金額
1950
推廣
0
GP
230
閱讀權限
150
在線時間
1066 小時
註冊時間
2020-7-11
最後登入
2024-11-26

Apple勳章 性別(女) 屁孩勳章 懶人勳章 2021中秋節紀念勳章 太陽勳章 神手勳章 解說達人 論壇粉絲 論壇支持王 VIP會員 積分勳章 發帖達人 長老勳章 2021聖誕節紀念勳章 管理者 版主勳章 2022年紀念勳章 核心勳章 Android勳章 在線終極王 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2024-10-8 18:40:29 |只看該作者 |倒序瀏覽
本帖最後由 BeeBan 於 2024-10-9 13:38 編輯

WirteAddressOffset : 寫入基址,偏移
void WriteAddressOffset(DWORD baseAddress, std::vector<DWORD> offsets, int value)
{
        HANDLE hProcess = GetPvZProcessHandle();//這邊只是我讀取我遊戲的進程
        if (hProcess == NULL) return;
        DWORD currentAddress;
        SIZE_T bytesRead;
        if (!ReadProcessMemory(hProcess, (LPCVOID)baseAddress, ¤tAddress, sizeof(currentAddress), &bytesRead)) {
                CloseHandle(hProcess);
                return;
        }
        for (size_t i = 0; i < offsets.size(); i++) {
                currentAddress += offsets;
                if (i != offsets.size() - 1) {
                        if (!ReadProcessMemory(hProcess, (LPCVOID)currentAddress, ¤tAddress, sizeof(currentAddress), &bytesRead)) {
                                CloseHandle(hProcess);
                                return;
                        }
                }
        }
        if (!WriteProcessMemory(hProcess, (LPVOID)currentAddress, &value, sizeof(value), NULL)) {
                CloseHandle(hProcess);
                return;
        }
        CloseHandle(hProcess);//關閉進程
}

例句: WriteAddressOffset(0x006A9EC0, {0x768, 0x5560}, 9990); //基址, 一級偏移 , 二級偏移, 數值 (在裡面處理多個偏移也都是沒有問題
---------------------------------------------------------------------------------------------------------------------------------------------------------------
WriteBytes : 寫入4自節
static bool WriteBytes(DWORD dwAddr, const std::initializer_list<unsigned char>& bytes) //用來寫入數據
{
        DWORD dwOld;
        size_t len = bytes.size();        
        if (!VirtualProtect((LPVOID)dwAddr, len, PAGE_EXECUTE_READWRITE, &dwOld)) {
                return false;
        }
        memcpy_s((void*)dwAddr, len, bytes.begin(), len);
        DWORD dwNew;
        return VirtualProtect((LPVOID)dwAddr, len, dwOld, &dwNew);
}

例: WriteBytes(0x0054EBA8, { 0xEB, 0x00, 0x80 });
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Write2Byte : 專門用來寫入2個字節的數據
static bool Write2Byte(DWORD dwAddr, WORD value) //WORD是2字節(16位)
{
        DWORD dwOld;
        if (!VirtualProtect((LPVOID)dwAddr, sizeof(WORD), PAGE_EXECUTE_READWRITE, &dwOld)) {
                return false;
        }
        *(WORD*)dwAddr = value;
        DWORD dwNew;
        return VirtualProtect((LPVOID)dwAddr, sizeof(WORD), dwOld, &dwNew);
}
例:Write2Byte(0x0040E477,0xEB46);
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Write8Byte:  專門用來寫入8個字節的數據
static bool Write8Byte(DWORD dwAddr, uint64_t value) //8字節(64位)
{
        DWORD dwOld;
        if (!VirtualProtect((LPVOID)dwAddr, sizeof(uint64_t), PAGE_EXECUTE_READWRITE, &dwOld)) {
                return false;
        }
        *(uint64_t*)dwAddr = value;
        DWORD dwNew;
        return VirtualProtect((LPVOID)dwAddr, sizeof(uint64_t), dwOld, &dwNew);
}
例:Write8Byte(0x0040D7D0,0xB001C3285357);
---------------------------------------------------------------------------------------------------------------------------------------------------------------
WriteFloat : 專門用來寫入 4 字節的浮點數
static bool WriteFloat(DWORD dwAddr, float value) //4字節的浮點數
{
        DWORD dwOld;
        if (!VirtualProtect((LPVOID)dwAddr, sizeof(float), PAGE_EXECUTE_READWRITE, &dwOld)) {
                return false;
        }
        *(float*)dwAddr = value;
        DWORD dwNew;
        return VirtualProtect((LPVOID)dwAddr, sizeof(float), dwOld, &dwNew);
}
例: WriteFloat(0x0040F000, 1.23f);
收藏收藏0 推1 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
我就只是個垃圾
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-11-27 11:30

回頂部