Проблема с защитой импорта

В своей программе динамически подключаю ntdll.dll, использую 2 функции

var
  hLibrary: HMODULE;
begin
  try    
    hLibrary := LoadLibrary('ntdll.dll');
    if hLibrary <> 0 then
    begin
        @_NtQuerySystemInformation := GetProcAddress(hLibrary, 'NtQuerySystemInformation');
        @_NtQueryInformationProcess := GetProcAddress(hLibrary, 'NtQueryInformationProcess');
    end;

Далее упаковываю .exe(64 бит, скомпилирован в DXE2)


Windows 7 SP1 x64

Программа завершается с ошибками



Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: procman.vmp.exe
Версия приложения: 1.0.2.0
Отметка времени приложения: 4feb4924
Имя модуля с ошибкой: ntdll.dll
Версия модуля с ошибкой: 6.1.7601.17514
Отметка времени модуля с ошибкой: 4ce7c8f9
Код исключения: c0000005
Смещение исключения: 0000000000018e3d
Версия ОС: 6.1.7601.2.1.0.768.3
Код языка: 1049
Дополнительные сведения 1: 3e17
Дополнительные сведения 2: 3e17cb409254b3461dfbc1155f1bfcc3
Дополнительные сведения 3: bbeb
Дополнительные сведения 4: bbeb3a7898194486c0202e3f8a07a1de

Если не загужаю ntdll.dll и “Защита импорта” включена проблем не возникает

VMProtect Ultimate 2.1.2.6186

С предыдущей версией VMProtect такой проблеммы не замечал

Присылайте тестовый пример, на котором воспроизводится проблема.

http://www.smalldonkey.net/vmerr/procman.zip

Можно собрать с МАР файлом?

http://www.smalldonkey.net/vmerr/procman2.zip

Под отладчиком ваш оригинальный файл падает в том же самом месте:

Access violation at address 00000000004DE248 in module’procman.exe’. Read of address 0000000000000438

и VMProtect здесь непричем.
Скорее всего у вас идет рассинхронизация 2-х потоков и в потоке, в котором идет работа с GUI идет обращение по нулевому указателю:

00000000004DE240 53                      push rbx <- Vcl.Controls.TWinControl.HandleNeeded
00000000004DE241 4883EC20                sub rsp, 20 
00000000004DE245 4889CB                  mov rbx, rcx 
00000000004DE248 4883BB3804000000        cmp qword ptr [rbx+0000000000000438], 00 <- падение здесь
00000000004DE250 751C                    jnz 00000000004DE26E
00000000004DE252 48837B6800              cmp qword ptr [rbx+68], 00 
00000000004DE257 7409                    jz 00000000004DE262
00000000004DE259 488B4B68                mov rcx, [rbx+68] 
00000000004DE25D E8DEFFFFFF              call 00000000004DE240 -> Vcl.Controls.TWinControl.HandleNeeded
00000000004DE262 4889D9                  mov rcx, rbx 
00000000004DE265 488B1B                  mov rbx, [rbx] 
00000000004DE268 FF9368010000            call qword ptr [rbx+0000000000000168] 
00000000004DE26E 4883C420                add rsp, 20 
00000000004DE272 5B                      pop rbx 
00000000004DE273 C3                      ret

Извиняюсь что напряг вас, VMProtect непричем, моя ошибка, пипец настолько она банальная что просто не обращал на неё внимания, и грешным делом подумал на VMProtect.