2016-12-28 159 views
-1

昨天我開始搞亂c#和VAMemory.ddl。我的目標是制定一個計劃,從遊戲「英雄聯盟」中讀取玩家的HP。 我發現了惠普的靜態地址,並閱讀:指針內存地址

vam.ReadFloat((IntPtr)address); 

它工作得很好,我可以看到我在遊戲中HP從我的程序,但因爲它是一個靜態地址,它每變化當我重新開始遊戲時,我必須每次都找到地址。 所以我開始尋找指針。我遵循了幾個教程,大約一個小時後,我可以在cheatengine中看到我的HP,重新開始遊戲,並且沒有佔據地址仍然看到它。

但我不明白我將如何實現它到我的程序,我找不到任何教程。 :/

以下是我從Cheatengine發現:

CE

當前HP - Legends.exe的聯賽 - 0x032871FC - 將0x58,0x6C0,0x42C,0×90,0x448 - 浮

+0

你需要非常小心你在各種遊戲中對內存所做的事情,因爲他們中的很多人都有反作弊系統,當你篡改他們的內存時,系統就會被捕獲。 – Powerlord

+0

「我不懂如何編程」和「我需要一個教程」不是問題;這是一個問答網站。你有一個*特定的問題嗎? –

+0

是的,我的問題是我如何從內存中讀取一個浮點數,如果我有指針 – Ingmar05

回答

1

這裏是解決您的問題的一種可能的方法。請注意,該軟件需要是32位軟件!

第一步是獲得進程的基地址:

Process GameProcess = Process.GetProcessesByName("GameProcessName").FirstOrDefault(); 
IntPtr BaseAddress = GameProcess.MainModule.BaseAddress; 

在此基礎上的地址,你能步驟通過像(示範將0x58的偏移量)

int ReadBytes; 
IntPtr BasePlusOneAddress = IntPtr.Add(BaseAddress, 0x58); 
IntPtr BasePlusOneValue = (IntPtr)BitConverter.ToInt32(MemoryHandler.ReadMemory(GameProcess, BasePlusOneAddress, 4, out ReadBytes), 0); 

您的指針現在可以使用該值作爲指針了。

這就導致了一個簡單的功能就像

void IntPtr GetOffsetPointer(Process P, IntPtr BasePointer, Int32 Offset) 
{ 
    int ReadBytes; 
    IntPtr OffsetAddress = IntPtr.Add(BasePointer, Offset); 
    return (IntPtr)BitConverter.ToInt32(MemoryHandler.ReadMemory(P, OffsetAddress, 4, out ReadBytes), 0); 
} 

編輯:MemoryHandler只是包裝窗口的ReadProcessMemory function。這只是一個例子 - 所以你必須實現你自己的功能。一個很好的例子是Code Project

+0

你從哪裏得到「MemoryHandler」?錯誤:名稱'MemoryHandler'在當前上下文中不存在 – Ingmar05

+0

添加了一些信息 – Fruchtzwerg

+0

嗯,當做:IntPtr BasePlusOneAddress = IntPtr.Add(BaseAddress,0x58); vam.ReadFloat((IntPtr的)BasePlusOneAddress);我得到2,959361E + 21 – Ingmar05