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

Поиск строк в Cheat Engine в MMO Neverwinter Online


meft

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

В игре ведется лог взаимодействия игроков с объектом. Данный лог имеет дату формата "1/1/2016 8/12/50 PM" и текста. Данные хранятся по разным адресам.

При поиске текста система выдает 3 разных адреса. По 1 из них содержимое не меняется, а по двум другим меняется на данные, которые мне не интересны. По первому адресу нашел базовые и указатели. Смещением определяю последующие записи лога.

При поиске дат, для привязки к тексту, система выдает всего 2 адресу, которые при незначительном изменении в игре меняют содержимое на непонятные данные.

Пытался найти вручную базовые адрес. Цепочка из 5 указателей заставляет содержимое не меняться, но базового адреса я так и не нашел, хотя прошел больше 8 указателей.

Пытался проанализировать область памяти, но не хватает знаний.

 

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

 

Просьба подсказать, какими средствами можно воспользоваться для поиска искомого значения.

Просьба дать советы.

 

Если нужны какие то конкретные данные, готов предоставить.

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

Скорее всего, эти строки поступают в какой-то временный буфер перед выводом на экран, а затем буфер очищается. Думаю, надо искать инструкцию, считывающую нужный текст из буфера для вывода его на экран.

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

Появилась мысль что дата хранится не в строковом формате, а в числовом.

Что то вроде timestamp.

Правда найти не могу.

В каких форматах могут хранить даты?

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

 

Просьба подсказать, какими средствами можно воспользоваться для поиска искомого значения.

Мне не много не понятно, ты хочешь найти адрес буфера или функцию логирования или же "значение" объекта который вносится в буфер?

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

Я хочу найти базовый адрес и указатели, по которым получу дату.

Это онлайн игра. В связи с этим логирование ведется на сервере. Я не смогу получить эту функцию.

Но сервер пересылает эти данные, и я хочу уметь их считывать.

 

Со строковой частью лога больших проблем не возникло. Как я понял из предположения выше, там было 2 адреса с временным буфером, которые очищались. Их я не трогал. И один адрес, по которому всегда можно получить верхнюю строчку лога (используя смещение в структуре я могу выйти на следующие позиции). По базовому адресу и указателям я всегда могу получить данное строковое представление.

С датами подобное не получается. Всего 2 адреса, которые очищаются при сокрытии окна с логом.

Полагаю, что так же есть и третий адрес, как и со строками, но представлен в другом формате.

 

Я хочу иметь возможность считать дату лога. Просто прочитать.

Я новичек в этой области, потому выражаюсь не очень точно.

 

Про поиск данных прочитал разные статьи. Разобрался с поиском русского текста (хотя об этом написано мало). Признак юникода не помогал при поиске текста. Обошелся без него.

Возможно подскажете статьи по поиску именно дат. Или по поиску данных с использованием временного буфера.

 

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

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

Мне кажется самым простым способом будет статический анализ полученных инструкций бряком на доступ. А на счет даты, есть подозрения что она преобразуется например _itoa_s и потом выводится на экран.

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

00EA7C8F - C6 00 00 - mov byte ptr [eax],00018E6941 - 07 - pop es018E6945 - 88 47 01  - mov [edi+01],al018E694C - E9 02884702 - jmp 03D5F153018E69E8 - 89 44 8F F0  - mov [edi+ecx*4-10],eax018E69F0 - 89 44 8F F4  - mov [edi+ecx*4-0C],eax

00EA7C86 - 74 0A - je GameClient.exe+CC7C92

00EA7C88 - C7 40 FB 00000000 - mov [eax-05],00000000

00EA7C8F - C6 00 00 - mov byte ptr [eax],00 <<

00EA7C92 - 85 D2 - test edx,edx

00EA7C94 - 74 25 - je GameClient.exe+CC7CBB

EAX=41991E81

EBX=028EF340

ECX=4717F04C

EDX=4717F04C

ESI=34F2E22C

EDI=0626B290

ESP=0362CDD4

EBP=0362CDD8

EIP=00EA7C92

 018E6941 - 07 - pop es <<

 

EAX=00000033

EBX=00000013

ECX=00000010

EDX=00000000

ESI=4717F04C

EDI=41991E81

ESP=0362CD90

