Гайд Как получить OS-build номер Windows

ldloc.s <d0t.net> stloc.s <Reversed>
Пользователь
Статус
Оффлайн
Регистрация
21 Окт 2018
Сообщения
214
Реакции[?]
337
Поинты[?]
1K
Как известно, у вмпротекта легко упростить функциональность защиты, меняя номер сборки ОС Windows через PEB процесса (OSBuildNumber):
(gs:[0x60]+0x120) - x64
(fs:[0x30]+0xAC) - x86

Но, как бы я не менял, как-будто вообще ничего не изменяется. Оказывается, когда снимал трассу VMProtect, обнаружил еще 1 способ: (код протектора)
1624623668585.png

И здесь происходит перебор модуля ntdll.dll на поиск в ресурсах строки FileVersion(unicode), которая содержит в себе номер сборки ОС, на которой была выпущена эта библиотека. (даже если у вас в win+r -> winver будет отличаться этот номер с тем, который в этой библиотеке, то можно считать их равными, т.к. особых изменений при обновлении windows это не повлекло, библиотеку незачем было менять. Если я не прав, поправьте).
И я сделал реализацию(почти 1 в 1 как у ВМП, только без базы build'ов версии) без лишних вызовов(не люблю их, люблю оптимизировать и скрывать некоторые вещи в бинарнике). Сам код простейший:
C++:
#include <iostream>
#include <Windows.h>

int main()
{
    char* pNative = (char*)GetModuleHandleA("ntdll");
    while (true)
    {
        if (pNative[0] == 0x46) // F
        {
            if (pNative[2] == 0x69) // i
            {
                if (pNative[4] == 0x6C) // l
                {
                    if (pNative[6] == 0x65) // e
                    {
                        if (pNative[8] == 0x56) // V
                        {
                            if (pNative[10] == 0x65) // e
                            {
                                if (pNative[12] == 0x72) // r
                                {
                                    if (pNative[14] == 0x73) // s
                                    {
                                        if (pNative[16] == 0x69) // i
                                        {
                                            if (pNative[18] == 0x6F) // o
                                            {
                                                if (pNative[20] == 0x6E) // n
                                                {
                                                    if (pNative[22] == 0x00)
                                                    {
                                                        if (pNative[24] == 0x00)
                                                        {
                                                            wprintf(L"%s\n", pNative + 26);
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        pNative += 0x02;
    }
    system("pause");
    return 0;
}
Результат:
1624624057243.png
 
Последнее редактирование:
C++
Забаненный
Статус
Оффлайн
Регистрация
3 Окт 2019
Сообщения
662
Реакции[?]
129
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нихуя не понял, но лайк за старания в разборе VMP :)
 
saphire alpha user
Забаненный
Статус
Оффлайн
Регистрация
17 Июн 2021
Сообщения
69
Реакции[?]
58
Поинты[?]
1K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Гуд джоб
 
Сверху Снизу