Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2015, 19:21   #1
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию Поиск адреса dll

Доброго времени суток
Пытаюсь изменить значение игры ''cs:go'' ,но возникла проблема нахождения адреса он находиться таким образом client.dll+$A64B28 где Client это адрес начало dll + $A64B28 статичное смешение.Хочу чтобы программа находила это значение адреса библиотки сама ,так как каждый раз перекомпилировать программу не хочется




Код:
var
v:HWnd;
ProcessId, hProcess: integer;
BC,wh,hClient: dword;
begin
v:=FindWindow('Valve001','Counter-Strike: Global Offensive'); // ишем handle окна
If v = 0 then
begin
MessageDlg('Игра должна быть запушена! запустите ее,потом трейнер', mtwarning,[mbOK],0);
end
else
begin
GetWindowThreadProcessId(v,@ProcessId); // ищем pid окна
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessId); // хендл процесса
If hProcess <> 0 then
begin
wh:=2;
//hClient:= GetModuleHandle('client.dll');
//showmessage(inttostr(hClient));
WriteProcessMemory(hProcess,ptr($21A64B28{*$21A64B28 этот адрес меняется}+$A64B28),@wh,SizeOf(wh),BC); // drawmodels 2
end
else
MessageDlg('Ошибка: Не получен хендл процесса! Запустите трейнер от имени администратора!', mtwarning,[mbOK],0);
//$A64B28
end;
end;
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.

Последний раз редактировалось Binary_Dll; 10.02.2015 в 19:26.
Binary_Dll вне форума Ответить с цитированием
Старый 10.02.2015, 22:07   #2
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

И в чем проблема?
ДралсяСошибками вне форума Ответить с цитированием
Старый 10.02.2015, 22:32   #3
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от ДралсяСошибками Посмотреть сообщение
И в чем проблема?
Как найти адрес client.dll ? Ведь, он изменяется при каждом перезапуске игры и с помощью его находиться адрес который я хочу изменить.
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.
Binary_Dll вне форума Ответить с цитированием
Старый 10.02.2015, 23:00   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Почитать про устройство PE-файла и про то, как он грузится в память.

В какой это ОС адрес каждый раз другой? Неужто ASLR работает? Для целей отладки можно временно ASLR отключить для программы, если он вообще отключается, но чтения теории это всё равно не отменяет.
Vapaamies вне форума Ответить с цитированием
Старый 10.02.2015, 23:00   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Ну вот ты какой то же прогой находишь адрес, сделай себе такую же, она же наверно показывает таблицу импорта.
ДралсяСошибками вне форума Ответить с цитированием
Старый 11.02.2015, 10:14   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Найдите ImageBase этой DLL, это и есть адрес загрузки DLL(читайте PE Header уже загруженной библиотеки). Загрузчик Windows грузит DLL по другому адресу если указанный ImageBase уже занят, добавляете свои статические байты и попадаете куда нужно. Но вообще очень сомневаюсь, что смещение статическое.
Вы точно-точно уверены, что там не указатель?
Человек_Борща вне форума Ответить с цитированием
Старый 11.02.2015, 21:58   #7
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от ДралсяСошибками Посмотреть сообщение
Ну вот ты какой то же прогой находишь адрес, сделай себе такую же, она же наверно показывает таблицу импорта.
Спасибо за идею проблему решил этой функцией
Функция GetModuleFileNameEx
Синтаксис на С++

DWORD WINAPI GetModuleFileNameEx (
_In_ HANDLE hProcess,
_In_opt_ HMODULE HMODULE,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);

Параметры

hProcess [в]
Ручка с процессом, который содержит модуль.
Ручка должна иметь PROCESS_QUERY_INFORMATION и PROCESS_VM_READ права доступа. Для получения дополнительной информации см процесса обеспечения безопасности и права доступа .
GetModuleFileNameEx функция не возвращает путь для модулей, которые были загружены с помощью LOAD_LIBRARY_AS_DATAFILE флаг. Для получения дополнительной информации см LoadLibraryEx .
HMODULE [в, по выбору]
Ручка к модулю. Если этот параметр NULL, GetModuleFileNameEx возвращает путь к исполняемому файлу процесса, указанного в hProcess .
lpFilename [из]
Указатель на буфер, который получает полный путь к модулю. Если размер имени файла больше, чем значение nSize параметра, функция завершается успешно, но имя файла усекается и нулем.
nSize [в]
Размер lpFilename буфера, в символах.
т.к ее используют для получения списка модулей процесса.Как в той программе через которую я находил базовые адреса.

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Почитать про устройство PE-файла и про то, как он грузится в память.

В какой это ОС адрес каждый раз другой? Неужто ASLR работает? Для целей отладки можно временно ASLR отключить для программы, если он вообще отключается, но чтения теории это всё равно не отменяет.
Так же почитал про ''Portable Executable'' узнал много нового

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Найдите ImageBase этой DLL, это и есть адрес загрузки DLL(читайте PE Header уже загруженной библиотеки). Загрузчик Windows грузит DLL по другому адресу если указанный ImageBase уже занят, добавляете свои статические байты и попадаете куда нужно. Но вообще очень сомневаюсь, что смещение статическое.
Вы точно-точно уверены, что там не указатель?
Да ,к счастью смешение не меняется при перезапуске игры)

Вот рабочий код
Код:
// uses psapi;
var
v:HWnd;
ProcessId, hProcess: integer;
BC,wh,hClient,cb: dword;
hMod:array[0..400] of HMODULE;
i:byte;
begin
v:=FindWindow('Valve001','Counter-Strike: Global Offensive'); // ишем handle окна
If v = 0 then
begin
MessageDlg('Игра должна быть запушена! запустите ее,потом трейнер', mtwarning,[mbOK],0);
end
else
begin
GetWindowThreadProcessId(v,@ProcessId); // ищем pid окна
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessId); // хендл процесса
If hProcess <> 0 then
begin
wh:=2;
 for i:=1 to 140 do
 EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);// базовый адрес dll
//hClient:= GetModuleHandle('client.dll');
//showmessage(inttostr(hMod[136]));// для проверки значений адреса выведет в 10 системе
WriteProcessMemory(hProcess,ptr(hMod[136]+$A64B28),@wh,SizeOf(wh),BC); // drawmodels 2
end
else
MessageDlg('Ошибка: Не получен хендл процесса! Запустите чит от имени администратора!', mtwarning,[mbOK],0);
//$A64B28
end;
end;
номер элемента массива, это номер уровня dll

Осталась сделать кое-что доделать что бы переменные не занимали много памяти и все
Всем спасибо, вопрос решен )
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.
Binary_Dll вне форума Ответить с цитированием
Старый 12.02.2015, 12:48   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Знаешь, автор, читерам нормальные программисты помогать не будут. Они их [цензура] пошлють, пинком под задницу.

Код:
Единственная вещь, которая губит любые онлайн игры, быстрее чем донат - это читеры.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.

Последний раз редактировалось Serge_Bliznykov; 12.02.2015 в 19:43.
саша40 вне форума Ответить с цитированием
Старый 12.02.2015, 13:11   #9
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
Знаешь, автор, читерам нормальные программисты помогать не будут. Они их [цензура] пошлють, пинком под задницу.

Код:
Единственная вещь, которая губит любые онлайн игры, быстрее чем донат - это читеры.
Молодец, одним своим мудрым сообщением, ты прям взял и осадил всех читеров мира.

Последний раз редактировалось Serge_Bliznykov; 12.02.2015 в 19:43.
ДралсяСошибками вне форума Ответить с цитированием
Старый 12.02.2015, 19:28   #10
Binary_Dll
Пользователь
 
Регистрация: 10.02.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
Знаешь, автор, читерам нормальные программисты помогать не будут. Они их [цензура] пошлють, пинком под задницу.

Код:
Единственная вещь, которая губит любые онлайн игры, быстрее чем донат - это читеры.
Знаешь если бы я хотел сделать чит я бы постарался перехватить функцию
отвечающую за прорисовку в игре и нарисовал квадраты на модельках игроков ,а я ради интереса работы с адресами ,и не переживай я не такой ламер что бы играть с читами и полностью согласен с тобой Да и не охота Vac ban получить )
Кстати это странно что они не убрали эту уязвимость, она была на всех играх на движке hl2
В мире есть 10 категорий людей – те, кто знают про двоичное счисление и те кто нет.

Последний раз редактировалось Serge_Bliznykov; 12.02.2015 в 19:43.
Binary_Dll вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск почтового адреса на странице (по шаблону) Leanmanager JavaScript, Ajax 1 21.07.2013 11:23
Поиск по ячейкам и вывод информации в зависимости от адреса найденной ячейки (формула) alexbioz Microsoft Office Excel 4 27.01.2012 21:42
Поиск адреса ЛПТ порта Ma3a Общие вопросы Delphi 10 10.12.2010 09:48
поиск хозяина IP адреса MANn88 Общие вопросы Delphi 4 03.11.2009 18:26
DNS - поиск адреса Anatolij Работа с сетью в Delphi 0 19.01.2007 15:54