Возник вопрос, как бороться с DMA? Посмотрел несколько топиков на форуме, но, к сожалению, получил лишь абстрактную информацию...
Допустим, я нашел текущий адрес жизней "516E806C", затем, путем изменения значения, получил в Cheat Engine такую информацию:
Собственно, что это? Что из этого мы можем получить?
Открывай дебаггер, смотри этот блок, получай значение регистра, проверяй, статический ли он, если нет, ищи что читает этот адрес и тд.
В итоге у тебя будет baseAdres, baseOffset, offset (или больше)
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
Открывай дебаггер, смотри этот блок, получай значение регистра, проверяй, статический ли он, если нет, ищи что читает этот адрес и тд.
В итоге у тебя будет baseAdres, baseOffset, offset (или больше)
Есть ещё метод проще через функцию в том же CheatEngine
заносишь адрес в список там открываешь менюшку(ПКМ) операций над адресом и тыкаешь Pointer scan for this address
CE ищет возможные поинтеры и офсеты потом перезаходим в игру находим опять этот адрес открываем окошко Pointer scan
открываем файл прошлых найденых поинтеров и офсетов
сверху находим Pointer scanner -> scan for pointer там вбиваем наш новый найденный адресс и он сокращает список возможных поинтеров и офсетов
делаем это пока не найдёте какой нибудь статичный поинтер с офсетом в списке
Да может написал не много бредово , но всё же недюсь разберётесь
Первым делом попробовал вариант предложенный Артемом. Найдено ничего не было. Возник текст с ошибкой, который сообщил, что создать файл невозможно.
Nickitee, не могли бы вы немного конкретизировать все, что вы изложили выше? Если вас это не затруднит, конечно.
Что подразумевается под дебаггером? И как запускается?
"смотри этот блок" - вы имеете ввиду блок из 6 строчек с адресами, представленных мною на скриншоте?
"получай значение регистра" - как? Что есть регистр?
"статический ли он" - "он" - это адрес? Как проверить, что "он" статический?
"baseAdres, baseOffset, offset (или больше)" - что это? И почему "или больше"?
P.S. При использовании функции Pointer scan for this address, по-моему, имеет место утечка памяти:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Это функция для поиска адреса по поинтерам и офсетам... (на с++)
с с++ на с# переписать без проблем так что вы справитесь...
так же она предназначена с работой в длл поэтому там где GetCurrentProcess() Замените на хандл вашего процесса
Поиск происходит примерно так...
Для адресов с 1 офсетом
DWORD temp = FindPointer(0x12345678,0x32);
Для адресов с 2 и больше
DWORD temp = FindPointer(0x12345678,0x32);
temp = FindPointer(temp,0x64);
....
Офсеты и поинтеры вымышлены
Цитата:
Сообщение от Furdarius
"получай значение регистра" - как? Что есть регистр?
Регистры это EAX,ECX,EBX и тд.
Пысы Могу по просьбе снять видио о поиске поинтеров и офсетов через ce
Последний раз редактировалось артём612; 09.07.2013 в 11:51.
И, все же, не могли бы вы объяснить что такое "baseAdres, baseOffset, offset" и в чем, допустим, разница между baseOffset и offset?
А за видео был бы очень благодарен.
вообщем допустим вы работаете с игрой
там идёт информация которая создаётся например при заходе не персонажа
и удаляется адреса при смерти и адреса меняются при возрождении...
так вот среди этих адресов допустим есть жизни нам надо их найти и изменить
сама игра как-то же находит этот адрес так же и мы будем их находить
-базовый адрес это адрес в котором хранится адрес самого массива персонажа(например жизни броня патроны... и т.д)
-офсет это смещение с этого адреса начала массива то есть на например нужны всё таки жизни а они находятся например вот так
int speed;
int protect;
int health;
то есть значение 3
и смещение будет 0x12 потому что int это число занимающее 4 байта
Пысы видио снять не могу
Последний раз редактировалось артём612; 14.07.2013 в 18:43.