meft Опубликовано 2 февраля, 2016 Поделиться Опубликовано 2 февраля, 2016 В игре ведется лог взаимодействия игроков с объектом. Данный лог имеет дату формата "1/1/2016 8/12/50 PM" и текста. Данные хранятся по разным адресам.При поиске текста система выдает 3 разных адреса. По 1 из них содержимое не меняется, а по двум другим меняется на данные, которые мне не интересны. По первому адресу нашел базовые и указатели. Смещением определяю последующие записи лога.При поиске дат, для привязки к тексту, система выдает всего 2 адресу, которые при незначительном изменении в игре меняют содержимое на непонятные данные.Пытался найти вручную базовые адрес. Цепочка из 5 указателей заставляет содержимое не меняться, но базового адреса я так и не нашел, хотя прошел больше 8 указателей.Пытался проанализировать область памяти, но не хватает знаний. Данные меняются как только значения пропадают с экрана, убирается форма или поверх появляется новая форма. Просьба подсказать, какими средствами можно воспользоваться для поиска искомого значения.Просьба дать советы. Если нужны какие то конкретные данные, готов предоставить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 Скорее всего, эти строки поступают в какой-то временный буфер перед выводом на экран, а затем буфер очищается. Думаю, надо искать инструкцию, считывающую нужный текст из буфера для вывода его на экран. Ссылка на комментарий Поделиться на другие сайты Поделиться
meft Опубликовано 3 февраля, 2016 Автор Поделиться Опубликовано 3 февраля, 2016 Появилась мысль что дата хранится не в строковом формате, а в числовом.Что то вроде timestamp.Правда найти не могу.В каких форматах могут хранить даты? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 (изменено) Просьба подсказать, какими средствами можно воспользоваться для поиска искомого значения.Мне не много не понятно, ты хочешь найти адрес буфера или функцию логирования или же "значение" объекта который вносится в буфер? Изменено 3 февраля, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
meft Опубликовано 3 февраля, 2016 Автор Поделиться Опубликовано 3 февраля, 2016 Я хочу найти базовый адрес и указатели, по которым получу дату.Это онлайн игра. В связи с этим логирование ведется на сервере. Я не смогу получить эту функцию.Но сервер пересылает эти данные, и я хочу уметь их считывать. Со строковой частью лога больших проблем не возникло. Как я понял из предположения выше, там было 2 адреса с временным буфером, которые очищались. Их я не трогал. И один адрес, по которому всегда можно получить верхнюю строчку лога (используя смещение в структуре я могу выйти на следующие позиции). По базовому адресу и указателям я всегда могу получить данное строковое представление.С датами подобное не получается. Всего 2 адреса, которые очищаются при сокрытии окна с логом.Полагаю, что так же есть и третий адрес, как и со строками, но представлен в другом формате. Я хочу иметь возможность считать дату лога. Просто прочитать.Я новичек в этой области, потому выражаюсь не очень точно. Про поиск данных прочитал разные статьи. Разобрался с поиском русского текста (хотя об этом написано мало). Признак юникода не помогал при поиске текста. Обошелся без него.Возможно подскажете статьи по поиску именно дат. Или по поиску данных с использованием временного буфера. Еще есть ньюанс по моей ситуации: чтобы изменить данные, т.е. добавить строчку лога, мне нужно скрыть окно лога, а с большой вероятностью это приведет к сбросу данных по 2м найдем адресам со строковым представлением дат. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 (изменено) Мне кажется самым простым способом будет статический анализ полученных инструкций бряком на доступ. А на счет даты, есть подозрения что она преобразуется например _itoa_s и потом выводится на экран. Изменено 3 февраля, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
meft Опубликовано 3 февраля, 2016 Автор Поделиться Опубликовано 3 февраля, 2016 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],eax00EA7C86 - 74 0A - je GameClient.exe+CC7C9200EA7C88 - C7 40 FB 00000000 - mov [eax-05],0000000000EA7C8F - C6 00 00 - mov byte ptr [eax],00 <<00EA7C92 - 85 D2 - test edx,edx00EA7C94 - 74 25 - je GameClient.exe+CC7CBBEAX=41991E81EBX=028EF340ECX=4717F04CEDX=4717F04CESI=34F2E22CEDI=0626B290ESP=0362CDD4EBP=0362CDD8EIP=00EA7C92 018E6941 - 07 - pop es << EAX=00000033EBX=00000013ECX=00000010EDX=00000000ESI=4717F04CEDI=41991E81ESP=0362CD90EBP=0362CDB4EIP=018E6942 018E6941 - 07 - pop es018E6942 - 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,02EAX=0000002FEBX=00000013ECX=00000010EDX=00000000ESI=4717F04CEDI=41991E81ESP=0362CD90EBP=0362CDB4EIP=018E6948 018E6944 - 01 88 47018A46 - add [eax+468A0147],ecx018E694A - 02 C1 - add al,cl018E694C - E9 02884702 - jmp 03D5F153 <<018E6951 - 83 C6 03 - add esi,03018E6954 - 83 C7 03 - add edi,03EAX=00000032EBX=00000013ECX=00000004EDX=00000000ESI=4717F04CEDI=41991E81ESP=0362CD90EBP=0362CDB4EIP=018E6951 018E69E0 - 89 44 8F EC - mov [edi+ecx*4-14],eax018E69E4 - 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],eaxEAX=3130322FEBX=00000013ECX=00000004EDX=00000000ESI=4717F04FEDI=41991E84ESP=0362CD90EBP=0362CDB4EIP=018E69EC 018E69E8 - 89 44 8F F0 - mov [edi+ecx*4-10],eax018E69EC - 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],eaxEAX=3A362036EBX=00000013ECX=00000004EDX=00000000ESI=4717F04FEDI=41991E84ESP=0362CD90EBP=0362CDB4EIP=018E69F4 Не понятно, как воспринимать018E694C - E9 02884702 - jmp 03D5F153 Если по первой инструкции пытаться найти цепочку оффсетов, то я упираюсь в следующие инструкции: 00EA4034 - C3 - ret00EA4035 - 8B 45 08 - mov eax,[ebp+08]00EA4038 - FF 74 B8 0C - push [eax+edi*4+0C] <<00EA403C - 53 - push ebx00EA403D - FF 75 10 - push [ebp+10] EAX=305D763CEBX=00000000ECX=00000001EDX=01F579B0ESI=00000000EDI=00000001ESP=0362CD84EBP=0362CD94EIP=00EA403C Просьба объяснить смысл обоих инструкций.Первая совсем не понятна, а по второй я ухожу в цикл. Если все, что я делаю, является не правильным, то просьба так и сказать Хотя, наверно, я пока еще вообще ничего не сделал. 00EA5B0F - 3B 48 F4 - cmp ecx,[eax-0C]00EA5B12 - 73 06 - jae GameClient.exe+CC5B1A00EA5B14 - 8B 04 88 - mov eax,[eax+ecx*4] <<00EA5B17 - 5E - pop esi00EA5B18 - 5D - pop ebp EAX=34F2E220EBX=028EF340ECX=00000001EDX=01F579B0ESI=247888CCEDI=0626B290ESP=0362CDDCEBP=0362CDE0EIP=00EA5B1700EA4038 - FF 74 B8 0C - push [eax+edi*4+0C]00EA5B14 - 8B 04 88 - mov eax,[eax+ecx*4] Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 push [eax+edi*4+0C]выгружает значение в адресе [eax+edi*4+0C] в стек. mov eax,[eax+ecx*4]в регистр eax записывается значение в адресе [eax+ecx*4]. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 3 февраля, 2016 Поделиться Опубликовано 3 февраля, 2016 (изменено) Это поможет в понимании того, что делают инструкции. Да и вообще пригодится) Изменено 3 февраля, 2016 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения