游戏教练发展
问题描述:
目前我正在试图在德尔福开发一个游戏教练。 我有下面的代码:游戏教练发展
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)。