LOL Опубликовано 29 мая, 2016 Поделиться Опубликовано 29 мая, 2016 (изменено) Здравствуйте уважаемые пользователи данного форума я хочу создать свой трейнер для игры CS-Source В этом деле я новичок Подскажите пожалуйста как можно сделать трейнера с использованием модуля Client.dll + Адрес Если можно саму функцию для работы с модулями игры буду очень благодарен вам Изменено 29 мая, 2016 пользователем LOL Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 29 мая, 2016 Поделиться Опубликовано 29 мая, 2016 Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 29 мая, 2016 Автор Поделиться Опубликовано 29 мая, 2016 а можешь объяснить как с ней работать ? Вот сама функция да Скрытый текст function G_Base(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); SetLength(Modules, cbNeeded div SizeOf(HMODULE)); for i := 0 to Length(Modules) - 1 do begin GetModuleBaseName(PHandle, Modules[i], ModuleName, SizeOf(ModuleName)); if AnsiCompareText(MName, ModuleName) = 0 then begin GetModuleInformation(PHandle, Modules[i], @ModuleInfo, SizeOf(ModuleInfo)); Result := ModuleInfo.lpBaseOfDll; CloseHandle(PHandle); Exit; end; end; end; end; Вот это я так понимаю на кнопку да ? Скрытый текст var GAME_BasseAdress:Cardinal; ProcessId : Cardinal; begin GAME_BasseAdress:= $0+Ulong(G_Base(GameID,'Client.dll')); ShowMessage(IntToStr('$'+GAME_BasseAdress)); end; далее у меня есть функция записи по адресу Скрытый текст procedure WriteBytes(Address: Integer; WriteBytes: array of Byte); var pHandle: LongInt; NumWritten: DWORD_PTR; begin pHandle := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,False,GameID); if pHandle <> 0 then begin VirtualProtectEx(pHandle,Ptr(Address),SizeOf(WriteBytes),PAGE_EXECUTE_READWRITE,Protect_ON); WriteProcessMemory(pHandle,Ptr(Address),@WriteBytes,SizeOf(WriteBytes),NumWritten); VirtualProtectEx(pHandle,Ptr(Address),SizeOf(WriteBytes),Protect_OFF,Protect_ON); CloseHandle(pHandle); end; end; вот я не понял как работать с твоей функцией объясни по подробнее если можно примером допустим у меня модуль игры client.dll+F054E43 и байты 0x90 0x90 0c90 что дальше я просто в этом деле совсем новичок учусь только Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 30 мая, 2016 Поделиться Опубликовано 30 мая, 2016 почему делфиииии почееемммуууууу lulz на С это бы выглядело так: BYTE bOption1_ON[] = {0xFF}; DWORD_PTR aOption1; exeBase = (DWORD_PTR)GetModule(hProcess,L"client.dll") aOption1 = exeBase+0xF054E43; в кнопке: WriteProcMemory(aOption11,bOption1_ON,sizeof bOption1_ON); ... Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 30 мая, 2016 Автор Поделиться Опубликовано 30 мая, 2016 Уважаемы gmz тема называется Delphi trainer не понимаю зачем писать не по теме ? если ты программируешь на C++ отвечай только на темы где указано С++ но не как не Delphi мне твой ответ никак не помог и не поможет Ссылка на комментарий Поделиться на другие сайты Поделиться
afro228offical Опубликовано 31 мая, 2016 Поделиться Опубликовано 31 мая, 2016 22 часа назад, LOL сказал: Уважаемы gmz тема называется Delphi trainer не понимаю зачем писать не по теме ? если ты программируешь на C++ отвечай только на темы где указано С++ но не как не Delphi мне твой ответ никак не помог и не поможет Его советы помогают только избранным ) Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 31 мая, 2016 Поделиться Опубликовано 31 мая, 2016 В 30.05.2016в22:20, LOL сказал: Уважаемы gmz тема называется Delphi trainer не понимаю зачем писать не по теме ? если ты программируешь на C++ отвечай только на темы где указано С++ но не как не Delphi мне твой ответ никак не помог и не поможет Я программирую на PureBasic, но я ответил на твой вопрос. В 29.05.2016в18:57, LOL сказал: pHandle := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,False,GameID); И зачем, тебе каждый раз вызывать OpenProcess в WriteBytes? Если можно использовать переменную с параметром от OpenProcess? В 29.05.2016в18:57, LOL сказал: вот я не понял как работать с твоей функцией объясни по подробнее если можно примером Пример есть в ссылке, которую я дал, раз бери его. В 29.05.2016в18:57, LOL сказал: я просто в этом деле совсем новичок учусь только Ты новичок в чем в языке Delphi или написание трелеров? У меня аналог G_Base на PureBasic такой: Скрытый текст Procedure GetModuleBase(lpModuleName.s, dwProcessId.l) lpModuleEntry.MODULEENTRY32 hSnapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, dwProcessId) If hSnapShot = 0 ProcedureReturn #Null EndIf lpModuleEntry\dwSize = SizeOf(MODULEENTRY32) If Module32First_(hSnapShot, lpModuleEntry) While Module32Next_(hSnapShot, lpModuleEntry) If PeekS(@lpModuleEntry\szModule, -1, #PB_Ascii) = lpModuleName.s CloseHandle_(hSnapShot); ProcedureReturn lpModuleEntry\modBaseAddr EndIf Wend EndIf CloseHandle_(hSnapShot) ProcedureReturn #Null EndProcedure Если хочешь переписать на Delphi используй API Windows и поиск: Structure MODULEENTRY32 CreateToolhelp32Snapshot, TH32CS_SNAPMODULE Module32First Structure MODULEENTRY32 > szModule Structure MODULEENTRY32 > modBaseAddr офтоп Скрытый текст почему Cеееее почееемммуууууу gmz на Purebasice это бы выглядело так: bOption1_ON.b = $FF exeBase.l = GetModule(hProcess, "client.dll") aOption1 = exeBase+$F054E43 в кнопке: WriteProcMemory(aOption1,bOption1_ON,SizeOf(bOption1_ON)) Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 2 июня, 2016 Автор Поделиться Опубликовано 2 июня, 2016 Ребят ну кто нибудь покажет мне примером как работать с этой функцией ? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 3 июня, 2016 Поделиться Опубликовано 3 июня, 2016 Новичок и уже трейнеры хочешь делать хм ну ладно, тогда тебе надо сделать снимок модулей, перебрать и найти нужный, вернуть базовый адрес найденного модуля. Работать с ним. Тебе показали примеры рабочего кода поищи аналоги этих функций на delphi вот уже будет опыт. Помочь тебе помогут, если есть какие-нибудь наработки, а если хочешь исходник, то поищи в гугле или гитхабе их полным полно. Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 В 02.06.2016в08:53, partoftheworlD сказал: Ребят вот у меня есть client.dll+4C29C0 модуль игры который мне нужен плюс адрес не знаю может я что-то не так делаю у меня выдает в Message ноль помогите пожалуйста procedure TTrainer.SpeedButton4Click(Sender: TObject); var GAME_BasseAdress : Cardinal; begin GAME_BasseAdress := $0 + Ulong(G_Base(GameID, 'client.dll')); ShowMessage('$' + IntToStr(GAME_BasseAdress)); end; Что не так я делаю ? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 6 июня, 2016 Поделиться Опубликовано 6 июня, 2016 (изменено) 3 часа назад, LOL сказал: Что не так я делаю ? При запуске установи бряк перед ShowMessage и отладь GAME_BasseAdress := $0 + Ulong(G_Base(GameID, 'client.dll')); со вхождением в G_Base. Тут либо GameID не получаешь, либо G_Base не возвращает адрес. Подсказал бы еще что-нибудь, но делфи всего раз использовал во время учебы. Изменено 6 июня, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 ID процесса получаю а вот с адресом проблема ребят кто парит в Delphi помогите пожалуйста мне очень нужна эта функция то что я хочу изменить находится в client.dll + адрес Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 6 июня, 2016 Поделиться Опубликовано 6 июня, 2016 У тебя процесс открыт с правами? Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 Да Сейчас я выложу сюда исходник посмотришь что не так просто я уже не знаю что может быть не так Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 6 июня, 2016 Поделиться Опубликовано 6 июня, 2016 (изменено) var wBuff: byte; wHandle: integer; tHandle, ProcessID, pHandle, temp: cardinal; ...... wHandle := FindWindow(nil, 'Заголовок окна'); if wHandle <> 0 then begin tHandle := GetWindowThreadProcessId(wHandle, @ProcessID); pHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID); ReadProcessMemory(pHandle, ptr($0043231F), @wBuff, 1, temp); MessageBox(Form1.Handle, 'Ок', 'Ок', 0); CloseHandle(pHandle); end else begin MessageBox(Form1.Handle, 'Ошибка', 'Ошибка, 0); end; Вроде бы работать должно. Изменено 6 июня, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 У меня вот так сейчас покажу Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 (изменено) Вот исходник Клац Использую Delphi XE7 Изменено 6 июня, 2016 пользователем LOL Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 Исправь пожалуйста там если что-то не так в MemoryHack буду очень благодарен тебе за помощь Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 6 июня, 2016 Поделиться Опубликовано 6 июня, 2016 (изменено) У тебя Processmenager рассчитан только на .exe. Скрытый текст var mEntry : TModuleEntry32; .... begin Result := 0; Snap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessID); if Snap <> INVALID_HANDLE_VALUE then begin Process.dwSize := SizeOf(mEntry); if Process32First(Snap, Module) then repeat if lstrcmpi(mEntry.szModule, pchar(ModuleName)) = 0 then begin Result := mEntry.modBaseAddr; CloseHandle(Snap); Exit; end; until not Process32Next(Snap, Module); Result := 0; CloseHandle(Snap); end; Изменено 6 июня, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 А можешь пожалуйста сделать все как надо ? Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 У меня ошибки выдаёт вот тут Snap Process dwSize Module ModuleName я так понимаю нужны данные переменные а какого типа они ? Да вопрос вся проблема именно в том что у меня Processmenager рассчитан только на .exe ? Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 А все я понял это у меня эта функция сори Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 6 июня, 2016 Автор Поделиться Опубликовано 6 июня, 2016 Ребят ну что кто нибудь поможет мне или нет ? Ссылка на комментарий Поделиться на другие сайты Поделиться
LOL Опубликовано 7 июня, 2016 Автор Поделиться Опубликовано 7 июня, 2016 Ребят что никто не сможет помочь ? Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 7 июня, 2016 Поделиться Опубликовано 7 июня, 2016 LOL, иди на форум Delphi, там точно помогут, только не забудь выложить исходники, чтоб быстрей помогли и проблему опиши подробно. http://www.cyberforum.ru/delphi/ http://www.delphimaster.ru/forums.shtml http://www.delphisources.ru/forum/ P.S. Тут большая часть, пишут на С, С++, С# (((((. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения