elvis66666 Опубликовано 29 июля, 2015 Поделиться Опубликовано 29 июля, 2015 Допустим в игре есть код:movss [eax+18], xmm4По адресу в eax со смещением 18 хранится нужное мне значение. Как мне его узнать без внедрения инекции? Возможно через дизасемблер типа BeaEngine? Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 29 июля, 2015 Поделиться Опубликовано 29 июля, 2015 Поставь в отладчике бряк на эту инструкцию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 29 июля, 2015 Поделиться Опубликовано 29 июля, 2015 Взять адрес в памяти, бряк на который показывает эту инструкцию, и отнять 18. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 29 июля, 2015 Поделиться Опубликовано 29 июля, 2015 Если без инъекции в классическом ее понимании, то ты можешь написать простейший отладчик. Для этого понадобится выяснить, что такое брейкпоинт (инструкция int 3), например и достать где-нибудь дизассемблер длин инструкций. Ставишь брейкпоинт на адрес нужной инструкции, сохраняешь ее, зная длину, оставшиеся байты балансируешь nop-ами. Восстанавливаешь процесс и ждешь срабатывания исключения от брейкпоинта, как сработало - используешь inline-ассемблер, чтобы вытащить данные из регистра, восстанавливаешь оригинальную инструкцию и отцепляешься от процесса. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
elvis66666 Опубликовано 29 июля, 2015 Автор Поделиться Опубликовано 29 июля, 2015 (изменено) Нельзя менять код или инструкцию. Я бы хотел способом как в cheat engine - what access, what write... Чтобы это было на лету без вмешательства в структуру кода. Есть такая возможность? Изменено 29 июля, 2015 пользователем elvis66666 Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 29 июля, 2015 Поделиться Опубликовано 29 июля, 2015 Я описал один из способов, который использует Cheat Engine. Еще один вариант - у тебя есть пара регистров CS:EIP, которые указывают на адрес инструкции относительно начала секции кода, можно следить за этим значением и в нужный момент остановить программу, прочитать значение регистра и выйти. Как именно это делается - фиг знает, я никогда так не пробовал делать. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 июля, 2015 Поделиться Опубликовано 29 июля, 2015 Допустим в игре есть код:movss [eax+18], xmm4По адресу в eax со смещением 18 хранится нужное мне значение. Как мне его узнать без внедрения инекции? Возможно через дизасемблер типа BeaEngine? BeaEngine может дизссемблировать код, но не читать регистры из контекста потока. Значение регистра eax можно узнать средствами отладки (функции WinAPI) . Toggle hardware data/read/execute breakpoints programmatically - linkDebugging Functions (MSDN) - link Бряк в данном случае лучше ставить аппартный, а не int3. Для этого есть специальные регистры отладки, но их не так много. И еще аппартный бряк выполняет инструкцию, а потом прерывается. Т.е.если mov eax,[eax+4], то левый eax прочтешь, но не в скобках 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 29 июля, 2015 Поделиться Опубликовано 29 июля, 2015 Если без int3, то 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
elvis66666 Опубликовано 29 июля, 2015 Автор Поделиться Опубликовано 29 июля, 2015 Благодарю, буду разбираться! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения