标签: cheat-engine

在C#中使用Cheat Engine中的指针

关于该计划

我有一个程序写入我正在试验的游戏的记忆.当我使用常规静态地址时,代码对我很有用,但出于某种原因,一旦找到工作指针,我似乎无法做到这一点.例如,我在指针扫描几次后在Cheat Engine中找到了这个:

在此输入图像描述

每次加载游戏并编辑值时,此地址都有效.问题是我不明白如何在我的程序中使用它.这是我尝试插入值的声明变量:

bool UnlimitedAmmo = false;
string AmmoPointer = "031B7324"; // <--- The address
int[] AmmoOffset = { 0x2c, 0x1e8, 0x3c8, 0x6d4, 0x508 }; // <--- It's pointers
int AmmoToFill = 1337; // <--- The Amount of ammo to give
Run Code Online (Sandbox Code Playgroud)

我传递这些变量如下:

MyMemory.ReadProcess = MyProcess[0];
MyMemory.Open();

int PointerAddress = HexToDec(AmmoPointer);
int[] PointerOffest = AmmoOffset;
int BytesWritten;
byte[] ValueToWrite = BitConverter.GetBytes(AmmoToFill);
string WrittenAddress = MyMemory.PointerWrite((IntPtr)PointerAddress, ValueToWrite, 
  PointerOffest, out BytesWritten);
MyMemory.CloseHandle();
Run Code Online (Sandbox Code Playgroud)

我曾经使用静态地址(对于不同的游戏),一旦插入地址和偏移量,我的代码工作正常.这次我很难过.任何帮助和解释都将深表感谢.提前致谢.

c# memory pointers cheat-engine

13
推荐指数
1
解决办法
5185
查看次数

查找指针'找出写入此地址的内容'奇怪的偏移量

我正在尝试为UrbanTerror42找到一个基本指针.我的设置如下,我有一个有2个玩家的服务器.作弊引擎在客户端运行a.我用客户端b爬梯子,然后扫描增加/减少.当我找到这些值时,我会使用find out what writes to this address.但偏移非常高,并指向空记忆.我真的不知道如何继续

为了清楚起见,我查找了其他几个值,他们也遇到了同样的问题

我已经看了很多教程和论坛,但这总是关于偏移量在0到100而不是80614之间的值.

如果有人能告诉我为什么会这样,以及我必须做什么/学会如何继续,我将非常感激.

在此输入图像描述

在此输入图像描述

提前致谢

pointers offset cheat-engine

6
推荐指数
1
解决办法
531
查看次数

代码生成中的作弊预防

这种反作弊技术是否适用于使用私人服务器的多人游戏(公开未知的可执行文件):

当客户启动游戏时,它将每天自动更新(使用启动器).服务器也会自行更新.除非有真正的补丁,否则更新仅包含游戏对象内存布局,网络代码和着色器中的更改.这是使用自动生成和随机化(C++)类的自动化系统完成的.也许它还可以在层次结构中添加假对象,以使识别对象更难.

这样我希望比破解者更快地更新游戏,并且将反向工程,更新和发布/更新新的作弊.

这会起作用还是黑客能以某种方式解决这个机制?他们会每天做这项工作还是可以在某些时候自动完成?我该怎么做才能改进这个系统?

似乎随机化内存布局在长期内没有帮助,因为可以通过跟随可执行文件中的函数调用并从该代码中提取指针偏移来或多或少地轻松地提取布局.因此,为了有效地防止这种情况,调用结构和代码本身也需要随机化.

有没有很好的方法呢?这对自动化破解是否有效?

c++ multiplayer anti-cheat cheat-engine

5
推荐指数
1
解决办法
747
查看次数

如何找到具有负偏移的基础结构地址

我使用CE对旧游戏进行逆向工程.我找到了修改单元HP的代码,但我找不到基址,因为偏移是负的.

操纵杆:

问题是我甚至不知道它是如何工作的,这对我来说听起来很愚蠢,为什么编译器/ dev会这样做呢?它是一种堆栈临时指针吗?有没有办法找到它?(我很确定有一种方法)这是令人沮丧的,因为我发现像ID,HP和东西的偏移,但基础...我通常没有问题,抵消是积极的.

我认为基地将是一些东西[esi-STRUCTURE_SIZE] ,最后一项将是[esi]

或者也许我完全错了.

谢谢 :)

assembly reverse-engineering cheat-engine

5
推荐指数
1
解决办法
630
查看次数

ReadWriteMemory 将内存读取为 int 而不是 float

from ReadWriteMemory import ReadWriteMemory

rwm = ReadWriteMemory()

process = rwm.get_process_by_name("javaw.exe")
process.open()
module_base = 0x6FBB0000
static_address_offset = 0x007FD7C0
static_address = module_base + static_address_offset
pitch_pointer = process.get_pointer(static_address, offsets=[0xB8, 0x1C8, 0x1C8, 0x1D0, 0x178, 0xAC, 0x8C])
camera_pitch = process.read(pitch_pointer)
print(camera_pitch)
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用我在作弊引擎中获得的指针获取相机间距,并且脚本工作正常,但相机间距是一个浮点值,同时process.read(pitch_pointer)返回一个 int,例如设置 camera_pitch为 1108138163 而不是 35.2。找不到如何在任何地方获得浮点数。

python cheat-engine

5
推荐指数
1
解决办法
35
查看次数

理解内存 - 游戏黑客

我正在尝试开始学习如何用 C++ 编写游戏秘籍。但目前我想了解内存的布局等 - 我有几个问题要问,并将使用游戏Assault Cube作为参考。请帮助我并以简单的形式解释任何内容。我是新的。

1)假设图像基址ac_client.exe0x4000000- 这是否仅仅意味着进程的开头分配在该内存地址?

2) 接下来是 Image Base + Offset ( &ac_client.exe + 0x10F4F4) - 偏移量是否意味着它将您从起点带到流程内的某个位置或功能?

3) 在作弊引擎中,我加载了 Assault Cube。我寻找我的健康价值。我找到了健康的动态地址。现在我需要找到静态地址,因为没有直接指向健康的指针,我点击“查找访问此地址的内容”选项 - 这是否意味着我正在尝试找到一个正在使用或传递我的动态健康的函数多变的?

4) 找到健康值的静态地址后。我找到了偏移量0xF8。另外ac_client.exe + 0x10F4F4-> 0x50F4F4- 人们说这0x50F4F4是本地玩家基类,但如果我没有被告知,我怎么知道这一点?这是否也意味着所有游戏变量都在类中?

仍然有点困惑,有人可以解释一下它是如何在视觉上工作的。

reverse-engineering cheat-engine

4
推荐指数
1
解决办法
3502
查看次数

在正在运行的进程中给出其地址,在可执行文件中查找指令?

我正在修改一个旧的放弃软件游戏,以获得无限生命.

具有该指令的地址dec ecx与其在.exe调试中的位置不同.

我记得我的一位老朋友告诉我,有一个公式可以通过.exe中的指令获得"真实"地址.作弊引擎给了我内存地址.我记得在数学公式中,我需要得到模块,在OllyDbg我得到它.但我不记得这个公式.有人知道那个数学公式怎么样?这个公式非常简单!还有另一种方法可以让文件位置永久修改.exe吗?

assembly reverse-engineering memory-address portable-executable cheat-engine

2
推荐指数
1
解决办法
2426
查看次数

Python - 如何获取内存地址处的值?

我试图让 Python 从诸如 0x101BFFDC 之类的地址获取值/数据,这是我通过使用游戏作弊引擎找到的。我做了很多研究,并相信我需要使用ReadProcessMemory. 但是,我尝试了几个示例都没有成功。

例如,我找到了以下代码:

from ctypes import *
from ctypes.wintypes import *
import struct

OpenProcess = windll.kernel32.OpenProcess
ReadProcessMemory = windll.kernel32.ReadProcessMemory
CloseHandle = windll.kernel32.CloseHandle

PROCESS_ALL_ACCESS = 0x1F0FFF

pid = 10684 # pid of the game
address = 0x101BFFDC # I put the address here

