partoftheworlD Опубликовано 20 января, 2019 Поделиться Опубликовано 20 января, 2019 Практиковавшись сегодня в поиске структур инвентаря, заметил кое-что странное, больше похожее на фантомные структуры. Слишком идеальное сие совпадение, а так как я в них не верю, да и не особо удачлив, у меня закрались подозрения, что тут что-то не так. Если они и правда работоспособные, то тему можно закрывать, если это баг, то как от него избавиться? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 21 января, 2019 Поделиться Опубликовано 21 января, 2019 Малые адреса обычно говорят о том, что это где-то был кусочек стека в какой-то из веток кода, возможно, в нем остался указатель на структуру. Не раз на такое натыкался. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 21 января, 2019 Автор Поделиться Опубликовано 21 января, 2019 4 часа назад, Xipho сказал: Малые адреса обычно говорят о том, что это где-то был кусочек стека в какой-то из веток кода, возможно, в нем остался указатель на структуру. Не раз на такое натыкался. Т.е в настройках сканера указателей нет никаких проверок, типа начального опкода или еще чего, чтобы фильтровать это? Если это так, то ручной поиск указателей будет куда лучше и надежней. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 21 января, 2019 Поделиться Опубликовано 21 января, 2019 3 минуты назад, partoftheworlD сказал: Т.е в настройках сканера указателей нет никаких проверок, типа начального опкода или еще чего, чтобы фильтровать это? Ну хз. А как ты отфильтруешь адреса, не зная. какие из них были отведены под стек, и какие уже утратили актуальность, а какие - нет? Как это сделать во время сканирования на указатели, я не в курсе. Upd: Посмотрел внимательнее скриншоты - чот это вообще похоже на какие-то динамически распаковывающиеся куски кода. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 21 января, 2019 Автор Поделиться Опубликовано 21 января, 2019 40 минут назад, Xipho сказал: Ну хз. А как ты отфильтруешь адреса, не зная. какие из них были отведены под стек, и какие уже утратили актуальность, а какие - нет? Я думаю, можно сделать проверку, например, есть статичный адрес который был найден сканером указателей, какой-нибудь AAAAAA. Для проверки возьмем сканер сигнатур или просто поиском константы, найдем все инструкции, в которых есть адрес 0xAAAAAA и ограничим вывод результатов, фильтруя их по началу блоков, которые должны начинаться с определенных опкодов. Т.е основные, которые присваивают адреса и обычно работают со статичными адресами. По типу: B8 AAAAAA00 - mov eax, 0xAAAAAA C700 AAAAAA00 - mov [eax], 0xAAAAAA A1 AAAAAA00 - mov eax, [0xAAAAAA] ... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 21 января, 2019 Поделиться Опубликовано 21 января, 2019 Немного не понял. Как это поможет отличить действующую структуру в памяти от фантомной, указатель на которую находится где-то в протухшей части стека? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 января, 2019 Поделиться Опубликовано 21 января, 2019 C помощью Lua можно убрать ненужные указатели. В документации по Lua все написано Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 21 января, 2019 Автор Поделиться Опубликовано 21 января, 2019 2 часа назад, Xipho сказал: Немного не понял. Как это поможет отличить действующую структуру в памяти от фантомной, указатель на которую находится где-то в протухшей части стека? Так проверка направлена на фильтрацию статических адресов, которые реально используются, а не просто совпавший статический адрес указывающий на структуру в стеке. К примеру ищем статический адрес на 0xFEEDFACE, через сканер указателей, получаем статический адрес 0xDEADBEEF, теперь ищем этот 0xDEADBEEF, где он используется в коде. Находим такую инструкцию: mov eax, [0xDEADBEEF] Значит все хорошо, но так же, мы можем обнаружить какую-либо инструкцию, опкоды которой совпадают с указателем на 0xFEEDFACE, раз так, то отфильтровываем подобные результаты и получаем только реально работающие указатели. Вот к примеру: "mov eax, [0xDEADBE68]" A1 68BEADDE ========================== "push 0xDEADBE" 68 BEADDE00 Технически эти адреса одинаковые, но во втором случае указатель не будет работать после перезапуска, но сканер указателей покажет эти 2 случая. Да, это лечится новым сканированием после перезапуска, но не всегда перезапуск игры возможен. Хотя, возможно это уже не нужные костыли. 44 минуты назад, MasterGH сказал: C помощью Lua можно убрать ненужные указатели. В документации по Lua все написано Отлично. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 января, 2019 Поделиться Опубликовано 22 января, 2019 А, все, въехал. Ты хочешь отфильтровать те случаи, когда "подозреваемые" на самом деле являются частью опкода, а не его аргументами, грубо говоря. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения