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

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

Здравствуйте уважаемые пользователи данного форума я хочу создать свой трейнер для игры CS-Source

В этом деле я новичок Подскажите пожалуйста как можно сделать трейнера с использованием модуля Client.dll + Адрес 

Если можно саму функцию для работы с модулями игры 
буду очень благодарен вам 

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

а можешь объяснить как с ней работать  ? 

Вот сама функция да 
 

Скрытый текст

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 
что дальше 
я просто в этом деле совсем новичок учусь только 

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

почему делфиииии почееемммуууууу 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);
...

 

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

Уважаемы gmz тема называется Delphi trainer не понимаю зачем писать не по теме ? если ты программируешь на C++ отвечай только на темы где указано С++ но не как не Delphi мне твой ответ никак не помог и не поможет 

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

22 часа назад, LOL сказал:

Уважаемы gmz тема называется Delphi trainer не понимаю зачем писать не по теме ? если ты программируешь на C++ отвечай только на темы где указано С++ но не как не Delphi мне твой ответ никак не помог и не поможет 

Его советы помогают только избранным )

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

 

В 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))

 

 

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

Новичок и уже трейнеры хочешь делать хм ну ладно, тогда тебе надо сделать снимок модулей, перебрать и найти нужный, вернуть базовый адрес найденного модуля. Работать с ним. Тебе показали примеры рабочего кода поищи аналоги этих функций на delphi вот уже будет опыт. Помочь тебе помогут, если есть какие-нибудь наработки, а если хочешь исходник, то поищи в гугле или гитхабе их полным полно.

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

В 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;

Что не так я делаю ? 

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

3 часа назад, LOL сказал:

Что не так я делаю ? 

При запуске установи бряк перед ShowMessage и отладь

GAME_BasseAdress := $0 + Ulong(G_Base(GameID, 'client.dll'));

со вхождением в G_Base. Тут либо GameID не получаешь, либо G_Base не возвращает адрес.

Подсказал бы еще что-нибудь, но делфи всего раз использовал во время учебы.

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

ID процесса получаю а вот с адресом проблема ребят кто парит в Delphi помогите пожалуйста мне очень нужна эта функция то что я хочу изменить находится в client.dll + адрес

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

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;

Вроде бы работать должно.

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

У тебя 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;

 

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

У меня ошибки выдаёт вот тут 
Snap
Process
dwSize
Module
ModuleName
я так понимаю нужны данные переменные а какого типа они ? 

Да вопрос вся проблема именно в том что у меня  Processmenager рассчитан только на .exe ?

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

LOL, иди на форум Delphi,  там точно помогут, только не забудь выложить исходники, чтоб быстрей помогли и проблему опиши подробно.

http://www.cyberforum.ru/delphi/

http://www.delphimaster.ru/forums.shtml

http://www.delphisources.ru/forum/

 

P.S. Тут большая часть, пишут на С, С++, С#  (((((.

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

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

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

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