我正在学习如何破解PS3游戏,我需要编辑存储在某些内存地址的内容。以下是我看到人们为实现这一目标所做的一个例子:
*(char*)0x1786418 = 0x40;
这行代码为COD Black Ops II打开超高速。
我不是100%肯定这里发生了什么。我知道0x1786418
是地址,0x40
设置该地址的值。但我不太确定*(char*)
的作用以及0x40
如何打开超高速?
这种语法的解释以及它如何打开超高速将非常感激。
谢谢!
在尝试进行逆向工程之前,您应该考虑理解编程语言的基础知识。这绝对是一个高级主题,您不想将其用作入门方式。它会让你的事情变得更加困难。
我不是100%肯定这里发生了什么。我知道0x1786418是地址,0x40设置该地址的值。
除非逆向工程软件的人员出现在这里并对其进行解释,否则这就像这里的任何人都可以告诉你的那样。
但我不太确定
*(char*)
会做什么
这是一种获取地址并将其解释为指向字节的指针的方法(C中的char
s是1字节的内存)然后外部*
取消引用指针以允许修改指针引用的值,在这种情况下,设置为值0x40
。
0x40
如何打开超高速?
这非常特定于游戏本身。有人必须弄清楚玩家移动速度的数据存储在内存中的位置(特别是PS3)并以这种方式更新。
这样的事情很容易被一个简单的补丁打破,因为代码更改可能会使某些事情最终落在不同的地址,需要额外的逆向工程。
如果有人看到这个,并想知道如何设置声望或启用红色框或什么不生病解释如何(MW3将是我的例子)
所以对于一个声望,它会像*(char*)0x01C1947C = 20;
设置声望20,如果你不理解20你可以做20或0x14也等于声望20说你想要声望12你可以做12或0xC如果你不知道如何搜索你想要的声望然后在十六进制:)
现在对于像红盒子这样的东西(假设你知道bools / if语句和空白我不会只覆盖它们如何设置它)
现在你会做红盒子(启用)ps。 bytesOn可以被调用
char bytesOn[] = { 0x60, 0x00, 0x00, 0x00 };
write_process(0x65D14, bytesOn, sizeof(bytesOn));
whateverYourBoolIsCalled = true;
现在把它关闭工作相同,除了你必须得到其他字节:)
如果要在sprx中设置名称,请添加另外1个示例
char name[] = { "name here" };
write_process(0x01BBBC2C, name, sizeof(name));
这样做有更短的方法,但我认为这是理解这样做的最佳方式:)所以你这是我的tut :)