我有这个代码编辑游戏中的地址以获得无限弹药和什么不是,我发现每台计算机的地址都不同,有时每次重新启动游戏时,我将如何管理这项工作即使他们改变了。
答案 0 :(得分:8)
堆中记录内容的签名匹配。可能使用针对特定已知内容的编辑距离。
没有伤害我正在回答,因为你不得不问,你可能没有把它拉下来。
答案 1 :(得分:7)
如果你得到了你正在寻找的地址,然后在内存中搜索该地址以找到指向该数据的指针的地址,然后在内存中搜索那个地址,这样你就可以了可以找到指向它的指针的地址,依此类推,你最终可能会找到一个不会改变的地址。然后,在运行时,您可以将其用作起点并取消引用它以查找您要查找的位置。当然,这一切都取决于数据在内部的布局方式。它会变得非常复杂。
答案 2 :(得分:2)
最好的方法是在内存中查找模式并使用偏移量进行处理。这并不简单,因为这是游戏开发者想要停止的事情。
所以他们不会有一个很好的文本字符串说“Ammo在这个字符串的开头之前存储了27个字节”。
如果他们正在做一些棘手的事情,比如在每次游戏运行时移动它(我会因为我很狡猾),你需要反汇编他们的代码以了解他们 >找到记忆。
然后你做同样的事情。我知道,听起来很简单。但根据你过去的问题,我不确定'H4cKL0rD'是否适合绰号:-),至少在这种情况下。
如果您对反汇编程序,十六进制编辑等感到不舒服,那么几乎可以肯定有一个程序会为您完成。
答案 3 :(得分:1)
你要么放弃,要么对反汇编者非常好。
答案 4 :(得分:1)
如果您只想完成工作而不关心自己编写代码,可以使用专门为此任务设计的程序,例如T-Search。
答案 5 :(得分:0)
我会说,预加载一些自定义内存分配器并尝试找到你正在寻找的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;