2017-10-21 61 views
-1

我在理解地址的含義和指針時遇到了問題。 我得到了client.dll的地址,在這種情況下,我正在使用攻擊多維數據集的「ac_client.exe」。 我將此地址添加到基地址以獲取本地播放器指針509b74。 Example Image 在這個指針我使用localplayer和添加F8的偏移量,這將指向我的健康。 正如你可以看到它說0x509b74 - > 000E1B188 ..... 「000E1B188」從哪裏來?我沒有明白嗎? 然後它確實000E1B188 + f8 = 00E1B280 會發生什麼?我不明白?!與指針和地址相混淆[作弊引擎]

回答

0

澄清0x509b74是一個硬編碼的地址,可以用於突擊立方體,因爲地址空間層的隨機化未啓用,並且.exe​​始終加載到0x400000。您也可以動態獲取ac_client.exe模塊的地址,然後使用ToolHelp32Snapshot添加0x109B74的相對偏移量

爲了本練習的目的,指針是一個簡單包含表示地址的數字的變量。當你編程和定義一個指針時,你必須定義指針將指向的變量的類型。這僅僅是爲了編譯器的目的,它可以創建代碼,使用正確的數據類型指令和強類型編譯器錯誤檢查來正確訪問指針末尾的變量。

0x509b74恰好是指向動態本地播放器對象的指針。換句話說,動態播放器對象指針位於0x509b74。它指向0x00E1B188,它是本地播放器對象的地址,它是動態分配的。從0x509b74到0x00E1B188被稱爲解引用,它只讀取指針中包含的地址。

一旦指針被取消引用,您就會看到地址0x00E1B188,它可以被稱爲本地播放器對象的「基址」。還要考慮到這是播放器對象的偏移量0x0。當你向它添加0xF8時,你現在正在查看駐留在播放器類中的健康變量的地址0x0E1B280,這只是簡單的加法。

一旦你瞭解它其實很簡單。它基本上看起來在代碼類似於:

struct player 
{ 
int ammo; 
int health; 
} 

player* localPlayerPtr = new player(); 

在這個例子中彈藥偏移爲0x0,健康偏移爲0x4假定int爲4個字節。假設localPlayerPtr位於0x509b74,指向位於0x00E1B188的新玩家對象。偏移量0x0是彈藥。當你添加偏移量0x4時,你會得到0x00E1B18C這是健康地址。

從C++的角度理解指針和麪向對象的編程會使得逆向工程指針變得容易得多,所以你可能需要在這方面做一些修改並製作一些實踐應用程序。