与指针和地址混淆[作弊引擎]

时间:2017-10-21 23:34:05

标签: c++ pointers cheat-engine

我在理解地址的含义和指针时遇到了问题。 我得到了client.dll的地址,或者在这种情况下" ac_client.exe"因为我正在攻击多维数据集。 我将此地址添加到基地址以获取本地播放器指针,该指针以509b74形式出现。 Example Image 在这个指针中我使用localplayer并添加F8的偏移量,这将指向我的健康状况。 你可以看到它说0x509b74 - > 000E1B188 ..... " 000E1B188"来自?我不明白吗? 那么它确实是000E1B188 + f8 = 00E1B280 怎么了?我不明白?!

1 个答案:

答案 0 :(得分:0)

澄清0x509b74是一个硬编码地址,对于Assault Cube来说没问题,因为地址空间层次随机化没有启用,而.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();

在这个例子中,ammo偏移0x0,健康偏移0x4,假设int是4个字节。假设localPlayerPtr位于0x509b74,指向位于0x00E1B188的新播放器对象。偏移0x0是弹药。当您添加偏移量0x4时,您将获得0x00E1B18C,这是健康状况地址。

从C ++的角度理解指针和面向对象的编程将使逆向工程指针变得更加容易,因此您可能希望了解它并制作一些练习应用程序。