YYYpo 發表於 2023-4-21 23:29:46

關於C++ 指針型數據



目前小弟無聊拿來測試寫了一下,發現讀取出來的數值跟CE的一樣
所以有人有寫DLL外掛,用內聯彙編去讀取的嗎??
所以如果是 0x40000] + 0x39]這樣的指針
後面感覺就可以用彙編讀取了,希望有大佬可以來給小弟指點指點迷津

幻想 發表於 2023-4-21 23:40:07

本帖最後由 幻想 於 2023-4-21 23:41 編輯

按照你的asm代碼來看的話直接明文代碼操作更好理解些
DWORD dwHandle = (DWORD)GetModuleHandleA("kernel32.dll");
int val = *(int*)(dwHandle);
std::cout << "Address Value: " << val << std::endl;

result: Address Value: 9460301

YYYpo 發表於 2023-4-22 00:46:40

幻想 發表於 2023-4-21 23:40 static/image/common/back.gif
按照你的asm代碼來看的話直接明文代碼操作更好理解些
DWORD dwHandle = (DWORD)GetModuleHandleA("kernel32 ...

想問個問題,假如還沒進到遊戲關卡內
CE指針

改了會閃退怎麼解決

幻想 發表於 2023-4-22 01:00:12

本帖最後由 幻想 於 2023-4-22 01:02 編輯

YYYpo 發表於 2023-4-22 00:46 static/image/common/back.gif
想問個問題,假如還沒進到遊戲關卡內
CE指針


試著想一下 如果你的內聯彙編對一段非法記憶體進行操作會不會崩潰
這種讀寫方式沒有Write/Read ProcessMemory 來的方便就是因為你必須手動判斷記憶體是否有效
當然,如果今天是DLL外掛 最好注意一下效能占用問題 遇到需要高頻繁讀寫還是少用WinAPI好
拿目前楓之谷版上的 v251.3 MapID 數據當作範例

DWORD64 dwMapInfoPtr = *(DWORD64*)(0x146745CB0);
if (dwMapInfoPtr && dwMapInfoPtr > 0x1024)
{
    int MapID = *(int*)(dwMapInfoPtr + 0x3B8);
}

0x1024 只是我大概抓的一個範圍 這個由你自己去訂,當然你也可以只判斷他是否等於零

YYYpo 發表於 2023-4-22 01:27:02

本帖最後由 YYYpo 於 2023-4-22 01:32 編輯

我用這個就可以惹[VirtualProtect]www



彙編修改

改一下另一種可以,但是實際讀取指針p碼,單機遊戲本來自己想無聊多訓練一下,用CE看地址都可以
WPM可以修改指針
用dll注入打勾,遊戲就繃了,用*指針方式寫入的


頁: [1]
查看完整版本: 關於C++ 指針型數據