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

[Any] Фантомные структуры и как от них избавиться.


partoftheworlD

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

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

 

 image.thumb.png.214075f9d31768c7324e358b95faaad9.png 

 

image.thumb.png.bd9b1c19e79780462707619800c9133e.png

 

Если они и правда работоспособные, то тему можно закрывать, если это баг, то как от него избавиться?

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

Малые адреса обычно говорят о том, что это где-то был кусочек стека в какой-то из веток кода, возможно, в нем остался указатель на структуру. Не раз на такое натыкался.

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

4 часа назад, Xipho сказал:

Малые адреса обычно говорят о том, что это где-то был кусочек стека в какой-то из веток кода, возможно, в нем остался указатель на структуру. Не раз на такое натыкался.

 

Т.е в настройках сканера указателей нет никаких проверок, типа начального опкода или еще чего, чтобы фильтровать это?

Если это так, то ручной поиск указателей будет куда лучше и надежней.

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

3 минуты назад, partoftheworlD сказал:

Т.е в настройках сканера указателей нет никаких проверок, типа начального опкода или еще чего, чтобы фильтровать это?

Ну хз. А как ты отфильтруешь адреса, не зная. какие из них были отведены под стек, и какие уже утратили актуальность, а какие - нет?

Как это сделать во время сканирования на указатели, я не в курсе.

 

Upd:

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

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

40 минут назад, Xipho сказал:

Ну хз. А как ты отфильтруешь адреса, не зная. какие из них были отведены под стек, и какие уже утратили актуальность, а какие - нет?

 

Я думаю, можно сделать проверку, например, есть статичный адрес который был найден сканером указателей, какой-нибудь AAAAAA. Для проверки возьмем сканер сигнатур или просто поиском константы,  найдем все инструкции, в которых есть адрес 0xAAAAAA и ограничим вывод результатов, фильтруя их по началу блоков, которые должны начинаться с определенных опкодов. Т.е основные, которые присваивают адреса и обычно работают со статичными адресами.

По типу:

B8 AAAAAA00   - mov eax, 0xAAAAAA
C700 AAAAAA00 - mov [eax], 0xAAAAAA
A1 AAAAAA00   - mov eax, [0xAAAAAA]
...

 

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

Немного не понял. Как это поможет отличить действующую структуру в памяти от фантомной, указатель на которую находится где-то в протухшей части стека?

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

2 часа назад, Xipho сказал:

Немного не понял. Как это поможет отличить действующую структуру в памяти от фантомной, указатель на которую находится где-то в протухшей части стека?

 

Так проверка направлена на фильтрацию статических адресов, которые реально используются, а не просто совпавший статический адрес указывающий на структуру в стеке. К примеру ищем статический адрес на 0xFEEDFACE, через сканер указателей, получаем статический адрес 0xDEADBEEF, теперь ищем этот 0xDEADBEEF, где он используется в коде. Находим такую инструкцию:

 

mov eax, [0xDEADBEEF]

Значит все хорошо, но так же, мы можем обнаружить какую-либо инструкцию, опкоды которой совпадают с указателем на 0xFEEDFACE, раз так, то отфильтровываем подобные результаты и получаем только реально работающие указатели.  Вот к примеру:

 

"mov eax, [0xDEADBE68]"
A1 68BEADDE

==========================

"push 0xDEADBE"
68 BEADDE00

 

Технически эти адреса одинаковые, но во втором случае указатель не будет работать после перезапуска, но сканер указателей покажет эти 2 случая. Да, это лечится новым сканированием после перезапуска, но не всегда перезапуск игры возможен.

Хотя, возможно это уже не нужные костыли.

 

44 минуты назад, MasterGH сказал:

C помощью Lua  можно убрать ненужные указатели. В документации по Lua все написано ;)

 

Отлично.

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

А, все, въехал. Ты хочешь отфильтровать те случаи, когда "подозреваемые" на самом деле являются частью опкода, а не его аргументами, грубо говоря.

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

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

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

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