游戏培训师发展

时间:2010-09-08 08:15:50

标签: delphi

目前我正在尝试在德尔福开发游戏培训师。 我有以下代码:

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;

现在我有一些问题:

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

我希望你能帮助我。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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