游戏教练发展

问题描述:

目前我正在试图在德尔福开发一个游戏教练。 我有下面的代码:游戏教练发展

var 
    WindowName : integer; 
    ProcessId : integer; 
    ThreadId : integer; 
    buf : PChar; 
    HandleWindow : Integer; 
    write : cardinal; 

Const WindowTitle = 'Starcraft'; //Whatever 

这些都是我的变量,现在我的功能:

const v1 = $90 
begin 
WindowName := FindWindow(nil,WindowTitle); 
    If WindowName = 0 then MessageDlg('The game has not been started yet..', mtwarning,[mbOK],0); 
    ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); 
    HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); 
    GetMem(buf,1); 
    buf^ := Chr(v1); 
    WriteProcessMemory(HandleWindow,ptr(/*$whatever*/),buf,1,write); 
    FreeMem(buf); 
    closehandle(HandleWindow); 
end; 

现在我已经得到了一些问题:

比方说,我发现了一个ADRESS ,一个程序来检查流程,这将负责我的游戏资金。有人告诉我,常数v1 = 90美元将使我的钱冻结。为什么这个常量会这样做,我如何在代码中实现它?我已经尝试将我的地址插入到我写入/ $ whatever /的地方,但这不起作用。

我希望你能帮助我。

谢谢你的帮助。

90美元是汇编器NOP指令,它在英特尔处理器上什么也不做。它看起来像你的程序被设计成写入正在运行的游戏的程序存储器,并用NOP指令替换指定地址处的指令以改变程序行为。在这种情况下,修改程序中为玩游戏的用户减去金钱的部分。一种内存补丁。

请注意,自Delphi 2009和Unicode支持字符的大小不再是1时,这是一个问题,当你想用它来修改单个字节。尝试将buf类型更改为AnsiChar并将buf ^分配给AnsiChar(v1)。