· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Перехват NtQuerySystemInformation в XP

Посл.отвђт Сообщенiе


Дата: Авг 23, 2004 00:13:27

У меня есть драйвер для сокрытия процесса под Win NT\2K, а на Win XP не работает. Исходник драйвера к программе Invisibility by Yoda. Здесь где-то говорили, что нужно переписать в драйвере функцию NativeApiIdFromApiAddress. Привожу ее код:

;
; Returns: -1 = error
; else = Native API ID
;
; Args: pApiEntry = EntryPoint address of a NTDLL routine
;
; Should look like....
; pApiEntry:
; B8 XX XX XX XX MOV EAX, XXXXXXXX
; 8D 54 24 04 LEA EDX, [ESP + 004h]
; CD 2E INT 02Eh
; C2 YY YY RET YYYY
;
NativeApiIdFromApiAddress PROC USES ESI EDI EBX, pApiEntry : LPVOID
SUB EAX, EAX
DEC EAX ; EAX -> -1 == error

; signature check
MOV ESI, pApiEntry
LODSB
CMP AL, 0B8h
JNZ @@exit
LODSD
LODSD
CMP EAX, 00424548Dh
JNZ @@exit
LODSW
CMP AX, 02ECDh
JNZ @@exit
LODSB
CMP AL, 0C2h
JNZ @@exit

; grab NT API index
MOV EAX, pApiEntry
MOV EAX, [EAX + 1]
@@exit:
RET
NativeApiIdFromApiAddress ENDP

Она сканирует точку входа API в ntdll в надежде, что она выглядит так:
; B8 XX XX XX XX MOV EAX, XXXXXXXX
; 8D 54 24 04 LEA EDX, [ESP + 004h]
; CD 2E INT 02Eh
; C2 YY YY RET YYYY

Но это верно для NT4 и 2000. В ХР уже не так, а так:
ntdll!NtQuerySystemInformation
001b:77f7ee83 b8ad000000 mov eax,000000ad
001b:77f7ee88 ba0003fe7f mov edx,7ffe0300
001b:77f7ee8d ffd2 call edx
001b:77f7ee8f c21000 ret 0010

Помогите, пожалуйста, кому не влом переписать эту функцию.


Дата: Авг 23, 2004 12:13:54

[ Crash: Здесь где-то говорили, что нужно переписать в драйвере функцию NativeApiIdFromApiAddress. ]

"Я этот человек" (c) Карабас-Барабас.

Но я там ещё говорил, что одного этого будет недостаточно. ПереписАть NativeApiIdFromApiAddress под ХР самое простое, что нужно сделать. Если ты не в состоянии сделать даже это, то вряд ли сможешь довести дело до конца.


Дата: Авг 23, 2004 13:56:09

Я почистил драйвер, удалил из него GetKeServiceDescriptorTableShadow и все, что с ней связано. Теперь драйвер прячет только процесс, но не его окна. Для меня главное - спрятать процесс. После моих действий получился такой вот драйвер (аттач). Насколько я понимаю, для работы в XP в NativeApiIdFromApiAddress нужно заменить следующие строчки:

CMP EAX, 00424548Dh
CMP AX, 02ECDh

соответственно на следующие:

CMP EAX, 07FFE0300BAh
CMP AX, 0D2FFh

Поправьте меня, если я не прав.

_1274073913__invisible.asm


Дата: Авг 23, 2004 20:14:09

вполне достаточно так (работает в 2к/ХР/2к3) -
NativeApiIdFromApiAddress PROC
or eax,eax
JZ @F
mov ecx,[eax]
or ecx,ecx
JZ @F
cmp byte ptr [ecx],0B8h
jnz @F
mov eax,[ecx+1]
jmp exit1
@@:
xor eax,eax
dec eax
exit1:
RET
NativeApiIdFromApiAddress ENDP

предпологается, что eax на входе получен прямяком из
mov eax,(_IRP PTR [esi]).SystemBuffer


Дата: Авг 23, 2004 21:21:13

Спасибо. В Win2000 работает. Осталось проверить на WinXP. Надеюсь, на ней тоже пойдет.


Дата: Авг 24, 2004 16:33:42

Corpse
А вот на Win XP опять не идет. В чем может быть дело?
Драйвер стал таким:

_796919311__invisible.asm


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075