Перейти к содержанию

Вопрос к Делферам


Рекомендуемые сообщения

Вопрос такой:

В Cheat Engine есть такая фишка, при добавлении нового адреса в таблицу (при запущеной игре), допустим: " igra.exe " , в таблице получаем вместо " igra.exe " адрес. ( и на разных Windows этот адрес разный).

Так вот..... как получить этот адрес по имени процесса средствами Дельфи..

вобщем нужна помощь в реализации примерно такой функции:

function igra.exe: dword; => где мы получаем этот адрес (думается мне что этот адрес указывает на начало процесса в общей памяти,,,,

возможно я и не прав)

... либо хотя бы подскажите куда курить ( только желательно не из далека ... так сказать поближе в нужное русло) .

Ссылка на комментарий
Поделиться на другие сайты

Нет?

http://forum.gamehacklab.ru/forum/4-вопросы-по-созданиюпрограммированию-трейнеро

Вопрос такой:

В Cheat Engine есть такая фишка, при добавлении нового адреса в таблицу (при запущеной игре), допустим: " igra.exe " , в таблице получаем вместо " igra.exe " адрес. ( и на разных Windows этот адрес разный).

Так вот..... как получить этот адрес по имени процесса средствами Дельфи..

вобщем нужна помощь в реализации примерно такой функции:

function igra.exe: dword; => где мы получаем этот адрес (думается мне что этот адрес указывает на начало процесса в общей памяти,,,,

возможно я и не прав)

... либо хотя бы подскажите куда курить ( только желательно не из далека ... так сказать поближе в нужное русло) .

ладно, помогу чем смогу :-D я сегодня добрый


Uses tlhelp32

...

var
hSnap:THandle;
pe:TProcessEntry32;
pid: DWORD;
begin
pe.dwSize:=SizeOf(pe);
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
If Process32First(hSnap,pe) then
While Process32Next(hSnap,pe) do
if ExtractFileName(pe.szExeFile)='mRemote.exe' then
showmessage(IntToStr(pe.th32ProcessID));

Адрес процесса называется PID в простонародье... 8-)

Ссылка на комментарий
Поделиться на другие сайты

Нет?

http://forum.gamehacklab.ru/forum/4-вопросы-по-созданиюпрограммированию-трейнеро

ладно, помогу чем смогу :-D я сегодня добрый


Uses tlhelp32

...

var
hSnap:THandle;
pe:TProcessEntry32;
pid: DWORD;
begin
pe.dwSize:=SizeOf(pe);
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
If Process32First(hSnap,pe) then
While Process32Next(hSnap,pe) do
if ExtractFileName(pe.szExeFile)='mRemote.exe' then
showmessage(IntToStr(pe.th32ProcessID));

Адрес процесса называется PID в простонародье... 8-)

а полное название ProcessID))

Ссылка на комментарий
Поделиться на другие сайты

не... мне PID не нужен....

http://hkar.ru/ttv6

http://hkar.ru/ttvk

http://hkar.ru/ttvo

аа тебе нужен стартовый адрес процесса ?

Вот тебе Функция



Uses psapi,TlHelp32 ;

var
Form1: TForm1;
prID: Cardinal;


function GetModuleBaseAddress(ProcessID: Cardinal; MName: String): Pointer;
var
Modules : Array of HMODULE;
cbNeeded, i : Cardinal;
ModuleInfo : TModuleInfo;
ModuleName : Array[0..MAX_PATH] of Char;
PHandle : THandle;
begin
Result := nil;
SetLength(Modules, 1024);
PHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, False, ProcessID);
if (PHandle <> 0) then
begin
EnumProcessModules(PHandle, @Modules[0], 1024 * SizeOf(HMODULE), cbNeeded); //Getting the enumeration of modules
SetLength(Modules, cbNeeded div SizeOf(HMODULE)); //Setting the number of modules
for i := 0 to Length(Modules) - 1 do //Start the loop
begin
GetModuleBaseName(PHandle, Modules[i], ModuleName, SizeOf(ModuleName)); //Getting the name of module
if AnsiCompareText(MName, ModuleName) = 0 then //If the module name matches with the name of module we are looking for...
begin
GetModuleInformation(PHandle, Modules[i], @ModuleInfo, SizeOf(ModuleInfo)); //Get the information of module
Result := ModuleInfo.lpBaseOfDll; //Return the information we want (The image base address)
CloseHandle(PHandle);
Exit;
end;
end;
end;
end;