buffer = c_char_p(b"The data goes here")
val = c_int()
bufferSize = len(buffer.value)
bytesRead = c_ulong(0)

processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
if ReadProcessMemory(processHandle, address, buffer, bufferSize, byref(bytesRead)):
    memmove(ctypes.byref(val), buffer, ctypes.sizeof(val))
    print("Success:" + str(val.value)) …
Run Code Online (Sandbox Code Playgroud)

python memory windows ctypes cheat-engine

2
推荐指数
1
解决办法
6565
查看次数

c#多级指针,内存读取

我找到了一个完美适用于静态地址的代码。

但是,我将如何更改此代码以使其适用于指针?我需要从这个指针获得价值: 0x1002CAA70 + 0x10 + 0x18 + 0x0 + 0x18

它适用于 64 位应用程序。

public class Program
{
    private const int PROCESS_WM_READ = 0x0010;

    [DllImport("kernel32.dll")]
    public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

    [DllImport("kernel32.dll")]
    public static extern bool ReadProcessMemory(int hProcess,
    Int64 lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);

    static void Main(string[] args)
    {
        Process process      = Process.GetProcessesByName("Tutorial-x86_64")[0];
        IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id);

        int bytesRead = 0;
        var buffer = new byte[4];

        ReadProcessMemory((int)processHandle, 0x0011D598, buffer, buffer.Length, …
Run Code Online (Sandbox Code Playgroud)

c# pointers readprocessmemory cheat-engine

2
推荐指数
1
解决办法
3044
查看次数

Unity3D 速度黑客检测

我想知道,有没有什么方法可以在我们的游戏中检测到诸如游戏守护者之类的速度黑客应用程序?

我在互联网上搜索了所有内容,但没有得到满意的答案。

c# scripting detection unity-game-engine cheat-engine

2
推荐指数
1
解决办法
2770
查看次数

汇编 x86 ADD 命令

我正在尝试学习汇编,因为我觉得当我开始我的 CS 课程时会有所帮助,这些课程涉及较低级别的语言和材料(C 是我迄今为止学到的最低的)。

为此,我使用 CE 并查看一些较旧的简单游戏中的内存地址和汇编命令。基本上通过破解旧游戏来学习组装。

有一个命令看起来像这样:

add [eax], ecx
Run Code Online (Sandbox Code Playgroud)

根据我的理解, add 会将两个参数加在一起并将它们存储到第一个参数中,而 [ ] 本质上是一种尊重。

那么它是将eax 的值和ecx 的地址相加并存储到eax 中,还是将它们存储到eax 持有的地址中?

如果有帮助,这里是地址:

eax =   00EFA188
ecx =   00000014
Run Code Online (Sandbox Code Playgroud)

memory assembly cheat-engine

1
推荐指数
1
解决办法
1754
查看次数

从作弊引擎到 C++ 的指针

我正在寻找一种将指针地址从作弊引擎传递到一行代码的方法。

作弊引擎地址是P->0C86D240。

代码行如下:

WriteProcessMemory(handle,(LPVOID)P->0C86D240,).
Run Code Online (Sandbox Code Playgroud)

最后我想改变指针地址的值。

更新:我将 P-> 更改为 0x0C86D240,并且我能够为游戏的该会话写入内存。关闭然后再次打开时,十六进制数字不同

c++ cheat-engine

0
推荐指数
1
解决办法
9305
查看次数

查看内存中的双变量

我正在研究程序如何在内存中保存数据.所以我创建了一个包含全局双变量的简单程序:

#include <iostream>
#include <conio.h>

using namespace std;

double b = 512;

int main(){
    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我想从任何读取内存的程序(在我的案例中为CheatEngine)中搜索内存中的这个双变量时,我看到一些不清楚的东西.

CheatEngine在内存中找到512:

第一张图片

当我将其转换为十六进制时,它显示:

第二张图片

当我在内存中浏览此变量的位置时,它就像:

第3张图片

所以我将512从十进制转换为十六进制,它是200,但在第二张图片中没有类似的200.

第二张图片中的4080000000000000是多少,它是如何等于512的?

c++ memory double cheat-engine

-6
推荐指数
1
解决办法
1444
查看次数