 |
Проблема с поиском бвзовых адресов клиента. - Разработка ПО для Perfect World - Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World |
26.02.2024, 23:12
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 24.10.2010
 Сообщений: 7
 Популярность: 12
 Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
|
Проблема с поиском бвзовых адресов клиента.
Ищу с помощью чит инжин, нахожу статические зелененькие адреса, но они выглядят странно, например elementclient.exe + 0089DC20. По началу все работает, но потом либо они вообще исчезают, либо по этому адресу в памяти находиться 0 а не следующий адрес. Подскажите хотя-бы что это за защита, что-бы я нагуглил. Спасибо.
Добавлено через 13 часов 0 минут
Нагуглил это ASLR (address space layout randomization), подскажите как ее обойти. Тут еще кто-то остался кто шарит?
Последний раз редактировалось sasha21l(№2 ); 27.02.2024 в 12:13.
Причина: Добавлено сообщение
|
|
|
14.09.2024, 05:09
|
#2
|
|
|
|
Разведчик
|
 Регистрация: 01.07.2009
 Сообщений: 23
 Популярность: 83
 Сказал(а) спасибо: 33
Поблагодарили 14 раз(а) в 11 сообщениях
|
Re: Проблема с поиском бвзовых адресов клиента.
 |
Цитата: |
 |
|
|
 |
Сообщение от sasha21l(№2 ) |
 |
|
|
|
|
|
|
Ищу с помощью чит инжин, нахожу статические зелененькие адреса, но они выглядят странно, например elementclient.exe + 0089DC20. По началу все работает, но потом либо они вообще исчезают, либо по этому адресу в памяти находиться 0 а не следующий адрес. Подскажите хотя-бы что это за защита, что-бы я нагуглил. Спасибо.
Добавлено через 13 часов 0 минут
Нагуглил это ASLR (address space layout randomization), подскажите как ее обойти. Тут еще кто-то остался кто шарит?
|
|
 |
|
 |
|
Код:
unit uOFFSETS;
uses
Winapi.Windows, System.SysUtils, Vcl.Forms, TLHelp32;
////////////////////////////////////////////////////////////////////////////////
function GetBase:Dword;
const
procName = 'ElementClient.exe';
var
m_pID: integer;
module: TModuleEntry32;
//****************************************************************************
procedure GetPID;
var
snapshot: THandle;
pInfo: PROCESSENTRY32;
begin
snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pInfo.dwSize := sizeof(PROCESSENTRY32);
if (Process32First(snapshot, pInfo)) then
begin
while (Process32Next(snapshot, pInfo)) do
begin
if UpperCase(pInfo.szExeFile) = UpperCase(procName) then
begin
m_pID := pInfo.th32ProcessID;
CloseHandle(snapshot);
exit;
end;
end;
end;
m_pID := 0;
CloseHandle(snapshot);
exit;
end;
//****************************************************************************
function GetModuleInfo(const module_name: PChar; main_process: boolean): TModuleEntry32;
var
snapshot: THandle;
module: TModuleEntry32;
begin
snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, m_pID);
module.dwSize := sizeof(TModuleEntry32);
if (Module32First(snapshot, module)) then
begin
if (main_process) then
begin
CloseHandle(snapshot);
result := module;
end;
while (Module32Next(snapshot, module)) do
begin
if (StrIComp(PChar(ExtractFileName(module.szModule)), PChar(module_name)) = 0) then
begin
CloseHandle(snapshot);
result := module;
end;
end;
end;
result := module;
end;
//******************************************************************************
begin
GetPID;
if m_pID<>0 then
begin
module := GetModuleInfo(nil, true);
module_hModule := module.hModule; // В классике 0х00400000, в реале всегда разный
Result := module.hModule + $BD6450; // Base Addr
// $BD6450 - не меняеться, или меняеться с обновой.
// Найди BA, отними hModule -получишь это смещение.
// С остальными так же (WalkCall, PackCall, SkillCall, OnlineFlag etc...)
// Game := module.hModule + $BD98CC; // $400000+$BD98CC = GameAddr (BA+$1C)
// Base := module.hModule + $BD6450; // BA
end;
Последний раз редактировалось krysun; 15.09.2024 в 13:29.
Причина: Уточнение версии
|
|
|
18.10.2024, 01:14
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 01.07.2009
 Сообщений: 23
 Популярность: 83
 Сказал(а) спасибо: 33
Поблагодарили 14 раз(а) в 11 сообщениях
|
Re: Проблема с поиском бвзовых адресов клиента.
Вопрос был в другом у автора топика.
У него сам по себе меняется базовый.
По факту меняет смещение базового, т.к. сам Хидер модуля не стандартный (или постоянный) как у большинства EXE-шников (точка входа в само приложение, или может, как-то по другому по умному называется) не 400000, а меняется при переподключении, или перезагрузке компа, или хз от чего оно зависит.
Саму функцию выше написал, а базовый (постоянный) по ПОСТОЯННОМУ смещению всегда на своем месте. До обновы, конечно)
---
ПыСы: Клиент камбэк (обе версии)
Последний раз редактировалось krysun; 18.10.2024 в 01:17.
|
|
|
18.10.2024, 21:36
|
#4
|
|
|
|
Разведчик
|
 Регистрация: 12.07.2022
 Сообщений: 1
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Проблема с поиском бвзовых адресов клиента.
Поняла, про что вы говорите.
 |
Цитата: |
 |
|
|
|
|
|
|
|
У него сам по себе меняется базовый |
|
 |
|
 |
|
Да, меняется адрес исполняемого файла ".exe"
 |
Цитата: |
 |
|
|
|
|
|
|
|
PE-файл может быть загружен по адресу, отличному от того, для которого он был создан (это свойство называется перемещаемостью), при этом система автоматически корректирует все ссылки на абсолютные адреса, заменяя их новыми значениями. В результате образ файла в памяти не будет соответствовать тому, что записано на диске. И это происходит после каждой перезагрузки системы, а порой даже перезапуска приложения. Всякий раз PE-файл помещается по новому адресу.
Вдобавок к этому если раньше (до «Висты») системный загрузчик мог перемещать только DLL (в то же время, если ему не удавалось разместить в памяти по заданным адресам .exe, Windows выдавала ошибку загрузки модуля), то теперь исполняемые файлы тоже подвержены перемещению. |
|
 |
|
 |
|
В Engine ПКМ по любому найденному адресу->Dissasemble this memory region->Tools->Dissect PE Headers.
На С++ код выглядит примерно аналогично вашему.
На пилоте можно проще, Сtrl+A по окну и:
 |
Цитата: |
 |
|
|
|
|
|
|
|
--lua
function getExeAddress()
return relativeaddress2absolute("elementclient.exe")
end |
|
 |
|
 |
|
Ну и, соответственно, значение берется как-то так:
[ [ getExeAddress()(меняется каждый раз при перезапуске игры)+ оффсет до игры, инстанс класса CECGameRun(меняется каждый раз при обнове) ] + оффсет до персонажа(условно постоянный) ] + оффсет до ХП(условно постоянный)
 как-то не было таких проблем, поэтому не поняла вопрос.
Добавлено через 1 час 19 минут
Если автор искал в Engine при добавлении в список адресов "elementclient.exe" он в любом случае корректно адрес выдаст для модуля. По-моему просто неправильно нашли статический базовый адрес / или напоролись на структуру у которой смещение определяется по значениям из регистров
 |
Цитата: |
 |
|
|
|
|
|
|
|
По началу все работает, но потом либо они вообще исчезают, либо по этому адресу в памяти находиться 0 а не следующий адрес |
|
 |
|
 |
|
Скорее всего, автор искал что-то в массиве или хэшмапе
Последний раз редактировалось LOLyta111; 18.10.2024 в 23:00.
Причина: Добавлено сообщение
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 09:38.
|
 |