function GetProcess(FileName: string): Cardinal;
var
hSnap:THandle;
prEntry:PROCESSENTRY32;
begin
Result:=0;
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
prEntry.dwSize:=SizeOf(prEntry);
If Process32First(hSnap,prEntry) then
begin
While Process32Next(hSnap,prEntry) do
Begin
If prEntry.szExeFile = FileName then
Result:=Cardinal(prEntry.th32ProcessID);
End;
end;
CloseHandle(hSnap);
end;

Использование :


const
ProcessName='TERA.exe';
var
ReadBaseAdressHex:string;
begin
prID:=GetProcess(ProcessName);
ReadBaseAdressHex:= IntToHex(Ulong(GetModuleBaseAddress((prID),ProcessName)),Length(ReadBaseAdressHex));
Edit1.Text := ReadBaseAdressHex;
end;
procedure TForm1.Button1Click(Sender: TObject);

Ссылка на комментарий
Поделиться на другие сайты

аа тебе нужен стартовый адрес процесса ?

Вот тебе Функция



Uses psapi,TlHelp32 ;

var
Form1: TForm1;
prID: Cardinal;


function GetModuleBaseAddress(ProcessID: Cardinal; MName: String): Pointer;
var
Modules : Array of HMODULE;
cbNeeded, i : Cardinal;
ModuleInfo : TModuleInfo;
ModuleName : Array[0..MAX_PATH] of Char;
PHandle : THandle;
begin
Result := nil;
SetLength(Modules, 1024);
PHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, False, ProcessID);
if (PHandle <> 0) then
begin
EnumProcessModules(PHandle, @Modules[0], 1024 * SizeOf(HMODULE), cbNeeded); //Getting the enumeration of modules
SetLength(Modules, cbNeeded div SizeOf(HMODULE)); //Setting the number of modules
for i := 0 to Length(Modules) - 1 do //Start the loop
begin
GetModuleBaseName(PHandle, Modules[i], ModuleName, SizeOf(ModuleName)); //Getting the name of module
if AnsiCompareText(MName, ModuleName) = 0 then //If the module name matches with the name of module we are looking for...
begin
GetModuleInformation(PHandle, Modules[i], @ModuleInfo, SizeOf(ModuleInfo)); //Get the information of module
Result := ModuleInfo.lpBaseOfDll; //Return the information we want (The image base address)
CloseHandle(PHandle);
Exit;
end;
end;
end;
end;

function GetProcess(FileName: string): Cardinal;
var
hSnap:THandle;
prEntry:PROCESSENTRY32;
begin
Result:=0;
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
prEntry.dwSize:=SizeOf(prEntry);
If Process32First(hSnap,prEntry) then
begin
While Process32Next(hSnap,prEntry) do
Begin
If prEntry.szExeFile = FileName then
Result:=Cardinal(prEntry.th32ProcessID);
End;
end;
CloseHandle(hSnap);
end;

Использование :


const
ProcessName='TERA.exe';
var
ReadBaseAdressHex:string;
begin
prID:=GetProcess(ProcessName);
ReadBaseAdressHex:= IntToHex(Ulong(GetModuleBaseAddress((prID),ProcessName)),Length(ReadBaseAdressHex));
Edit1.Text := ReadBaseAdressHex;
end;
procedure TForm1.Button1Click(Sender: TObject);

....да....по моему это то что нужно ......пойду курить код.....

Спасибо за помощь !

Ссылка на комментарий
Поделиться на другие сайты

....да....по моему это то что нужно ......пойду курить код.....

Спасибо за помощь !

не можешь понять работу функции? лол.

Чувак, прости, но чтобы писать трейнера на делфи нужно знать хотябы основы, а не "курить" их.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.