PDA

Просмотр полной версии : [Информация] Оффсеты GUI


dwa83
13.06.2012, 19:43
[Значения могли измениться/сместиться]
Возможно кому-нибудь будет полезно. Оффсеты указаны для руофа, для других могут отличаться.

Структура GUI
GA+18+08
(GUI+...)
+8C - указатель на начало массива окон верхнего уровня(WIN)
+АС - указатель на начало массива окон нижнего уровня(WIN)
+74 - указатель на структуру активного окна(WinStruct)
Основные поля структуры элемента массива окон (WIN+...)
+0 NextWin(указатель на следующий элемент массива)
+8 WinStruct(указатель на структуру окна)
Основные поля структуры окна (WinStruct+...)
+4C - WinName(указатель на строку-имя окна)
+90 - Visible(Видимое окно)
+98 - Win X Coord
+9C - Win Y Coord
+A0 - Win Width
+A4 - Win Height
+E8 - CurrentControlStructPtr(указатель на cтруктуру активного контрола)
+1C8 - CtrlArray(указатель на начало массива контролов окна)

Структура элемента в массиве контролов
+4 - указатель на следующий контрол в массиве
+8 - указатель на структуру контрола (CtrlStruct)
Структура контрола (CtrlStruct+...)
+18+0 - Ctrl_Name (ascii string)
+1C+0 - Ctrl_Command_Txt (ascii string) - Команда контрола
+20+0 - Ctrl_Sound_Path (ascii string) - Звук, проигрываемый при клике по контролу
+68 - BGR-цвет текста(цвет EditText)(DWORD)
+74(?) - Чекнутость переключателя типа RadioButton.
+84 - Левый отступ текста в пикселях от границы окна.
+88 - Верхний отступ текста в пикселях от границы окна.
+B8+0 - Caption (unicode string)
+BC+0 - Description (unicode string) полное описание предметов, скиллов, и тд, текст вплывающего описания любого контрола
+121 - Checked/Active (bool)
+134 - Верхний отступ текста в пикселях от границы контрола.
+13C - ItemIndex (номер выделенной строчки в листбоксе, отсчёт от нуля)
+144 - ScrollBarPosition(Значения от 0 до ScrolBarMaxPosition)
+148 - ScrolBarMaxPosition
+188 - EditTextLen(DWORD) (ограничивает передвижение курсора но не отрисовку текста)
+18С - Положение курсора в тексте EditText
+13FC+0 - EditText (unicode string) - Редактируемый текст в контроле типа Edit(поле ввода логина, пароля, строки чата)

Отдельное спасибо krukovis, за разьяснение ключевых оффсетов.

Некоторые замечания:
1)Прописав по оффсету +E8 - CurrentControlPointer(указатель на активный контрол) адрес нужного нам контрола, мы сделаем его активным, например поле ввода для логина/пароля. Далее ввод символов будет происходить именно в нём.
2)Прописав по оффсету +13FC(если контрол подразумевает ввод символов) адрес заготовленной нами строки текста, этот текст мгновенно появится в поле ввода. Так же работает со оффсетом +B8 (указатель на строку Caption), этим мы будем менять надписи на Button, Label и прочих.
3)Указатель на строку +1C+0 - Ctrl_Command_Txt, а так же указатель WinStruct на структуру окна, в котором этот контрол находится, мы можем передать в функцию работы с GUI, этим мы програмно будем например, жать на кнопки.

В ЭТОЙ ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) теме выложена функция, с помощью которой можно программно выполнать команды GUI, используя оффсеты
+8 WinStruct(указатель на структуру окна) Адрес начала структуры окна
+1C - указатель на Ctrl_Command_Txt (ascii string) - Адрес текстовой команды контрола

Дополнительно:
тык ([Ссылки могут видеть только зарегистрированные и активированные пользователи])|тык ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

krukovis
16.06.2012, 09:44
Основные поля структуры окна (WinStruct+...)

+4C - WinName(указатель на строку-имя окна)
+90 - Visible(Видимое окно)
+1C8 - CtrlArray(указатель на начало массива контролов окна)



Из серии "до кучи":

+98 - Win X Coord
+9c - Win Y Coord
+a0 - Win Width
+a4 - Win Height

krukovis
21.06.2012, 22:09
Переделывал релогин и вспомнил как я раньше фокус менял, чтобы логин и пароль вписывать.
Я записывал по этому смещению (раньше оно было +90) указатель на контрол и туда переходил фокус.
Теперь оно тут:
WinStruct+0x0e8 - указатель на контрол на котором фокус - CurrentControl.

ToRcH2565
29.06.2012, 21:10
Может кто подсказать как получить текст из листбокса?)

dwa83
30.06.2012, 02:20
Может кто подсказать как получить текст из листбокса?)
Нужно ковырять дальше структуру контрола. Мне кажется давольно сложным это занятие, так как листбоксы и их оффсеты отличаются в зависимости от вида листбокса. Например, для листбокса ближайших игроков и листбокса квестов оффсет положения вертикального бегунка отличаются, так же может быть и с указателем на элементы списка. Самый интересный оффсет - это тип контрола, где он - хз. Хотя для некоторых листбоксов, например как выбор сервера, выделенный элемент можно считать из поля Caption этого контрола(со слов другого участника форума), а сделать его выделенным можно по оффсету +13C - ItemIndex.

AHTOLLlKA
05.11.2012, 20:03
Подскажите куда копать чтоб получить данные из listboxa ??
+13C - ItemIndex (номер выделенной строчки в листбоксе, отсчёт от нуля)
выдает индекс нормально, данные доложны быть в структуре самого окна или нужно искать смещение от +13С
если кто в теме поделитесь ;)

dwa83
16.11.2012, 13:51
или нужно искать смещение от +13С
Могу заверить что точно не от него

wajskopf
16.02.2013, 10:02
Нашел кто-нибудь решение по листбоксу? Хочется аукцион поковырять...
кстати нашел кое-что на elitepvpers.com ...

Полная строка из листбокса аукциона
GA+0x18+0x8+0x8c+0x8+0x208+0x168+ I*0x800 +0x0, wchar[CharMax]
Здесь если это первый в списке предмет, то I*0x800 принимает значение 0х0. а далее, соответственно, 0х800, 0х1000 и т.д.

Описание продаваемого итема
GA+0x18+0x8+0x8c+0x8+0x208+0x168+ I*0x800 + 0x5C+0x0, wchar[CharMax]
Вот здесь проблемка есть. Если речь идет о первом предмете то смещение:
GA+0x18+0x8+0x8c+0x8+0x208+0x168 + 0x5C+0x0, wchar[CharMax] дает корректное описание
а вот в последующем I*0x800 уже почему-то не работает. Получается как-то так:
GA+0x18+0x8+0x8c+0x8+0x208+0x168+ I*???? + 0x5C+0x0, wchar[CharMax]
Вот что вместо вопросов надо вставить?

Кое-что понял...
вместо I*???? + 0x5C надо вставить 0x5C+0х800 = 0х85с

таким образом, описание второго предмета в списке можно прочитать по адресу
GA+0x18+0x8+0x8c+0x8+0x208+0x168+ 0х85с +0x0, wchar[CharMax]

tianddu
01.10.2013, 11:03
+18+0 - Ctrl_Name (ascii string)
+1C+0 - Ctrl_Command_Txt (ascii string) - Команда контрола
+20+0 - Ctrl_Sound_Path (ascii string) - Звук, проигрываемый при клике по контролу
+68 - BGR-цвет текста(цвет EditText)(DWORD)
+74(?) - Чекнутость переключателя типа RadioButton.
+84 - Левый отступ текста в пикселях от границы окна.
+88 - Верхний отступ текста в пикселях от границы окна.
+B8+0 - Caption (unicode string)
+BC+0 - Description (unicode string) полное описание предметов, скиллов, и тд, текст вплывающего описания любого контрола
+121 - Checked/Active (bool)
+134 - Верхний отступ текста в пикселях от границы контрола.
+13C - ItemIndex (номер выделенной строчки в листбоксе, отсчёт от нуля)
+144 - ScrollBarPosition(Значения от 0 до ScrolBarMaxPosition)
+148 - ScrolBarMaxPosition
+188 - EditTextLen(DWORD) (ограничивает передвижение курсора но не отрисовку текста)
+18С - Положение курсора в тексте EditText
+13FC+0 - EditText (unicode string) - Редактируемый текст в контроле типа Edit(поле ввода логина, пароля, строки чата
возможно +7A байт отвечающий за доступность кнопки.

prizrak3003
08.04.2014, 14:24
Подскажите пожалуйста, как корректно осуществить заполнение логина/пароля, используя оффсет +13FC+0 - EditText (unicode string)
Собираю цепочку в CheatEngine, пытаюсь ввести логин. Он вводится, но заполняются сразу несколько полей
+B8+0 - Caption, +BC+0 - Description , +13FC+0 - EditText, а также тоже самое вводится и в пароль.
Если начать с пароля, то наоборот.

Проблема в том, что
если сначала в клиенте заполнить руками поля логина и пароля произвольными символами , а затем запустить "автологин" что бы тот ввел логин и пароль, то заполняются исключительно поля логина и пароля.
если в клиенте руками не вводить ничего и запустить "автологин", то когда "автологин" начинает заполнять поле логина, то заполняются логин, пароль. описание к логину, описание к паролю, заголовок логина, заголовок пароля и еще другие поля.
То же самое происходит если это делать в CheatEngine не испльзуя "автологин".

Последовательность действий:
1. делаю активным структуру где содержится контрол ввода логина
2. делаю активным контрол ввода логина
3. записываю данные
Каких действий не хватает.

P.S. Спасибо.

Nek1t
08.04.2014, 15:58
Подскажите пожалуйста, как корректно осуществить заполнение логина/пароля, используя оффсет +13FC+0 - EditText (unicode string)
Собираю цепочку в CheatEngine, пытаюсь ввести логин. Он вводится, но заполняются сразу несколько полей
+B8+0 - Caption, +BC+0 - Description , +13FC+0 - EditText, а также тоже самое вводится и в пароль.
Если начать с пароля, то наоборот.

Вначале нужно выделить память, потом туда записать свой текст, а затем записать указатель на эту память по нужному адресу. В вашем случае писать по смещению +13FC

В коде это выглядить так:

int text_address = WinApi.VirtualAllocEx(handle, 0, 2500, 0x1000, 0x04);
memory.WriteString_Unicode(text_address, "login");
memory.WriteInt32(control_ptr + 0x13FC, text_address);

prizrak3003
09.04.2014, 11:26
Не получается корректно записать +13FC+0 - EditText
Использую только CheatEngine 6.3

Содержимое ячеек клиента после запуска
URL=[Ссылки могут видеть только зарегистрированные и активированные пользователи]][Ссылки могут видеть только зарегистрированные и активированные пользователи][/URL]

