3

我正在尝试“破解”使用 Visual Studio 2005 编译的游戏(红色警报 3,封闭源代码..)(需要 MSVCR80.dll 才能玩),

我尝试制作一个程序来显示我的对手的单位列表。至于那我首先需要找到一个指向我自己的列表的(静态)指针,我可以在单人游戏中做到这一点。

我有一些问题,因为我无法弄清楚我的静态指针是否真的指向我想要的。

我注意到了这种行为:(通过查看 add_unit 代码更改了哪些地址):

  • 如果尚未构建单元,请为其创建一个新地址(随机?)并将值设置为 1(该类型的单元数量),但对于先前添加的单元,所有其他地址保持不变,所以如果一个单元类型 A 的地址为 0x12345678,它告诉有多少类型 A 的单位,然后它不会改变并且在整个游戏会话期间保持可访问。

所以其他地址没有失效还是什么?

这是添加地址的示例,突出显示的地址是添加的第一个地址:

哪些类型的 std::containers 可以用于此?它当然不是向量,因为向量会在插入新元素时使所有其他地址无效,或者不是?


编辑/更新:至于现在我已经能够重建这个结构:

struct UnitsInfo
{
    DWORD * someptr_1_to_other_UnitsInfo_struct;
    DWORD * someptr_2_to_other_UnitsInfo_struct;
    DWORD * someptr_3_to_other_UnitsInfo_struct;
    int unkown_1;
    unsigned int Type;
    unsigned int Amount;
};

并且 some_ptr 东西指向所有其他单元地址,我需要找出它是如何工作的。然后我可以有效地创造一切。

4

1 回答 1

1

似乎在升序地址中。这看起来像是通过分配器将东西添加到任何容器中。我会猜测和侵入式链接列表,其中对象位于某种分配器上。

我希望这有帮助。

于 2013-05-07T17:09:22.110 回答