Гость Grigory96 Опубликовано 16 июня, 2014 Поделиться Опубликовано 16 июня, 2014 Вопрос такой: В Cheat Engine есть такая фишка, при добавлении нового адреса в таблицу (при запущеной игре), допустим: " igra.exe " , в таблице получаем вместо " igra.exe " адрес. ( и на разных Windows этот адрес разный). Так вот..... как получить этот адрес по имени процесса средствами Дельфи.. вобщем нужна помощь в реализации примерно такой функции: function igra.exe: dword; => где мы получаем этот адрес (думается мне что этот адрес указывает на начало процесса в общей памяти,,,, возможно я и не прав) ... либо хотя бы подскажите куда курить ( только желательно не из далека ... так сказать поближе в нужное русло) . Ссылка на комментарий Поделиться на другие сайты Поделиться
Maxs Опубликовано 16 июня, 2014 Поделиться Опубликовано 16 июня, 2014 Нет?http://forum.gamehacklab.ru/forum/4-вопросы-по-созданиюпрограммированию-трейнероВопрос такой: В Cheat Engine есть такая фишка, при добавлении нового адреса в таблицу (при запущеной игре), допустим: " igra.exe " , в таблице получаем вместо " igra.exe " адрес. ( и на разных Windows этот адрес разный). Так вот..... как получить этот адрес по имени процесса средствами Дельфи.. вобщем нужна помощь в реализации примерно такой функции: function igra.exe: dword; => где мы получаем этот адрес (думается мне что этот адрес указывает на начало процесса в общей памяти,,,, возможно я и не прав) ... либо хотя бы подскажите куда курить ( только желательно не из далека ... так сказать поближе в нужное русло) .ладно, помогу чем смогу я сегодня добрыйUses tlhelp32...var hSnap:THandle; pe:TProcessEntry32; pid: DWORD;beginpe.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 в простонародье... Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 16 июня, 2014 Поделиться Опубликовано 16 июня, 2014 Нет?http://forum.gamehacklab.ru/forum/4-вопросы-по-созданиюпрограммированию-трейнероладно, помогу чем смогу я сегодня добрыйUses tlhelp32...var hSnap:THandle; pe:TProcessEntry32; pid: DWORD;beginpe.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 в простонародье... а полное название ProcessID)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Maxs Опубликовано 16 июня, 2014 Поделиться Опубликовано 16 июня, 2014 а полное название ProcessID))PID звучит лучше. ИМХО. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Grigory96 Опубликовано 16 июня, 2014 Поделиться Опубликовано 16 июня, 2014 не... мне PID не нужен....http://hkar.ru/ttv6http://hkar.ru/ttvkhttp://hkar.ru/ttvo Ссылка на комментарий Поделиться на другие сайты Поделиться
DenkA003 Опубликовано 16 июня, 2014 Поделиться Опубликовано 16 июня, 2014 не... мне PID не нужен....http://hkar.ru/ttv6http://hkar.ru/ttvkhttp://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); Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Grigory96 Опубликовано 16 июня, 2014 Поделиться Опубликовано 16 июня, 2014 аа тебе нужен стартовый адрес процесса ?Вот тебе Функция 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);....да....по моему это то что нужно ......пойду курить код.....Спасибо за помощь ! Ссылка на комментарий Поделиться на другие сайты Поделиться
Maxs Опубликовано 16 июня, 2014 Поделиться Опубликовано 16 июня, 2014 ....да....по моему это то что нужно ......пойду курить код.....Спасибо за помощь !не можешь понять работу функции? лол.Чувак, прости, но чтобы писать трейнера на делфи нужно знать хотябы основы, а не "курить" их. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения