![]() |
eXeL@B —› Вопросы новичков —› Проблема с VirtualProtect под Windows7 |
Посл.ответ | Сообщение |
|
Создано: 14 января 2013 23:55 · Личное сообщение · #1 Успешно пользовался примерно таким кодом под WinXP: Code:
На Windows7 x86 код вызывает исключение. Код выполняю в DLL которая вызывается жертвой (EXE). ![]() |
|
Создано: 15 января 2013 00:03 · Личное сообщение · #2 1. неплохо было бы добавить обработку результатов вызовов функций VirtualProtect + GetLastError 2. Вы уверены в существовании адреса 0x440200? в целевом ехе может присутствовать релокация, которой в win 7 ЕХЕ таки подвержены. 3. создаются ли потоки в dll_main? 4. можно попробовать сместить адрес 0x440200 на начало страницы ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 15 января 2013 00:21 · Личное сообщение · #3 |
|
Создано: 15 января 2013 00:27 · Поправил: HandMill · Личное сообщение · #4 ToBad пишет: В ехе релоки присутствуют, но я патчу не в код содержащий их. какая разница если Вы сами говорите что ЕХЕ подвержен релокации и при этом адрес хардкодится вместо того что б считать от image base? рекомендация: Вы до сих пор не обработали все перечисленные мною пункты, хотя бы ошибки вызовов VirtualProtect как-то обработайте ----- все багрепорты - в личные сообщения ![]() |
|
Создано: 15 января 2013 01:20 · Личное сообщение · #5 ToBad ну я же вам тогда не просто так писал Code:
![]() |
|
Создано: 15 января 2013 02:50 · Личное сообщение · #6 HandMill пишет: какая разница если Вы сами говорите что ЕХЕ подвержен релокации и при этом адрес хардкодится вместо того что б считать от image base? SReg пишет: ну я же вам тогда не просто так писал Простите, туплю... Сейчас посмотрел под отладчиком в Win7 (комп чужой, не мог ранее), действительно адреса не те, нужно учитывать image base... ![]() |
|
Создано: 15 января 2013 04:45 · Личное сообщение · #7 Всё отлично получилось, спасибо за помощь! Хотя опять вылезли какие то особенности семёрки, которых я не знаю. У меня патч проходит во многих функциях. Ранее я ставил страничку на запись из первой используемой функции, а возвращал на место в последней после нужного патча. Теперь так не работает. В пределах каждой функции я должен установить PAGE_READWRITE, пропатчить и вернуть назад. Если этого не сделать - вылетает. GetLastError после VirtualProtect отлавливаю - ошибок нет. ![]() |
|
Создано: 15 января 2013 08:17 · Личное сообщение · #8 Может лучше ставить EXECUTEREADWRITE. При выполнении кода с чтением и записью запросто может вылететь эксепшн. ![]() |
|
Создано: 15 января 2013 08:54 · Личное сообщение · #9 |
|
Создано: 15 января 2013 10:56 · Личное сообщение · #10 |
|
Создано: 15 января 2013 15:55 · Личное сообщение · #11 |
|
Создано: 15 января 2013 16:30 · Личное сообщение · #12 |
|
Создано: 15 января 2013 16:52 · Личное сообщение · #13 Специфика такова, что из дллмейн я ставлю только первый инжект на мою функцию и всё. Далее когда программа туда заруливает, я в функции возвращаю на место то, что патчил для перехода, делаю всё что нужно и устанавливаю переход на следующую мою функцию в которой происходит всё тоже самое. В последней возвращаю на место атрибуты страницы, и всё, меня там как бы не было... ![]() Nightshade пишет: Может лучше ставить EXECUTEREADWRITE. Да, это оно самое! С таким атрибутом я могу делать как описал выше и не смыкать VirtualProtect несколько раз в одной функе. Проблема решена! Спасибо! p.s. Тему пока не закрываю, проверю всё сперва, вдруг всплывёт что-то ещё. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Проблема с VirtualProtect под Windows7 |