Значение хэша MD5 и SHA256 файла будет различным, если файл находится в папке system32. Почему?

Я рассчитал хеш-значения MD5 и SHA256 для notepad.exe и mspaint.exe с помощью онлайн-генераторов хешей md5FileCalculator Onlinemd5. Я заметил, что если я вычисляю, когда оба exe присутствуют в их фактическом положении в system32, приходящее значение отличается от того, когда они помещаются где-то из папки system32. В чем причина этого? Какое хеш-значение правильное?

Я использую политику ограниченного использования программ для блокировки приложений, я создал правило хеширования для файла notepad.exe (присутствует в папке SYSTE32) и заблокировал его. Когда я проверяю хеш-значение в реестре, оно отличается от хеш-значения notepad.exe (из папки SYSTEM32), вычисленного другими методами, такими как онлайн-калькуляторы md5 или через Windows API. Но когда я копирую файл notepad.exe в другую папку, скажем, на рабочем столе, и вычисляю хеш-значение, он оказывается таким же, как и в реестре, для которого я создал правило. Таким образом, правильное значение - это то, которое я получаю. когда файл находится вне папки system32. Но я не понимаю, почему это происходит? Это как-то связано с разрешениями?


person jain    schedule 29.04.2015    source источник
comment
не могли бы вы еще раз проверить свой вопрос? Я сделал то, что вы предлагали, и у меня все еще те же хеш-значения   -  person Artur Peniche    schedule 29.04.2015
comment
Файл notepad.exe находится в C: \ Windows \ System32 \ notepad.exe Версия файла: 6.1.7600.16385 Размер файла: 193536 байт Хеш-значение (MD5): d378bffb70923139d6a4f546864aa61c Notepad.exe (я скопировал файл на рабочий стол) C: \ Users \ Имя_пользователя \ desktop \ notepad.exe Версия файла: 6.1.7600.16385 Размер файла: 193536 байт. Хеш-значение (MD5): f2c7bb8acc97f92e987a2d4087d021b1 Используется MD5file.com для генерации хеш-значений   -  person jain    schedule 30.04.2015
comment
@ArturPeniche Как вы рассчитываете хеш-значение?   -  person jain    schedule 30.04.2015


Ответы (2)


Это из-за 32-битных приложений, работающих в 64-битной Windows, и из-за того, как Windows обрабатывает папку System32 для этих программ.

Некоторое время это также сводило меня с ума, потому что я не мог понять, почему определенные файлы в System32 (а именно .dlls и .exes) возвращали разные хэши в зависимости от того, с чем я их проверял.

Используя HxD и Firefox для загрузки файла и проверки его хэша, я получил разные результаты по сравнению с с помощью средства проверки хэша QTTabBar, которое выполняется внутри explorer.exe.

Но если бы я скопировал один из этих файлов в другое место, то получил бы одинаковые результаты для всех программ.

Между тем, HxD показал разную длину скопированного файла по сравнению с файлом в System32, и, хотя оба они показали одинаковое распределение байтов, также были существенные различия.

Но потом я подумал попробовать то же самое в другой папке и, наконец, взломал ее с небольшой помощью Википедии :

Операционная система использует каталог % SystemRoot% \ System32 для своей 64-разрядной библиотеки и исполняемых файлов. Это сделано по причинам обратной совместимости, поскольку многие устаревшие приложения жестко запрограммированы для использования этого пути. При выполнении 32-битных приложений WoW64 прозрачно перенаправляет 32-битные библиотеки DLL в папку % SystemRoot% \ SysWOW64, которая содержит 32-битные библиотеки и исполняемые файлы.

32-битные приложения обычно не знают, что они работают в 64-битной операционной системе. 32-разрядные приложения могут получить доступ к % SystemRoot% \ System32 через псевдокаталог % SystemRoot% \ Sysnative.

Поскольку HxD и Firefox (и большинство других браузеров) являются 32-разрядными приложениями, когда вы загружаете в них файл, Windows фактически прозрачно перенаправляет их в файл с тем же именем в папке SysWOW64 (предположительно, если вы запускали 64-разрядную версию). bit-браузер, вы не столкнетесь с этой проблемой).

Точно так же, когда вы копируете файл из System32 в другое место, explorer.exe, будучи 64-битным процессом, копирует исходный файл System32, а не его эквивалент (со странным названием) SysWOW64.

Итак, как говорится в вики, если вы введете %SystemRoot%\Sysnative в путь к диалогу открытия файла в вашем 32-битном приложении, оно должно загрузить файл из реальной папки System32 и дать вам правильный результат.

И если вы проверите файлы в каталоге SysWOW64, все файлы должны возвращать одинаковые соответствующие хэши, независимо от того, чем вы их открываете.

Дальнейшее чтение:

person hair pin    schedule 04.12.2015
comment
Я скопировал notepad.exe с Sys32 на рабочий стол. Затем я проверил хеши: System32, SysWow64 и Desktop. Sys32 и Wow 64 были идентичны, тогда как файл на рабочем столе был другим ... - person Daniel Pflüger; 04.12.2015
comment
Чем проверяли хеши? Если вы использовали 32-битное приложение, то при проверке файла System32 оно вернет тот же результат, что и SysWow64 (потому что Windows перенаправляет его туда), но, скопировав его на рабочий стол, 64-битный explorer.exe создает копию файла. исходный файл из System32, поэтому вы получите другой результат. Попробуйте загрузить notepad.exe с помощью% SystemRoot% \ sysnative и посмотрите, что произойдет. - person hair pin; 04.12.2015
comment
Чтобы подтвердить ответ, я пишу программу под названием QuickHash, которую я компилирую только как 32-битную программу, и она отлично работает как в 64-битных, так и в 32-битных системах. Однако пользователь сообщил, что файлы в C: \ Windows \ System32 сообщают о неверных хэшах. Я проверил отчет и нашел его правильным. Тем не менее, если файл (ы) копируется в c: \ temp, они отлично хешируются. Так что теперь мне нужно посмотреть на компиляцию 32 \ 64-битных версий. - person Gizmo_the_Great; 22.01.2016

Вы уверены, что проверяете один и тот же файл по разным путям? Я думаю, вы проверяете два разных notepad.exe. Проверьте размер файла ... он должен быть точно таким же по байтам. Я только что проверил свой notepad.exe на двух разных путях: C: \ Windows \ System32 и C: \ Windows, и они разные.

person Filipe Paulo    schedule 29.04.2015
comment
Скопировал файл из папки system32 на рабочий стол. Размер отображается одинаково для обоих файлов. - person jain; 30.04.2015