Собственно код самый обычный - классик RunPE, делает NtUnmapViewOfSection если базы образов совпадают, после этого выделяет память; если базы не совпадают то сразу выделяет память по нужной базе
подопытные notepad.exe и ProcessHacker
инжект ProcessHacker в notepad
x64:
так как включен ASLR то базы образов не совпадают, NtUnmapViewOfSection не вызывается, процхакер успешно загружается в адресное пространство и стартует, работает без нареканий, все идеально
НО, если я специально комментриую условие вызова NtUnmapViewOfSection по адресу старой базы, то он в любом случае вызывается и очищает память по старой базе процесса в который идет инжект
В таком случае процхакер загружается в память, появляется его интерфейс, интерфейс функционирует, можно клацать по кнопкам, заходить в пункты меню, открывать about и так далее, но ничего не показывает касательно системной информации, 0 процессов, 0 коннектов и так далее
x32:
Если повторить такой же эксперимент на 32 битах, то процхакер вообще не запускается - вылет с кодом ошибки 0xC0000005, странно что на 64 битах работает, хотя только частично и с этим глюком интерфейса
//=======//
Чем может быть обьяснено такое поведение ? По сути NtUnmapViewOfSection мы вызываем по старой базе и никак не затрагиваем новый образ, потому что его еще не существует, на данном этапе даже память под него еще не выделена
Может при этом затрагиваются какие-то важные структуры процесса ? Кто что думает ?
подопытные notepad.exe и ProcessHacker
инжект ProcessHacker в notepad
x64:
так как включен ASLR то базы образов не совпадают, NtUnmapViewOfSection не вызывается, процхакер успешно загружается в адресное пространство и стартует, работает без нареканий, все идеально
НО, если я специально комментриую условие вызова NtUnmapViewOfSection по адресу старой базы, то он в любом случае вызывается и очищает память по старой базе процесса в который идет инжект
В таком случае процхакер загружается в память, появляется его интерфейс, интерфейс функционирует, можно клацать по кнопкам, заходить в пункты меню, открывать about и так далее, но ничего не показывает касательно системной информации, 0 процессов, 0 коннектов и так далее
x32:
Если повторить такой же эксперимент на 32 битах, то процхакер вообще не запускается - вылет с кодом ошибки 0xC0000005, странно что на 64 битах работает, хотя только частично и с этим глюком интерфейса
//=======//
Чем может быть обьяснено такое поведение ? По сути NtUnmapViewOfSection мы вызываем по старой базе и никак не затрагиваем новый образ, потому что его еще не существует, на данном этапе даже память под него еще не выделена
Может при этом затрагиваются какие-то важные структуры процесса ? Кто что думает ?