Ответ 1
Я не знаю, чтобы кто-то, кроме Microsoft, внедрил оболочку приложения.
Возможно, вы захотите исследовать обходные пути, это может обеспечить необходимую вам функциональность.
В Windows есть возможность применять шайбы к приложениям с неправильным поведением. Шиммы используются для перехвата вызовов API и изменения его. Например, прокладки могут быть использованы для:
В Tookit совместимости приложений есть довольно много существующих оболочек, которые вы можете применить к своему неправильному поведению. Вот пример того, который игнорирует ваш вызов API и вместо этого вызывает совершенно другой API:
мне нужна прокладка, которая не является одной из сотен оболочек, уже написанных Microsoft. Мне нужна кастомная прокладка.
В моем случае я хочу перехватывать звонки на:
GetSystemMetrics(0x1000)
так что он возвращает 0
. я не могу найти информацию о том, как дать Windows свою собственную DLL, которая будет иметь нужное мне исправление. Я даже не знаю, можете ли вы создавать собственные прокладки.
Поддерживает ли Windows пользовательские прокладки?
Я не знаю, чтобы кто-то, кроме Microsoft, внедрил оболочку приложения.
Возможно, вы захотите исследовать обходные пути, это может обеспечить необходимую вам функциональность.
Вы должны думать об этом с точки зрения Раймонда Чена. Представьте себе, если бы кто-то, кроме Microsoft, мог написать совместимые прокладки. Тогда всякий раз, когда Microsoft вносит изменения, в дополнение ко всей их другой совместимости, им также придется писать прокладки для сторонних прокладок, которые сделали не то. Поддержание обратной совместимости достаточно сложно, как есть.
Возможно, но это требует некоторой работы.
Вы запускаете приложение, используя свою программу запуска, которая будет применять прокладку. Вы делаете это, позволяя вашей пусковой установке создавать процесс с достаточными полномочиями для редактирования своей памяти. Большинство функций API начинаются с двухбайтового nop, которому предшествует больше nops. Вы можете изменить двухбайтовый nop в короткий прыжок, а предыдущий nops - на длинный прыжок, куда вы хотите идти.
Альтернативным решением, которое я использовал в прошлом, является загрузка исполняемого файла в виде библиотеки DLL, но это может привести к большей работе, поскольку в зависимости от того, насколько сложно это приложение. В моей ситуации мне пришлось загружать исполняемый файл как DLL с данными и делать все мои собственные импортные, но, к сожалению, предыдущее решение для меня не было вариантом.
Я также однажды написал подключаемую DLL, которая использует аналогичные принципы, но это только вариант, если вы можете либо изменить источник для загрузки DLL, либо если процесс поддерживает DLL-плагины.
вы можете всегда использовать обратную инженерию, чтобы исправить это:), дайте мне знать, если вам нужна помощь с ней