Ответы пользователя по тегу Assembler
  • Как работает память процессов в windows?

    @menkar3
    Я хочу просто перезаписат отделюную инструкцию, как мне это сделать, если она каждый раз находится на разных адресах

    WinApi же. Из юзермода - инжект кода в процесс. Т.е. принципиально что-то вроде (как бы я делал на си, во всяком случае):
    0. Инжектимся (банальный вариант, от которого может психовать антивирус/что там еще - аллоцируем в процессе исполняемую память, загоняем туда в бинарном виде свой код, создаем на нем тред). Дальше вся работа в целевом процессе:
    1. GetModuleHandle - находим интересующую нас dll, хендл эквивалентен ее базовому адресу.
    3. NtProtectVirtualMemory - разрешаем запись на странице с интересующей инструкцией. Опционально - приостанавливаем остальные треды.
    4. Перезаписываем инструкцию (для конкретной dll просто находим ее относительно начала dll)
    5. Профит (если останавливали треды - возобновляем, опционально возвращаем старые аттрибуты странице)

    для конкретной dll просто находим ее относительно начала dll - вилами по воде, конечно. Если функция экспортируется - есть GetProcAddress, что позволит искать ее относительно начала функции (уже меньше шансов на фейл).
    Напрямую с памятью другого процесса разве что из ядра шаманить выйдет.
    Ответ написан
    Комментировать