Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Поиск оффсетов

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 03.04.2012, 00:42   #1
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
Unhappy Поиск оффсетов

Прошу помощи.
Хочу научится искать оффсеты в игре. Элементарное, я умею (поиск ХП, МП и подобное), а вот, допустим, добраться до окна почты и прочитать письмо ( то есть что бы , при открытой почте и письме, в программу выводилось, допустим, содержимое письма, количество писем в почтовом ящике.) не умею Для этого нужны оффсеты, прошу подробно описать - как их искать? Почтовый ящик - всего лишь пример
  Ответить с цитированием
Старый 03.04.2012, 01:43   #2
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Поиск оффсетов

Lermontov, способ в основном один: ищем адрес интересующего значения, смотрим команды, которые взаимодействуют с этим адресом.
В командах уже и будут смещения до данного адреса.
Например, получился адрес 0x100004, по которому лежит нужная инфа. Через Cheat Engine ставим BP (BreakPoint) на доступ к этому адресу, пробуем что-нибудь сделать, чтобы клиент к нему обратился (в случае с письмом, например, ещё раз щёлкаем на нём или открываем). Там видим команду типа такой: mov edi, [esi+4].
В данном случае 4 - смещение. Вычитаем его из нашего адреса: 0x100000. Это значение ищем в памяти клиента.
Нашли несколько - берём любое (лучше брать из начала списка, кроме случаев, когда адреса имеют вид 0012XXXX - это скорей всего относится к интерфейсу) и добавляем в таблицу. Обозначим это значение за X. Ставим такой же BP на этот X. Получаем, например, команду mov eax, [edx+10]. Значит из только что добавленного значения X вычитаем 10 и ищем результат в памяти. Повторять, пока не доберёмся до базового адреса (или до любого статического).
Собираем оффсеты по цепочке: [[[[BA] +X] +10] +4] (или упрощённая запись: BA +X +10 +4).
Таким образом обычно и поступают.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3

Последний раз редактировалось BritishColonist; 03.04.2012 в 01:46.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
gurin (04.05.2012), ktuulx (30.11.2012), Lermontov (08.04.2012)
Старый 08.04.2012, 21:39   #3
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск оффсетов

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
Обозначим это значение за X. Ставим такой же BP на этот X.

Этот пункт не понятен....
  Ответить с цитированием
Старый 08.04.2012, 22:13   #4
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Поиск оффсетов

X - только что найденный адрес. Пофиг, что это за число. На него ставится breakpoint.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 08.04.2012, 22:18   #5
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск оффсетов

BritishColonist, В моем понимании BP , вот это окошко [Ссылки могут видеть только зарегистрированные пользователи. ]
Если не так, прошу "наставить на истинный пусть"
  Ответить с цитированием
Старый 08.04.2012, 22:20   #6
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Поиск оффсетов

Да, это окно отладчика, появляющееся после установки bp.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 08.04.2012, 22:21   #7
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск оффсетов

BritishColonist, Спасибо будем пробовать
  Ответить с цитированием
Старый 24.04.2012, 00:26   #8
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск оффсетов

Хочу отобразить координаты местоположения персонажа.
Вроде все правильно ввожу

Цитата:
Сообщение от sumikotПосмотреть сообщение
+003C LocX, float /Координата X/ +007C /Повтор/
+0040 LocZ, float /Координата Z/ +0080 /Повтор/
+0044 LocY, float /Координата Y/ +0084 /Повтор/

Выбивает совсем левое значение.
Помогите разобраться....
  Ответить с цитированием
Старый 24.04.2012, 11:18   #9
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Поиск оффсетов

Lermontov, тип значения - float, т.е. дробное, 4 байта.
В дельфи для этого используют тип single (а не real).
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 25.04.2012, 23:53   #10
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск оффсетов

Цитата:
ReadProcessMemory (hProcess, Pointer($A57ACC), @LocX, sizeof(LocX), NoB);
ReadProcessMemory (hProcess, Pointer(LocX+$34), @LocX, sizeof(LocX), NoB);
ReadProcessMemory (hProcess, Pointer(LocX+$3C), @LocX, sizeof(LocX), NoB);
Edit2.Text := ''+ FloatToStr (LocX);

Что не так? Пишет "Invalid typecast"

Последний раз редактировалось Lermontov; 26.04.2012 в 00:05.
  Ответить с цитированием
Старый 26.04.2012, 00:35   #11
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Поиск оффсетов

FloatToStr принимает в качестве параметра дробное значение, а здесь, судя по всему, значение целое.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 26.04.2012, 16:14   #12
 Разведчик
Аватар для Lermontov
 
Lermontov никому не известный тип
Регистрация: 25.04.2011
Сообщений: 19
Популярность: 14
Сказал(а) спасибо: 10
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Поиск оффсетов

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
FloatToStr принимает в качестве параметра дробное значение, а здесь, судя по всему, значение целое.

Я не только FloatToStr пробовал, если переменная LocX:integer;, то программа запускается, но выбивает
Цитата:
совсем левое значение.

  Ответить с цитированием
Старый 26.04.2012, 17:11   #13
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Поиск оффсетов

Lermontov, читать из памяти можно по адресам, лежащим в переменных целого типа, а помещать результат последнего чтения - в тип дробный. Т.е. нужны две переменные. Только на самом последнем этапе, нужно ложить значение в single.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 26.04.2012, 18:58   #14
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Re: Поиск оффсетов

Ну... как-то так...

Код:
function TProcess.readSingle(addr : cardinal) : single;
var
  tmp, bytesread : cardinal;
begin
  if addr = 0 then result := 0 else
  try
    ReadProcessMemory(self.processHandle, pointer(addr), @tmp, sizeof(cardinal), bytesread);
    if (tmp = $7F808080) or (tmp > $FF800000) then result := 0.00 else result := PSingle(@tmp)^;
  except
    result := 0.00;
  end;
end;
  Ответить с цитированием
Старый 26.04.2012, 20:01   #15
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Поиск оффсетов

К чему это всё? :D


Код:
	 
ReadProcessMemory (hProcess, Pointer($A57ACC), @LocX, sizeof(LocX), NoB);
ReadProcessMemory (hProcess, Pointer(LocX+$34), @LocX, sizeof(LocX), NoB);
ReadProcessMemory (hProcess, Pointer(LocX+$3C), @SingleX, sizeof(SingleX), NoB);
Edit2.Text := ''+ FloatToStr (SingleX);
Где LocX - DWORD, а SingleX - Single.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3

Последний раз редактировалось BritishColonist; 26.04.2012 в 20:03.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] поиск ПОЙНТЕРОВ и ОФФСЕТОВ freeze222 Общение и обсуждение, архив Point Blank 3 23.12.2011 23:27
[Продам] Поиск поинтеров и оффсетов mires51 Point Blank 0 03.11.2011 21:10

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 21:39.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net