ring0: db dw mov call_sice: db dw mov
0CDh,20h 0001h,0001h edx, 400h
; Get_Cur_VM_Handle
0CDh,20h 009Ah,0001h esi,dword ptr [call_sice+2]
; Disable_Local_Trapping
mov cmp
esi,[esi] word ptr [esi],015FFh
jne cmp jne
niee_sice word ptr [esi+6],05751h niee_sice
inc niee_sice:
; offset DWORDa wskazujacego na adres ; Disable_Local_Trapping ; adres Disable_Local_Trapping ; czy pierwsze bajty procki to czesc ; instruckji call dword[..]? ; jesli nie pomin
jest_sicE
Następnym z debuggerów pozwalających na śledzenie kodu ring-0 jest TRW. Również dzięki niemu można zanalizować kod wirusa, z tego też względu zamieszczam, i na jego wykrycie, procedurę anty : jest_trw ring0: db dw push mov call_trw: db dw
db 0 0CDh,20h 0001h,0001h ebx eax,000Eh
; Get_Cur_VM_Handle
0CDh,20h 0093h,0001h
; System_Control ; po wykonaniu VxDCall-a bajty 0CDh,20h ; i numer uslugi zamieniaja sie na ; tzw. direct call-a czyli ; call dword ptr[vadres] ; (0FFh,15h,DWORD vadres)
mov mov cmp
esi,dword ptr [call_trw+2] esi,[esi] byte ptr [esi],0E8h
jne cmp
niee_trw word ptr [esi+5],025FFh
jne inc niee_trw:
; VM_RESUME
; vadres System_Control ; sprawdz pierwsze bajty procki czy ; to opcode ; relatywnego call-a(0E8h,DWORD) ; bajty absolutnego jmp-a ; (FF,25h,DWORD vadres)
niee_trw jest_trw
80