2010-09-08 55 views
0

目前我正在試圖在德爾福開發一個遊戲教練。 我有下面的代碼:遊戲教練發展

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 /的地方,但這不起作用。

我希望你能幫助我。

謝謝你的幫助。

回答

1

90美元是彙編器NOP指令,它在英特爾處理器上什麼也不做。它看起來像你的程序被設計成寫入正在運行的遊戲的程序存儲器,並用NOP指令替換指定地址處的指令以改變程序行爲。在這種情況下,修改程序中爲玩遊戲的用戶減去金錢的部分。一種內存補丁。

請注意,自Delphi 2009和Unicode支持字符的大小不再是1時,這是一個問題,當你想用它來修改單個字節。嘗試將buf類型更改爲AnsiChar並將buf ^分配給AnsiChar(v1)。