Вводим с помощью CheatEngine 6.3 значение в EditText логина
Структура видима, активна, активный контрол ввода логина
URL=[Ссылки могут видеть только зарегистрированные и активированные пользователи]][Ссылки могут видеть только зарегистрированные и активированные пользователи][/URL]

Содержимое ячеек после ввода логина с помощью CheatEngine 6.3 в EditText
URL=[Ссылки могут видеть только зарегистрированные и активированные пользователи]][Ссылки могут видеть только зарегистрированные и активированные пользователи][/URL]

Содержимое ячеек клиента, после ввода логина традиционным способом
URL=[Ссылки могут видеть только зарегистрированные и активированные пользователи]][Ссылки могут видеть только зарегистрированные и активированные пользователи][/URL]

Как правильно нужно, подскажите пожалуйста.

P.S. Спасибо.

FriendsKenny
01.05.2014, 08:12
Чем отличаются окна верхнего уровня от окон нижнего уровня?

dwa83
01.05.2014, 21:27
Чем отличаются окна верхнего уровня от окон нижнего уровня?
Если просто, то окна верхнего уровня - это окна типа "окно игры", "окно выбора перса", "окно логина", а нижнего уровня - это различные мелкие окна типа "окно инвентаря", "окно чата" и т.п.(или наоборот), но суть такова.

ukurenijboter
17.07.2014, 00:27
Кто-нибудь уже сталкивался с проблемой: при попытке "вытащить" невидимое окно путем замены адреса (+74 - указатель на структуру активного окна(WinStruct)) на адрес нужного окна и сделать видимым при помощи установки 1 по адресу +90, игра вылетает. Кто-то эту проблему как-то смог решить?

monahus
18.10.2015, 13:50
Кто-нибудь уже сталкивался с проблемой: при попытке "вытащить" невидимое окно путем замены адреса (+74 - указатель на структуру активного окна(WinStruct)) на адрес нужного окна и сделать видимым при помощи установки 1 по адресу +90, игра вылетает. Кто-то эту проблему как-то смог решить?

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

DHouse
27.03.2017, 00:46
+4 - указатель на следующий контрол в массиве
+8 - указатель на структуру контрола (CtrlStruct)
побуду некропостером, но указатель на следующий контрол +4 не работает. Там всегда возвращается 0.
Есть впечатление, что +C больше подходит на эту роль.

j091
27.03.2017, 13:56
Есть впечатление, что +C больше подходит на эту роль.
Всё верно, +С указатель на следующий контрол в массиве.

KLAIDY
28.03.2017, 14:02
Всё верно, +С указатель на следующий контрол в массиве.

Вы про руоф? А можете показать, как вы считываете контролы? У меня +4 указывает на следующий контрол.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

DHouse
30.03.2017, 23:31
Вы про руоф? А можете показать, как вы считываете контролы? У меня +4 указывает на следующий контрол.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
да, руоф.
на первом скрине 2 окна, на 1м видно, что +4 вернул 0. на втором я зашел через +С
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
а это пример сканирования через +С по контролам активного окна
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Kavaii^_^
12.11.2018, 18:37
Пытаюсь разобраться как узнать эти офсеты, пока получилось найти только GUI call, как вы находите сами офсеты GUI? Ковыряю клиент 1.5.1

den57
12.11.2018, 19:17
Посмотри тут. [Ссылки могут видеть только зарегистрированные и активированные пользователи]

Kavaii^_^
12.11.2018, 20:59
Посмотри тут. [Ссылки могут видеть только зарегистрированные и активированные пользователи]

Спасибо именно этот адрес уже нашел) Я пытаюсь разобраться как получить оффесты к самой структуре на 1.5.1 (BaseAddr = C7ABCC)