我正在尝试“破解”使用 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 东西指向所有其他单元地址,我需要找出它是如何工作的。然后我可以有效地创造一切。