我正在学习如何破解 PS3 游戏,我需要编辑存储在特定内存地址的内容。这是我看到人们为实现这一目标所做的一个例子:
*(char*)0x1786418 = 0x40;
这行代码为 COD Black Ops II 开启超高速。
我不是 100% 确定这里发生了什么。我知道 0x1786418
是地址,0x40
设置该地址的值。但是我不太确定*(char*)
的作用以及0x40
是如何开启超高速的?
如果能从语法上对此进行解释以及它如何开启超高速,我们将不胜感激。
谢谢!
最佳答案
在尝试进行逆向工程之前,您应该考虑了解编程语言的基础知识。这绝对是一个您不想作为入门方式的高级主题。这会让事情变得不必要地更加困难。
I'm not 100% sure what is going on here. I know that 0x1786418 is the address and 0x40 sets the value at that address.
除非对软件进行逆向工程的人出现在这里并进行解释,否则这里的任何人都可能告诉您这么多。
But I'm not so sure what
*(char*)
does
这是一种获取地址并将其解释为指向字节的指针(C 中的 char
是 1 个字节的内存)然后在外部 *
取消引用指针以允许修改指针引用的值,在这种情况下,设置为值 0x40
。
and how does
0x40
turn on super speed?
这是针对游戏本身的。肯定有人已经弄清楚有关玩家移动速度的数据在内存中的存储位置(特别是针对 PS3),并且正在以这种方式更新它。
像这样的东西很容易被一个简单的补丁破坏,因为代码更改会使某些东西最终出现在不同的地址,需要额外的逆向工程工作。
关于PS3 的 C++ 内存编写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558696/