Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将地址保存在C++;黑客游戏代码?_C++_Memory Address - Fatal编程技术网

C++ 将地址保存在C++;黑客游戏代码?

C++ 将地址保存在C++;黑客游戏代码?,c++,memory-address,C++,Memory Address,我有一段代码,可以编辑游戏中的地址以获得无限弹药等等,我发现每台计算机的地址都不一样,有时每次你重新启动游戏时,我该如何使这些地址保持不变,即使它们发生了变化。你要么放弃,或者使用反汇编程序获得非常好的性能。堆中记录内容的签名匹配。可能对特定的已知内容使用编辑距离 没关系,我回答你,因为你不得不问,你可能没有足够的勇气来完成它。最好的方法是在内存中寻找模式,并使用偏移量计算出来。这不会简单,因为这是游戏开发者想要停止的事情 所以他们不会有一个很好的文本字符串说“在这个字符串开始之前,弹药存储了2

我有一段代码,可以编辑游戏中的地址以获得无限弹药等等,我发现每台计算机的地址都不一样,有时每次你重新启动游戏时,我该如何使这些地址保持不变,即使它们发生了变化。

你要么放弃,或者使用反汇编程序获得非常好的性能。

堆中记录内容的签名匹配。可能对特定的已知内容使用编辑距离


没关系,我回答你,因为你不得不问,你可能没有足够的勇气来完成它。

最好的方法是在内存中寻找模式,并使用偏移量计算出来。这不会简单,因为这是游戏开发者想要停止的事情

所以他们不会有一个很好的文本字符串说“在这个字符串开始之前,弹药存储了27个字节”

如果他们在做一些棘手的事情,比如每次游戏运行时都移动它(我会这样做,因为我很狡猾),那么你需要分解他们的代码,找出他们是如何定位内存的

然后你做同样的事情。我知道,听起来很简单,而且确实如此。但根据你们过去的问题,我不确定“H4cKL0rD”是否是一个合适的名字:-),至少在这种情况下是这样


如果您对反汇编程序、十六进制编辑器等感到不舒服,那么几乎可以肯定会有一个程序可以为您执行此操作。

如果您获得要查找的地址,然后在内存中搜索该地址以查找指向该数据的指针的地址,然后在内存中搜索该地址,这样就可以找到指向它的指针的地址,依此类推,最终可能会找到一个不变的地址。然后,在运行时,您可以使用它作为起点,并取消对它的引用以找到您要查找的位置。当然,这完全取决于数据在内部的布局方式。它可能会变得非常复杂。

如果您只想完成任务,而不关心自己是否编写了代码,您可以使用专门为此任务设计的程序,例如。

我想说,预加载一些自定义内存分配器,并尝试找到您要查找的malloc()大小

由于您试图破解的数据很可能存储在具有其他参数的结构中,因此了解结构大小将允许您在看到此大小的分配时采取特殊操作

typedef struct {
   int ammo;
   int damage;
   int fire_distance;
} Sniper_AWP_T;

void *my_custom_malloc( int size ){
   void *ret = malloc(size);
   if( size == sizeof( Sniper_AWP_T ) ){
       hack_address = ret;
   }
   return ret;
}

// later on 

hack_address->ammo = 999;

为什么这不是一种在游戏中找到地址的方法,比如说一个狙击手,搞乱存放弹药的地址值。反汇编程序(或者一个更专业的工具,比如内存扫描仪,看看你其他问题的答案)是如何“只找到地址”的。有一件事可能会让游戏变得更简单,那就是游戏可能总是有相同的偏移量(尽管他们可能有一些反作弊算法来移动东西,但我会感到惊讶)。如果你能找到游戏进程的基址,那么你就已经设置好了。别忘了,不同的操作序列可能会在不同的时间分配不同的东西,分配不同数量的东西,因此地址可能会因此而有所不同。如果游戏中有任何随机化,那也可能是一个因素——那是在你开始考虑共享库的加载地址随机化(由o/s提供)之前。说得好。这也是反汇编程序派上用场的地方-如果你能找出你要寻找的内存是如何分配的,你可以跟踪对它的引用。苛刻,但真实。我对那些idk我在寻找什么我有作弊引擎你知道如何找到核心吗基本上你可以用它们来搜索值,然后通过在游戏中做一些事情,缩小搜索范围,等等来改变这个值,直到内存中只有一个可能的位置,然后你可以修改它。不,我知道怎么做,但是每个计算机的地址都会改变。有时,每次启动游戏,我所能想到的就是,如果字符数据存储在散列中(例如,每个播放器都有一个运行时分配的GUID作为哈希键),您将在查找哪个bucket时获得很多乐趣。:-p如果您要查找的数据基于某个结构/类,该结构/类在某个点进行了局部实例化,但不是全局或静态变量,那么您将无法找到静态指针。您必须找到一些代码,在需要时访问您想要的数据,并钩住该代码,将其重定向到您自己在堆中某个位置分配的注入代码。这并不总是可能的,因为强化的O/S不允许引入新代码。如果确实发现许多静态指针,则可能表明该程序编写得不好:)