EBP=0362CDB4

EIP=018E6942 

 018E6941 - 07 - pop es

018E6942 - 8A 46 01  - mov al,[esi+01]

018E6945 - 88 47 01  - mov [edi+01],al <<

018E6948 - 8A 46 02  - mov al,[esi+02]

018E694B - C1 E9 02 - shr ecx,02

EAX=0000002F

EBX=00000013

ECX=00000010

EDX=00000000

ESI=4717F04C

EDI=41991E81

ESP=0362CD90

EBP=0362CDB4

EIP=018E6948

 018E6944 - 01 88 47018A46  - add [eax+468A0147],ecx

018E694A - 02 C1  - add al,cl

018E694C - E9 02884702 - jmp 03D5F153 <<

018E6951 - 83 C6 03 - add esi,03

018E6954 - 83 C7 03 - add edi,03

EAX=00000032

EBX=00000013

ECX=00000004

EDX=00000000

ESI=4717F04C

EDI=41991E81

ESP=0362CD90

EBP=0362CDB4

EIP=018E6951

 018E69E0 - 89 44 8F EC  - mov [edi+ecx*4-14],eax

018E69E4 - 8B 44 8E F0  - mov eax,[esi+ecx*4-10]

018E69E8 - 89 44 8F F0  - mov [edi+ecx*4-10],eax <<

018E69EC - 8B 44 8E F4  - mov eax,[esi+ecx*4-0C]

018E69F0 - 89 44 8F F4  - mov [edi+ecx*4-0C],eax

EAX=3130322F

EBX=00000013

ECX=00000004

EDX=00000000

ESI=4717F04F

EDI=41991E84

ESP=0362CD90

EBP=0362CDB4

EIP=018E69EC

 018E69E8 - 89 44 8F F0  - mov [edi+ecx*4-10],eax

018E69EC - 8B 44 8E F4  - mov eax,[esi+ecx*4-0C]

018E69F0 - 89 44 8F F4  - mov [edi+ecx*4-0C],eax <<

018E69F4 - 8B 44 8E F8  - mov eax,[esi+ecx*4-08]

018E69F8 - 89 44 8F F8  - mov [edi+ecx*4-08],eax

EAX=3A362036

EBX=00000013

ECX=00000004

EDX=00000000

ESI=4717F04F

EDI=41991E84

ESP=0362CD90

EBP=0362CDB4

EIP=018E69F4

 

Не понятно, как воспринимать

018E694C - E9 02884702 - jmp 03D5F153

 

Если по первой инструкции пытаться найти цепочку оффсетов, то я упираюсь в следующие инструкции:

 00EA4034 - C3 - ret

00EA4035 - 8B 45 08  - mov eax,[ebp+08]

00EA4038 - FF 74 B8 0C  - push [eax+edi*4+0C] <<

00EA403C - 53 - push ebx

00EA403D - FF 75 10  - push [ebp+10]

 
EAX=305D763C

EBX=00000000

ECX=00000001

EDX=01F579B0

ESI=00000000

EDI=00000001

ESP=0362CD84

EBP=0362CD94

EIP=00EA403C

 

Просьба объяснить смысл обоих инструкций.

Первая совсем не понятна, а по второй я ухожу в цикл.

 

Если все, что я делаю, является не правильным, то просьба так и сказать :) Хотя, наверно, я пока еще вообще ничего не сделал.

 00EA5B0F - 3B 48 F4  - cmp ecx,[eax-0C]

00EA5B12 - 73 06 - jae GameClient.exe+CC5B1A

00EA5B14 - 8B 04 88   - mov eax,[eax+ecx*4] <<

00EA5B17 - 5E - pop esi

00EA5B18 - 5D - pop ebp

 
EAX=34F2E220

EBX=028EF340

ECX=00000001

EDX=01F579B0

ESI=247888CC

EDI=0626B290

ESP=0362CDDC

EBP=0362CDE0

EIP=00EA5B17

00EA4038 - FF 74 B8 0C  - push [eax+edi*4+0C]00EA5B14 - 8B 04 88   - mov eax,[eax+ecx*4]
Ссылка на комментарий
Поделиться на другие сайты

Это поможет в понимании того, что делают инструкции. Да и вообще пригодится)

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

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

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

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