Не запускаются программы и Ошибка при инициализации приложения 0xc0000005
Содержание
Включив компьютер, нашел приятный «подарок» от Microsoft. При запуске почти любой программы, выскакивает сообщение «Ошибка при инициализации приложения 0xc0000005«. Как любой уважающий себя пользователь Windows 7 x64, решил открыть браузер Chrome, чтоб «загуглить» решение этой проблемы, но проблема в том, что Chrome, так же выдает эту ошибку. Впрочем, и родной Internet Explorer вылетает, правда без ошибок.
Добравшись до браузера с другого компьютера, на котором еще не было обновления, причина нашлась – это обновление Windows с номером KB2859537 от 14.08.2013. Ошибка 0xc05 появляется после апдейта, во время запуска большинства 32-х битных приложений под 64-х битной Windows 7.
Зачем нужно было обновление KB2859537?
Обновление KB2859537 было призвано исправить четыре уязвимости в ядре Windows, позволяющие несанкционированное повышение прав. Первая уязвимость позволяла загрузить DLL в процесс, обходя механизм защиты ASLR, призванный снизить риск эксплуатации уязвимостей. Три остальные уязвимости связаны с ошибками в проверке адресов ядром Windows, что приводит к повреждению памяти и позволяет запустить произвольный код в режиме ядра. После этого повышение прав уже не проблема.
Почему перестали запускаться программы?
Апдейт KB2859537 заменяет много системных файлов, в том числе файлов ядра. Если оригинальное ядро было модифицировано, его замена может привести к проблемам. У такой модификации есть две наиболее вероятные причины:
- Вредоносные программы — это не первый случай, когда обновление ядра выявляет наличие проблем в системе, 3.5 года назад случайно обнаружился руткит Alureon.
- Нелегальная активация — этот момент отлично разобрал участник конференции OSZone simplix, который не понаслышке знаком со сборками Windows, а также является автором полезной программы AntiSMS для лечения вирусов и троянов.
Позволю себе процитировать его пост в форуме, выделив жирным то, в чем заключается проблема.
Проблема возникает из-за того, что во взломанных системах используется старая версия ntoskrnl.exe, которую патчер (или сборка) переименовывают в xNtKrnl.exe и прописывают в поле kernel через bcdedit. Это нужно для того, чтобы система работала с драйвером, эмулирующим SLIC-таблицу. Старая версия ядра не совместима с новыми файлами подсистемы Wow64, из-за этого в 64-битной системе 32-битные программы перестают запускаться.
Вины Microsoft здесь нет, они просто не тестировали обновления на ломаных сборках. К слову, если пропатчить новую версию ядра, то система будет работать как положено — это означает, что обновление не нацелено на борьбу с пиратскими системами, просто так сложились звёзды.
Кстати, simplix ранее предупреждал читателей блога о возможных проблемах сборок, в которых заменяются ресурсы.
Решение проблемы
Если у вас возникнет, такая же проблема, и Вы каким то чудом добрались до браузера и нашли этот пост, вот решение проблемы:
- Открыть панель управления
- Запустить «Программы и компоненты»
- Перейти в «Просмотр установленных обновлений»
- Найти обновление KB2859537 и удалить его
Или открываем командную строку и запускаем команду: wusa /uninstall /kb:2859537
Откат к точке восстановления системы
Запустите восстановление системы и откатитесь к точке до возникновения проблемы. Если не получается или система не загружается, войдите в среду восстановления Windows 7 или Windows 8 и выполните восстановление системы оттуда. И да, эта ситуацию действительно спасает откат.
Удаление обновления KB2859537 из среды восстановления с помощью DISM
Этот более сложный вариант имеет смысл применять только в том случае, если первыми двумя способами удалить обновление не удалось.
- Загрузитесь в среду восстановления Windows 7 или Windows 8.
- Запустите командную строку и определите букву диска, на котором установлена Windows.
- В командной строке выполните: DISM /Image:D:\ /Get-Packages где D — буква диска с системой, которую вы определили на предыдущем шаге.
- В результатах команды найдите пакет, содержащий в названии KB2859537.
- Выделите имя пакета левой кнопкой мыши и нажмите правую кнопку мыши, чтобы скопировать его в буфер обмена.
- В командной строке наберите: DISM /Image:D:\ /Remove-Package /PackageName: и нажмите правую кнопку мыши, чтобы вставить имя пакета.
- Должна получиться примерно такая команда: DISM /Image:D:\ /Remove-Package /PackageName:Package_for_KB2859537~31bf3856ad364e35~x86~~6.1.1.3
- Нажмите Enter, чтобы выполнить команду и удалить пакет.
Примечание. В случае успешного удаления, KB2859537 исчезнет из списка установленных обновлений в панели управления. Однако в журнале установленных обновлений оно будет присутствовать, поскольку установка производилась.