Уроки Iczelion'а




Анализ: - часть 2


push eax VMMCall _HeapAllocate,

mov pTitle,eax pop eax

VMMCall _lstrcpyn,

Она подсчитывает длину заголовка окна сообщения с помощью вызова VMM-сервиса _lstrlen. Значение в eax, возвращенное _lstrlen - это длина строки. Мы повышаем значение на один, учитывая завершающий NULL. Затем мы занимаем достаточно большой блок памяти, чтобы поместить в него строку с завершающим NULL'ом, с помощью вызова _HeaрAllocate. Флаг HEAPZEROINIT указывает _heaрAllocate обнулить зарезервированную память. Затем мы копируем строку из адресного пространства win32-приложения в блок памяти, который мы заняли. Затем мы делаем ту же операцию над текстовой строкой, которую мы используем как текст сообщения.

mov edi,pTitle mov ecx,pMessage mov eax,MB_OK VMMCall Get_Sys_VM_Handle VxDCall SHELL_sysmodal_Message

Мы сохраняем адреса заголовка и сообщения в edi и ecx. Помещаем желаемый флаг в eax, получаем хэндл системной виртуальной машины с помощью вызова Get_Sys_VM_handle и затем вызываем SHELL_Sysmodal_Message. SHELL_Sysmodal_Message - это системная модальная версия SHELL_Message. Она замораживает систему, пока пользователь не ответит на message box.

VMMCall _HeapFree,pTitle,0 VMMCall _HeapFree,pMessage,0

Когда SHELL_Sysmodal_Message возвращается, мы можем освободить блок памяти вызовом _HeapFree.




Содержание  Назад  Вперед