Практический анализ вредоносных программ - лабораторная работа 5.1, функция 11, sub_100036C3 - PullRequest
1 голос
/ 29 февраля 2020

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

Краткое вступление:

Page 107 Вопрос 11. Что делает экспорт PSLIST?

Страница 498. Ответ: Функция sub_100036C3 проверяет, является ли версия ОС Windows Vista / 7 или XP / 2003/2000.

Разобранный код:

disassembled code

Мы видим инструкцию:

cmp [ebp+VersionInformation.dwMajorVersion], 5
jb short loc_100036FA

dwMajorVersion - 5 для XP / 2003/2000 .

dwMajorVersion равно 6 для Windows Vista / 7.

Но в инструкции с дизассемблированным кодом jb short loc_100036FA не будет переходить к loc_100036FA, только если dwMajorversion> = 5 и будет переходить только если dwMajorVersion <5 (перейдите, если ниже). </p>

Так что, по моему мнению, его нельзя использовать для выбора между XP и Vista / 7, потому что все 5 и 6 попадают в красную стрелку.

Пожалуйста, кто-нибудь может объяснить, я прав или какую ошибку я сделал?

1 Ответ

1 голос
/ 04 марта 2020

Функция sub_100036C3 просто выносит суждение, чтобы определить, является ли операционная система хоста Win2000 или выше (возможно, поэтому она возвращает значение bool вместо трех опций (Windows Vista / 7? Или XP / 2003/2000? Или нет?)).

Если мы используем дизассемблирование, логика c этой функции примерно такова:

BOOL sub_100036C3()
{
    OSVERSIONINFOA VersionInformation;
    VersionInformation.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
    GetVersionExA(&VersionInformation);

    return VersionInformation.dwPlatformId == 2 && VersionInformation.dwMajorVersion >= 5;
}

Так что, пока версия не Windows 95, они будут следовать средний процесс. enter image description here

...