ETI>>В PE заголовке есть CheckSum (_IMAGE_OPTIONAL_HEADER), но для EXE-файлов процессов поле может быть некорректным и/или незаполненным.
S>О, а из запущенного процесса нельзя ли его извлечь?
PE-заголовок проецируется как часть exe-файла, нужно только его разобрать (относительно MZ-заголовка). PsGetProcessSectionBaseAddress не документирована MSDN'ом, но экспортируется ядром и дает адрес MZ-заголовка.
S>Кто-то из малварей может и будет специально его портить. Но 70-98% не будут.
К сожалению, даже не все
линкеры проставляют это поле по умолчанию. Требование к корректности этого поля есть, например, у sys-файлов драйверов, а у exe-файлов процесса — нет.
В
IMAGE_FILE_HEADER есть поле TimeDateStamp, заполнено чаще.